[Mesa-dev] [PATCH 04/13] anv: associate vulkan formats with aspects

Eric Engestrom eric.engestrom at intel.com
Tue Nov 6 13:25:35 UTC 2018


On Monday, 2018-11-05 15:35:58 +0000, Lionel Landwerlin wrote:
> This will make it easier to associate an aspect with a plane number.
> 
> Signed-off-by: Lionel Landwerlin <lionel.g.landwerlin at intel.com>
> ---
>  src/intel/vulkan/anv_formats.c | 107 ++++++++++++++++++++-------------
>  src/intel/vulkan/anv_private.h |   3 +
>  2 files changed, 69 insertions(+), 41 deletions(-)
> 
> diff --git a/src/intel/vulkan/anv_formats.c b/src/intel/vulkan/anv_formats.c
> index 9199567f445..d3a7c2be85c 100644
> --- a/src/intel/vulkan/anv_formats.c
> +++ b/src/intel/vulkan/anv_formats.c
> @@ -51,6 +51,7 @@
>        .planes = { \
>           { .isl_format = __hw_fmt, .swizzle = __swizzle, \
>             .denominator_scales = { 1, 1, }, \
> +           .aspect = VK_IMAGE_ASPECT_COLOR_BIT, \
>           }, \
>        }, \
>        .n_planes = 1, \
> @@ -59,16 +60,38 @@
>  #define fmt1(__vk_fmt, __hw_fmt) \
>     swiz_fmt1(__vk_fmt, __hw_fmt, RGBA)
>  
> -#define fmt2(__vk_fmt, __fmt1, __fmt2) \
> +#define d_fmt(__vk_fmt, __hw_fmt) \
>     [VK_ENUM_OFFSET(__vk_fmt)] = { \
>        .planes = { \
> -         { .isl_format = __fmt1, \
> -           .swizzle = RGBA,       \
> +         { .isl_format = __hw_fmt, .swizzle = RGBA, \
>             .denominator_scales = { 1, 1, }, \
> +           .aspect = VK_IMAGE_ASPECT_DEPTH_BIT, \
>           }, \
> -         { .isl_format = __fmt2, \
> -           .swizzle = RGBA,       \
> +      }, \
> +      .n_planes = 1, \
> +   }
> +
> +#define s_fmt(__vk_fmt, __hw_fmt) \
> +   [VK_ENUM_OFFSET(__vk_fmt)] = { \
> +      .planes = { \
> +         { .isl_format = __hw_fmt, .swizzle = RGBA, \
> +           .denominator_scales = { 1, 1, }, \
> +           .aspect = VK_IMAGE_ASPECT_STENCIL_BIT, \
> +         }, \
> +      }, \
> +      .n_planes = 1, \
> +   }
> +
> +#define ds_fmt2(__vk_fmt, __fmt1, __fmt2) \
> +   [VK_ENUM_OFFSET(__vk_fmt)] = { \
> +      .planes = { \
> +         { .isl_format = __fmt1, .swizzle = RGBA, \
> +           .denominator_scales = { 1, 1, }, \
> +           .aspect = VK_IMAGE_ASPECT_DEPTH_BIT, \
> +         }, \
> +         { .isl_format = __fmt2, .swizzle = RGBA, \
>             .denominator_scales = { 1, 1, }, \
> +           .aspect = VK_IMAGE_ASPECT_STENCIL_BIT, \
>           }, \
>        }, \
>        .n_planes = 2, \
> @@ -81,20 +104,22 @@
>        }, \
>     }
>  
> -#define y_plane(__hw_fmt, __swizzle, __ycbcr_swizzle, dhs, dvs) \
> +#define y_plane(__plane, __hw_fmt, __swizzle, __ycbcr_swizzle, dhs, dvs) \

`__plane` is unused; drop it?

Other than this nit, patches 1-2 + 4-6 are:
Reviewed-by: Eric Engestrom <eric.engestrom at intel.com>

>     { .isl_format = __hw_fmt, \
>       .swizzle = __swizzle, \
>       .ycbcr_swizzle = __ycbcr_swizzle, \
>       .denominator_scales = { dhs, dvs, }, \
>       .has_chroma = false, \
> +     .aspect = VK_IMAGE_ASPECT_PLANE_0_BIT, /* Y plane is always plane 0 */ \
>     }
>  
> -#define chroma_plane(__hw_fmt, __swizzle, __ycbcr_swizzle, dhs, dvs) \
> +#define chroma_plane(__plane, __hw_fmt, __swizzle, __ycbcr_swizzle, dhs, dvs) \
>     { .isl_format = __hw_fmt, \
>       .swizzle = __swizzle, \
>       .ycbcr_swizzle = __ycbcr_swizzle, \
>       .denominator_scales = { dhs, dvs, }, \
>       .has_chroma = true, \
> +     .aspect = VK_IMAGE_ASPECT_PLANE_ ## __plane ## _BIT, \
>     }
>  
>  #define ycbcr_fmt(__vk_fmt, __n_planes, ...) \
> @@ -224,13 +249,13 @@ static const struct anv_format main_formats[] = {
>     fmt1(VK_FORMAT_B10G11R11_UFLOAT_PACK32,           ISL_FORMAT_R11G11B10_FLOAT),
>     fmt1(VK_FORMAT_E5B9G9R9_UFLOAT_PACK32,            ISL_FORMAT_R9G9B9E5_SHAREDEXP),
>  
> -   fmt1(VK_FORMAT_D16_UNORM,                         ISL_FORMAT_R16_UNORM),
> -   fmt1(VK_FORMAT_X8_D24_UNORM_PACK32,               ISL_FORMAT_R24_UNORM_X8_TYPELESS),
> -   fmt1(VK_FORMAT_D32_SFLOAT,                        ISL_FORMAT_R32_FLOAT),
> -   fmt1(VK_FORMAT_S8_UINT,                           ISL_FORMAT_R8_UINT),
> +   d_fmt(VK_FORMAT_D16_UNORM,                        ISL_FORMAT_R16_UNORM),
> +   d_fmt(VK_FORMAT_X8_D24_UNORM_PACK32,              ISL_FORMAT_R24_UNORM_X8_TYPELESS),
> +   d_fmt(VK_FORMAT_D32_SFLOAT,                       ISL_FORMAT_R32_FLOAT),
> +   s_fmt(VK_FORMAT_S8_UINT,                          ISL_FORMAT_R8_UINT),
>     fmt_unsupported(VK_FORMAT_D16_UNORM_S8_UINT),
> -   fmt2(VK_FORMAT_D24_UNORM_S8_UINT,                 ISL_FORMAT_R24_UNORM_X8_TYPELESS, ISL_FORMAT_R8_UINT),
> -   fmt2(VK_FORMAT_D32_SFLOAT_S8_UINT,                ISL_FORMAT_R32_FLOAT, ISL_FORMAT_R8_UINT),
> +   ds_fmt2(VK_FORMAT_D24_UNORM_S8_UINT,              ISL_FORMAT_R24_UNORM_X8_TYPELESS, ISL_FORMAT_R8_UINT),
> +   ds_fmt2(VK_FORMAT_D32_SFLOAT_S8_UINT,             ISL_FORMAT_R32_FLOAT, ISL_FORMAT_R8_UINT),
>  
>     swiz_fmt1(VK_FORMAT_BC1_RGB_UNORM_BLOCK,          ISL_FORMAT_BC1_UNORM, RGB1),
>     swiz_fmt1(VK_FORMAT_BC1_RGB_SRGB_BLOCK,           ISL_FORMAT_BC1_UNORM_SRGB, RGB1),
> @@ -304,27 +329,27 @@ static const struct anv_format main_formats[] = {
>  
>  static const struct anv_format ycbcr_formats[] = {
>     ycbcr_fmt(VK_FORMAT_G8B8G8R8_422_UNORM, 1,
> -             y_plane(ISL_FORMAT_YCRCB_SWAPUV, RGBA, _ISL_SWIZZLE(BLUE, GREEN, RED, ZERO), 1, 1)),
> +             y_plane(0, ISL_FORMAT_YCRCB_SWAPUV, RGBA, _ISL_SWIZZLE(BLUE, GREEN, RED, ZERO), 1, 1)),
>     ycbcr_fmt(VK_FORMAT_B8G8R8G8_422_UNORM, 1,
> -             y_plane(ISL_FORMAT_YCRCB_SWAPUVY, RGBA, _ISL_SWIZZLE(BLUE, GREEN, RED, ZERO), 1, 1)),
> +             y_plane(0, ISL_FORMAT_YCRCB_SWAPUVY, RGBA, _ISL_SWIZZLE(BLUE, GREEN, RED, ZERO), 1, 1)),
>     ycbcr_fmt(VK_FORMAT_G8_B8_R8_3PLANE_420_UNORM, 3,
> -             y_plane(ISL_FORMAT_R8_UNORM, RGBA, _ISL_SWIZZLE(GREEN, ZERO, ZERO, ZERO), 1, 1),
> -             chroma_plane(ISL_FORMAT_R8_UNORM, RGBA, _ISL_SWIZZLE(BLUE, ZERO, ZERO, ZERO), 2, 2),
> -             chroma_plane(ISL_FORMAT_R8_UNORM, RGBA, _ISL_SWIZZLE(RED, ZERO, ZERO, ZERO), 2, 2)),
> +             y_plane(0, ISL_FORMAT_R8_UNORM, RGBA, _ISL_SWIZZLE(GREEN, ZERO, ZERO, ZERO), 1, 1),
> +             chroma_plane(1, ISL_FORMAT_R8_UNORM, RGBA, _ISL_SWIZZLE(BLUE, ZERO, ZERO, ZERO), 2, 2),
> +             chroma_plane(2, ISL_FORMAT_R8_UNORM, RGBA, _ISL_SWIZZLE(RED, ZERO, ZERO, ZERO), 2, 2)),
>     ycbcr_fmt(VK_FORMAT_G8_B8R8_2PLANE_420_UNORM, 2,
> -             y_plane(ISL_FORMAT_R8_UNORM, RGBA, _ISL_SWIZZLE(GREEN, ZERO, ZERO, ZERO), 1, 1),
> -             chroma_plane(ISL_FORMAT_R8G8_UNORM, RGBA, _ISL_SWIZZLE(BLUE, RED, ZERO, ZERO), 2, 2)),
> +             y_plane(0, ISL_FORMAT_R8_UNORM, RGBA, _ISL_SWIZZLE(GREEN, ZERO, ZERO, ZERO), 1, 1),
> +             chroma_plane(1, ISL_FORMAT_R8G8_UNORM, RGBA, _ISL_SWIZZLE(BLUE, RED, ZERO, ZERO), 2, 2)),
>     ycbcr_fmt(VK_FORMAT_G8_B8_R8_3PLANE_422_UNORM, 3,
> -             y_plane(ISL_FORMAT_R8_UNORM, RGBA, _ISL_SWIZZLE(GREEN, ZERO, ZERO, ZERO), 1, 1),
> -             chroma_plane(ISL_FORMAT_R8_UNORM, RGBA, _ISL_SWIZZLE(BLUE, ZERO, ZERO, ZERO), 2, 1),
> -             chroma_plane(ISL_FORMAT_R8_UNORM, RGBA, _ISL_SWIZZLE(RED, ZERO, ZERO, ZERO), 2, 1)),
> +             y_plane(0, ISL_FORMAT_R8_UNORM, RGBA, _ISL_SWIZZLE(GREEN, ZERO, ZERO, ZERO), 1, 1),
> +             chroma_plane(1, ISL_FORMAT_R8_UNORM, RGBA, _ISL_SWIZZLE(BLUE, ZERO, ZERO, ZERO), 2, 1),
> +             chroma_plane(2, ISL_FORMAT_R8_UNORM, RGBA, _ISL_SWIZZLE(RED, ZERO, ZERO, ZERO), 2, 1)),
>     ycbcr_fmt(VK_FORMAT_G8_B8R8_2PLANE_422_UNORM, 2,
> -             y_plane(ISL_FORMAT_R8_UNORM, RGBA, _ISL_SWIZZLE(GREEN, ZERO, ZERO, ZERO), 1, 1),
> -             chroma_plane(ISL_FORMAT_R8G8_UNORM, RGBA, _ISL_SWIZZLE(BLUE, RED, ZERO, ZERO), 2, 1)),
> +             y_plane(0, ISL_FORMAT_R8_UNORM, RGBA, _ISL_SWIZZLE(GREEN, ZERO, ZERO, ZERO), 1, 1),
> +             chroma_plane(1, ISL_FORMAT_R8G8_UNORM, RGBA, _ISL_SWIZZLE(BLUE, RED, ZERO, ZERO), 2, 1)),
>     ycbcr_fmt(VK_FORMAT_G8_B8_R8_3PLANE_444_UNORM, 3,
> -             y_plane(ISL_FORMAT_R8_UNORM, RGBA, _ISL_SWIZZLE(GREEN, ZERO, ZERO, ZERO), 1, 1),
> -             chroma_plane(ISL_FORMAT_R8_UNORM, RGBA, _ISL_SWIZZLE(BLUE, ZERO, ZERO, ZERO), 1, 1),
> -             chroma_plane(ISL_FORMAT_R8_UNORM, RGBA, _ISL_SWIZZLE(RED, ZERO, ZERO, ZERO), 1, 1)),
> +             y_plane(0, ISL_FORMAT_R8_UNORM, RGBA, _ISL_SWIZZLE(GREEN, ZERO, ZERO, ZERO), 1, 1),
> +             chroma_plane(1, ISL_FORMAT_R8_UNORM, RGBA, _ISL_SWIZZLE(BLUE, ZERO, ZERO, ZERO), 1, 1),
> +             chroma_plane(2, ISL_FORMAT_R8_UNORM, RGBA, _ISL_SWIZZLE(RED, ZERO, ZERO, ZERO), 1, 1)),
>  
>     fmt_unsupported(VK_FORMAT_R10X6_UNORM_PACK16),
>     fmt_unsupported(VK_FORMAT_R10X6G10X6_UNORM_2PACK16),
> @@ -353,23 +378,23 @@ static const struct anv_format ycbcr_formats[] = {
>     fmt_unsupported(VK_FORMAT_B16G16R16G16_422_UNORM),
>  
>     ycbcr_fmt(VK_FORMAT_G16_B16_R16_3PLANE_420_UNORM, 3,
> -             y_plane(ISL_FORMAT_R16_UNORM, RGBA, _ISL_SWIZZLE(GREEN, ZERO, ZERO, ZERO), 1, 1),
> -             chroma_plane(ISL_FORMAT_R16_UNORM, RGBA, _ISL_SWIZZLE(BLUE, ZERO, ZERO, ZERO), 2, 2),
> -             chroma_plane(ISL_FORMAT_R16_UNORM, RGBA, _ISL_SWIZZLE(RED, ZERO, ZERO, ZERO), 2, 2)),
> +             y_plane(0, ISL_FORMAT_R16_UNORM, RGBA, _ISL_SWIZZLE(GREEN, ZERO, ZERO, ZERO), 1, 1),
> +             chroma_plane(1, ISL_FORMAT_R16_UNORM, RGBA, _ISL_SWIZZLE(BLUE, ZERO, ZERO, ZERO), 2, 2),
> +             chroma_plane(2, ISL_FORMAT_R16_UNORM, RGBA, _ISL_SWIZZLE(RED, ZERO, ZERO, ZERO), 2, 2)),
>     ycbcr_fmt(VK_FORMAT_G16_B16R16_2PLANE_420_UNORM, 2,
> -             y_plane(ISL_FORMAT_R16_UNORM, RGBA, _ISL_SWIZZLE(GREEN, ZERO, ZERO, ZERO), 1, 1),
> -             chroma_plane(ISL_FORMAT_R16G16_UNORM, RGBA, _ISL_SWIZZLE(BLUE, RED, ZERO, ZERO), 2, 2)),
> +             y_plane(0, ISL_FORMAT_R16_UNORM, RGBA, _ISL_SWIZZLE(GREEN, ZERO, ZERO, ZERO), 1, 1),
> +             chroma_plane(1, ISL_FORMAT_R16G16_UNORM, RGBA, _ISL_SWIZZLE(BLUE, RED, ZERO, ZERO), 2, 2)),
>     ycbcr_fmt(VK_FORMAT_G16_B16_R16_3PLANE_422_UNORM, 3,
> -             y_plane(ISL_FORMAT_R16_UNORM, RGBA, _ISL_SWIZZLE(GREEN, ZERO, ZERO, ZERO), 1, 1),
> -             chroma_plane(ISL_FORMAT_R16_UNORM, RGBA, _ISL_SWIZZLE(BLUE, ZERO, ZERO, ZERO), 2, 1),
> -             chroma_plane(ISL_FORMAT_R16_UNORM, RGBA, _ISL_SWIZZLE(RED, ZERO, ZERO, ZERO), 2, 1)),
> +             y_plane(0, ISL_FORMAT_R16_UNORM, RGBA, _ISL_SWIZZLE(GREEN, ZERO, ZERO, ZERO), 1, 1),
> +             chroma_plane(1, ISL_FORMAT_R16_UNORM, RGBA, _ISL_SWIZZLE(BLUE, ZERO, ZERO, ZERO), 2, 1),
> +             chroma_plane(2, ISL_FORMAT_R16_UNORM, RGBA, _ISL_SWIZZLE(RED, ZERO, ZERO, ZERO), 2, 1)),
>     ycbcr_fmt(VK_FORMAT_G16_B16R16_2PLANE_422_UNORM, 2,
> -             y_plane(ISL_FORMAT_R16_UNORM, RGBA, _ISL_SWIZZLE(GREEN, ZERO, ZERO, ZERO), 1, 1),
> -             chroma_plane(ISL_FORMAT_R16G16_UNORM, RGBA, _ISL_SWIZZLE(BLUE, RED, ZERO, ZERO), 2, 1)),
> +             y_plane(0, ISL_FORMAT_R16_UNORM, RGBA, _ISL_SWIZZLE(GREEN, ZERO, ZERO, ZERO), 1, 1),
> +             chroma_plane(1, ISL_FORMAT_R16G16_UNORM, RGBA, _ISL_SWIZZLE(BLUE, RED, ZERO, ZERO), 2, 1)),
>     ycbcr_fmt(VK_FORMAT_G16_B16_R16_3PLANE_444_UNORM, 3,
> -             y_plane(ISL_FORMAT_R16_UNORM, RGBA, _ISL_SWIZZLE(GREEN, ZERO, ZERO, ZERO), 1, 1),
> -             chroma_plane(ISL_FORMAT_R16_UNORM, RGBA, _ISL_SWIZZLE(BLUE, ZERO, ZERO, ZERO), 1, 1),
> -             chroma_plane(ISL_FORMAT_R16_UNORM, RGBA, _ISL_SWIZZLE(RED, ZERO, ZERO, ZERO), 1, 1)),
> +             y_plane(0, ISL_FORMAT_R16_UNORM, RGBA, _ISL_SWIZZLE(GREEN, ZERO, ZERO, ZERO), 1, 1),
> +             chroma_plane(1, ISL_FORMAT_R16_UNORM, RGBA, _ISL_SWIZZLE(BLUE, ZERO, ZERO, ZERO), 1, 1),
> +             chroma_plane(2, ISL_FORMAT_R16_UNORM, RGBA, _ISL_SWIZZLE(RED, ZERO, ZERO, ZERO), 1, 1)),
>  };
>  
>  #undef _fmt
> diff --git a/src/intel/vulkan/anv_private.h b/src/intel/vulkan/anv_private.h
> index 8475008db4a..f8e7122cf25 100644
> --- a/src/intel/vulkan/anv_private.h
> +++ b/src/intel/vulkan/anv_private.h
> @@ -2549,6 +2549,9 @@ struct anv_format_plane {
>  
>     /* How to map sampled ycbcr planes to a single 4 component element. */
>     struct isl_swizzle ycbcr_swizzle;
> +
> +   /* What aspect is associated to this plane */
> +   VkImageAspectFlags aspect;
>  };
>  
>  
> -- 
> 2.19.1
> 
> _______________________________________________
> mesa-dev mailing list
> mesa-dev at lists.freedesktop.org
> https://lists.freedesktop.org/mailman/listinfo/mesa-dev


More information about the mesa-dev mailing list