diff --git a/src/freedreno/fdl/fd6_format_table.c b/src/freedreno/fdl/fd6_format_table.c index 48144ede4aa..486588210cd 100644 --- a/src/freedreno/fdl/fd6_format_table.c +++ b/src/freedreno/fdl/fd6_format_table.c @@ -362,7 +362,8 @@ static const struct fd6_format formats[PIPE_FORMAT_COUNT] = { _T_(R8G8_R8B8_UNORM, R8G8R8B8_422_UNORM, WZYX), /* YUYV */ _T_(G8R8_B8R8_UNORM, G8R8B8R8_422_UNORM, WZYX), /* UYVY */ - _T_(R8_G8B8_420_UNORM, R8_G8B8_2PLANE_420_UNORM, WZYX), + _T_(R8_G8B8_420_UNORM, R8_G8B8_2PLANE_420_UNORM, WZYX), /* Gallium NV12 */ + _T_(G8_B8R8_420_UNORM, R8_G8B8_2PLANE_420_UNORM, WZYX), /* Vulkan NV12 */ _T_(G8_B8_R8_420_UNORM, R8_G8_B8_3PLANE_420_UNORM, WZYX), }; /* clang-format on */ diff --git a/src/freedreno/fdl/fd6_view.c b/src/freedreno/fdl/fd6_view.c index 41790f2b067..9319d93b0d3 100644 --- a/src/freedreno/fdl/fd6_view.c +++ b/src/freedreno/fdl/fd6_view.c @@ -61,7 +61,7 @@ fdl6_texswiz(const struct fdl_view_args *args, bool has_z24uint_s8uint) switch (args->format) { case PIPE_FORMAT_R8G8_R8B8_UNORM: case PIPE_FORMAT_G8R8_B8R8_UNORM: - case PIPE_FORMAT_R8_G8B8_420_UNORM: + case PIPE_FORMAT_G8_B8R8_420_UNORM: case PIPE_FORMAT_G8_B8_R8_420_UNORM: format_swiz[0] = PIPE_SWIZZLE_Z; format_swiz[1] = PIPE_SWIZZLE_X; @@ -208,6 +208,7 @@ fdl6_view_init(struct fdl6_view *view, const struct fdl_layout **layouts, view->descriptor[3] |= A6XX_TEX_CONST_3_TILE_ALL; if (args->format == PIPE_FORMAT_R8_G8B8_420_UNORM || + args->format == PIPE_FORMAT_G8_B8R8_420_UNORM || args->format == PIPE_FORMAT_G8_B8_R8_420_UNORM) { /* chroma offset re-uses MIPLVLS bits */ assert(args->level_count == 1); diff --git a/src/freedreno/vulkan/tu_clear_blit.c b/src/freedreno/vulkan/tu_clear_blit.c index 540027c8d64..c46e2f8edf4 100644 --- a/src/freedreno/vulkan/tu_clear_blit.c +++ b/src/freedreno/vulkan/tu_clear_blit.c @@ -1184,7 +1184,7 @@ copy_format(VkFormat vk_format, VkImageAspectFlags aspect_mask, bool copy_buffer case PIPE_FORMAT_R9G9B9E5_FLOAT: return PIPE_FORMAT_R32_UINT; - case PIPE_FORMAT_R8_G8B8_420_UNORM: + case PIPE_FORMAT_G8_B8R8_420_UNORM: if (aspect_mask == VK_IMAGE_ASPECT_PLANE_1_BIT) return PIPE_FORMAT_R8G8_UNORM; else diff --git a/src/freedreno/vulkan/tu_formats.c b/src/freedreno/vulkan/tu_formats.c index 75fed40d551..934c46ed423 100644 --- a/src/freedreno/vulkan/tu_formats.c +++ b/src/freedreno/vulkan/tu_formats.c @@ -69,7 +69,7 @@ tu_vk_format_to_pipe_format(VkFormat vk_format) case VK_FORMAT_B8G8R8G8_422_UNORM: /* UYVY */ return PIPE_FORMAT_G8R8_B8R8_UNORM; case VK_FORMAT_G8_B8R8_2PLANE_420_UNORM: - return PIPE_FORMAT_R8_G8B8_420_UNORM; + return PIPE_FORMAT_G8_B8R8_420_UNORM; case VK_FORMAT_G8_B8_R8_3PLANE_420_UNORM: return PIPE_FORMAT_G8_B8_R8_420_UNORM; default: diff --git a/src/gallium/include/pipe/p_format.h b/src/gallium/include/pipe/p_format.h index a46212b1c05..7dcbe7bb42b 100644 --- a/src/gallium/include/pipe/p_format.h +++ b/src/gallium/include/pipe/p_format.h @@ -504,6 +504,7 @@ enum pipe_format { PIPE_FORMAT_XYUV, PIPE_FORMAT_R8_G8B8_420_UNORM, + PIPE_FORMAT_G8_B8R8_420_UNORM, PIPE_FORMAT_G8_B8_R8_420_UNORM, PIPE_FORMAT_Y8_UNORM, diff --git a/src/util/format/u_format.csv b/src/util/format/u_format.csv index 06696ab2dcf..d1fddc925b2 100644 --- a/src/util/format/u_format.csv +++ b/src/util/format/u_format.csv @@ -400,6 +400,7 @@ PIPE_FORMAT_NV21 , planar2, 1, 1, 1, , , , , xy # RGB version of NV12 and YV12 for hardware that supports sampling from # multiplane textures but needs color-space conversion in the shader. PIPE_FORMAT_R8_G8B8_420_UNORM , planar2, 1, 1, 1, un8, , , , xyzw, rgb +PIPE_FORMAT_G8_B8R8_420_UNORM , planar2, 1, 1, 1, un8, , , , xyzw, rgb PIPE_FORMAT_G8_B8_R8_420_UNORM , planar3, 1, 1, 1, un8, , , , xyzw, rgb # While most of Mesa uses R8 for Y, U, and V planes, freedreno requires distinguishing diff --git a/src/util/format/u_format_table.py b/src/util/format/u_format_table.py index 17f52b99728..3548a49bb28 100644 --- a/src/util/format/u_format_table.py +++ b/src/util/format/u_format_table.py @@ -109,6 +109,7 @@ def has_access(format): 'y16_u16v16_422_unorm', 'y16_u16_v16_444_unorm', 'r8_g8b8_420_unorm', + 'g8_b8r8_420_unorm', 'g8_b8_r8_420_unorm', 'y8_unorm', ]