turnip: Switch tu6_format_color() to a pipe_format.

To handle Y8 specially, we want a PIPE_FORMAT instead of VK_FORMAT.  There
are some redundant vk-to-pipe conversions, but they're going to go away
shortly.

Part-of: <https://gitlab.freedesktop.org/mesa/mesa/-/merge_requests/13379>
This commit is contained in:
Emma Anholt 2021-10-05 20:55:21 -07:00 committed by Marge Bot
parent 3b68fc0c6a
commit e4e8db0132
3 changed files with 21 additions and 21 deletions

View file

@ -220,7 +220,7 @@ r2d_dst_stencil(struct tu_cs *cs, const struct tu_image_view *iview, uint32_t la
static void
r2d_dst_buffer(struct tu_cs *cs, VkFormat vk_format, uint64_t va, uint32_t pitch)
{
struct tu_native_format format = tu6_format_color(vk_format, TILE6_LINEAR);
struct tu_native_format format = tu6_format_color(tu_vk_format_to_pipe_format(vk_format), TILE6_LINEAR);
tu_cs_emit_regs(cs,
A6XX_RB_2D_DST_INFO(
@ -241,13 +241,14 @@ r2d_setup_common(struct tu_cmd_buffer *cmd,
bool ubwc,
bool scissor)
{
enum a6xx_format format = tu6_base_format(vk_format);
enum pipe_format format = tu_vk_format_to_pipe_format(vk_format);
enum a6xx_format fmt = tu6_base_format(format);
enum a6xx_2d_ifmt ifmt = format_to_ifmt(vk_format);
uint32_t unknown_8c01 = 0;
if ((vk_format == VK_FORMAT_D24_UNORM_S8_UINT ||
vk_format == VK_FORMAT_X8_D24_UNORM_PACK32) && ubwc) {
format = FMT6_Z24_UNORM_S8_UINT_AS_R8G8B8A8;
fmt = FMT6_Z24_UNORM_S8_UINT_AS_R8G8B8A8;
}
/* note: the only format with partial clearing is D24S8 */
@ -267,8 +268,8 @@ r2d_setup_common(struct tu_cmd_buffer *cmd,
.scissor = scissor,
.rotate = blit_param,
.solid_color = clear,
.d24s8 = format == FMT6_Z24_UNORM_S8_UINT_AS_R8G8B8A8 && !clear,
.color_format = format,
.d24s8 = fmt == FMT6_Z24_UNORM_S8_UINT_AS_R8G8B8A8 && !clear,
.color_format = fmt,
.mask = 0xf,
.ifmt = vk_format_is_srgb(vk_format) ? R2D_UNORM8_SRGB : ifmt,
).value;
@ -279,13 +280,13 @@ r2d_setup_common(struct tu_cmd_buffer *cmd,
tu_cs_emit_pkt4(cs, REG_A6XX_GRAS_2D_BLIT_CNTL, 1);
tu_cs_emit(cs, blit_cntl);
if (format == FMT6_10_10_10_2_UNORM_DEST)
format = FMT6_16_16_16_16_FLOAT;
if (fmt == FMT6_10_10_10_2_UNORM_DEST)
fmt = FMT6_16_16_16_16_FLOAT;
tu_cs_emit_regs(cs, A6XX_SP_2D_DST_FORMAT(
.sint = vk_format_is_sint(vk_format),
.uint = vk_format_is_uint(vk_format),
.color_format = format,
.color_format = fmt,
.srgb = vk_format_is_srgb(vk_format),
.mask = 0xf));
}
@ -955,7 +956,7 @@ r3d_dst_stencil(struct tu_cs *cs, const struct tu_image_view *iview, uint32_t la
static void
r3d_dst_buffer(struct tu_cs *cs, VkFormat vk_format, uint64_t va, uint32_t pitch)
{
struct tu_native_format format = tu6_format_color(vk_format, TILE6_LINEAR);
struct tu_native_format format = tu6_format_color(tu_vk_format_to_pipe_format(vk_format), TILE6_LINEAR);
tu_cs_emit_regs(cs,
A6XX_RB_MRT_BUF_INFO(0, .color_format = format.fmt, .color_swap = format.swap),
@ -994,7 +995,7 @@ r3d_setup(struct tu_cmd_buffer *cmd,
bool ubwc,
VkSampleCountFlagBits samples)
{
enum a6xx_format format = tu6_base_format(vk_format);
enum a6xx_format format = tu6_base_format(tu_vk_format_to_pipe_format(vk_format));
if ((vk_format == VK_FORMAT_D24_UNORM_S8_UINT ||
vk_format == VK_FORMAT_X8_D24_UNORM_PACK32) && ubwc) {
@ -2448,7 +2449,7 @@ 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(tu6_base_format(format)));
tu_cs_emit(cs, A6XX_RB_BLIT_DST_INFO_COLOR_FORMAT(tu6_base_format(tu_vk_format_to_pipe_format(format))));
tu_cs_emit_regs(cs, A6XX_RB_BLIT_INFO(.gmem = 1, .clear_mask = clear_mask));

View file

@ -78,9 +78,8 @@ tu_vk_format_to_pipe_format(VkFormat vk_format)
}
static struct tu_native_format
tu6_format_color_unchecked(VkFormat vk_format, enum a6xx_tile_mode tile_mode)
tu6_format_color_unchecked(enum pipe_format format, enum a6xx_tile_mode tile_mode)
{
enum pipe_format format = tu_vk_format_to_pipe_format(vk_format);
struct tu_native_format fmt = {
.fmt = fd6_color_format(format, tile_mode),
.swap = fd6_color_swap(format, tile_mode),
@ -100,15 +99,15 @@ tu6_format_color_unchecked(VkFormat vk_format, enum a6xx_tile_mode tile_mode)
}
bool
tu6_format_color_supported(VkFormat vk_format)
tu6_format_color_supported(enum pipe_format format)
{
return tu6_format_color_unchecked(vk_format, TILE6_LINEAR).fmt != FMT6_NONE;
return tu6_format_color_unchecked(format, TILE6_LINEAR).fmt != FMT6_NONE;
}
struct tu_native_format
tu6_format_color(VkFormat vk_format, enum a6xx_tile_mode tile_mode)
tu6_format_color(enum pipe_format format, enum a6xx_tile_mode tile_mode)
{
struct tu_native_format fmt = tu6_format_color_unchecked(vk_format, tile_mode);
struct tu_native_format fmt = tu6_format_color_unchecked(format, tile_mode);
assert(fmt.fmt != FMT6_NONE);
return fmt;
}
@ -171,7 +170,7 @@ tu_physical_device_get_format_properties(
const struct util_format_description *desc = util_format_description(format);
bool supported_vtx = tu6_format_vtx_supported(vk_format);
bool supported_color = tu6_format_color_supported(vk_format);
bool supported_color = tu6_format_color_supported(format);
bool supported_tex = tu6_format_texture_supported(format);
if (format == PIPE_FORMAT_NONE ||

View file

@ -1385,13 +1385,13 @@ struct tu_native_format
enum pipe_format tu_vk_format_to_pipe_format(VkFormat vk_format);
bool tu6_format_vtx_supported(VkFormat format);
struct tu_native_format tu6_format_vtx(VkFormat format);
bool tu6_format_color_supported(VkFormat format);
struct tu_native_format tu6_format_color(VkFormat format, enum a6xx_tile_mode tile_mode);
bool tu6_format_color_supported(enum pipe_format format);
struct tu_native_format tu6_format_color(enum pipe_format format, enum a6xx_tile_mode tile_mode);
bool tu6_format_texture_supported(enum pipe_format format);
struct tu_native_format tu6_format_texture(enum pipe_format format, enum a6xx_tile_mode tile_mode);
static inline enum a6xx_format
tu6_base_format(VkFormat format)
tu6_base_format(enum pipe_format format)
{
/* note: tu6_format_color doesn't care about tiling for .fmt field */
return tu6_format_color(format, TILE6_LINEAR).fmt;