radv: add a new dirty bit for the ngg culling state

Signed-off-by: Samuel Pitoiset <samuel.pitoiset@gmail.com>
Part-of: <https://gitlab.freedesktop.org/mesa/mesa/-/merge_requests/36875>
This commit is contained in:
Samuel Pitoiset
2025-08-19 15:39:52 +02:00
committed by Marge Bot
parent d9d9052c56
commit 604296a282
2 changed files with 16 additions and 7 deletions
+14 -6
View File
@@ -10427,6 +10427,8 @@ radv_emit_ngg_culling_state(struct radv_cmd_buffer *cmd_buffer)
{
const struct radv_shader *last_vgt_shader = cmd_buffer->state.last_vgt_shader;
assert(last_vgt_shader->info.has_ngg_culling);
/* Get viewport transform. */
float vp_scale[2], vp_translate[2];
memcpy(vp_scale, cmd_buffer->state.dynamic.hw_vp.xform[0].scale, 2 * sizeof(float));
@@ -10463,6 +10465,8 @@ radv_emit_ngg_culling_state(struct radv_cmd_buffer *cmd_buffer)
radeon_set_sh_reg(ngg_culling_settings_offset, nggc_settings);
radeon_end();
cmd_buffer->state.dirty &= ~RADV_CMD_DIRTY_NGGC_STATE;
}
static void
@@ -11478,6 +11482,15 @@ radv_emit_all_graphics_states(struct radv_cmd_buffer *cmd_buffer, const struct r
}
const uint64_t dynamic_states = cmd_buffer->state.dirty_dynamic & radv_get_needed_dynamic_states(cmd_buffer);
if (cmd_buffer->state.has_nggc &&
((cmd_buffer->state.dirty & (RADV_CMD_DIRTY_PIPELINE | RADV_CMD_DIRTY_GRAPHICS_SHADERS)) ||
(dynamic_states &
(RADV_DYNAMIC_CULL_MODE | RADV_DYNAMIC_FRONT_FACE | RADV_DYNAMIC_RASTERIZER_DISCARD_ENABLE |
RADV_DYNAMIC_VIEWPORT | RADV_DYNAMIC_CONSERVATIVE_RAST_MODE | RADV_DYNAMIC_RASTERIZATION_SAMPLES |
RADV_DYNAMIC_PRIMITIVE_TOPOLOGY | RADV_DYNAMIC_SAMPLE_LOCATIONS_ENABLE)))) {
cmd_buffer->state.dirty |= RADV_CMD_DIRTY_NGGC_STATE;
}
if (dynamic_states)
radv_validate_dynamic_states(cmd_buffer, dynamic_states);
@@ -11498,12 +11511,7 @@ radv_emit_all_graphics_states(struct radv_cmd_buffer *cmd_buffer, const struct r
if (cmd_buffer->state.dirty & RADV_CMD_DIRTY_OCCLUSION_QUERY)
radv_flush_occlusion_query_state(cmd_buffer);
if (((cmd_buffer->state.dirty & (RADV_CMD_DIRTY_PIPELINE | RADV_CMD_DIRTY_GRAPHICS_SHADERS)) ||
(cmd_buffer->state.dirty_dynamic &
(RADV_DYNAMIC_CULL_MODE | RADV_DYNAMIC_FRONT_FACE | RADV_DYNAMIC_RASTERIZER_DISCARD_ENABLE |
RADV_DYNAMIC_VIEWPORT | RADV_DYNAMIC_CONSERVATIVE_RAST_MODE | RADV_DYNAMIC_RASTERIZATION_SAMPLES |
RADV_DYNAMIC_PRIMITIVE_TOPOLOGY | RADV_DYNAMIC_SAMPLE_LOCATIONS_ENABLE))) &&
cmd_buffer->state.has_nggc)
if (cmd_buffer->state.dirty & RADV_CMD_DIRTY_NGGC_STATE)
radv_emit_ngg_culling_state(cmd_buffer);
if (cmd_buffer->state.dirty & RADV_CMD_DIRTY_BINNING_STATE)
+2 -1
View File
@@ -107,7 +107,8 @@ enum radv_cmd_dirty_bits {
RADV_CMD_DIRTY_CB_RENDER_STATE = 1ull << 21,
RADV_CMD_DIRTY_VIEWPORT_STATE = 1ull << 22,
RADV_CMD_DIRTY_BINNING_STATE = 1ull << 23,
RADV_CMD_DIRTY_ALL = (1ull << 24) - 1,
RADV_CMD_DIRTY_NGGC_STATE = 1ull << 24,
RADV_CMD_DIRTY_ALL = (1ull << 25) - 1,
RADV_CMD_DIRTY_SHADER_QUERY = RADV_CMD_DIRTY_NGG_STATE | RADV_CMD_DIRTY_TASK_STATE,
};