.mesa = 0,
.brw = BRW_NEW_BATCH |
BRW_NEW_VS_CONSTBUF |
+ BRW_NEW_VS_PROG_DATA |
BRW_NEW_SURFACES,
- .cache = BRW_NEW_VS_PROG_DATA
},
.emit = brw_vs_upload_binding_table,
};
.dirty = {
.mesa = 0,
.brw = BRW_NEW_BATCH |
+ BRW_NEW_FS_PROG_DATA |
BRW_NEW_SURFACES,
- .cache = BRW_NEW_FS_PROG_DATA
},
.emit = brw_upload_wm_binding_table,
};
.mesa = 0,
.brw = BRW_NEW_BATCH |
BRW_NEW_GS_CONSTBUF |
+ BRW_NEW_GS_PROG_DATA |
BRW_NEW_SURFACES,
- .cache = BRW_NEW_GS_PROG_DATA
},
.emit = brw_gs_upload_binding_table,
};
_NEW_TRANSFORM |
_NEW_VIEWPORT,
.brw = BRW_NEW_BATCH |
+ BRW_NEW_CLIP_PROG_DATA |
BRW_NEW_CURBE_OFFSETS |
BRW_NEW_PROGRAM_CACHE |
BRW_NEW_URB_FENCE,
- .cache = BRW_NEW_CLIP_PROG_DATA
},
.emit = brw_upload_clip_unit,
};
struct brw_wm_prog_key;
struct brw_wm_prog_data;
+enum brw_cache_id {
+ BRW_CACHE_FS_PROG,
+ BRW_CACHE_BLORP_BLIT_PROG,
+ BRW_CACHE_SF_PROG,
+ BRW_CACHE_VS_PROG,
+ BRW_CACHE_FF_GS_PROG,
+ BRW_CACHE_GS_PROG,
+ BRW_CACHE_CLIP_PROG,
+
+ BRW_MAX_CACHE
+};
+
enum brw_state_id {
- BRW_STATE_URB_FENCE,
+ /* brw_cache_ids must come first - see brw_state_cache.c */
+ BRW_STATE_URB_FENCE = BRW_MAX_CACHE,
BRW_STATE_FRAGMENT_PROGRAM,
BRW_STATE_GEOMETRY_PROGRAM,
BRW_STATE_VERTEX_PROGRAM,
BRW_NUM_STATE_BITS
};
+/**
+ * BRW_NEW_*_PROG_DATA and BRW_NEW_*_PROGRAM are similar, but distinct.
+ *
+ * BRW_NEW_*_PROGRAM relates to the gl_shader_program/gl_program structures.
+ * When the currently bound shader program differs from the previous draw
+ * call, these will be flagged. They cover brw->{stage}_program and
+ * ctx->{Stage}Program->_Current.
+ *
+ * BRW_NEW_*_PROG_DATA is flagged when the effective shaders change, from a
+ * driver perspective. Even if the same shader is bound at the API level,
+ * we may need to switch between multiple versions of that shader to handle
+ * changes in non-orthagonal state.
+ *
+ * Additionally, multiple shader programs may have identical vertex shaders
+ * (for example), or compile down to the same code in the backend. We combine
+ * those into a single program cache entry.
+ *
+ * BRW_NEW_*_PROG_DATA occurs when switching program cache entries, which
+ * covers the brw_*_prog_data structures, and brw->*.prog_offset.
+ */
+#define BRW_NEW_FS_PROG_DATA (1ull << BRW_CACHE_FS_PROG)
+/* XXX: The BRW_NEW_BLORP_BLIT_PROG_DATA dirty bit is unused (as BLORP doesn't
+ * use the normal state upload paths), but the cache is still used. To avoid
+ * polluting the brw_state_cache code with special cases, we retain the dirty
+ * bit for now. It should eventually be removed.
+ */
+#define BRW_NEW_BLORP_BLIT_PROG_DATA (1ull << BRW_CACHE_BLORP_BLIT_PROG)
+#define BRW_NEW_SF_PROG_DATA (1ull << BRW_CACHE_SF_PROG)
+#define BRW_NEW_VS_PROG_DATA (1ull << BRW_CACHE_VS_PROG)
+#define BRW_NEW_FF_GS_PROG_DATA (1ull << BRW_CACHE_FF_GS_PROG)
+#define BRW_NEW_GS_PROG_DATA (1ull << BRW_CACHE_GS_PROG)
+#define BRW_NEW_CLIP_PROG_DATA (1ull << BRW_CACHE_CLIP_PROG)
#define BRW_NEW_URB_FENCE (1ull << BRW_STATE_URB_FENCE)
#define BRW_NEW_FRAGMENT_PROGRAM (1ull << BRW_STATE_FRAGMENT_PROGRAM)
#define BRW_NEW_GEOMETRY_PROGRAM (1ull << BRW_STATE_GEOMETRY_PROGRAM)
*/
#define SHADER_TIME_STRIDE 64
-enum brw_cache_id {
- BRW_CACHE_FS_PROG,
- BRW_CACHE_BLORP_BLIT_PROG,
- BRW_CACHE_SF_PROG,
- BRW_CACHE_VS_PROG,
- BRW_CACHE_FF_GS_PROG,
- BRW_CACHE_GS_PROG,
- BRW_CACHE_CLIP_PROG,
-
- BRW_MAX_CACHE
-};
-
struct brw_cache_item {
/**
* Effectively part of the key, cache_id identifies what kind of state
ST_FS16_RESET,
};
-/* Flags for brw->state.cache.
- */
-#define BRW_NEW_FS_PROG_DATA (1 << BRW_CACHE_FS_PROG)
-#define BRW_NEW_BLORP_BLIT_PROG_DATA (1 << BRW_CACHE_BLORP_BLIT_PROG)
-#define BRW_NEW_SF_PROG_DATA (1 << BRW_CACHE_SF_PROG)
-#define BRW_NEW_VS_PROG_DATA (1 << BRW_CACHE_VS_PROG)
-#define BRW_NEW_FF_GS_PROG_DATA (1 << BRW_CACHE_FF_GS_PROG)
-#define BRW_NEW_GS_PROG_DATA (1 << BRW_CACHE_GS_PROG)
-#define BRW_NEW_CLIP_PROG_DATA (1 << BRW_CACHE_CLIP_PROG)
-
struct brw_vertex_buffer {
/** Buffer object containing the uploaded vertex data */
drm_intel_bo *bo;
const struct brw_tracked_state brw_curbe_offsets = {
.dirty = {
.mesa = _NEW_TRANSFORM,
- .brw = BRW_NEW_CONTEXT,
- .cache = BRW_NEW_VS_PROG_DATA |
- BRW_NEW_FS_PROG_DATA
+ .brw = BRW_NEW_CONTEXT |
+ BRW_NEW_FS_PROG_DATA |
+ BRW_NEW_VS_PROG_DATA,
},
.emit = calculate_curbe_offsets
};
.mesa = _NEW_PROGRAM_CONSTANTS,
.brw = BRW_NEW_BATCH |
BRW_NEW_CURBE_OFFSETS |
+ BRW_NEW_FS_PROG_DATA |
BRW_NEW_PSP | /* Implicit - hardware requires this, not used above */
- BRW_NEW_URB_FENCE,
- .cache = BRW_NEW_VS_PROG_DATA |
- BRW_NEW_FS_PROG_DATA
+ BRW_NEW_URB_FENCE |
+ BRW_NEW_VS_PROG_DATA,
},
.emit = brw_upload_constant_buffer,
};
.dirty = {
.mesa = _NEW_POLYGON,
.brw = BRW_NEW_BATCH |
- BRW_NEW_VERTICES,
- .cache = BRW_NEW_VS_PROG_DATA,
+ BRW_NEW_VERTICES |
+ BRW_NEW_VS_PROG_DATA,
},
.emit = brw_emit_vertices,
};
populate_key(brw, &key);
if (brw->ff_gs.prog_active != key.need_gs_prog) {
- brw->state.dirty.cache |= BRW_NEW_FF_GS_PROG_DATA;
+ brw->state.dirty.brw |= BRW_NEW_FF_GS_PROG_DATA;
brw->ff_gs.prog_active = key.need_gs_prog;
}
.dirty = {
.mesa = _NEW_LIGHT,
.brw = BRW_NEW_PRIMITIVE |
- BRW_NEW_TRANSFORM_FEEDBACK,
- .cache = BRW_NEW_VS_PROG_DATA
+ BRW_NEW_TRANSFORM_FEEDBACK |
+ BRW_NEW_VS_PROG_DATA,
},
.emit = brw_upload_ff_gs_prog
};
.mesa = 0,
.brw = BRW_NEW_BATCH |
BRW_NEW_CURBE_OFFSETS |
+ BRW_NEW_FF_GS_PROG_DATA |
BRW_NEW_PROGRAM_CACHE |
BRW_NEW_URB_FENCE,
- .cache = BRW_NEW_FF_GS_PROG_DATA
},
.emit = brw_upload_gs_unit,
};
.dirty = {
.mesa = _NEW_PROGRAM_CONSTANTS,
.brw = BRW_NEW_BATCH |
- BRW_NEW_GEOMETRY_PROGRAM,
- .cache = BRW_NEW_GS_PROG_DATA,
+ BRW_NEW_GEOMETRY_PROGRAM |
+ BRW_NEW_GS_PROG_DATA,
},
.emit = brw_upload_gs_pull_constants,
};
.dirty = {
.mesa = _NEW_PROGRAM,
.brw = BRW_NEW_BATCH |
+ BRW_NEW_GS_PROG_DATA |
BRW_NEW_UNIFORM_BUFFER,
- .cache = BRW_NEW_GS_PROG_DATA,
},
.emit = brw_upload_gs_ubo_surfaces,
};
.dirty = {
.mesa = _NEW_PROGRAM,
.brw = BRW_NEW_ATOMIC_BUFFER |
- BRW_NEW_BATCH,
- .cache = BRW_NEW_GS_PROG_DATA,
+ BRW_NEW_BATCH |
+ BRW_NEW_GS_PROG_DATA,
},
.emit = brw_upload_gs_abo_surfaces,
};
.dirty = {
.mesa = 0,
.brw = BRW_NEW_BATCH |
+ BRW_NEW_FF_GS_PROG_DATA |
BRW_NEW_GEN4_UNIT_STATE |
BRW_NEW_STATE_BASE_ADDRESS |
BRW_NEW_URB_FENCE,
- .cache = BRW_NEW_FF_GS_PROG_DATA,
},
.emit = upload_psp_urb_cbs,
};
_NEW_SCISSOR,
.brw = BRW_NEW_BATCH |
BRW_NEW_PROGRAM_CACHE |
+ BRW_NEW_SF_PROG_DATA |
BRW_NEW_SF_VP |
BRW_NEW_URB_FENCE,
- .cache = BRW_NEW_SF_PROG_DATA,
},
.emit = upload_sf_unit,
};
*(void **)out_aux = ((char *)item->key + item->key_size);
if (item->offset != *inout_offset) {
- brw->state.dirty.cache |= (1 << cache_id);
+ brw->state.dirty.brw |= (1 << cache_id);
*inout_offset = item->offset;
}
*out_offset = item->offset;
*(void **)out_aux = (void *)((char *)item->key + item->key_size);
- cache->brw->state.dirty.cache |= 1 << cache_id;
+ cache->brw->state.dirty.brw |= 1 << cache_id;
}
void
};
static struct dirty_bit_map brw_bits[] = {
+ DEFINE_BIT(BRW_NEW_FS_PROG_DATA),
+ DEFINE_BIT(BRW_NEW_BLORP_BLIT_PROG_DATA),
+ DEFINE_BIT(BRW_NEW_SF_PROG_DATA),
+ DEFINE_BIT(BRW_NEW_VS_PROG_DATA),
+ DEFINE_BIT(BRW_NEW_FF_GS_PROG_DATA),
+ DEFINE_BIT(BRW_NEW_GS_PROG_DATA),
+ DEFINE_BIT(BRW_NEW_CLIP_PROG_DATA),
DEFINE_BIT(BRW_NEW_URB_FENCE),
DEFINE_BIT(BRW_NEW_FRAGMENT_PROGRAM),
DEFINE_BIT(BRW_NEW_GEOMETRY_PROGRAM),
};
static struct dirty_bit_map cache_bits[] = {
- DEFINE_BIT(BRW_NEW_FS_PROG_DATA),
- DEFINE_BIT(BRW_NEW_BLORP_BLIT_PROG_DATA),
- DEFINE_BIT(BRW_NEW_SF_PROG_DATA),
- DEFINE_BIT(BRW_NEW_VS_PROG_DATA),
- DEFINE_BIT(BRW_NEW_FF_GS_PROG_DATA),
- DEFINE_BIT(BRW_NEW_GS_PROG_DATA),
- DEFINE_BIT(BRW_NEW_CLIP_PROG_DATA),
{0, 0, 0}
};
if (unlikely(INTEL_DEBUG & DEBUG_STATE)) {
STATIC_ASSERT(ARRAY_SIZE(brw_bits) == BRW_NUM_STATE_BITS + 1);
- STATIC_ASSERT(ARRAY_SIZE(cache_bits) == BRW_MAX_CACHE + 1);
brw_update_dirty_count(mesa_bits, state->mesa);
brw_update_dirty_count(brw_bits, state->brw);
const struct brw_tracked_state brw_recalculate_urb_fence = {
.dirty = {
.mesa = 0,
- .brw = BRW_NEW_CURBE_OFFSETS,
- .cache = BRW_NEW_SF_PROG_DATA |
- BRW_NEW_VS_PROG_DATA,
+ .brw = BRW_NEW_CURBE_OFFSETS |
+ BRW_NEW_SF_PROG_DATA |
+ BRW_NEW_VS_PROG_DATA,
},
.emit = recalculate_urb_fence
};
BRW_NEW_PROGRAM_CACHE |
BRW_NEW_SAMPLER_STATE_TABLE |
BRW_NEW_URB_FENCE |
- BRW_NEW_VERTEX_PROGRAM,
- .cache = BRW_NEW_VS_PROG_DATA,
+ BRW_NEW_VERTEX_PROGRAM |
+ BRW_NEW_VS_PROG_DATA,
},
.emit = brw_upload_vs_unit,
};
.dirty = {
.mesa = _NEW_PROGRAM_CONSTANTS,
.brw = BRW_NEW_BATCH |
- BRW_NEW_VERTEX_PROGRAM,
- .cache = BRW_NEW_VS_PROG_DATA,
+ BRW_NEW_VERTEX_PROGRAM |
+ BRW_NEW_VS_PROG_DATA,
},
.emit = brw_upload_vs_pull_constants,
};
.dirty = {
.mesa = _NEW_PROGRAM,
.brw = BRW_NEW_BATCH |
- BRW_NEW_UNIFORM_BUFFER,
- .cache = BRW_NEW_VS_PROG_DATA,
+ BRW_NEW_UNIFORM_BUFFER |
+ BRW_NEW_VS_PROG_DATA,
},
.emit = brw_upload_vs_ubo_surfaces,
};
.dirty = {
.mesa = _NEW_PROGRAM,
.brw = BRW_NEW_ATOMIC_BUFFER |
- BRW_NEW_BATCH,
- .cache = BRW_NEW_VS_PROG_DATA,
+ BRW_NEW_BATCH |
+ BRW_NEW_VS_PROG_DATA,
},
.emit = brw_upload_vs_abo_surfaces,
};
.brw = BRW_NEW_BATCH |
BRW_NEW_CURBE_OFFSETS |
BRW_NEW_FRAGMENT_PROGRAM |
+ BRW_NEW_FS_PROG_DATA |
BRW_NEW_PROGRAM_CACHE |
BRW_NEW_SAMPLER_STATE_TABLE |
BRW_NEW_STATS_WM,
- .cache = BRW_NEW_FS_PROG_DATA,
},
.emit = brw_upload_wm_unit,
};
.dirty = {
.mesa = _NEW_PROGRAM_CONSTANTS,
.brw = BRW_NEW_BATCH |
- BRW_NEW_FRAGMENT_PROGRAM,
- .cache = BRW_NEW_FS_PROG_DATA,
+ BRW_NEW_FRAGMENT_PROGRAM |
+ BRW_NEW_FS_PROG_DATA,
},
.emit = brw_upload_wm_pull_constants,
};
.dirty = {
.mesa = _NEW_PROGRAM,
.brw = BRW_NEW_BATCH |
+ BRW_NEW_FS_PROG_DATA |
BRW_NEW_UNIFORM_BUFFER,
- .cache = BRW_NEW_FS_PROG_DATA,
},
.emit = brw_upload_wm_ubo_surfaces,
};
.dirty = {
.mesa = _NEW_PROGRAM,
.brw = BRW_NEW_ATOMIC_BUFFER |
- BRW_NEW_BATCH,
- .cache = BRW_NEW_FS_PROG_DATA,
+ BRW_NEW_BATCH |
+ BRW_NEW_FS_PROG_DATA,
},
.emit = brw_upload_wm_abo_surfaces,
};
_NEW_LIGHT |
_NEW_TRANSFORM,
.brw = BRW_NEW_CONTEXT |
+ BRW_NEW_FS_PROG_DATA |
BRW_NEW_META_IN_PROGRESS |
BRW_NEW_RASTERIZER_DISCARD,
- .cache = BRW_NEW_FS_PROG_DATA
},
.emit = upload_clip_state,
};
_NEW_POLYGON |
_NEW_TRANSFORM,
.brw = BRW_NEW_CONTEXT |
+ BRW_NEW_FS_PROG_DATA |
BRW_NEW_META_IN_PROGRESS |
BRW_NEW_RASTERIZER_DISCARD,
- .cache = BRW_NEW_FS_PROG_DATA
},
.emit = upload_clip_state,
};
_NEW_TRANSFORM,
.brw = BRW_NEW_BATCH |
BRW_NEW_GEOMETRY_PROGRAM |
+ BRW_NEW_GS_PROG_DATA |
BRW_NEW_PUSH_CONSTANT_ALLOCATION,
- .cache = BRW_NEW_GS_PROG_DATA,
},
.emit = gen6_upload_gs_push_constants,
};
_NEW_TRANSFORM,
.brw = BRW_NEW_BATCH |
BRW_NEW_CONTEXT |
+ BRW_NEW_FF_GS_PROG_DATA |
BRW_NEW_GEOMETRY_PROGRAM |
+ BRW_NEW_GS_PROG_DATA |
BRW_NEW_PUSH_CONSTANT_ALLOCATION,
- .cache = BRW_NEW_FF_GS_PROG_DATA |
- BRW_NEW_GS_PROG_DATA,
},
.emit = upload_gs_state,
};
_NEW_SCISSOR,
.brw = BRW_NEW_CONTEXT |
BRW_NEW_FRAGMENT_PROGRAM |
+ BRW_NEW_FS_PROG_DATA |
BRW_NEW_GEOMETRY_PROGRAM |
BRW_NEW_PRIMITIVE |
BRW_NEW_VUE_MAP_GEOM_OUT,
- .cache = BRW_NEW_FS_PROG_DATA
},
.emit = upload_sf_state,
};
.dirty = {
.mesa = 0,
.brw = BRW_NEW_CONTEXT |
- BRW_NEW_GEOMETRY_PROGRAM,
- .cache = BRW_NEW_GS_PROG_DATA |
- BRW_NEW_VS_PROG_DATA |
- BRW_NEW_FF_GS_PROG_DATA,
+ BRW_NEW_FF_GS_PROG_DATA |
+ BRW_NEW_GEOMETRY_PROGRAM |
+ BRW_NEW_GS_PROG_DATA |
+ BRW_NEW_VS_PROG_DATA,
},
.emit = gen6_upload_urb,
};
_NEW_TRANSFORM,
.brw = BRW_NEW_BATCH |
BRW_NEW_PUSH_CONSTANT_ALLOCATION |
- BRW_NEW_VERTEX_PROGRAM,
- .cache = BRW_NEW_VS_PROG_DATA,
+ BRW_NEW_VERTEX_PROGRAM |
+ BRW_NEW_VS_PROG_DATA,
},
.emit = gen6_upload_vs_push_constants,
};
.brw = BRW_NEW_BATCH |
BRW_NEW_CONTEXT |
BRW_NEW_PUSH_CONSTANT_ALLOCATION |
- BRW_NEW_VERTEX_PROGRAM,
- .cache = BRW_NEW_VS_PROG_DATA
+ BRW_NEW_VERTEX_PROGRAM |
+ BRW_NEW_VS_PROG_DATA,
},
.emit = upload_vs_state,
};
.mesa = _NEW_PROGRAM_CONSTANTS,
.brw = BRW_NEW_BATCH |
BRW_NEW_FRAGMENT_PROGRAM |
+ BRW_NEW_FS_PROG_DATA |
BRW_NEW_PUSH_CONSTANT_ALLOCATION,
- .cache = BRW_NEW_FS_PROG_DATA,
},
.emit = gen6_upload_wm_push_constants,
};
_NEW_PROGRAM_CONSTANTS,
.brw = BRW_NEW_BATCH |
BRW_NEW_FRAGMENT_PROGRAM |
+ BRW_NEW_FS_PROG_DATA |
BRW_NEW_PUSH_CONSTANT_ALLOCATION,
- .cache = BRW_NEW_FS_PROG_DATA
},
.emit = upload_wm_state,
};
.mesa = _NEW_TRANSFORM,
.brw = BRW_NEW_BATCH |
BRW_NEW_CONTEXT |
- BRW_NEW_GEOMETRY_PROGRAM,
- .cache = BRW_NEW_GS_PROG_DATA
+ BRW_NEW_GEOMETRY_PROGRAM |
+ BRW_NEW_GS_PROG_DATA,
},
.emit = upload_gs_state,
};
_NEW_PROGRAM,
.brw = BRW_NEW_CONTEXT |
BRW_NEW_FRAGMENT_PROGRAM |
+ BRW_NEW_FS_PROG_DATA |
BRW_NEW_GEOMETRY_PROGRAM |
BRW_NEW_PRIMITIVE |
BRW_NEW_VUE_MAP_GEOM_OUT,
- .cache = BRW_NEW_FS_PROG_DATA
},
.emit = upload_sbe_state,
};
.dirty = {
.mesa = 0,
.brw = BRW_NEW_CONTEXT |
- BRW_NEW_GEOMETRY_PROGRAM,
- .cache = BRW_NEW_VS_PROG_DATA |
- BRW_NEW_GS_PROG_DATA,
+ BRW_NEW_GEOMETRY_PROGRAM |
+ BRW_NEW_GS_PROG_DATA |
+ BRW_NEW_VS_PROG_DATA,
},
.emit = gen7_upload_urb,
};
.mesa = _NEW_TRANSFORM,
.brw = BRW_NEW_BATCH |
BRW_NEW_CONTEXT |
- BRW_NEW_VERTEX_PROGRAM,
- .cache = BRW_NEW_VS_PROG_DATA
+ BRW_NEW_VERTEX_PROGRAM |
+ BRW_NEW_VS_PROG_DATA,
},
.emit = upload_vs_state,
};
_NEW_MULTISAMPLE |
_NEW_POLYGON,
.brw = BRW_NEW_BATCH |
- BRW_NEW_FRAGMENT_PROGRAM,
- .cache = BRW_NEW_FS_PROG_DATA,
+ BRW_NEW_FRAGMENT_PROGRAM |
+ BRW_NEW_FS_PROG_DATA,
},
.emit = upload_wm_state,
};
_NEW_COLOR |
_NEW_MULTISAMPLE,
.brw = BRW_NEW_BATCH |
- BRW_NEW_FRAGMENT_PROGRAM,
- .cache = BRW_NEW_FS_PROG_DATA
+ BRW_NEW_FRAGMENT_PROGRAM |
+ BRW_NEW_FS_PROG_DATA,
},
.emit = upload_ps_state,
};
_NEW_DEPTH |
_NEW_MULTISAMPLE |
_NEW_STENCIL,
- .brw = BRW_NEW_FRAGMENT_PROGRAM,
- .cache = BRW_NEW_FS_PROG_DATA,
+ .brw = BRW_NEW_FRAGMENT_PROGRAM |
+ BRW_NEW_FS_PROG_DATA,
},
.emit = gen8_emit_pma_stall_workaround
};
.dirty = {
.mesa = _NEW_POLYGON,
.brw = BRW_NEW_BATCH |
- BRW_NEW_VERTICES,
- .cache = BRW_NEW_VS_PROG_DATA,
+ BRW_NEW_VERTICES |
+ BRW_NEW_VS_PROG_DATA,
},
.emit = gen8_emit_vertices,
};
.mesa = _NEW_TRANSFORM,
.brw = BRW_NEW_BATCH |
BRW_NEW_CONTEXT |
- BRW_NEW_GEOMETRY_PROGRAM,
- .cache = BRW_NEW_GS_PROG_DATA
+ BRW_NEW_GEOMETRY_PROGRAM |
+ BRW_NEW_GS_PROG_DATA,
},
.emit = gen8_upload_gs_state,
};
.mesa = _NEW_MULTISAMPLE,
.brw = BRW_NEW_CONTEXT |
BRW_NEW_FRAGMENT_PROGRAM |
+ BRW_NEW_FS_PROG_DATA |
BRW_NEW_NUM_SAMPLES,
- .cache = BRW_NEW_FS_PROG_DATA,
},
.emit = upload_ps_extra,
};
.dirty = {
.mesa = _NEW_LINE |
_NEW_POLYGON,
- .brw = BRW_NEW_CONTEXT,
- .cache = BRW_NEW_FS_PROG_DATA,
+ .brw = BRW_NEW_CONTEXT |
+ BRW_NEW_FS_PROG_DATA,
},
.emit = upload_wm_state,
};
.dirty = {
.mesa = _NEW_MULTISAMPLE,
.brw = BRW_NEW_BATCH |
- BRW_NEW_FRAGMENT_PROGRAM,
- .cache = BRW_NEW_FS_PROG_DATA
+ BRW_NEW_FRAGMENT_PROGRAM |
+ BRW_NEW_FS_PROG_DATA,
},
.emit = upload_ps_state,
};
_NEW_PROGRAM,
.brw = BRW_NEW_CONTEXT |
BRW_NEW_FRAGMENT_PROGRAM |
+ BRW_NEW_FS_PROG_DATA |
BRW_NEW_VUE_MAP_GEOM_OUT,
- .cache = BRW_NEW_FS_PROG_DATA,
},
.emit = upload_sbe,
};
.mesa = _NEW_TRANSFORM,
.brw = BRW_NEW_BATCH |
BRW_NEW_CONTEXT |
- BRW_NEW_VERTEX_PROGRAM,
- .cache = BRW_NEW_VS_PROG_DATA
+ BRW_NEW_VERTEX_PROGRAM |
+ BRW_NEW_VS_PROG_DATA,
},
.emit = upload_vs_state,
};