#include "brw_state.h"
+static char const *get_qual_name(int mode)
+{
+ switch (mode) {
+ case INTERP_QUALIFIER_NONE: return "none";
+ case INTERP_QUALIFIER_FLAT: return "flat";
+ case INTERP_QUALIFIER_SMOOTH: return "smooth";
+ case INTERP_QUALIFIER_NOPERSPECTIVE: return "nopersp";
+ default: return "???";
+ }
+}
+
/* Set up interpolation modes for every element in the VUE */
-static void
+void
brw_setup_vue_interpolation(struct brw_context *brw)
{
const struct gl_fragment_program *fprog = brw->fragment_program;
struct brw_vue_map *vue_map = &brw->vue_map_geom_out;
+ if (!brw_state_dirty(brw,
+ _NEW_LIGHT,
+ BRW_NEW_BLORP |
+ BRW_NEW_FRAGMENT_PROGRAM |
+ BRW_NEW_VUE_MAP_GEOM_OUT))
+ return;
+
memset(&brw->interpolation_mode, INTERP_QUALIFIER_NONE, sizeof(brw->interpolation_mode));
- brw->state.dirty.brw |= BRW_NEW_INTERPOLATION_MAP;
+ brw->ctx.NewDriverState |= BRW_NEW_INTERPOLATION_MAP;
if (!fprog)
return;
brw->interpolation_mode.mode[i] = mode;
}
-}
+ if (unlikely(INTEL_DEBUG & DEBUG_VUE)) {
+ fprintf(stderr, "VUE map:\n");
+ for (int i = 0; i < vue_map->num_slots; i++) {
+ int varying = vue_map->slot_to_varying[i];
+ if (varying == -1) {
+ fprintf(stderr, "%d: --\n", i);
+ continue;
+ }
-const struct brw_tracked_state brw_interpolation_map = {
- .dirty = {
- .mesa = _NEW_LIGHT,
- .brw = (BRW_NEW_FRAGMENT_PROGRAM |
- BRW_NEW_VUE_MAP_GEOM_OUT)
- },
- .emit = brw_setup_vue_interpolation
-};
+ fprintf(stderr, "%d: %d %s ofs %d\n",
+ i, varying,
+ get_qual_name(brw->interpolation_mode.mode[i]),
+ brw_vue_slot_to_offset(i));
+ }
+ }
+}