diff --git a/src/intel/vulkan/anv_genX.h b/src/intel/vulkan/anv_genX.h index 42368b2b066..6829fe7a821 100644 --- a/src/intel/vulkan/anv_genX.h +++ b/src/intel/vulkan/anv_genX.h @@ -554,3 +554,16 @@ genX(cmd_buffer_post_dispatch_wa)(struct anv_cmd_buffer *cmd_buffer) "Wa_14025112257"); } } + +static inline void +genX(cmd_buffer_rhwo_wa_14024015672)(struct anv_cmd_buffer *cmd_buffer, + bool msaa_enabled) +{ + struct anv_device *device = cmd_buffer->device; + const bool rhwo_opt_enable = + !device->physical->instance->intel_enable_wa_14024015672_msaa && + msaa_enabled; + if (intel_needs_workaround(device->info, 14024015672) && + cmd_buffer->state.pending_rhwo_optimization_enabled != rhwo_opt_enable) + cmd_buffer->state.pending_rhwo_optimization_enabled = rhwo_opt_enable; +} diff --git a/src/intel/vulkan/genX_blorp_exec.c b/src/intel/vulkan/genX_blorp_exec.c index 410246dcd56..c55cac45059 100644 --- a/src/intel/vulkan/genX_blorp_exec.c +++ b/src/intel/vulkan/genX_blorp_exec.c @@ -304,6 +304,15 @@ blorp_exec_on_render(struct blorp_batch *batch, genX(cmd_buffer_emit_hashing_mode)(cmd_buffer, params->x1 - params->x0, params->y1 - params->y0, scale); + /* With Wa_14024015672, RHWO is initially disabled. We enable it for MSAA + * draws and disable for single sample unless explicitly disabled via drirc + * key. + */ +#if INTEL_WA_14024015672_GFX_VER + genX(cmd_buffer_rhwo_wa_14024015672)(cmd_buffer, params->num_samples > 1); +#endif + + #if GFX_VER >= 11 /* The PIPE_CONTROL command description says: * diff --git a/src/intel/vulkan/genX_cmd_draw.c b/src/intel/vulkan/genX_cmd_draw.c index 18e33768f19..cd8c3c08e6d 100644 --- a/src/intel/vulkan/genX_cmd_draw.c +++ b/src/intel/vulkan/genX_cmd_draw.c @@ -830,12 +830,8 @@ cmd_buffer_flush_gfx_state(struct anv_cmd_buffer *cmd_buffer) * drirc key. */ #if INTEL_WA_14024015672_GFX_VER - if (intel_needs_workaround(device->info, 14024015672) && - BITSET_TEST(dyn->dirty, MESA_VK_DYNAMIC_MS_RASTERIZATION_SAMPLES)) { - cmd_buffer->state.pending_rhwo_optimization_enabled = - !device->physical->instance->intel_enable_wa_14024015672_msaa && - dyn->ms.rasterization_samples > 1; - } + genX(cmd_buffer_rhwo_wa_14024015672)(cmd_buffer, + dyn->ms.rasterization_samples > 1); #endif /* Apply any pending pipeline flushes we may have. We want to apply them