frontends/va: adding PIPE_FORMAT_P012

Signed-off-by: David (Ming Qiang) Wu <David.Wu3@amd.com>
Reviewed-by: David Rosca <david.rosca@amd.com>
Part-of: <https://gitlab.freedesktop.org/mesa/mesa/-/merge_requests/32383>
This commit is contained in:
David (Ming Qiang) Wu 2024-08-02 16:58:28 -04:00 committed by Marge Bot
parent 284952b864
commit 9c6d14d736
5 changed files with 21 additions and 1 deletions

View file

@ -91,6 +91,7 @@ vl_video_buffer_plane_order(enum pipe_format format)
case PIPE_FORMAT_YUYV:
case PIPE_FORMAT_UYVY:
case PIPE_FORMAT_P010:
case PIPE_FORMAT_P012:
case PIPE_FORMAT_P016:
return const_resource_plane_order_YUV;

View file

@ -141,6 +141,11 @@ static unsigned int get_screen_supported_va_rt_formats(struct pipe_screen *pscre
entrypoint))
supported_rt_formats |= VA_RT_FORMAT_YUV420_10BPP;
if (pscreen->is_video_format_supported(pscreen, PIPE_FORMAT_P012,
profile,
entrypoint))
supported_rt_formats |= VA_RT_FORMAT_YUV420_12;
if (pscreen->is_video_format_supported(pscreen, PIPE_FORMAT_Y8_400_UNORM,
profile,
entrypoint))

View file

@ -43,6 +43,7 @@ static const VAImageFormat formats[] =
{
{VA_FOURCC('N','V','1','2')},
{VA_FOURCC('P','0','1','0')},
{VA_FOURCC('P','0','1','2')},
{VA_FOURCC('P','0','1','6')},
{VA_FOURCC('I','4','2','0')},
{VA_FOURCC('Y','V','1','2')},
@ -153,6 +154,7 @@ vlVaCreateImage(VADriverContextP ctx, VAImageFormat *format, int width, int heig
break;
case VA_FOURCC('P','0','1','0'):
case VA_FOURCC('P','0','1','2'):
case VA_FOURCC('P','0','1','6'):
img->num_planes = 2;
img->pitches[0] = w * 2;
@ -359,6 +361,7 @@ vlVaDeriveImage(VADriverContextP ctx, VASurfaceID surface, VAImage *image)
case VA_FOURCC('N','V','1','2'):
case VA_FOURCC('P','0','1','0'):
case VA_FOURCC('P','0','1','2'):
case VA_FOURCC('P','0','1','6'):
{
/* In some gallium platforms, the stride and offset are different*/

View file

@ -585,6 +585,9 @@ vlVaQuerySurfaceAttributes(VADriverContextP ctx, VAConfigID config_id,
vlVaAddSurfaceFormat(pscreen, config, PIPE_FORMAT_P016, attribs, &i);
}
if (config->rt_format & VA_RT_FORMAT_YUV420_12)
vlVaAddSurfaceFormat(pscreen, config, PIPE_FORMAT_P012, attribs, &i);
if (config->rt_format & VA_RT_FORMAT_YUV400)
vlVaAddSurfaceFormat(pscreen, config, PIPE_FORMAT_Y8_400_UNORM, attribs, &i);
@ -1048,6 +1051,8 @@ rt_format_to_fourcc(uint32_t format)
return VA_FOURCC_NV12;
case VA_RT_FORMAT_YUV420_10:
return VA_FOURCC_P010;
case VA_RT_FORMAT_YUV420_12:
return VA_FOURCC_P012;
case VA_RT_FORMAT_YUV422:
return VA_FOURCC_YUY2;
case VA_RT_FORMAT_YUV444:
@ -1572,6 +1577,8 @@ static uint32_t pipe_format_to_drm_format(enum pipe_format format)
return DRM_FORMAT_NV12;
case PIPE_FORMAT_P010:
return DRM_FORMAT_P010;
case PIPE_FORMAT_P012:
return DRM_FORMAT_P012;
case PIPE_FORMAT_YUYV:
case PIPE_FORMAT_R8G8_R8B8_UNORM:
return DRM_FORMAT_YUYV;

View file

@ -60,7 +60,7 @@
#define VL_VA_DRIVER(ctx) ((vlVaDriver *)ctx->pDriverData)
#define VL_VA_PSCREEN(ctx) (VL_VA_DRIVER(ctx)->vscreen->pscreen)
#define VL_VA_MAX_IMAGE_FORMATS 21
#define VL_VA_MAX_IMAGE_FORMATS 22
#define VL_VA_ENC_GOP_COEFF 16
#define UINT_TO_PTR(x) ((void*)(uintptr_t)(x))
@ -126,6 +126,8 @@ VaFourccToPipeFormat(unsigned format)
return PIPE_FORMAT_NV12;
case VA_FOURCC('P','0','1','0'):
return PIPE_FORMAT_P010;
case VA_FOURCC('P','0','1','2'):
return PIPE_FORMAT_P012;
case VA_FOURCC('P','0','1','6'):
return PIPE_FORMAT_P016;
case VA_FOURCC('I','4','2','0'):
@ -177,6 +179,8 @@ PipeFormatToVaFourcc(enum pipe_format p_format)
return VA_FOURCC('N','V','1','2');
case PIPE_FORMAT_P010:
return VA_FOURCC('P','0','1','0');
case PIPE_FORMAT_P012:
return VA_FOURCC('P','0','1','2');
case PIPE_FORMAT_P016:
return VA_FOURCC('P','0','1','6');
case PIPE_FORMAT_IYUV: