diff --git a/src/freedreno/vulkan/tu_cmd_buffer.cc b/src/freedreno/vulkan/tu_cmd_buffer.cc index 33156fc2d1b..edc34a898f5 100644 --- a/src/freedreno/vulkan/tu_cmd_buffer.cc +++ b/src/freedreno/vulkan/tu_cmd_buffer.cc @@ -6148,6 +6148,12 @@ tu_CmdSetRenderingAttachmentLocationsKHR( tu6_emit_mrt(cmd, cmd->state.subpass, &cmd->draw_cs); tu6_emit_render_cntl(cmd, cmd->state.subpass, &cmd->draw_cs, false); + /* Same case as a drawcall not writing to some color attachments, but not + * trying to make LRZ work in cases where we can prove that LRZ can work. + */ + if (cmd->state.lrz.valid) + tu_lrz_disable_write_for_rp(cmd, "CmdSetRenderingAttachmentLocations"); + /* Because this is just a remapping and not a different "reference", there * doesn't need to be a barrier between accesses to the same attachment * with a different index. This is different from "classic" renderpasses. diff --git a/src/freedreno/vulkan/tu_lrz.cc b/src/freedreno/vulkan/tu_lrz.cc index 0eb04006bff..5f1d9c6cac7 100644 --- a/src/freedreno/vulkan/tu_lrz.cc +++ b/src/freedreno/vulkan/tu_lrz.cc @@ -91,7 +91,7 @@ tu_lrz_disable_reason(struct tu_cmd_buffer *cmd, const char *reason) { cmd->state.rp.lrz_disabled_at_draw); } -static inline void +void tu_lrz_disable_write_for_rp(struct tu_cmd_buffer *cmd, const char *reason) { if (cmd->state.lrz.disable_write_for_rp) diff --git a/src/freedreno/vulkan/tu_lrz.h b/src/freedreno/vulkan/tu_lrz.h index 941799ebd8f..c8550903aa8 100644 --- a/src/freedreno/vulkan/tu_lrz.h +++ b/src/freedreno/vulkan/tu_lrz.h @@ -112,4 +112,7 @@ void tu_lrz_flush_valid_during_renderpass(struct tu_cmd_buffer *cmd, struct tu_cs *cs); +void +tu_lrz_disable_write_for_rp(struct tu_cmd_buffer *cmd, const char *reason); + #endif /* TU_LRZ_H */