}
}
+static struct tu_native_format
+blit_format_texture(enum pipe_format format, enum a6xx_tile_mode tile_mode)
+{
+ struct tu_native_format fmt = tu6_format_texture(format, tile_mode);
+
+ switch (format) {
+ case PIPE_FORMAT_Z24X8_UNORM:
+ case PIPE_FORMAT_Z24_UNORM_S8_UINT:
+ /* Similar to in fdl6_view_init, we want to use
+ * FMT6_Z24_UNORM_S8_UINT_AS_R8G8B8A8 or FMT6_8_8_8_8_UNORM for blit
+ * src. Since this is called when there is no image and thus no ubwc,
+ * we can always use FMT6_8_8_8_8_UNORM.
+ */
+ fmt.fmt = FMT6_8_8_8_8_UNORM;
+ break;
+ default:
+ break;
+ }
+
+ return fmt;
+}
+
static void
r2d_coords(struct tu_cs *cs,
const VkOffset2D *dst,
uint32_t width, uint32_t height,
enum pipe_format dst_format)
{
- struct tu_native_format fmt = tu6_format_texture(format, TILE6_LINEAR);
+ struct tu_native_format fmt = blit_format_texture(format, TILE6_LINEAR);
enum a6xx_format color_format = fmt.fmt;
fixup_src_format(&format, dst_format, &color_format);
{
uint32_t desc[A6XX_TEX_CONST_DWORDS];
- struct tu_native_format fmt = tu6_format_texture(format, TILE6_LINEAR);
+ struct tu_native_format fmt = blit_format_texture(format, TILE6_LINEAR);
enum a6xx_format color_format = fmt.fmt;
fixup_src_format(&format, dst_format, &color_format);
uint32_t desc[A6XX_TEX_CONST_DWORDS];
memcpy(desc, iview->view.descriptor, sizeof(desc));
- enum a6xx_format fmt = tu6_format_texture(format, TILE6_LINEAR).fmt;
+ enum a6xx_format fmt = blit_format_texture(format, TILE6_LINEAR).fmt;
fixup_src_format(&format, dst_format, &fmt);
/* patch the format so that depth/stencil get the right format and swizzle */
static bool
is_swapped_format(enum pipe_format format)
{
- struct tu_native_format linear = tu6_format_texture(format, TILE6_LINEAR);
- struct tu_native_format tiled = tu6_format_texture(format, TILE6_3);
+ struct tu_native_format linear = blit_format_texture(format, TILE6_LINEAR);
+ struct tu_native_format tiled = blit_format_texture(format, TILE6_3);
return linear.fmt != tiled.fmt || linear.swap != tiled.swap;
}
r2d_dst(cs, &iview->view, layer, src_format);
}
- enum a6xx_format fmt = tu6_format_texture(src_format, TILE6_2).fmt;
+ enum a6xx_format fmt = blit_format_texture(src_format, TILE6_2).fmt;
fixup_src_format(&src_format, dst_format, &fmt);
tu_cs_emit_regs(cs,
return fmt;
}
-static struct tu_native_format
-tu6_format_texture_unchecked(enum pipe_format format, enum a6xx_tile_mode tile_mode)
+struct tu_native_format
+tu6_format_texture(enum pipe_format format, enum a6xx_tile_mode tile_mode)
{
struct tu_native_format fmt = {
.fmt = fd6_texture_format(format, tile_mode),
.swap = fd6_texture_swap(format, tile_mode),
};
-
- switch (format) {
- case PIPE_FORMAT_Z24X8_UNORM:
- case PIPE_FORMAT_Z24_UNORM_S8_UINT:
- /* freedreno uses Z24_UNORM_S8_UINT (sampling) or
- * FMT6_Z24_UNORM_S8_UINT_AS_R8G8B8A8 (blits) for this format, while we use
- * FMT6_8_8_8_8_UNORM or FMT6_Z24_UNORM_S8_UINT_AS_R8G8B8A8
- */
- fmt.fmt = FMT6_8_8_8_8_UNORM;
- break;
-
- default:
- break;
- }
-
- return fmt;
-}
-
-struct tu_native_format
-tu6_format_texture(enum pipe_format format, enum a6xx_tile_mode tile_mode)
-{
- struct tu_native_format fmt = tu6_format_texture_unchecked(format, tile_mode);
assert(fmt.fmt != FMT6_NONE);
return fmt;
}
static bool
tu6_format_texture_supported(enum pipe_format format)
{
- return tu6_format_texture_unchecked(format, TILE6_LINEAR).fmt != FMT6_NONE;
+ return fd6_texture_format(format, TILE6_LINEAR) != FMT6_NONE;
}
enum tu6_ubwc_compat_type {