frontends/va: add support for RGBP rt_format
check and enable RGBP rt_format and support VaImage creation for the RGBP/ARGB. Signed-off-by: Sathishkumar S <sathishkumar.sundararaju@amd.com> Reviewed-by: Leo Liu <leo.liu@amd.com> Part-of: <https://gitlab.freedesktop.org/mesa/mesa/-/merge_requests/22388>
This commit is contained in:

committed by
Marge Bot

parent
23580b09a3
commit
bdb7f36aa8
@@ -165,6 +165,11 @@ static unsigned int get_screen_supported_va_rt_formats(struct pipe_screen *pscre
|
||||
profile,
|
||||
entrypoint))
|
||||
supported_rt_formats |= VA_RT_FORMAT_RGB32;
|
||||
if (pscreen->is_video_format_supported(pscreen, PIPE_FORMAT_R8_G8_B8_UNORM,
|
||||
profile,
|
||||
entrypoint))
|
||||
supported_rt_formats |= VA_RT_FORMAT_RGBP;
|
||||
|
||||
|
||||
return supported_rt_formats;
|
||||
}
|
||||
|
@@ -51,10 +51,13 @@ static const VAImageFormat formats[] =
|
||||
{VA_FOURCC('U','Y','V','Y')},
|
||||
{VA_FOURCC('Y','8','0','0')},
|
||||
{VA_FOURCC('4','4','4','P')},
|
||||
{VA_FOURCC('R','G','B','P')},
|
||||
{.fourcc = VA_FOURCC('B','G','R','A'), .byte_order = VA_LSB_FIRST, 32, 32,
|
||||
0x00ff0000, 0x0000ff00, 0x000000ff, 0xff000000},
|
||||
{.fourcc = VA_FOURCC('R','G','B','A'), .byte_order = VA_LSB_FIRST, 32, 32,
|
||||
0x000000ff, 0x0000ff00, 0x00ff0000, 0xff000000},
|
||||
{.fourcc = VA_FOURCC('A','R','G','B'), .byte_order = VA_LSB_FIRST, 32, 32,
|
||||
0x000000ff, 0x0000ff00, 0x00ff0000, 0xff000000},
|
||||
{.fourcc = VA_FOURCC('B','G','R','X'), .byte_order = VA_LSB_FIRST, 32, 24,
|
||||
0x00ff0000, 0x0000ff00, 0x000000ff, 0x00000000},
|
||||
{.fourcc = VA_FOURCC('R','G','B','X'), .byte_order = VA_LSB_FIRST, 32, 24,
|
||||
@@ -173,6 +176,7 @@ vlVaCreateImage(VADriverContextP ctx, VAImageFormat *format, int width, int heig
|
||||
|
||||
case VA_FOURCC('B','G','R','A'):
|
||||
case VA_FOURCC('R','G','B','A'):
|
||||
case VA_FOURCC('A','R','G','B'):
|
||||
case VA_FOURCC('B','G','R','X'):
|
||||
case VA_FOURCC('R','G','B','X'):
|
||||
img->num_planes = 1;
|
||||
@@ -189,6 +193,7 @@ vlVaCreateImage(VADriverContextP ctx, VAImageFormat *format, int width, int heig
|
||||
break;
|
||||
|
||||
case VA_FOURCC('4','4','4', 'P'):
|
||||
case VA_FOURCC('R','G','B', 'P'):
|
||||
img->num_planes = 3;
|
||||
img->offsets[0] = 0;
|
||||
img->offsets[1] = w * h;
|
||||
|
@@ -596,6 +596,13 @@ vlVaQuerySurfaceAttributes(VADriverContextP ctx, VAConfigID config_id,
|
||||
attribs[i].value.value.i = VA_FOURCC_444P;
|
||||
i++;
|
||||
}
|
||||
if (config->rt_format & VA_RT_FORMAT_RGBP) {
|
||||
attribs[i].type = VASurfaceAttribPixelFormat;
|
||||
attribs[i].value.type = VAGenericValueTypeInteger;
|
||||
attribs[i].flags = VA_SURFACE_ATTRIB_GETTABLE | VA_SURFACE_ATTRIB_SETTABLE;
|
||||
attribs[i].value.value.i = VA_FOURCC_RGBP;
|
||||
i++;
|
||||
}
|
||||
}
|
||||
|
||||
attribs[i].type = VASurfaceAttribMemoryType;
|
||||
@@ -1117,6 +1124,7 @@ vlVaCreateSurfaces2(VADriverContextP ctx, unsigned int format,
|
||||
VA_RT_FORMAT_YUV444 != format &&
|
||||
VA_RT_FORMAT_YUV400 != format &&
|
||||
VA_RT_FORMAT_YUV420_10BPP != format &&
|
||||
VA_RT_FORMAT_RGBP != format &&
|
||||
VA_RT_FORMAT_RGB32 != format) {
|
||||
return VA_STATUS_ERROR_UNSUPPORTED_RT_FORMAT;
|
||||
}
|
||||
|
@@ -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 14
|
||||
#define VL_VA_MAX_IMAGE_FORMATS 16
|
||||
#define VL_VA_ENC_GOP_COEFF 16
|
||||
|
||||
#define UINT_TO_PTR(x) ((void*)(uintptr_t)(x))
|
||||
@@ -123,12 +123,16 @@ VaFourccToPipeFormat(unsigned format)
|
||||
return PIPE_FORMAT_UYVY;
|
||||
case VA_FOURCC('B','G','R','A'):
|
||||
return PIPE_FORMAT_B8G8R8A8_UNORM;
|
||||
case VA_FOURCC('A','R','G','B'):
|
||||
return PIPE_FORMAT_A8R8G8B8_UNORM;
|
||||
case VA_FOURCC('R','G','B','A'):
|
||||
return PIPE_FORMAT_R8G8B8A8_UNORM;
|
||||
case VA_FOURCC('B','G','R','X'):
|
||||
return PIPE_FORMAT_B8G8R8X8_UNORM;
|
||||
case VA_FOURCC('R','G','B','X'):
|
||||
return PIPE_FORMAT_R8G8B8X8_UNORM;
|
||||
case VA_FOURCC('R','G','B','P'):
|
||||
return PIPE_FORMAT_R8_G8_B8_UNORM;
|
||||
case VA_FOURCC('Y','8','0','0'):
|
||||
return PIPE_FORMAT_Y8_400_UNORM;
|
||||
case VA_FOURCC('4','4','4','P'):
|
||||
@@ -161,10 +165,14 @@ PipeFormatToVaFourcc(enum pipe_format p_format)
|
||||
return VA_FOURCC('B','G','R','A');
|
||||
case PIPE_FORMAT_R8G8B8A8_UNORM:
|
||||
return VA_FOURCC('R','G','B','A');
|
||||
case PIPE_FORMAT_A8R8G8B8_UNORM:
|
||||
return VA_FOURCC('A','R','G','B');
|
||||
case PIPE_FORMAT_B8G8R8X8_UNORM:
|
||||
return VA_FOURCC('B','G','R','X');
|
||||
case PIPE_FORMAT_R8G8B8X8_UNORM:
|
||||
return VA_FOURCC('R','G','B','X');
|
||||
case PIPE_FORMAT_R8_G8_B8_UNORM:
|
||||
return VA_FOURCC('R','G','B','P');
|
||||
case PIPE_FORMAT_Y8_400_UNORM:
|
||||
return VA_FOURCC('Y','8','0','0');
|
||||
case PIPE_FORMAT_Y8_U8_V8_444_UNORM:
|
||||
|
Reference in New Issue
Block a user