mirror of
https://gitlab.freedesktop.org/mesa/mesa.git
synced 2026-05-09 04:38:03 +02:00
radv: fix re-emitting early_z/late_z when the bound PS changes
This state depends on the fragment shader.
Fixes: d740e283e1 ("radv: implement VK_EXT_attachment_feedback_loop_dynamic_state")
Signed-off-by: Samuel Pitoiset <samuel.pitoiset@gmail.com>
Part-of: <https://gitlab.freedesktop.org/mesa/mesa/-/merge_requests/23494>
This commit is contained in:
parent
00968f38ca
commit
80153a8666
1 changed files with 10 additions and 1 deletions
|
|
@ -4518,6 +4518,12 @@ radv_emit_line_rasterization_mode(struct radv_cmd_buffer *cmd_buffer)
|
|||
d->vk.rs.line.mode == VK_LINE_RASTERIZATION_MODE_RECTANGULAR_EXT));
|
||||
}
|
||||
|
||||
static bool
|
||||
radv_ps_can_enable_early_z(const struct radv_shader *ps)
|
||||
{
|
||||
return ps->info.ps.early_fragment_test || !ps->info.ps.writes_memory;
|
||||
}
|
||||
|
||||
static void
|
||||
radv_emit_attachment_feedback_loop_enable(struct radv_cmd_buffer *cmd_buffer)
|
||||
{
|
||||
|
|
@ -4532,7 +4538,7 @@ radv_emit_attachment_feedback_loop_enable(struct radv_cmd_buffer *cmd_buffer)
|
|||
/* When a depth/stencil attachment is used inside feedback loops, use LATE_Z to make sure shader
|
||||
* invocations read the correct value.
|
||||
*/
|
||||
if (!uses_ds_feedback_loop && ps && (ps->info.ps.early_fragment_test || !ps->info.ps.writes_memory)) {
|
||||
if (!uses_ds_feedback_loop && ps && radv_ps_can_enable_early_z(ps)) {
|
||||
z_order = V_02880C_EARLY_Z_THEN_LATE_Z;
|
||||
} else {
|
||||
z_order = V_02880C_LATE_Z;
|
||||
|
|
@ -6656,6 +6662,9 @@ radv_bind_fragment_shader(struct radv_cmd_buffer *cmd_buffer, const struct radv_
|
|||
cmd_buffer->state.dirty |= RADV_CMD_DIRTY_DYNAMIC_RASTERIZATION_SAMPLES |
|
||||
RADV_CMD_DIRTY_DYNAMIC_FRAGMENT_SHADING_RATE;
|
||||
|
||||
if (!previous_ps || radv_ps_can_enable_early_z(previous_ps) != radv_ps_can_enable_early_z(ps))
|
||||
cmd_buffer->state.dirty |= RADV_CMD_DIRTY_DYNAMIC_ATTACHMENT_FEEDBACK_LOOP_ENABLE;
|
||||
|
||||
if (cmd_buffer->state.ms.sample_shading_enable != ps->info.ps.uses_sample_shading) {
|
||||
cmd_buffer->state.ms.sample_shading_enable = ps->info.ps.uses_sample_shading;
|
||||
cmd_buffer->state.dirty |= RADV_CMD_DIRTY_DYNAMIC_RASTERIZATION_SAMPLES;
|
||||
|
|
|
|||
Loading…
Add table
Reference in a new issue