On Thu, 2010-03-11 at 03:25 -0800, Keith Whitwell wrote: > On Wed, 2010-03-10 at 20:15 -0800, Chia-I Wu wrote: > > Hi all, > > > > This patch series adds st_api interface to st/mesa and st/vega, and > > switch st/egl and st/glx from st_public interface to the new interface. > > > > Feature-wise, st_api provides a more robust multiple client APIs > > (OpenGL/OpenGL ES/OpenVG) to EGL and enable the implementation of > > various EGLImage extensions. As st_api interface can coexist with > > st_public interface, co state trackers should work as before unless they > > are switched to use st_api. > > > > The original plan to merge the work to master after the interface is > > implemented by st/mesa and st/vega, and st/egl is converted to use it. > > Further development and conversions of st/glx and st/dri will happen in > > master. While this is still the plan, the recent merge of > > gallium-sw-api-2 motivates me to submit this WIP patch series for public > > review. I will cover only pipe_screen::update_buffer, > > pipe_screen::flush_frontbuffer, and st_framebuffer_iface::flush_front > > here as the other parts were discussed a while ago. But any feedback to > > the design is appreciated. > > > > To summarize, there is *no* change to pipe_screen::update_buffer and > > pipe_screen::flush_frontbuffer. This guarantees the non-Khronos state > > trackers are not affected, and the st_public path of st/mesa and st/vega > > still work. But when the st_api path is taken, > > pipe_screen::update_buffer is no longer got called. And the caller of > > pipe_screen::flush_frontbuffer becomes co state trackers instead of > > state trackers. > > > > In st_api, the co state trackers are responsible for representing > > windows/pixmaps/pbuffer as a set of pipe_textures (color buffers, > > depth/stencil, ...) to the state trackers. In DRI2, this is done > > through DRI2GetBuffers and winsys_handle. In software rasterizer (or > > DRI1?), this is done by having co state trackers allocate a set of > > private pipe_textures. In both cases, the pipe_textures are created as > > needed. That is, if the state trackers draw only to the back buffer, > > the front buffer will not be creatd. > > > > At MakeCurrent, the state trackers (st/mesa and st/vega) are given an > > st_framebuffer_iface. The state trackers retrieve the pipe_textures of > > a window/pixmap/pbuffer mentioned above through this interface. Other > > than retrieving the pipe_textures, to support front buffer rendering, > > the state trackers should call st_framebuffer_iface::flush_front when it > > has something to display. > > > > The implementation of st_framebuffer_iface::flush_front again depends on > > the window systems. In X11 with DRI2, it is no-op if the front buffer > > passed to the state trackers is real; Otherwise, it calls > > DRI2CopyRegion to copy the contents from the fake front buffer to the > > real front one. > > > > In X11 with software rasterizer, the co state tracker is responsible to > > display its private pipe_texture to a X drawable. With the merge of > > gallium-sw-api-2, this is made really easy by calling > > pipe_screen::flush_frontbuffer. > > > > The last patch of the series converts st/glx to use st_api. The diff is > > cleaner than the diff to st/egl. It is a quick conversion to help see > > the design of st_api in work. There should be bugs, but the simple > > demos I tested all work. The other patches are constrained to EGL and > > any regression outside EGL is considered a bug. > > > > If you read this long because of the mention of EGLImage in the subject, > > you get to have some fun with progs/es1/xegl/texture_from_pixmap as a > > thank-you gift :) > > > > Chia-I, > > This is all looking good to me. The code doesn't seem to introduce any > new layering issues or introduce dependencies on existing ones, which > helps with ongoing cleanups. > > I did some quick testing with the "linux-debug" target. Gears works, > with and without GALLIUM_WRAP=t. However, demos/singlebuffer seems to > get caught in infinite recursion and segfaults: > > Program received signal SIGSEGV, Segmentation fault. > 0x001ab7d5 in xmesa_st_framebuffer_flush_front (stfbi=0x80a7d08, > statt=ST_ATTACHMENT_FRONT_LEFT) at xm_st.c:185 > 185 { > (gdb) bt > #0 0x001ab7d5 in xmesa_st_framebuffer_flush_front (stfbi=0x80a7d08, > statt=ST_ATTACHMENT_FRONT_LEFT) at xm_st.c:185 > #1 0x001ab800 in xmesa_st_framebuffer_flush_front (stfbi=0x80a7d08, > statt=ST_ATTACHMENT_FRONT_LEFT) at xm_st.c:189 > #2 0x001ab800 in xmesa_st_framebuffer_flush_front (stfbi=0x80a7d08, > statt=ST_ATTACHMENT_FRONT_LEFT) at xm_st.c:189 > #3 0x001ab800 in xmesa_st_framebuffer_flush_front (stfbi=0x80a7d08, > statt=ST_ATTACHMENT_FRONT_LEFT) at xm_st.c:189 > #4 0x001ab800 in xmesa_st_framebuffer_flush_front (stfbi=0x80a7d08, > statt=ST_ATTACHMENT_FRONT_LEFT) at xm_st.c:189 > #5 0x001ab800 in xmesa_st_framebuffer_flush_front (stfbi=0x80a7d08, > statt=ST_ATTACHMENT_FRONT_LEFT) at xm_st.c:189 > #6 0x001ab800 in xmesa_st_framebuffer_flush_front (stfbi=0x80a7d08, > statt=ST_ATTACHMENT_FRONT_LEFT) at xm_st.c:189 > #7 0x001ab800 in xmesa_st_framebuffer_flush_front (stfbi=0x80a7d08, > statt=ST_ATTACHMENT_FRONT_LEFT) at xm_st.c:189 > #8 0x001ab800 in xmesa_st_framebuffer_flush_front (stfbi=0x80a7d08, > statt=ST_ATTACHMENT_FRONT_LEFT) at xm_st.c:189
Also, libgl-xlib / llvmpipe is getting some rendering errors with these patches - seems like culling is messed up maybe. This is with a scons build after adding the missing xm_st.c file. Does it make sense to push these patches to a public Mesa branch so some bugfixing can get done? Keith ------------------------------------------------------------------------------ Download Intel® Parallel Studio Eval Try the new software tools for yourself. Speed compiling, find bugs proactively, and fine-tune applications for parallel performance. See why Intel Parallel Studio got high marks during beta. http://p.sf.net/sfu/intel-sw-dev _______________________________________________ Mesa3d-dev mailing list Mesa3d-dev@lists.sourceforge.net https://lists.sourceforge.net/lists/listinfo/mesa3d-dev