diff --git a/src/gallium/drivers/iris/iris_blorp.c b/src/gallium/drivers/iris/iris_blorp.c index 0669c8caa64..6c6dfdf90ab 100644 --- a/src/gallium/drivers/iris/iris_blorp.c +++ b/src/gallium/drivers/iris/iris_blorp.c @@ -382,14 +382,8 @@ iris_blorp_exec_render(struct blorp_batch *blorp_batch, IRIS_DIRTY_LINE_STIPPLE | IRIS_ALL_DIRTY_FOR_COMPUTE | IRIS_DIRTY_SCISSOR_RECT | - IRIS_DIRTY_VF); - /* Wa_14016820455 - * On Gfx 12.5 platforms, the SF_CL_VIEWPORT pointer can be invalidated - * likely by a read cache invalidation when clipping is disabled, so we - * don't skip its dirty bit here, in order to reprogram it. - */ - if (GFX_VERx10 != 125) - skip_bits |= IRIS_DIRTY_SF_CL_VIEWPORT; + IRIS_DIRTY_VF | + IRIS_DIRTY_SF_CL_VIEWPORT); uint64_t skip_stage_bits = (IRIS_ALL_STAGE_DIRTY_FOR_COMPUTE | IRIS_STAGE_DIRTY_UNCOMPILED_VS | diff --git a/src/gallium/drivers/iris/iris_indirect_gen.c b/src/gallium/drivers/iris/iris_indirect_gen.c index a17e3103402..1204e6fdc71 100644 --- a/src/gallium/drivers/iris/iris_indirect_gen.c +++ b/src/gallium/drivers/iris/iris_indirect_gen.c @@ -499,14 +499,8 @@ emit_indirect_generate_draw(struct iris_batch *batch, IRIS_DIRTY_LINE_STIPPLE | IRIS_ALL_DIRTY_FOR_COMPUTE | IRIS_DIRTY_SCISSOR_RECT | - IRIS_DIRTY_VF); - /* Wa_14016820455 - * On Gfx 12.5 platforms, the SF_CL_VIEWPORT pointer can be invalidated - * likely by a read cache invalidation when clipping is disabled, so we - * don't skip its dirty bit here, in order to reprogram it. - */ - if (GFX_VERx10 != 125) - skip_bits |= IRIS_DIRTY_SF_CL_VIEWPORT; + IRIS_DIRTY_VF | + IRIS_DIRTY_SF_CL_VIEWPORT); uint64_t skip_stage_bits = (IRIS_ALL_STAGE_DIRTY_FOR_COMPUTE | IRIS_STAGE_DIRTY_UNCOMPILED_VS | diff --git a/src/gallium/drivers/iris/iris_state.c b/src/gallium/drivers/iris/iris_state.c index 32ad1136697..8f819e81e9a 100644 --- a/src/gallium/drivers/iris/iris_state.c +++ b/src/gallium/drivers/iris/iris_state.c @@ -6895,6 +6895,14 @@ iris_upload_dirty_render_state(struct iris_context *ice, ice->shaders.prog[MESA_SHADER_TESS_EVAL]) ice->state.stage_dirty |= IRIS_STAGE_DIRTY_TES; + /* Reprogram SF_CLIP & CC_STATE together. This reproduces the windows driver programming. + * Since blorp disables 3DSTATE_CLIP::ClipEnable and dirties CC_STATE, this takes care of + * Wa_14016820455 which requires SF_CLIP to be reprogrammed whenever + * 3DSTATE_CLIP::ClipEnable is enabled. + */ + if (ice->state.dirty & (IRIS_DIRTY_CC_VIEWPORT | IRIS_DIRTY_SF_CL_VIEWPORT)) + ice->state.dirty |= IRIS_DIRTY_CC_VIEWPORT | IRIS_DIRTY_SF_CL_VIEWPORT; + uint64_t dirty = ice->state.dirty; uint64_t stage_dirty = ice->state.stage_dirty;