enum a3xx_color_swap color_swap =
fd6_color_swap(args->format, layout->tile_mode);
+ enum a6xx_format blit_format = color_format;
if (is_d24s8)
color_format = FMT6_Z24_UNORM_S8_UINT_AS_R8G8B8A8;
if (color_format == FMT6_Z24_UNORM_S8_UINT_AS_R8G8B8A8 && !ubwc_enabled)
color_format = FMT6_8_8_8_8_UNORM;
+ /* We don't need FMT6_Z24_UNORM_S8_UINT_AS_R8G8B8A8 / FMT6_8_8_8_8_UNORM
+ * for event blits. FMT6_Z24_UNORM_S8_UINT_AS_R8G8B8A8 also does not
+ * support fast clears and is slower.
+ */
+ if (is_d24s8 || blit_format == FMT6_Z24_UNORM_S8_UINT_AS_R8G8B8A8)
+ blit_format = FMT6_Z24_UNORM_S8_UINT;
+
memset(view->storage_descriptor, 0, sizeof(view->storage_descriptor));
view->storage_descriptor[0] =
view->RB_BLIT_DST_INFO =
A6XX_RB_BLIT_DST_INFO_TILE_MODE(tile_mode) |
A6XX_RB_BLIT_DST_INFO_SAMPLES(util_logbase2(layout->nr_samples)) |
- A6XX_RB_BLIT_DST_INFO_COLOR_FORMAT(color_format) |
+ A6XX_RB_BLIT_DST_INFO_COLOR_FORMAT(blit_format) |
A6XX_RB_BLIT_DST_INFO_COLOR_SWAP(color_swap) |
COND(ubwc_enabled, A6XX_RB_BLIT_DST_INFO_FLAGS);
}
tu_cs_emit_regs(cs, A6XX_RB_BLIT_INFO(
.unk0 = !resolve,
.gmem = !resolve,
+ .depth = vk_format_is_depth_or_stencil(attachment->format),
.sample_0 = vk_format_is_int(attachment->format) ||
vk_format_is_depth_or_stencil(attachment->format)));