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 <mic...@daenzer.net
<mailto:mic...@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 <nayan26deshm...@gmail.com 
<mailto:nayan26deshm...@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.



_______________________________________________
mesa-dev mailing list
mesa-dev@lists.freedesktop.org
https://lists.freedesktop.org/mailman/listinfo/mesa-dev

Reply via email to