diff --git a/src/amd/vulkan/radv_shader.c b/src/amd/vulkan/radv_shader.c index 9866b5a5759..6d7791329e5 100644 --- a/src/amd/vulkan/radv_shader.c +++ b/src/amd/vulkan/radv_shader.c @@ -1679,12 +1679,16 @@ radv_precompute_registers_hw_fs(struct radv_device *device, struct radv_shader_b S_02880C_EXEC_ON_HIER_FAIL(info->ps.writes_memory) | S_02880C_EXEC_ON_NOOP(info->ps.writes_memory) | S_02880C_DUAL_QUAD_DISABLE(disable_rbplus) | S_02880C_PRIMITIVE_ORDERED_PIXEL_SHADER(info->ps.pops); - /* GFX11 workaround when there are no PS inputs but LDS is used. */ - const bool param_gen = pdev->info.gfx_level == GFX11 && !info->ps.num_interp && binary->config.lds_size; + if (pdev->info.gfx_level >= GFX12) { + info->regs.ps.spi_ps_in_control = S_028640_PS_W32_EN(info->wave_size == 32); + } else { + /* GFX11 workaround when there are no PS inputs but LDS is used. */ + const bool param_gen = pdev->info.gfx_level == GFX11 && !info->ps.num_interp && binary->config.lds_size; - info->regs.ps.spi_ps_in_control = S_0286D8_NUM_INTERP(info->ps.num_interp) | - S_0286D8_NUM_PRIM_INTERP(info->ps.num_prim_interp) | - S_0286D8_PS_W32_EN(info->wave_size == 32) | S_0286D8_PARAM_GEN(param_gen); + info->regs.ps.spi_ps_in_control = S_0286D8_NUM_INTERP(info->ps.num_interp) | + S_0286D8_NUM_PRIM_INTERP(info->ps.num_prim_interp) | + S_0286D8_PS_W32_EN(info->wave_size == 32) | S_0286D8_PARAM_GEN(param_gen); + } info->regs.ps.spi_shader_z_format = ac_get_spi_shader_z_format( info->ps.writes_z, info->ps.writes_stencil, info->ps.writes_sample_mask, info->ps.writes_mrt0_alpha);