Hi Mark, Thx for the patch. I can see it has already landed.
I just tried it with gstreamer-vaapi and it causes problem since they create the config like this for VPP: va_status = vaCreateConfig (filter->va_display, VAProfileNone, VAEntrypointVideoProc, NULL, 0, &filter->va_config); As you can see num attrivs is 0 so it makes vaQuerySurfaceAttributes to return no supported format because config->rt_format is 0. So I plan to make a patch that looks like this: --- a/src/gallium/state_trackers/va/surface.c +++ b/src/gallium/state_trackers/va/surface.c @@ -419,7 +419,7 @@ vlVaQuerySurfaceAttributes(VADriverContextP ctx, VAConfigID config_id, /* vlVaCreateConfig returns PIPE_VIDEO_PROFILE_UNKNOWN * only for VAEntrypointVideoProc. */ if (config->profile == PIPE_VIDEO_PROFILE_UNKNOWN) { - if (config->rt_format == VA_RT_FORMAT_RGB32) { + if (!config->rt_format || config->rt_format == VA_RT_FORMAT_RGB32) { for (j = 0; j < ARRAY_SIZE(vpp_surface_formats); ++j) { attribs[i].type = VASurfaceAttribPixelFormat; attribs[i].value.type = VAGenericValueTypeInteger; @@ -427,7 +427,8 @@ vlVaQuerySurfaceAttributes(VADriverContextP ctx, VAConfigID config_id, attribs[i].value.value.i = PipeFormatToVaFourcc(vpp_surface_formats[j]); i++; } - } else if (config->rt_format == VA_RT_FORMAT_YUV420) { + } + if (!config->rt_format || config->rt_format == VA_RT_FORMAT_YUV420) { attribs[i].type = VASurfaceAttribPixelFormat; attribs[i].value.type = VAGenericValueTypeInteger; attribs[i].flags = VA_SURFACE_ATTRIB_GETTABLE | VA_SURFACE_ATTRIB_SETTABLE; Will it be ok for whatever test application you are using ? Not that the intel va driver always return the full list for vpp. Cheers Julien On 12 October 2016 at 23:53, Mark Thompson <s...@jkqxz.net> wrote: > This makes the supported format actually match the configuration, and > allows the user to observe that NV12 is supported for video processing > where previously they couldn't (though it did always work if they > blindly tried to use it anyway). > --- > src/gallium/state_trackers/va/surface.c | 12 ++++++++++-- > 1 file changed, 10 insertions(+), 2 deletions(-) > > diff --git a/src/gallium/state_trackers/va/surface.c > b/src/gallium/state_trackers/va/surface.c > index 173e7d9..5e92980 100644 > --- a/src/gallium/state_trackers/va/surface.c > +++ b/src/gallium/state_trackers/va/surface.c > @@ -419,11 +419,19 @@ vlVaQuerySurfaceAttributes(VADriverContextP ctx, > VAConfigID config_id, > /* vlVaCreateConfig returns PIPE_VIDEO_PROFILE_UNKNOWN > * only for VAEntrypointVideoProc. */ > if (config->profile == PIPE_VIDEO_PROFILE_UNKNOWN) { > - for (j = 0; j < ARRAY_SIZE(vpp_surface_formats); ++j) { > + if (config->rt_format == VA_RT_FORMAT_RGB32) { > + for (j = 0; j < ARRAY_SIZE(vpp_surface_formats); ++j) { > + 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 = PipeFormatToVaFourcc(vpp_ > surface_formats[j]); > + i++; > + } > + } else if (config->rt_format == VA_RT_FORMAT_YUV420) { > 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 = PipeFormatToVaFourcc(vpp_ > surface_formats[j]); > + attribs[i].value.value.i = VA_FOURCC_NV12; > i++; > } > } else { > -- > 2.9.3 > > _______________________________________________ > mesa-dev mailing list > mesa-dev@lists.freedesktop.org > https://lists.freedesktop.org/mailman/listinfo/mesa-dev >
_______________________________________________ mesa-dev mailing list mesa-dev@lists.freedesktop.org https://lists.freedesktop.org/mailman/listinfo/mesa-dev