mirror of
https://gitlab.freedesktop.org/mesa/mesa.git
synced 2025-12-24 06:40:11 +01:00
frontends/va: Don't filter supported formats according to config RT format
This matches Intel driver. Chromium always sets RT format to YUV420 which would cause us to not report other formats as supported. Only check that the RT format is actually supported when creating config, but don't limit supported surface formats. Reviewed-by: Ruijing Dong <ruijing.dong@amd.com> Part-of: <https://gitlab.freedesktop.org/mesa/mesa/-/merge_requests/34001>
This commit is contained in:
parent
47a9312a5d
commit
43c99d3928
3 changed files with 35 additions and 51 deletions
|
|
@ -640,9 +640,7 @@ vlVaCreateConfig(VADriverContextP ctx, VAProfile profile, VAEntrypoint entrypoin
|
|||
config->entrypoint);
|
||||
for (int i = 0; i < num_attribs; i++) {
|
||||
if (attrib_list[i].type == VAConfigAttribRTFormat) {
|
||||
if (attrib_list[i].value & supported_rt_formats) {
|
||||
config->rt_format = attrib_list[i].value;
|
||||
} else {
|
||||
if (!(attrib_list[i].value & supported_rt_formats)) {
|
||||
FREE(config);
|
||||
return VA_STATUS_ERROR_UNSUPPORTED_RT_FORMAT;
|
||||
}
|
||||
|
|
@ -653,10 +651,6 @@ vlVaCreateConfig(VADriverContextP ctx, VAProfile profile, VAEntrypoint entrypoin
|
|||
}
|
||||
}
|
||||
|
||||
/* Default value if not specified in the input attributes. */
|
||||
if (!config->rt_format)
|
||||
config->rt_format = supported_rt_formats;
|
||||
|
||||
mtx_lock(&drv->mutex);
|
||||
*config_id = handle_table_add(drv->htab, config);
|
||||
mtx_unlock(&drv->mutex);
|
||||
|
|
@ -733,9 +727,7 @@ vlVaCreateConfig(VADriverContextP ctx, VAProfile profile, VAEntrypoint entrypoin
|
|||
}
|
||||
}
|
||||
if (attrib_list[i].type == VAConfigAttribRTFormat) {
|
||||
if (attrib_list[i].value & supported_rt_formats) {
|
||||
config->rt_format = attrib_list[i].value;
|
||||
} else {
|
||||
if (!(attrib_list[i].value & supported_rt_formats)) {
|
||||
FREE(config);
|
||||
return VA_STATUS_ERROR_UNSUPPORTED_RT_FORMAT;
|
||||
}
|
||||
|
|
@ -756,10 +748,6 @@ vlVaCreateConfig(VADriverContextP ctx, VAProfile profile, VAEntrypoint entrypoin
|
|||
}
|
||||
}
|
||||
|
||||
/* Default value if not specified in the input attributes. */
|
||||
if (!config->rt_format)
|
||||
config->rt_format = supported_rt_formats;
|
||||
|
||||
mtx_lock(&drv->mutex);
|
||||
*config_id = handle_table_add(drv->htab, config);
|
||||
mtx_unlock(&drv->mutex);
|
||||
|
|
@ -836,7 +824,9 @@ vlVaQueryConfigAttributes(VADriverContextP ctx, VAConfigID config_id, VAProfile
|
|||
|
||||
*num_attribs = 1;
|
||||
attrib_list[0].type = VAConfigAttribRTFormat;
|
||||
attrib_list[0].value = config->rt_format;
|
||||
attrib_list[0].value = get_screen_supported_va_rt_formats(drv->pipe->screen,
|
||||
config->profile,
|
||||
config->entrypoint);
|
||||
|
||||
return VA_STATUS_SUCCESS;
|
||||
}
|
||||
|
|
|
|||
|
|
@ -540,49 +540,44 @@ vlVaQuerySurfaceAttributes(VADriverContextP ctx, VAConfigID config_id,
|
|||
|
||||
i = 0;
|
||||
|
||||
if (config->rt_format & VA_RT_FORMAT_YUV420) {
|
||||
vlVaAddSurfaceFormat(pscreen, config, PIPE_FORMAT_NV12, attribs, &i);
|
||||
vlVaAddSurfaceFormat(pscreen, config, PIPE_FORMAT_YV12, attribs, &i);
|
||||
vlVaAddSurfaceFormat(pscreen, config, PIPE_FORMAT_IYUV, attribs, &i);
|
||||
}
|
||||
/* VA_RT_FORMAT_YUV420 */
|
||||
vlVaAddSurfaceFormat(pscreen, config, PIPE_FORMAT_NV12, attribs, &i);
|
||||
vlVaAddSurfaceFormat(pscreen, config, PIPE_FORMAT_YV12, attribs, &i);
|
||||
vlVaAddSurfaceFormat(pscreen, config, PIPE_FORMAT_IYUV, attribs, &i);
|
||||
|
||||
if (config->rt_format & VA_RT_FORMAT_YUV420_10) {
|
||||
vlVaAddSurfaceFormat(pscreen, config, PIPE_FORMAT_P010, attribs, &i);
|
||||
vlVaAddSurfaceFormat(pscreen, config, PIPE_FORMAT_P016, attribs, &i);
|
||||
}
|
||||
/* VA_RT_FORMAT_YUV420_10 */
|
||||
vlVaAddSurfaceFormat(pscreen, config, PIPE_FORMAT_P010, attribs, &i);
|
||||
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);
|
||||
/* 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);
|
||||
/* VA_RT_FORMAT_YUV400 */
|
||||
vlVaAddSurfaceFormat(pscreen, config, PIPE_FORMAT_Y8_400_UNORM, attribs, &i);
|
||||
|
||||
if (config->rt_format & VA_RT_FORMAT_YUV422) {
|
||||
vlVaAddSurfaceFormat(pscreen, config, PIPE_FORMAT_UYVY, attribs, &i);
|
||||
vlVaAddSurfaceFormat(pscreen, config, PIPE_FORMAT_YUYV, attribs, &i);
|
||||
vlVaAddSurfaceFormat(pscreen, config, PIPE_FORMAT_Y8_U8_V8_440_UNORM, attribs, &i);
|
||||
}
|
||||
/* VA_RT_FORMAT_YUV422 */
|
||||
vlVaAddSurfaceFormat(pscreen, config, PIPE_FORMAT_UYVY, attribs, &i);
|
||||
vlVaAddSurfaceFormat(pscreen, config, PIPE_FORMAT_YUYV, attribs, &i);
|
||||
vlVaAddSurfaceFormat(pscreen, config, PIPE_FORMAT_Y8_U8_V8_440_UNORM, attribs, &i);
|
||||
|
||||
if (config->rt_format & VA_RT_FORMAT_YUV444)
|
||||
vlVaAddSurfaceFormat(pscreen, config, PIPE_FORMAT_Y8_U8_V8_444_UNORM, attribs, &i);
|
||||
/* VA_RT_FORMAT_YUV444 */
|
||||
vlVaAddSurfaceFormat(pscreen, config, PIPE_FORMAT_Y8_U8_V8_444_UNORM, attribs, &i);
|
||||
|
||||
if (config->rt_format & VA_RT_FORMAT_RGBP)
|
||||
vlVaAddSurfaceFormat(pscreen, config, PIPE_FORMAT_R8_G8_B8_UNORM, attribs, &i);
|
||||
/* VA_RT_FORMAT_RGBP */
|
||||
vlVaAddSurfaceFormat(pscreen, config, PIPE_FORMAT_R8_G8_B8_UNORM, attribs, &i);
|
||||
|
||||
if (config->rt_format & VA_RT_FORMAT_RGB32) {
|
||||
vlVaAddSurfaceFormat(pscreen, config, PIPE_FORMAT_R8G8B8A8_UNORM, attribs, &i);
|
||||
vlVaAddSurfaceFormat(pscreen, config, PIPE_FORMAT_B8G8R8A8_UNORM, attribs, &i);
|
||||
vlVaAddSurfaceFormat(pscreen, config, PIPE_FORMAT_R8G8B8X8_UNORM, attribs, &i);
|
||||
vlVaAddSurfaceFormat(pscreen, config, PIPE_FORMAT_B8G8R8X8_UNORM, attribs, &i);
|
||||
vlVaAddSurfaceFormat(pscreen, config, PIPE_FORMAT_A8R8G8B8_UNORM, attribs, &i);
|
||||
}
|
||||
/* VA_RT_FORMAT_RGB32 */
|
||||
vlVaAddSurfaceFormat(pscreen, config, PIPE_FORMAT_R8G8B8A8_UNORM, attribs, &i);
|
||||
vlVaAddSurfaceFormat(pscreen, config, PIPE_FORMAT_B8G8R8A8_UNORM, attribs, &i);
|
||||
vlVaAddSurfaceFormat(pscreen, config, PIPE_FORMAT_R8G8B8X8_UNORM, attribs, &i);
|
||||
vlVaAddSurfaceFormat(pscreen, config, PIPE_FORMAT_B8G8R8X8_UNORM, attribs, &i);
|
||||
vlVaAddSurfaceFormat(pscreen, config, PIPE_FORMAT_A8R8G8B8_UNORM, attribs, &i);
|
||||
|
||||
if (config->rt_format & VA_RT_FORMAT_RGB32_10) {
|
||||
vlVaAddSurfaceFormat(pscreen, config, PIPE_FORMAT_R10G10B10A2_UNORM, attribs, &i);
|
||||
vlVaAddSurfaceFormat(pscreen, config, PIPE_FORMAT_B10G10R10A2_UNORM, attribs, &i);
|
||||
vlVaAddSurfaceFormat(pscreen, config, PIPE_FORMAT_R10G10B10X2_UNORM, attribs, &i);
|
||||
vlVaAddSurfaceFormat(pscreen, config, PIPE_FORMAT_B10G10R10X2_UNORM, attribs, &i);
|
||||
}
|
||||
/* VA_RT_FORMAT_RGB32_10 */
|
||||
vlVaAddSurfaceFormat(pscreen, config, PIPE_FORMAT_R10G10B10A2_UNORM, attribs, &i);
|
||||
vlVaAddSurfaceFormat(pscreen, config, PIPE_FORMAT_B10G10R10A2_UNORM, attribs, &i);
|
||||
vlVaAddSurfaceFormat(pscreen, config, PIPE_FORMAT_R10G10B10X2_UNORM, attribs, &i);
|
||||
vlVaAddSurfaceFormat(pscreen, config, PIPE_FORMAT_B10G10R10X2_UNORM, attribs, &i);
|
||||
|
||||
attribs[i].type = VASurfaceAttribMemoryType;
|
||||
attribs[i].value.type = VAGenericValueTypeInteger;
|
||||
|
|
|
|||
|
|
@ -447,7 +447,6 @@ typedef struct {
|
|||
enum pipe_video_profile profile;
|
||||
enum pipe_video_entrypoint entrypoint;
|
||||
enum pipe_h2645_enc_rate_control_method rc;
|
||||
unsigned int rt_format;
|
||||
} vlVaConfig;
|
||||
|
||||
typedef struct vlVaSurface {
|
||||
|
|
|
|||
Loading…
Add table
Reference in a new issue