[Mesa-dev] [PATCH 2/3] mesa: fix pbuffers because internally they are front buffers

Marek Olšák maraeo at gmail.com
Tue Apr 30 16:15:37 UTC 2019


On Tue, Apr 30, 2019 at 5:59 AM Mathias Fröhlich <Mathias.Froehlich at gmx.net>
wrote:

>
> Adam, Marek,
>
> On Monday, 29 April 2019 18:28:21 CEST Adam Jackson wrote:
> > On Fri, 2019-04-26 at 23:31 -0400, Marek Olšák wrote:
> >
> > I don't claim to know what this series is trying to fix, but:
> >
> > > +    * 2) Pbuffers are back buffers from the application point of view,
> > > +    *    but they are front buffers from the Mesa point of view,
> > > +    *    because they are always single buffered.
> > > +    */
> >
> > The EGL spec (back to 1.0!) says:
> >
> > "The resulting pbuffer will contain color buffers and ancillary buffers
> > as specified by config."
> >
> > This appears to be copied from GLX, which has something more elaborate:
> >
> > "The resulting pbuffer will contain color buffers and ancillary buffers
> > as specified by config. It is possible to create a pbuffer with back
> > buffers and to swap the front and back buffers by calling
> > glXSwapBuffers. Note that pbuffers use framebuffer resources so
> > applications should consider deallocating them when they are not in
> > use."
> >
> > So I'm not convinced that pbuffers are "always single-buffered". The
> > back buffer is definitely a color buffer, and at least under GLX it
> > seems like it should be possible to draw red to back, swap, draw blue
> > to back, glReadBuffer(GL_FRONT), and expect glReadPixels to return red.
>
> Hmm, probably Marek's escape could be 2.2.2 Rendering Models form the
> eglspec:
> [...]
> Pbuffer surfaces have a back buffer but no associated
> window, so the back buffer need not be copied.
> [...]
>
> Not sure myself what that means in its total consequence, but can't we
> read that as
> there is only undefined behavior associated with the pbuffer front buffer?
>
> Why, do I get to that?
> IIRC somewhere in EGL there is a note that there is basically no front
> buffer rendering
> in EGL. And the above tells that the implementation may behave as if there
> is no way
> to swap the back buffers content into the front buffer.
>
> Is there some path left using egl images or egl copy buffers?
> Or what else do I miss?
>

Well, EGL pbuffers have been broken in Mesa for a decade or so. We are
finally getting to the point of making them work. Mesa makes EGL pbuffers
always single-buffered just like EGL pixmaps. I like that because we don't
waste memory for a front buffer that we might not need.

We also don't support front buffer rendering with egl/x11, which makes the
rabbit hole a lot deeper.

Marek
-------------- next part --------------
An HTML attachment was scrubbed...
URL: <https://lists.freedesktop.org/archives/mesa-dev/attachments/20190430/5716120d/attachment.html>


More information about the mesa-dev mailing list