i965/clip: Make brw_clip_prog_key::interp_mode an array
authorJason Ekstrand <jason.ekstrand@intel.com>
Mon, 20 Mar 2017 04:20:28 +0000 (21:20 -0700)
committerJason Ekstrand <jason.ekstrand@intel.com>
Fri, 26 May 2017 14:58:01 +0000 (07:58 -0700)
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().

Reviewed-by: Topi Pohjolainen <topi.pohjolainen@intel.com>
src/mesa/drivers/dri/i965/brw_clip.c
src/mesa/drivers/dri/i965/brw_clip.h

index 4187207c6d01961400461e2003a862dae818d7cb..34325a719be7014e999824d95fcc847804fb9300 100644 (file)
@@ -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 */
index 9dc1f12ea5282e7b2eb2db0e51093cbd25340ab7..2dc84d80c751b4035c303f093f84e7b8c02cf798 100644 (file)
@@ -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;