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 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