<div dir="ltr"><div><div><div><div><div>Hi Mark,<br><br></div>Yes I actually saw that too in the intel driver though I think it does not add VA_RT_FORMAT_RGB32 ? Or I missed something ?<br></div>Maybe this is a bug. In any case yes as said before " the intel va driver always return the full list for vpp." from vaQuerySurfaceAttributes<br></div><div>no matter the format selected when creating the config.<br></div><div><br></div>So combining all it should probably be something like this:<br><br>diff --git a/src/gallium/state_trackers/va/config.c b/src/gallium/state_trackers/va/config.c<br>index 2f96eb6..11afc81 100644<br>--- a/src/gallium/state_trackers/va/config.c<br>+++ b/src/gallium/state_trackers/va/config.c<br>@@ -185,6 +185,8 @@ vlVaCreateConfig(VADriverContextP ctx, VAProfile profile, VAEntrypoint entrypoin<br>    if (profile == VAProfileNone && entrypoint == VAEntrypointVideoProc) {<br>       config->entrypoint = VAEntrypointVideoProc;<br>       config->profile = PIPE_VIDEO_PROFILE_UNKNOWN;<br>+      config->rt_format = VA_RT_FORMAT_YUV420 | VA_RT_FORMAT_RGB32;<br>+<br>       for (int i = 0; i < num_attribs; i++) {<br>          if (attrib_list[i].type == VAConfigAttribRTFormat) {<br>             if (attrib_list[i].value & (VA_RT_FORMAT_YUV420 | VA_RT_FORMAT_RGB32)) {<br>diff --git a/src/gallium/state_trackers/va/surface.c b/src/gallium/state_trackers/va/surface.c<br>index 5e92980..f8513d9 100644<br>--- a/src/gallium/state_trackers/va/surface.c<br>+++ b/src/gallium/state_trackers/va/surface.c<br>@@ -419,7 +419,7 @@ vlVaQuerySurfaceAttributes(VADriverContextP ctx, VAConfigID config_id,<br>    /* vlVaCreateConfig returns PIPE_VIDEO_PROFILE_UNKNOWN<br>     * only for VAEntrypointVideoProc. */<br>    if (config->profile == PIPE_VIDEO_PROFILE_UNKNOWN) {<br>-      if (config->rt_format == VA_RT_FORMAT_RGB32) {<br>+      if (config->rt_format & VA_RT_FORMAT_RGB32) {<br>          for (j = 0; j < ARRAY_SIZE(vpp_surface_formats); ++j) {<br>             attribs[i].type = VASurfaceAttribPixelFormat;<br>             attribs[i].value.type = VAGenericValueTypeInteger;<br>@@ -427,7 +427,8 @@ vlVaQuerySurfaceAttributes(VADriverContextP ctx, VAConfigID config_id,<br>             attribs[i].value.value.i = PipeFormatToVaFourcc(vpp_surface_formats[j]);<br>             i++;<br>          }<br>-      } else if (config->rt_format == VA_RT_FORMAT_YUV420) {<br>+      }<br>+      if (config->rt_format & VA_RT_FORMAT_YUV420) {<br>          attribs[i].type = VASurfaceAttribPixelFormat;<br>          attribs[i].value.type = VAGenericValueTypeInteger;<br>          attribs[i].flags = VA_SURFACE_ATTRIB_GETTABLE | VA_SURFACE_ATTRIB_SETTABLE;<br><br></div><div>Will it be ok for your case ?<br></div><div><br></div>Cheers<br></div>Julien<br><div><div><br><br><div><div><br><br><br></div></div></div></div></div><div class="gmail_extra"><br><div class="gmail_quote">On 17 October 2016 at 15:54, Mark Thompson <span dir="ltr"><<a href="mailto:sw@jkqxz.net" target="_blank">sw@jkqxz.net</a>></span> wrote:<br><blockquote class="gmail_quote" style="margin:0 0 0 .8ex;border-left:1px #ccc solid;padding-left:1ex"><div class="HOEnZb"><div class="h5">On 17/10/16 15:42, Mark Thompson wrote:<br>
> The default will only be used if the VAConfigRTFormat attribute is not<br>
> provided by the user.<br>
> ---<br>
> On 17/10/16 15:21, Julien Isorce wrote:<br>
>> Hi Mark,<br>
>><br>
>> Thx for the patch. I can see it has already landed.<br>
>><br>
>> I just tried it with gstreamer-vaapi and it causes problem since they create the<br>
>> config like this for VPP:<br>
>><br>
>> va_status = vaCreateConfig (filter->va_display, VAProfileNone,<br>
>>       VAEntrypointVideoProc, NULL, 0, &filter->va_config);<br>
>><br>
>> As you can see num attrivs is 0 so it makes vaQuerySurfaceAttributes to return<br>
>> no supported format<br>
>> because config->rt_format is 0.<br>
>><br>
>> So I plan to make a patch that looks like this:<br>
>><br>
>><br>
>> --- a/src/gallium/state_trackers/<wbr>va/surface.c<br>
>> +++ b/src/gallium/state_trackers/<wbr>va/surface.c<br>
>> @@ -419,7 +419,7 @@ vlVaQuerySurfaceAttributes(<wbr>VADriverContextP ctx, VAConfigID<br>
>> config_id,<br>
>>     /* vlVaCreateConfig returns PIPE_VIDEO_PROFILE_UNKNOWN<br>
>>      * only for VAEntrypointVideoProc. */<br>
>>     if (config->profile == PIPE_VIDEO_PROFILE_UNKNOWN) {<br>
>> -      if (config->rt_format == VA_RT_FORMAT_RGB32) {<br>
>> +      if (!config->rt_format || config->rt_format == VA_RT_FORMAT_RGB32) {<br>
>>           for (j = 0; j < ARRAY_SIZE(vpp_surface_<wbr>formats); ++j) {<br>
>>              attribs[i].type = VASurfaceAttribPixelFormat;<br>
>>              attribs[i].value.type = VAGenericValueTypeInteger;<br>
>> @@ -427,7 +427,8 @@ vlVaQuerySurfaceAttributes(<wbr>VADriverContextP ctx, VAConfigID<br>
>> config_id,<br>
>>              attribs[i].value.value.i =<br>
>> PipeFormatToVaFourcc(vpp_<wbr>surface_formats[j]);<br>
>>              i++;<br>
>>           }<br>
>> -      } else if (config->rt_format == VA_RT_FORMAT_YUV420) {<br>
>> +      }<br>
>> +      if (!config->rt_format || config->rt_format == VA_RT_FORMAT_YUV420) {<br>
>>           attribs[i].type = VASurfaceAttribPixelFormat;<br>
>>           attribs[i].value.type = VAGenericValueTypeInteger;<br>
>>           attribs[i].flags = VA_SURFACE_ATTRIB_GETTABLE |<br>
>> VA_SURFACE_ATTRIB_SETTABLE;<br>
>><br>
>><br>
>> Will it be ok for whatever test application you are using ?<br>
>><br>
>> Not that the intel va driver always return the full list for vpp.<br>
>><br>
>> Cheers<br>
>> Julien<br>
><br>
> Hi Julien,<br>
><br>
> On vaCreateConfig(), va.h says:<br>
> /**<br>
>  * Create a configuration for the decode pipeline<br>
>  * it passes in the attribute list that specifies the attributes it cares<br>
>  * about, with the rest taking default values.<br>
>  */<br>
><br>
> I think that means that it should be fixed there instead?  That is, if we don't<br>
> pass the render target format attribute, just assume a default value which I<br>
> suppose should be VA_RT_FORMAT_YUV420.<br>
><br>
> So, something like the enclosing patch?  (Not tested.)<br>
<br>
</div></div>Hmm.  The i965 driver uses all of the possible values (depending on the<br>
profile/entrypoint) ored together here - thats probably a more compatible choice<br>
than YUV420 only.<br>
<br>
Thanks,<br>
<br>
- Mark<br>
<br>
<br>
That is, add:<br>
<span class=""><br>
>  src/gallium/state_trackers/va/<wbr>config.c | 3 +++<br>
>  1 file changed, 3 insertions(+)<br>
><br>
> diff --git a/src/gallium/state_trackers/<wbr>va/config.c<br>
> b/src/gallium/state_trackers/<wbr>va/config.c<br>
> index 2f96eb6..f2a89b7 100644<br>
> --- a/src/gallium/state_trackers/<wbr>va/config.c<br>
> +++ b/src/gallium/state_trackers/<wbr>va/config.c<br>
> @@ -182,6 +182,9 @@ vlVaCreateConfig(<wbr>VADriverContextP ctx, VAProfile profile,<br>
> VAEntrypoint entrypoin<br>
>     if (!config)<br>
>        return VA_STATUS_ERROR_ALLOCATION_<wbr>FAILED;<br>
><br>
> +   // Default value, overwritten by the VAConfigRTformat attribute if present.<br>
> +   config->rt_format = VA_RT_FORMAT_YUV420;<br>
> +<br>
>     if (profile == VAProfileNone && entrypoint == VAEntrypointVideoProc) {<br>
>        config->entrypoint = VAEntrypointVideoProc;<br>
>        config->profile = PIPE_VIDEO_PROFILE_UNKNOWN;<br>
<br>
</span>config->rt_format |= VA_RT_FORMAT_RGB32;<br>
<br>
</blockquote></div><br></div>