diff --git a/src/freedreno/vulkan/tu_clear_blit.c b/src/freedreno/vulkan/tu_clear_blit.c index d1ddfa70c23..e4afb6d7d95 100644 --- a/src/freedreno/vulkan/tu_clear_blit.c +++ b/src/freedreno/vulkan/tu_clear_blit.c @@ -939,6 +939,11 @@ r3d_dst(struct tu_cs *cs, const struct fdl6_view *iview, uint32_t layer) tu_cs_emit_pkt4(cs, REG_A6XX_RB_MRT_FLAG_BUFFER(0), 3); tu_cs_image_flag_ref(cs, iview, layer); + /* Use color format from RB_MRT_BUF_INFO. This register is relevant for + * FMT6_NV12_Y. + */ + tu_cs_emit_regs(cs, A6XX_GRAS_LRZ_MRT_BUF_INFO_0(.color_format = iview->RB_MRT_BUF_INFO & 0xff)); + tu_cs_emit_regs(cs, A6XX_RB_RENDER_CNTL(.flag_mrts = iview->ubwc_enabled)); } diff --git a/src/freedreno/vulkan/tu_cmd_buffer.c b/src/freedreno/vulkan/tu_cmd_buffer.c index 2084ccd7b8c..70f1c6943e0 100644 --- a/src/freedreno/vulkan/tu_cmd_buffer.c +++ b/src/freedreno/vulkan/tu_cmd_buffer.c @@ -274,6 +274,15 @@ tu6_emit_mrt(struct tu_cmd_buffer *cmd, tu_cs_image_flag_ref(cs, &iview->view, 0); } + if (subpass->color_count) { + uint32_t a = subpass->color_attachments[0].attachment; + if (a != VK_ATTACHMENT_UNUSED) { + const struct tu_image_view *iview = cmd->state.attachments[a]; + enum a6xx_format fmt = iview->view.RB_MRT_BUF_INFO & 0xff; + tu_cs_emit_regs(cs, A6XX_GRAS_LRZ_MRT_BUF_INFO_0(.color_format = fmt)); + } + } + tu_cs_emit_regs(cs, A6XX_RB_SRGB_CNTL(.dword = subpass->srgb_cntl)); tu_cs_emit_regs(cs,