From: Chia-I Wu Date: Fri, 3 Feb 2023 02:42:33 +0000 (-0800) Subject: turnip: handle ubwc in blit_base_format X-Git-Tag: upstream/23.3.3~13472 X-Git-Url: http://review.tizen.org/git/?a=commitdiff_plain;h=6a76bd8d4c4887d76398dd9dad5ea2755b4dbc08;p=platform%2Fupstream%2Fmesa.git turnip: handle ubwc in blit_base_format Part-of: --- diff --git a/src/freedreno/vulkan/tu_clear_blit.c b/src/freedreno/vulkan/tu_clear_blit.c index 3ba023e..c6c0550 100644 --- a/src/freedreno/vulkan/tu_clear_blit.c +++ b/src/freedreno/vulkan/tu_clear_blit.c @@ -105,8 +105,19 @@ blit_format_color(enum pipe_format format, enum a6xx_tile_mode tile_mode) } static enum a6xx_format -blit_base_format(enum pipe_format format) -{ +blit_base_format(enum pipe_format format, bool ubwc) +{ + if (ubwc) { + switch (format) { + case PIPE_FORMAT_Z24X8_UNORM: + case PIPE_FORMAT_Z24_UNORM_S8_UINT: + /* use the ubwc-compatible FMT6_Z24_UNORM_S8_UINT_AS_R8G8B8A8 */ + return FMT6_Z24_UNORM_S8_UINT_AS_R8G8B8A8; + default: + break; + } + } + /* note: tu6_format_color doesn't care about tiling for .fmt field */ return blit_format_color(format, TILE6_LINEAR).fmt; } @@ -379,17 +390,12 @@ r2d_setup_common(struct tu_cmd_buffer *cmd, bool ubwc, bool scissor) { - enum a6xx_format fmt = blit_base_format(dst_format); + enum a6xx_format fmt = blit_base_format(dst_format, ubwc); fixup_dst_format(src_format, &dst_format, &fmt); enum a6xx_2d_ifmt ifmt = format_to_ifmt(dst_format); uint32_t unknown_8c01 = 0; - if ((dst_format == PIPE_FORMAT_Z24_UNORM_S8_UINT || - dst_format == PIPE_FORMAT_Z24X8_UNORM) && ubwc) { - fmt = FMT6_Z24_UNORM_S8_UINT_AS_R8G8B8A8; - } - /* note: the only format with partial clearing is D24S8 */ if (dst_format == PIPE_FORMAT_Z24_UNORM_S8_UINT) { /* preserve stencil channel */ @@ -1218,14 +1224,9 @@ r3d_setup(struct tu_cmd_buffer *cmd, bool ubwc, VkSampleCountFlagBits samples) { - enum a6xx_format fmt = blit_base_format(dst_format); + enum a6xx_format fmt = blit_base_format(dst_format, ubwc); fixup_dst_format(src_format, &dst_format, &fmt); - if ((dst_format == PIPE_FORMAT_Z24_UNORM_S8_UINT || - dst_format == PIPE_FORMAT_Z24X8_UNORM) && ubwc) { - fmt = FMT6_Z24_UNORM_S8_UINT_AS_R8G8B8A8; - } - if (!cmd->state.pass) { tu_emit_cache_flush_ccu(cmd, cs, TU_CMD_CCU_SYSMEM); tu6_emit_window_scissor(cs, 0, 0, 0x3fff, 0x3fff); @@ -2750,7 +2751,8 @@ clear_gmem_attachment(struct tu_cmd_buffer *cmd, const VkClearValue *value) { tu_cs_emit_pkt4(cs, REG_A6XX_RB_BLIT_DST_INFO, 1); - tu_cs_emit(cs, A6XX_RB_BLIT_DST_INFO_COLOR_FORMAT(blit_base_format(format))); + tu_cs_emit(cs, A6XX_RB_BLIT_DST_INFO_COLOR_FORMAT( + blit_base_format(format, false))); tu_cs_emit_regs(cs, A6XX_RB_BLIT_INFO(.gmem = 1, .clear_mask = clear_mask));