[Mesa-dev] [PATCH] vl/dri3: handle the case of different GPU

Christian König deathsimple at vodafone.de
Thu Sep 8 08:05:46 UTC 2016


Am 08.09.2016 um 08:23 schrieb Michel Dänzer:
> On 08/09/16 01:13 PM, Nayan Deshmukh wrote:
>> On Thu, Sep 8, 2016 at 9:03 AM, Michel Dänzer <michel at daenzer.net
>> <mailto:michel at daenzer.net>> wrote:
>>      On 08/09/16 02:48 AM, Nayan Deshmukh wrote:
>>      > use a linear buffer in case of back buffer
>>      >
>>      > Signed-off-by: Nayan Deshmukh <nayan26deshmukh at gmail.com <mailto:nayan26deshmukh at gmail.com>>
>>
>>      [...]
>>
>>      > @@ -226,8 +227,13 @@ dri3_alloc_back_buffer(struct vl_dri3_screen *scrn)
>>      >        goto close_fd;
>>      >
>>      >     memset(&templ, 0, sizeof(templ));
>>      > +   if (scrn->is_different_gpu)
>>      > +   templ.bind = PIPE_BIND_RENDER_TARGET | PIPE_BIND_SAMPLER_VIEW |
>>      > +                PIPE_BIND_SCANOUT | PIPE_BIND_SHARED | PIPE_BIND_LINEAR;
>>      > +   else
>>      >     templ.bind = PIPE_BIND_RENDER_TARGET | PIPE_BIND_SAMPLER_VIEW |
>>      >                  PIPE_BIND_SCANOUT | PIPE_BIND_SHARED;
>>
>>      The indentation is wrong. Also, it would be better to make it something
>>      like this:
>>
>>         templ.bind = PIPE_BIND_RENDER_TARGET | PIPE_BIND_SAMPLER_VIEW |
>>                      PIPE_BIND_SCANOUT | PIPE_BIND_SHARED;
>>         if (scrn->is_different_gpu)
>>            templ.bind |= PIPE_BIND_LINEAR;
>>
>>
>>      However, as we discussed before, for various reasons it would probably
>>      be better to create separate linear buffers instead of making all
>>      buffers linear.
>>
>> So should I maintain a single linear buffer and copy the back buffer to
>> it before sending it via the present extension?
> It's better to create one linear buffer corresponding to each non-linear
> buffer with contents to be presented. Otherwise the rendering GPU may
> overwrite the linear buffer contents while the presentation GPU is still
> reading from it, resulting in tearing-like artifacts.

That approach isn't necessary. VDPAU has functions to query if an output 
surface is still displayed or not.

If the application starts to render into a buffer while it is still 
being displayed tearing-like artifacts are the expected result.

Additional to that I've made the VDPAU output surfaces linear a while 
ago anyway, because it showed that tiling actually wasn't beneficial in 
this use case (a single quad rendered over the whole texture).

Regards,
Christian.

>
>
>> For this I need to have a linear buffer field in vl_dri3_buffer, right?
> I guess so.
>
>



More information about the mesa-dev mailing list