[Mesa-dev] [PATCH] vl/dri3: handle the case of different GPU
Michel Dänzer
michel at daenzer.net
Thu Sep 8 06:23:52 UTC 2016
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.
> For this I need to have a linear buffer field in vl_dri3_buffer, right?
I guess so.
--
Earthling Michel Dänzer | http://www.amd.com
Libre software enthusiast | Mesa and X developer
More information about the mesa-dev
mailing list