On 17/05/17 08:45, Jason Ekstrand wrote:
Having it be a pointer means that we end up caching clip programs based on a pointer to wm_prog_data rather than the actual interpolation modes. We've been caching one clip program per FS ever since 91d61fbf7cb61a44a where Timothy rewrote brw_setup_vue_interpolation().
Apologies, that change also had other caching issues that were later fixed. It seems this area isn't very well covered by piglit.
--- src/mesa/drivers/dri/i965/brw_clip.c | 6 +++++- src/mesa/drivers/dri/i965/brw_clip.h | 2 +- 2 files changed, 6 insertions(+), 2 deletions(-) diff --git a/src/mesa/drivers/dri/i965/brw_clip.c b/src/mesa/drivers/dri/i965/brw_clip.c index 4187207..34325a7 100644 --- a/src/mesa/drivers/dri/i965/brw_clip.c +++ b/src/mesa/drivers/dri/i965/brw_clip.c @@ -155,7 +155,11 @@ brw_upload_clip_prog(struct brw_context *brw) key.contains_flat_varying = wm_prog_data->contains_flat_varying; key.contains_noperspective_varying = wm_prog_data->contains_noperspective_varying; - key.interp_mode = wm_prog_data->interp_mode; + + STATIC_ASSERT(sizeof(key.interp_mode) == + sizeof(wm_prog_data->interp_mode)); + memcpy(key.interp_mode, wm_prog_data->interp_mode, + sizeof(key.interp_mode)); }/* BRW_NEW_REDUCED_PRIMITIVE */diff --git a/src/mesa/drivers/dri/i965/brw_clip.h b/src/mesa/drivers/dri/i965/brw_clip.h index 9dc1f12..2dc84d8 100644 --- a/src/mesa/drivers/dri/i965/brw_clip.h +++ b/src/mesa/drivers/dri/i965/brw_clip.h @@ -49,7 +49,7 @@ struct brw_clip_prog_key { GLbitfield64 attrs; bool contains_flat_varying; bool contains_noperspective_varying; - const unsigned char *interp_mode; + unsigned char interp_mode[65]; /* BRW_VARYING_SLOT_COUNT */ GLuint primitive:4; GLuint nr_userclip:4; GLuint pv_first:1;
_______________________________________________ mesa-dev mailing list [email protected] https://lists.freedesktop.org/mailman/listinfo/mesa-dev
