From: Keith W. <kei...@go...> - 2010-03-14 11:27:25
|
On Sun, Mar 14, 2010 at 10:28 AM, Chia-I Wu <ol...@gm...> wrote: > On Sun, Mar 14, 2010 at 4:53 PM, Keith Whitwell > <kei...@go...> wrote: >> This looks like it introduces an extra full-window copying operation >> at every swapbuffers... is that correct? >> If so, I think we should try to figure out an alternative approach >> without the copying... would actually flipping between two textures >> (thus preserving the old back/new front) contents be workable? > Buffers swapping is handled in xmesa_swap_st_framebuffer. It is a zero-copy > operation. > > This commit is to fix a bug when this code path is hit > > /* draw something and ... */ > glXSwapBuffers(); > glReadBuffer(GL_FRONT); > glReadPixels(); > > In the above, glReadBuffer will cause BUFFER_FRONT_LEFT renderbuffer to be > added on demand as can be seen in st_ReadBuffer. The validation list would > become { ST_ATTACHMENT_FRONT_LEFT, ST_ATTACHMENT_BACK_LEFT }. When > glReadPixels is called, st/mesa will validate with the list and read from the > front buffer. > > On the st/glx side, this use pattern is catched. When the front buffer is > allocated, the contents of the back buffer will be copied to the front buffer. > This happens only once. When the same code is run again, glXSwapBuffers will > swap the buffers. > > The copying is required because xmesa_swap_st_framebuffer does not always swap > the buffers. It is so that only the back buffer is allocated when the > application never draws/reads the front buffer. > > -- > ol...@Lu... > OK, sorry for being slow & thanks for explaining... Keith |