From 3e9863f496877da395254d8dc5c18a8dc56d8192 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Marek=20Ol=C5=A1=C3=A1k?= Date: Fri, 17 Feb 2023 22:09:34 -0500 Subject: [PATCH] radeonsi: move a few DB_SHADER_CONTROL states into si_shader_ps They can be set si_shader_ps. Reviewed-by: Pierre-Eric Pelloux-Prayer Part-of: --- src/gallium/drivers/radeonsi/si_state.c | 9 --------- src/gallium/drivers/radeonsi/si_state_draw.cpp | 3 +-- src/gallium/drivers/radeonsi/si_state_shaders.cpp | 9 +++++++++ 3 files changed, 10 insertions(+), 11 deletions(-) diff --git a/src/gallium/drivers/radeonsi/si_state.c b/src/gallium/drivers/radeonsi/si_state.c index 211d4bce7ad..72d39b5966b 100644 --- a/src/gallium/drivers/radeonsi/si_state.c +++ b/src/gallium/drivers/radeonsi/si_state.c @@ -1593,19 +1593,10 @@ static void si_emit_db_render_state(struct si_context *sctx) db_shader_control = sctx->ps_db_shader_control; - /* Bug workaround for smoothing (overrasterization) on GFX6. */ - if (sctx->gfx_level == GFX6 && sctx->smoothing_enabled) { - db_shader_control &= C_02880C_Z_ORDER; - db_shader_control |= S_02880C_Z_ORDER(V_02880C_LATE_Z); - } - /* Disable the gl_SampleMask fragment shader output if MSAA is disabled. */ if (!rs->multisample_enable) db_shader_control &= C_02880C_MASK_EXPORT_ENABLE; - if (sctx->screen->info.has_rbplus && !sctx->screen->info.rbplus_allowed) - db_shader_control |= S_02880C_DUAL_QUAD_DISABLE(1); - if (sctx->screen->info.has_export_conflict_bug && sctx->queued.named.blend->blend_enable_4bit && si_get_num_coverage_samples(sctx) == 1) { diff --git a/src/gallium/drivers/radeonsi/si_state_draw.cpp b/src/gallium/drivers/radeonsi/si_state_draw.cpp index 25c403a83be..062b78dd294 100644 --- a/src/gallium/drivers/radeonsi/si_state_draw.cpp +++ b/src/gallium/drivers/radeonsi/si_state_draw.cpp @@ -296,8 +296,7 @@ static bool si_update_shaders(struct si_context *sctx) if (GFX_VERSION >= GFX10 && sctx->screen->use_ngg_culling) si_mark_atom_dirty(sctx, &sctx->atoms.s.ngg_cull_state); - if (GFX_VERSION == GFX6 || - (GFX_VERSION == GFX11 && sctx->screen->info.has_export_conflict_bug)) + if (GFX_VERSION == GFX11 && sctx->screen->info.has_export_conflict_bug) si_mark_atom_dirty(sctx, &sctx->atoms.s.db_render_state); if (sctx->framebuffer.nr_samples <= 1) diff --git a/src/gallium/drivers/radeonsi/si_state_shaders.cpp b/src/gallium/drivers/radeonsi/si_state_shaders.cpp index 6658d66cd8d..c170d069619 100644 --- a/src/gallium/drivers/radeonsi/si_state_shaders.cpp +++ b/src/gallium/drivers/radeonsi/si_state_shaders.cpp @@ -1919,6 +1919,15 @@ static void si_shader_ps(struct si_screen *sscreen, struct si_shader *shader) if (info->base.fs.post_depth_coverage) db_shader_control |= S_02880C_PRE_SHADER_DEPTH_COVERAGE_ENABLE(1); + /* Bug workaround for smoothing (overrasterization) on GFX6. */ + if (sscreen->info.gfx_level == GFX6 && shader->key.ps.mono.poly_line_smoothing) { + db_shader_control &= C_02880C_Z_ORDER; + db_shader_control |= S_02880C_Z_ORDER(V_02880C_LATE_Z); + } + + if (sscreen->info.has_rbplus && !sscreen->info.rbplus_allowed) + db_shader_control |= S_02880C_DUAL_QUAD_DISABLE(1); + shader->ctx_reg.ps.db_shader_control = db_shader_control; pm4 = si_get_shader_pm4_state(shader);