radeonsi/gfx12: set DB_RENDER_OVERRIDE based on stencil state
Acked-by: Pierre-Eric Pelloux-Prayer <pierre-eric.pelloux-prayer@amd.com> Part-of: <https://gitlab.freedesktop.org/mesa/mesa/-/merge_requests/32653>
This commit is contained in:
@@ -605,7 +605,6 @@ gfx12_init_graphics_preamble_state(const struct ac_preamble_state *state,
|
|||||||
ac_pm4_set_reg(pm4, R_00B4D4_SPI_SHADER_USER_ACCUM_LSHS_3, 0);
|
ac_pm4_set_reg(pm4, R_00B4D4_SPI_SHADER_USER_ACCUM_LSHS_3, 0);
|
||||||
|
|
||||||
/* Context registers */
|
/* Context registers */
|
||||||
ac_pm4_set_reg(pm4, R_02800C_DB_RENDER_OVERRIDE, S_02800C_FORCE_STENCIL_READ(1));
|
|
||||||
ac_pm4_set_reg(pm4, R_028040_DB_GL1_INTERFACE_CONTROL, 0);
|
ac_pm4_set_reg(pm4, R_028040_DB_GL1_INTERFACE_CONTROL, 0);
|
||||||
ac_pm4_set_reg(pm4, R_028048_DB_MEM_TEMPORAL,
|
ac_pm4_set_reg(pm4, R_028048_DB_MEM_TEMPORAL,
|
||||||
S_028048_Z_TEMPORAL_READ(zs_read_temporal_hint) |
|
S_028048_Z_TEMPORAL_READ(zs_read_temporal_hint) |
|
||||||
|
@@ -886,6 +886,10 @@ radv_emit_graphics(struct radv_device *device, struct radeon_cmdbuf *cs)
|
|||||||
|
|
||||||
if (pdev->info.gfx_level >= GFX12) {
|
if (pdev->info.gfx_level >= GFX12) {
|
||||||
radeon_set_context_reg(cs, R_028000_DB_RENDER_CONTROL, 0);
|
radeon_set_context_reg(cs, R_028000_DB_RENDER_CONTROL, 0);
|
||||||
|
radeon_set_context_reg(cs, R_02800C_DB_RENDER_OVERRIDE,
|
||||||
|
S_02800C_FORCE_STENCIL_READ(1) |
|
||||||
|
/* TODO: this should be conditional based on stencil state */
|
||||||
|
S_02800C_FORCE_STENCIL_VALID(1));
|
||||||
}
|
}
|
||||||
|
|
||||||
ac_pm4_finalize(pm4);
|
ac_pm4_finalize(pm4);
|
||||||
|
@@ -317,6 +317,7 @@ void si_set_tracked_regs_to_clear_state(struct si_context *ctx)
|
|||||||
ctx->tracked_regs.reg_value[SI_TRACKED_SPI_PS_INPUT_ENA] = 0;
|
ctx->tracked_regs.reg_value[SI_TRACKED_SPI_PS_INPUT_ENA] = 0;
|
||||||
ctx->tracked_regs.reg_value[SI_TRACKED_SPI_PS_INPUT_ADDR] = 0;
|
ctx->tracked_regs.reg_value[SI_TRACKED_SPI_PS_INPUT_ADDR] = 0;
|
||||||
|
|
||||||
|
ctx->tracked_regs.reg_value[SI_TRACKED_DB_RENDER_OVERRIDE] = 0;
|
||||||
ctx->tracked_regs.reg_value[SI_TRACKED_DB_EQAA] = 0;
|
ctx->tracked_regs.reg_value[SI_TRACKED_DB_EQAA] = 0;
|
||||||
ctx->tracked_regs.reg_value[SI_TRACKED_DB_RENDER_OVERRIDE2] = 0;
|
ctx->tracked_regs.reg_value[SI_TRACKED_DB_RENDER_OVERRIDE2] = 0;
|
||||||
ctx->tracked_regs.reg_value[SI_TRACKED_DB_SHADER_CONTROL] = 0;
|
ctx->tracked_regs.reg_value[SI_TRACKED_DB_SHADER_CONTROL] = 0;
|
||||||
|
@@ -1553,6 +1553,12 @@ static void *si_create_dsa_state(struct pipe_context *ctx,
|
|||||||
S_028090_TESTMASK_BF(state->stencil[1].valuemask);
|
S_028090_TESTMASK_BF(state->stencil[1].valuemask);
|
||||||
dsa->db_stencil_write_mask = S_028094_WRITEMASK(state->stencil[0].writemask) |
|
dsa->db_stencil_write_mask = S_028094_WRITEMASK(state->stencil[0].writemask) |
|
||||||
S_028094_WRITEMASK_BF(state->stencil[1].writemask);
|
S_028094_WRITEMASK_BF(state->stencil[1].writemask);
|
||||||
|
|
||||||
|
bool force_s_valid = state->stencil[0].zpass_op != state->stencil[0].zfail_op ||
|
||||||
|
(state->stencil[1].enabled &&
|
||||||
|
state->stencil[1].zpass_op != state->stencil[1].zfail_op);
|
||||||
|
dsa->db_render_override = S_02800C_FORCE_STENCIL_READ(1) |
|
||||||
|
S_02800C_FORCE_STENCIL_VALID(force_s_valid);
|
||||||
}
|
}
|
||||||
|
|
||||||
bool zfunc_is_ordered =
|
bool zfunc_is_ordered =
|
||||||
@@ -1588,6 +1594,8 @@ static void si_pm4_emit_dsa(struct si_context *sctx, unsigned index)
|
|||||||
if (sctx->gfx_level >= GFX12) {
|
if (sctx->gfx_level >= GFX12) {
|
||||||
radeon_begin(&sctx->gfx_cs);
|
radeon_begin(&sctx->gfx_cs);
|
||||||
gfx12_begin_context_regs();
|
gfx12_begin_context_regs();
|
||||||
|
gfx12_opt_set_context_reg(R_02800C_DB_RENDER_OVERRIDE, SI_TRACKED_DB_RENDER_OVERRIDE,
|
||||||
|
state->db_render_override);
|
||||||
gfx12_opt_set_context_reg(R_028070_DB_DEPTH_CONTROL, SI_TRACKED_DB_DEPTH_CONTROL,
|
gfx12_opt_set_context_reg(R_028070_DB_DEPTH_CONTROL, SI_TRACKED_DB_DEPTH_CONTROL,
|
||||||
state->db_depth_control);
|
state->db_depth_control);
|
||||||
if (state->stencil_enabled) {
|
if (state->stencil_enabled) {
|
||||||
|
@@ -131,6 +131,7 @@ struct si_state_dsa {
|
|||||||
unsigned spi_shader_user_data_ps_alpha_ref;
|
unsigned spi_shader_user_data_ps_alpha_ref;
|
||||||
unsigned db_stencil_read_mask;
|
unsigned db_stencil_read_mask;
|
||||||
unsigned db_stencil_write_mask;
|
unsigned db_stencil_write_mask;
|
||||||
|
unsigned db_render_override; /* only gfx12 */
|
||||||
|
|
||||||
/* 0 = without stencil buffer, 1 = when both Z and S buffers are present */
|
/* 0 = without stencil buffer, 1 = when both Z and S buffers are present */
|
||||||
struct si_dsa_order_invariance order_invariance[2];
|
struct si_dsa_order_invariance order_invariance[2];
|
||||||
@@ -315,6 +316,7 @@ enum si_tracked_reg
|
|||||||
SI_TRACKED_SPI_PS_INPUT_ENA,
|
SI_TRACKED_SPI_PS_INPUT_ENA,
|
||||||
SI_TRACKED_SPI_PS_INPUT_ADDR,
|
SI_TRACKED_SPI_PS_INPUT_ADDR,
|
||||||
|
|
||||||
|
SI_TRACKED_DB_RENDER_OVERRIDE,
|
||||||
SI_TRACKED_DB_EQAA,
|
SI_TRACKED_DB_EQAA,
|
||||||
SI_TRACKED_DB_RENDER_OVERRIDE2,
|
SI_TRACKED_DB_RENDER_OVERRIDE2,
|
||||||
SI_TRACKED_DB_SHADER_CONTROL,
|
SI_TRACKED_DB_SHADER_CONTROL,
|
||||||
|
Reference in New Issue
Block a user