Hello community, here is the log from the commit of package xgl checked in at Wed Apr 5 18:02:27 CEST 2006. -------- --- xgl/xgl.changes 2006-03-28 13:33:40.000000000 +0200 +++ xgl/xgl.changes 2006-04-05 18:01:13.000000000 +0200 @@ -1,0 +2,30 @@ +Wed Apr 5 18:01:07 CEST 2006 - ro@suse.de + +- do not build as root + +------------------------------------------------------------------- +Wed Apr 5 11:23:24 CEST 2006 - dreveman@suse.de + +- Remove compat71 and add packages instead. +- DPMS support. +- Fix acceleration and threshold control for pointer devices. + +------------------------------------------------------------------- +Mon Apr 3 16:05:58 CEST 2006 - dreveman@suse.de + +- Update to CVS version of Xgl (2006-04-03). +- Remove libglx -> libglxext patch (included with CVS version). +- Remove XKB patch (included with CVS version). +- Remove starvation patch (included with CVS version). +- Remove GLX patch (included with CVS version). +- Include compat71.tar.bz2 as headers not part of compat70 are + required by Xgl. +- New version glitz, with copy-sub-buffer support. +- New version Mesa, with copy-sub-buffer support. +- Fixed support for GL_ARB_vertex_program, GL_ARB_fragment_program + and GL_EXT_framebuffer_object. +- Workaround for dead-lock when using fglrx driver. +- Add xgl-xpstubs-link-hack.diff patch to avoid a small linking + issue. + +------------------------------------------------------------------- Old: ---- Mesa-CVS-20060309.tar.bz2 xgl-glxcontext.diff xgl-libglx-to-libglxext-1.diff xgl-schedyield.diff xgl-xkb-initialization.diff xorg-server-1.0.1.tar.bz2 New: ---- Mesa-CVS-20060321-csb.tar.bz2 compositeproto-0.3.tar.bz2 fixesproto-4.0.tar.bz2 glproto-1.4.6.tar.bz2 scrnsaverproto-1.1.0.tar.bz2 xgl-xpstubs-link-hack.diff xorg-server-1.1.99.1.tar.bz2 ++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++ Other differences: ------------------ ++++++ xgl.spec ++++++ --- /var/tmp/diff_new_pack.wVOcIr/_old 2006-04-05 18:01:21.000000000 +0200 +++ /var/tmp/diff_new_pack.wVOcIr/_new 2006-04-05 18:01:21.000000000 +0200 @@ -1,5 +1,5 @@ # -# spec file for package xgl (Version cvs_060313) +# spec file for package xgl (Version cvs_060405) # # Copyright (c) 2006 SUSE LINUX Products GmbH, Nuernberg, Germany. # This file and all modifications and additions to the pristine @@ -8,6 +8,7 @@ # Please submit bugfixes or comments via http://bugs.opensuse.org/ # +# norootforbuild Name: xgl BuildRequires: freeglut-devel freetype2-devel gcc-c++ gconf2-devel libdrm-devel libpng-devel xorg-x11-compat70-devel @@ -21,24 +22,25 @@ Obsoletes: Xglx xglx PreReq: %fillup_prereq Autoreqprov: on -Version: cvs_060313 -Release: 9 +Version: cvs_060405 +Release: 1 Summary: Xserver that uses OpenGL for its drawing operations. BuildRoot: %{_tmppath}/%{name}-%{version}-build ExclusiveArch: %ix86 x86_64 ppc ppc64 ia64 -Source: xorg-server-1.0.1.tar.bz2 +Source: xorg-server-1.1.99.1.tar.bz2 Source1: glitz-0.5.4.tar.gz Source2: README.SUSE Source3: sysconfig.displaymanager.template -Source4: Mesa-CVS-20060309.tar.bz2 +Source4: Mesa-CVS-20060321-csb.tar.bz2 Source5: xgl-cards-white-list +Source6: fixesproto-4.0.tar.bz2 +Source7: compositeproto-0.3.tar.bz2 +Source8: scrnsaverproto-1.1.0.tar.bz2 +Source9: glproto-1.4.6.tar.bz2 ### /bin/ls *.{diff,patch} 2>/dev/null | perl -ne 'print "Patch$n: ".$_; $n++;' Patch: Xserver-suse-sysconfig.diff -Patch1: xgl-glxcontext.diff -Patch2: xgl-schedyield.diff -Patch3: xgl-security-file-dir.diff -Patch4: xgl-xkb-initialization.diff -Patch5: xgl-libglx-to-libglxext-1.diff +Patch1: xgl-security-file-dir.diff +Patch2: xgl-xpstubs-link-hack.diff %description Xgl is an Xserver that uses OpenGL for its drawing operations. Some @@ -73,13 +75,10 @@ PREFIX=/usr/X11R6/lib/xgl rm -rf $RPM_BUILD_DIR/* rm -rf $PREFIX -%setup -q -n . -D -T -b 0 -b 1 -b 4 -patch -d xorg-* -p0 < $RPM_SOURCE_DIR/Xserver-suse-sysconfig.diff -patch -d xorg-* -p0 < $RPM_SOURCE_DIR/xgl-glxcontext.diff -patch -d xorg-* -p0 < $RPM_SOURCE_DIR/xgl-schedyield.diff -patch -d xorg-* -p0 < $RPM_SOURCE_DIR/xgl-xkb-initialization.diff -patch -d xorg-* -p0 < $RPM_SOURCE_DIR/xgl-security-file-dir.diff -patch -d xorg-* -p0 < $RPM_SOURCE_DIR/xgl-libglx-to-libglxext-1.diff +%setup -q -n . -D -T -b 0 -b 1 -b 4 -b 6 -b 7 -b 8 -b 9 +patch -d xorg-* -p0 < $RPM_SOURCE_DIR/Xserver-suse-sysconfig.diff || exit 1 +patch -d xorg-* -p0 < $RPM_SOURCE_DIR/xgl-security-file-dir.diff || exit 1 +patch -d xorg-* -p0 < $RPM_SOURCE_DIR/xgl-xpstubs-link-hack.diff || exit 1 %build PREFIX=/usr/X11R6/lib/xgl @@ -95,8 +94,15 @@ CFLAGS="-fPIC $RPM_OPT_FLAGS" ./configure --prefix=$PREFIX --libdir=$PREFIX/%_lib --disable-shared CFLAGS="-fPIC $RPM_OPT_FLAGS" make install popd +for pkg in fixesproto compositeproto scrnsaverproto glproto +do +pushd $pkg-* +./configure --prefix=$PREFIX --libdir=$PREFIX/%_lib +make install +popd +done pushd xorg-server-* -./configure --prefix=/usr/X11R6 --libdir=/usr/X11R6/%_lib --enable-xgl --disable-xorg --disable-xprint --enable-glx --enable-dri --with-mesa-source=$RPM_BUILD_DIR/Mesa --with-release-snap=1 --disable-dmx --disable-xvfb --disable-xnest --enable-xglx --with-default-font-path=/usr/X11R6/lib/X11/fonts/misc,/usr/X11R6/lib/X11/fonts/TTF,/usr/X11R6/lib/X11/fonts/Type1,/usr/X11R6/lib/X11/fonts/100dpi,/usr/X11R6/lib/X11/fonts/75dpi --sysconfdir=/etc/X11 --localstatedir=/var --with-rgb-path=/usr/X11R6/lib/X11/rgb --with-xkb-path=/etc/X11/xkb --with-xkb-output=/etc/X11/xkb/compiled +./configure --prefix=/usr/X11R6 --libdir=/usr/X11R6/%_lib --enable-xgl --disable-xorg --disable-xprint --enable-glx --enable-dri --with-mesa-source=$RPM_BUILD_DIR/Mesa --with-release-snap=1 --disable-dmx --disable-xvfb --disable-xnest --enable-xglx --with-default-font-path=/usr/X11R6/lib/X11/fonts/misc,/usr/X11R6/lib/X11/fonts/TTF,/usr/X11R6/lib/X11/fonts/Type1,/usr/X11R6/lib/X11/fonts/100dpi,/usr/X11R6/lib/X11/fonts/75dpi --sysconfdir=/etc/X11 --localstatedir=/var --with-rgb-path=/usr/X11R6/lib/X11/rgb --with-xkb-path=/etc/X11/xkb --with-xkb-output=/etc/X11/xkb/compiled --disable-aiglx make popd @@ -123,6 +129,8 @@ rm $RPM_BUILD_ROOT/usr/X11R6/share/aclocal/xorg-server.m4 rm $RPM_BUILD_ROOT/etc/X11/xserver/SecurityPolicy rm $RPM_BUILD_ROOT/etc/X11/xkb/compiled/README.compiled +rm $RPM_BUILD_ROOT/exa.h +rm $RPM_BUILD_ROOT/randrstr.h %post %{fillup_only -an displaymanager} @@ -143,6 +151,27 @@ /etc/X11/xgl-cards-white-list %changelog -n xgl +* Wed Apr 05 2006 - ro@suse.de +- do not build as root +* Wed Apr 05 2006 - dreveman@suse.de +- Remove compat71 and add packages instead. +- DPMS support. +- Fix acceleration and threshold control for pointer devices. +* Mon Apr 03 2006 - dreveman@suse.de +- Update to CVS version of Xgl (2006-04-03). +- Remove libglx -> libglxext patch (included with CVS version). +- Remove XKB patch (included with CVS version). +- Remove starvation patch (included with CVS version). +- Remove GLX patch (included with CVS version). +- Include compat71.tar.bz2 as headers not part of compat70 are + required by Xgl. +- New version glitz, with copy-sub-buffer support. +- New version Mesa, with copy-sub-buffer support. +- Fixed support for GL_ARB_vertex_program, GL_ARB_fragment_program + and GL_EXT_framebuffer_object. +- Workaround for dead-lock when using fglrx driver. +- Add xgl-xpstubs-link-hack.diff patch to avoid a small linking + issue. * Tue Mar 28 2006 - mhopf@suse.de - Fix for #159733 from David: libglx -> libglxext. * Wed Mar 22 2006 - mhopf@suse.de ++++++ glitz-0.5.4.tar.gz ++++++ diff -urN --exclude=CVS --exclude=.cvsignore --exclude=.svn --exclude=.svnignore old/glitz-0.5.4/src/agl/glitz_agl_context.c new/glitz-0.5.4/src/agl/glitz_agl_context.c --- old/glitz-0.5.4/src/agl/glitz_agl_context.c 2005-12-21 17:19:51.000000000 +0100 +++ new/glitz-0.5.4/src/agl/glitz_agl_context.c 2006-03-12 14:38:05.000000000 +0100 @@ -302,6 +302,7 @@ context->backend.attach_notify = _glitz_agl_notify_dummy; context->backend.detach_notify = _glitz_agl_notify_dummy; context->backend.swap_buffers = glitz_agl_swap_buffers; + context->backend.copy_sub_buffer = glitz_agl_copy_sub_buffer; context->backend.create_context = _glitz_agl_create_context; context->backend.destroy_context = _glitz_agl_context_destroy; @@ -423,6 +424,8 @@ { AGLContext context; + drawable->base.flushed = drawable->base.finished = 0; + switch (constraint) { case GLITZ_NONE: break; @@ -472,13 +475,17 @@ glitz_bool_t glitz_agl_push_current (void *abstract_drawable, glitz_surface_t *surface, - glitz_constraint_t constraint) + glitz_constraint_t constraint, + glitz_bool_t *restore_state) { glitz_agl_drawable_t *drawable = (glitz_agl_drawable_t *) abstract_drawable; glitz_agl_context_info_t *context_info; int index; + if (restore_state) + *restore_state = 0; + index = drawable->thread_info->context_stack_size++; context_info = &drawable->thread_info->context_stack[index]; diff -urN --exclude=CVS --exclude=.cvsignore --exclude=.svn --exclude=.svnignore old/glitz-0.5.4/src/agl/glitz_agl_drawable.c new/glitz-0.5.4/src/agl/glitz_agl_drawable.c --- old/glitz-0.5.4/src/agl/glitz_agl_drawable.c 2005-11-09 13:22:04.000000000 +0100 +++ new/glitz-0.5.4/src/agl/glitz_agl_drawable.c 2006-03-12 14:35:20.000000000 +0100 @@ -57,7 +57,7 @@ width, height); if (!context->initialized) { - glitz_agl_push_current (drawable, NULL, GLITZ_CONTEXT_CURRENT); + glitz_agl_push_current (drawable, NULL, GLITZ_CONTEXT_CURRENT, NULL); glitz_agl_pop_current (drawable); } @@ -203,7 +203,7 @@ * be our last chance to have a context current. */ glitz_agl_push_current (abstract_drawable, NULL, - GLITZ_CONTEXT_CURRENT); + GLITZ_CONTEXT_CURRENT, NULL); glitz_program_map_fini (drawable->base.backend->gl, &drawable->thread_info->program_map); glitz_program_map_init (&drawable->thread_info->program_map); @@ -241,9 +241,20 @@ glitz_agl_drawable_t *drawable = (glitz_agl_drawable_t *) abstract_drawable; - glitz_agl_push_current (abstract_drawable, NULL, GLITZ_DRAWABLE_CURRENT); + glitz_agl_push_current (abstract_drawable, NULL, GLITZ_DRAWABLE_CURRENT, + NULL); aglSwapBuffers (drawable->context->context); glitz_agl_pop_current (abstract_drawable); return 1; } + +glitz_bool_t +glitz_agl_copy_sub_buffer (void *abstract_drawable, + int x, + int y, + int width, + int height) +{ + return 0; +} diff -urN --exclude=CVS --exclude=.cvsignore --exclude=.svn --exclude=.svnignore old/glitz-0.5.4/src/agl/glitz_aglint.h new/glitz-0.5.4/src/agl/glitz_aglint.h --- old/glitz-0.5.4/src/agl/glitz_aglint.h 2005-11-09 13:22:04.000000000 +0100 +++ new/glitz-0.5.4/src/agl/glitz_aglint.h 2006-03-12 14:34:28.000000000 +0100 @@ -119,7 +119,8 @@ extern glitz_bool_t __internal_linkage glitz_agl_push_current (void *abstract_drawable, glitz_surface_t *surface, - glitz_constraint_t constraint); + glitz_constraint_t constraint, + glitz_bool_t *restore_state); extern glitz_surface_t __internal_linkage * glitz_agl_pop_current (void *abstract_drawable); @@ -131,6 +132,13 @@ glitz_agl_swap_buffers (void *abstract_drawable); extern glitz_bool_t __internal_linkage +glitz_agl_copy_sub_buffer (void *abstract_drawable, + int x, + int y, + int width, + int height); + +extern glitz_bool_t __internal_linkage glitz_agl_drawable_update_size (glitz_agl_drawable_t *drawable, int width, int height); diff -urN --exclude=CVS --exclude=.cvsignore --exclude=.svn --exclude=.svnignore old/glitz-0.5.4/src/egl/glitz_egl_context.c new/glitz-0.5.4/src/egl/glitz_egl_context.c --- old/glitz-0.5.4/src/egl/glitz_egl_context.c 2006-01-02 14:23:45.000000000 +0100 +++ new/glitz-0.5.4/src/egl/glitz_egl_context.c 2006-03-12 14:38:24.000000000 +0100 @@ -199,6 +199,7 @@ context->backend.attach_notify = _glitz_egl_notify_dummy; context->backend.detach_notify = _glitz_egl_notify_dummy; context->backend.swap_buffers = glitz_egl_swap_buffers; + context->backend.copy_sub_buffer = glitz_egl_copy_sub_buffer; context->backend.create_context = _glitz_egl_create_context; context->backend.destroy_context = _glitz_egl_context_destroy; @@ -324,6 +325,8 @@ { EGLContext egl_context; + drawable->base.flushed = drawable->base.finished = 0; + switch (constraint) { case GLITZ_NONE: break; @@ -364,12 +367,16 @@ glitz_bool_t glitz_egl_push_current (void *abstract_drawable, glitz_surface_t *surface, - glitz_constraint_t constraint) + glitz_constraint_t constraint, + glitz_bool_t *restore_state) { glitz_egl_surface_t *drawable = (glitz_egl_surface_t *) abstract_drawable; glitz_egl_context_info_t *context_info; int index; + if (restore_state) + *restore_state = 0; + index = drawable->screen_info->context_stack_size++; context_info = &drawable->screen_info->context_stack[index]; diff -urN --exclude=CVS --exclude=.cvsignore --exclude=.svn --exclude=.svnignore old/glitz-0.5.4/src/egl/glitz_egl_surface.c new/glitz-0.5.4/src/egl/glitz_egl_surface.c --- old/glitz-0.5.4/src/egl/glitz_egl_surface.c 2005-11-29 23:41:27.000000000 +0100 +++ new/glitz-0.5.4/src/egl/glitz_egl_surface.c 2006-03-12 14:36:27.000000000 +0100 @@ -55,7 +55,7 @@ width, height); if (!context->initialized) { - glitz_egl_push_current (surface, NULL, GLITZ_CONTEXT_CURRENT); + glitz_egl_push_current (surface, NULL, GLITZ_CONTEXT_CURRENT, NULL); glitz_egl_pop_current (surface); } @@ -212,10 +212,10 @@ * be our last chance to have a context current. */ glitz_egl_push_current (abstract_drawable, NULL, - GLITZ_CONTEXT_CURRENT); + GLITZ_CONTEXT_CURRENT, NULL); glitz_program_map_fini (surface->base.backend->gl, &surface->screen_info->program_map); - glitz_program_map_init (&surface->screen_info->program_map); + glitz_program_map_init (&surface->screen_info->program_map); glitz_egl_pop_current (abstract_drawable); } @@ -242,3 +242,13 @@ return 1; } + +glitz_bool_t +glitz_egl_copy_sub_buffer (void *abstract_drawable, + int x, + int y, + int width, + int height) +{ + return 0; +} diff -urN --exclude=CVS --exclude=.cvsignore --exclude=.svn --exclude=.svnignore old/glitz-0.5.4/src/egl/glitz_eglint.h new/glitz-0.5.4/src/egl/glitz_eglint.h --- old/glitz-0.5.4/src/egl/glitz_eglint.h 2005-09-14 17:57:16.000000000 +0200 +++ new/glitz-0.5.4/src/egl/glitz_eglint.h 2006-03-12 14:34:50.000000000 +0100 @@ -143,7 +143,8 @@ extern glitz_bool_t __internal_linkage glitz_egl_push_current (void *abstract_drawable, glitz_surface_t *surface, - glitz_constraint_t constraint); + glitz_constraint_t constraint, + glitz_bool_t *restore_state); extern glitz_surface_t __internal_linkage * glitz_egl_pop_current (void *abstract_drawable); @@ -161,6 +162,13 @@ extern glitz_bool_t __internal_linkage glitz_egl_swap_buffers (void *abstract_drawable); +extern glitz_bool_t __internal_linkage +glitz_egl_copy_sub_buffer (void *abstract_drawable, + int x, + int y, + int width, + int height); + /* Avoid unnecessary PLT entries. */ slim_hidden_proto(glitz_egl_init) diff -urN --exclude=CVS --exclude=.cvsignore --exclude=.svn --exclude=.svnignore old/glitz-0.5.4/src/glitz.h new/glitz-0.5.4/src/glitz.h --- old/glitz-0.5.4/src/glitz.h 2006-02-23 02:14:56.000000000 +0100 +++ new/glitz-0.5.4/src/glitz.h 2006-03-12 13:32:28.000000000 +0100 @@ -129,6 +129,7 @@ #define GLITZ_FEATURE_PACKED_PIXELS_MASK (1L << 14) #define GLITZ_FEATURE_MULTI_DRAW_ARRAYS_MASK (1L << 15) #define GLITZ_FEATURE_FRAMEBUFFER_OBJECT_MASK (1L << 16) +#define GLITZ_FEATURE_COPY_SUB_BUFFER_MASK (1L << 17) /* glitz_format.c */ diff -urN --exclude=CVS --exclude=.cvsignore --exclude=.svn --exclude=.svnignore old/glitz-0.5.4/src/glitz_buffer.c new/glitz-0.5.4/src/glitz_buffer.c --- old/glitz-0.5.4/src/glitz_buffer.c 2006-02-14 15:23:47.000000000 +0100 +++ new/glitz-0.5.4/src/glitz_buffer.c 2006-03-12 14:28:55.000000000 +0100 @@ -80,7 +80,7 @@ glitz_drawable_reference (drawable); drawable->backend->push_current (drawable, NULL, - GLITZ_ANY_CONTEXT_CURRENT); + GLITZ_ANY_CONTEXT_CURRENT, NULL); gl->gen_buffers (1, &buffer->name); if (buffer->name) { @@ -219,7 +219,8 @@ if (buffer->drawable) { buffer->drawable->backend->push_current (buffer->drawable, NULL, - GLITZ_ANY_CONTEXT_CURRENT); + GLITZ_ANY_CONTEXT_CURRENT, + NULL); buffer->drawable->backend->gl->delete_buffers (1, &buffer->name); buffer->drawable->backend->pop_current (buffer->drawable); glitz_drawable_destroy (buffer->drawable); @@ -248,7 +249,8 @@ GLITZ_GL_DRAWABLE (buffer->drawable); buffer->drawable->backend->push_current (buffer->drawable, NULL, - GLITZ_ANY_CONTEXT_CURRENT); + GLITZ_ANY_CONTEXT_CURRENT, + NULL); gl->bind_buffer (buffer->target, buffer->name); gl->buffer_sub_data (buffer->target, offset, size, data); gl->bind_buffer (buffer->target, 0); @@ -268,8 +270,8 @@ GLITZ_GL_DRAWABLE (buffer->drawable); buffer->drawable->backend->push_current (buffer->drawable, NULL, - GLITZ_ANY_CONTEXT_CURRENT); - + GLITZ_ANY_CONTEXT_CURRENT, + NULL); gl->bind_buffer (buffer->target, buffer->name); gl->get_buffer_sub_data (buffer->target, offset, size, data); gl->bind_buffer (buffer->target, 0); @@ -292,7 +294,8 @@ GLITZ_GL_DRAWABLE (buffer->drawable); buffer->drawable->backend->push_current (buffer->drawable, NULL, - GLITZ_ANY_CONTEXT_CURRENT); + GLITZ_ANY_CONTEXT_CURRENT, + NULL); switch (access) { case GLITZ_BUFFER_ACCESS_READ_ONLY: @@ -328,7 +331,8 @@ GLITZ_GL_DRAWABLE (buffer->drawable); buffer->drawable->backend->push_current (buffer->drawable, NULL, - GLITZ_ANY_CONTEXT_CURRENT); + GLITZ_ANY_CONTEXT_CURRENT, + NULL); gl->bind_buffer (buffer->target, buffer->name); diff -urN --exclude=CVS --exclude=.cvsignore --exclude=.svn --exclude=.svnignore old/glitz-0.5.4/src/glitz_drawable.c new/glitz-0.5.4/src/glitz_drawable.c --- old/glitz-0.5.4/src/glitz_drawable.c 2006-02-06 23:26:04.000000000 +0100 +++ new/glitz-0.5.4/src/glitz_drawable.c 2006-03-13 10:27:08.000000000 +0100 @@ -53,6 +53,8 @@ drawable->viewport.height = 65535; drawable->update_all = 1; + drawable->flushed = 0; + drawable->finished = 0; } void @@ -195,125 +197,158 @@ glitz_box_t *box, int n_box) { - if (drawable->format->d.doublebuffer && n_box) - { - glitz_box_t rect; - glitz_surface_t *surface = NULL; - int x_pos, y_pos; - int x, y, w, h; + glitz_box_t rect; + glitz_surface_t *surface = NULL; + int x_pos, y_pos; + int x, y, w, h; + + GLITZ_GL_DRAWABLE (drawable); - GLITZ_GL_DRAWABLE (drawable); + if (!drawable->format->d.doublebuffer || !n_box) + return; - if (n_box == 1) + /* try swap buffers (fastest) */ + if (n_box == 1) + { + rect.x1 = x_origin + box->x1; + rect.y1 = y_origin + box->y1; + rect.x2 = x_origin + box->x2; + rect.y2 = y_origin + box->y2; + + if (rect.x1 <= 0 && + rect.y1 <= 0 && + rect.x2 >= drawable->width && + rect.x2 >= drawable->height) { - rect.x1 = x_origin + box->x1; - rect.y1 = y_origin + box->y1; - rect.x2 = x_origin + box->x2; - rect.y2 = y_origin + box->y2; - - if (rect.x1 <= 0 && - rect.y1 <= 0 && - rect.x2 >= drawable->width && - rect.x2 >= drawable->height) + if (drawable->backend->swap_buffers (drawable)) { - if (drawable->backend->swap_buffers (drawable)) + if (drawable->front) { - if (drawable->front) - { - REGION_EMPTY (&drawable->front->drawable_damage); - glitz_surface_damage (drawable->front, NULL, - GLITZ_DAMAGE_TEXTURE_MASK | - GLITZ_DAMAGE_SOLID_MASK); - } - return; + REGION_EMPTY (&drawable->front->drawable_damage); + glitz_surface_damage (drawable->front, NULL, + GLITZ_DAMAGE_TEXTURE_MASK | + GLITZ_DAMAGE_SOLID_MASK); } + return; } } + } - if (drawable->front) + /* try copy sub buffer (almost as fast) */ + while (n_box) + { + rect.x1 = x_origin + box->x1; + rect.y1 = y_origin + box->y1; + rect.x2 = x_origin + box->x2; + rect.y2 = y_origin + box->y2; + + if (rect.x1 < rect.x2 && rect.y1 < rect.y2) { - if (glitz_surface_push_current (drawable->front, - GLITZ_DRAWABLE_CURRENT)) - surface = drawable->front; + x = rect.x1; + y = drawable->height - rect.y2; + w = rect.x2 - rect.x1; + h = rect.y2 - rect.y1; + + if (!drawable->backend->copy_sub_buffer (drawable, x, y, w, h)) + break; + + if (drawable->front) + glitz_surface_damage (drawable->front, &rect, + GLITZ_DAMAGE_TEXTURE_MASK | + GLITZ_DAMAGE_SOLID_MASK); } - if (!surface) + n_box--; + box++; + } + + if (!n_box) + return; + + /* do copy pixels (slow) */ + if (drawable->front) + { + if (glitz_surface_push_current (drawable->front, + GLITZ_DRAWABLE_CURRENT)) + surface = drawable->front; + } + if (!surface) + { + if (drawable->backend->push_current (drawable, NULL, + GLITZ_DRAWABLE_CURRENT, NULL)) { - if (drawable->backend->push_current (drawable, NULL, - GLITZ_DRAWABLE_CURRENT)) - { - drawable->update_all = 1; + drawable->update_all = 1; - gl->viewport (0, 0, drawable->width, drawable->height); - gl->matrix_mode (GLITZ_GL_PROJECTION); - gl->load_identity (); - gl->ortho (0.0, drawable->width, 0.0, - drawable->height, -1.0, 1.0); - gl->matrix_mode (GLITZ_GL_MODELVIEW); - gl->load_identity (); - gl->scale_f (1.0f, -1.0f, 1.0f); - gl->translate_f (0.0f, -drawable->height, 0.0f); - } - else - { - drawable->backend->pop_current (drawable); - return; - } + gl->viewport (0, 0, drawable->width, drawable->height); + gl->matrix_mode (GLITZ_GL_PROJECTION); + gl->load_identity (); + gl->ortho (0.0, drawable->width, 0.0, + drawable->height, -1.0, 1.0); + gl->matrix_mode (GLITZ_GL_MODELVIEW); + gl->load_identity (); + gl->scale_f (1.0f, -1.0f, 1.0f); + gl->translate_f (0.0f, -drawable->height, 0.0f); + } + else + { + drawable->backend->pop_current (drawable); + return; } + } + + gl->disable (GLITZ_GL_DITHER); - gl->disable (GLITZ_GL_DITHER); + drawable->backend->read_buffer (drawable, GLITZ_GL_BACK); + drawable->backend->draw_buffer (drawable, GLITZ_GL_FRONT); - drawable->backend->read_buffer (drawable, GLITZ_GL_BACK); - drawable->backend->draw_buffer (drawable, GLITZ_GL_FRONT); + glitz_set_operator (gl, GLITZ_OPERATOR_SRC); - glitz_set_operator (gl, GLITZ_OPERATOR_SRC); + x_pos = 0; + y_pos = 0; - x_pos = 0; - y_pos = 0; + glitz_set_raster_pos (gl, x_pos, y_pos); - glitz_set_raster_pos (gl, x_pos, y_pos); + while (n_box--) + { + rect.x1 = x_origin + box->x1; + rect.y1 = y_origin + box->y1; + rect.x2 = x_origin + box->x2; + rect.y2 = y_origin + box->y2; - while (n_box--) + if (rect.x1 < rect.x2 && rect.y1 < rect.y2) { - rect.x1 = x_origin + box->x1; - rect.y1 = y_origin + box->y1; - rect.x2 = x_origin + box->x2; - rect.y2 = y_origin + box->y2; + x = rect.x1; + y = drawable->height - rect.y2; + w = rect.x2 - rect.x1; + h = rect.y2 - rect.y1; - if (rect.x1 < rect.x2 && rect.y1 < rect.y2) + if (x != x_pos || y != y_pos) { - x = rect.x1; - y = drawable->height - rect.y2; - w = rect.x2 - rect.x1; - h = rect.y2 - rect.y1; + gl->bitmap (0, 0, 0, 0, x - x_pos, y - y_pos, NULL); - if (x != x_pos || y != y_pos) - { - gl->bitmap (0, 0, 0, 0, x - x_pos, y - y_pos, NULL); - - x_pos = x; - y_pos = y; - } + x_pos = x; + y_pos = y; + } - gl->scissor (x, y, w, h); - gl->copy_pixels (x, y, w, h, GLITZ_GL_COLOR); + gl->scissor (x, y, w, h); + gl->copy_pixels (x, y, w, h, GLITZ_GL_COLOR); - if (surface) - glitz_surface_damage (surface, &rect, - GLITZ_DAMAGE_TEXTURE_MASK | - GLITZ_DAMAGE_SOLID_MASK); + if (surface) + glitz_surface_damage (surface, &rect, + GLITZ_DAMAGE_TEXTURE_MASK | + GLITZ_DAMAGE_SOLID_MASK); - box++; - } + box++; } + } - drawable->backend->gl->flush (); + drawable->backend->gl->flush (); + drawable->flushed = 1; - if (surface) - glitz_surface_pop_current (surface); - else - drawable->backend->pop_current (drawable); - } + if (surface) + glitz_surface_pop_current (surface); + else + drawable->backend->pop_current (drawable); } void @@ -333,18 +368,30 @@ void glitz_drawable_flush (glitz_drawable_t *drawable) { - drawable->backend->push_current (drawable, NULL, GLITZ_DRAWABLE_CURRENT); + if (drawable->flushed) + return; + + drawable->backend->push_current (drawable, NULL, GLITZ_DRAWABLE_CURRENT, + NULL); drawable->backend->gl->flush (); drawable->backend->pop_current (drawable); + + drawable->flushed = 1; } slim_hidden_def(glitz_drawable_flush); void glitz_drawable_finish (glitz_drawable_t *drawable) { - drawable->backend->push_current (drawable, NULL, GLITZ_DRAWABLE_CURRENT); + if (drawable->finished) + return; + + drawable->backend->push_current (drawable, NULL, GLITZ_DRAWABLE_CURRENT, + NULL); drawable->backend->gl->finish (); drawable->backend->pop_current (drawable); + + drawable->finished = drawable->flushed = 1; } slim_hidden_def(glitz_drawable_finish); diff -urN --exclude=CVS --exclude=.cvsignore --exclude=.svn --exclude=.svnignore old/glitz-0.5.4/src/glitz_framebuffer.c new/glitz-0.5.4/src/glitz_framebuffer.c --- old/glitz-0.5.4/src/glitz_framebuffer.c 2005-12-21 17:19:51.000000000 +0100 +++ new/glitz-0.5.4/src/glitz_framebuffer.c 2006-03-12 14:26:40.000000000 +0100 @@ -201,7 +201,8 @@ if (!TEXTURE_ALLOCATED (texture)) { drawable->other->backend->push_current (drawable->other, NULL, - GLITZ_ANY_CONTEXT_CURRENT); + GLITZ_ANY_CONTEXT_CURRENT, + NULL); glitz_texture_allocate (gl, texture); drawable->other->backend->pop_current (drawable->other); @@ -225,7 +226,8 @@ GLITZ_GL_DRAWABLE (drawable->other); drawable->other->backend->push_current (drawable->other, NULL, - GLITZ_ANY_CONTEXT_CURRENT); + GLITZ_ANY_CONTEXT_CURRENT, + NULL); gl->bind_framebuffer (GLITZ_GL_FRAMEBUFFER, drawable->fb); @@ -258,13 +260,14 @@ static glitz_bool_t _glitz_fbo_push_current (void *abstract_drawable, glitz_surface_t *surface, - glitz_constraint_t constraint) + glitz_constraint_t constraint, + glitz_bool_t *restore_state) { glitz_fbo_drawable_t *drawable = (glitz_fbo_drawable_t *) abstract_drawable; drawable->other->backend->push_current (drawable->other, surface, - constraint); + constraint, restore_state); if (constraint == GLITZ_DRAWABLE_CURRENT) { @@ -329,6 +332,16 @@ return 0; } +static glitz_bool_t +_glitz_fbo_copy_sub_buffer (void *abstract_drawable, + int x, + int y, + int width, + int height) +{ + return 0; +} + static void _glitz_fbo_destroy (void *abstract_drawable) { @@ -340,7 +353,8 @@ GLITZ_GL_DRAWABLE (drawable->other); drawable->other->backend->push_current (drawable->other, NULL, - GLITZ_ANY_CONTEXT_CURRENT); + GLITZ_ANY_CONTEXT_CURRENT, + NULL); gl->delete_framebuffers (1, &drawable->fb); @@ -427,15 +441,16 @@ backend = (glitz_backend_t *) (drawable + 1); *backend = *other->backend; - backend->destroy = _glitz_fbo_destroy; - backend->push_current = _glitz_fbo_push_current; - backend->pop_current = _glitz_fbo_pop_current; - backend->attach_notify = _glitz_fbo_attach_notify; - backend->detach_notify = _glitz_fbo_detach_notify; - backend->swap_buffers = _glitz_fbo_swap_buffers; - backend->make_current = _glitz_fbo_make_current; - backend->draw_buffer = _glitz_fbo_draw_buffer; - backend->read_buffer = _glitz_fbo_read_buffer; + backend->destroy = _glitz_fbo_destroy; + backend->push_current = _glitz_fbo_push_current; + backend->pop_current = _glitz_fbo_pop_current; + backend->attach_notify = _glitz_fbo_attach_notify; + backend->detach_notify = _glitz_fbo_detach_notify; + backend->swap_buffers = _glitz_fbo_swap_buffers; + backend->copy_sub_buffer = _glitz_fbo_copy_sub_buffer; + backend->make_current = _glitz_fbo_make_current; + backend->draw_buffer = _glitz_fbo_draw_buffer; + backend->read_buffer = _glitz_fbo_read_buffer; drawable->fb = 0; diff -urN --exclude=CVS --exclude=.cvsignore --exclude=.svn --exclude=.svnignore old/glitz-0.5.4/src/glitz_gl.h new/glitz-0.5.4/src/glitz_gl.h --- old/glitz-0.5.4/src/glitz_gl.h 2006-02-23 02:11:28.000000000 +0100 +++ new/glitz-0.5.4/src/glitz_gl.h 2006-03-12 15:38:34.000000000 +0100 @@ -116,6 +116,9 @@ #define GLITZ_GL_TEXTURE_HEIGHT 0x1001 #define GLITZ_GL_TEXTURE_BORDER_COLOR 0x1004 +#define GLITZ_GL_TEXTURE_BINDING_2D 0x8069 +#define GLITZ_GL_TEXTURE_BINDING_RECTANGLE 0x84F6 + #define GLITZ_GL_TEXTURE_ENV 0x2300 #define GLITZ_GL_TEXTURE_ENV_MODE 0x2200 #define GLITZ_GL_TEXTURE_2D 0x0DE1 diff -urN --exclude=CVS --exclude=.cvsignore --exclude=.svn --exclude=.svnignore old/glitz-0.5.4/src/glitz_pixel.c new/glitz-0.5.4/src/glitz_pixel.c --- old/glitz-0.5.4/src/glitz_pixel.c 2006-02-16 02:20:44.000000000 +0100 +++ new/glitz-0.5.4/src/glitz_pixel.c 2006-03-12 16:00:51.000000000 +0100 @@ -901,6 +901,11 @@ glitz_image_t src_image, dst_image; unsigned long color_mask; glitz_box_t box; + glitz_surface_t *surface; + glitz_bool_t restore_state; + glitz_gl_int_t unpackrowlength, unpackalignment; + glitz_gl_int_t unpackskiprows, unpackskippixels; + glitz_gl_int_t t2d, tbind2d, trect, tbindrect; GLITZ_GL_SURFACE (dst); @@ -1041,12 +1046,49 @@ feature_mask); } - glitz_surface_push_current (dst, GLITZ_ANY_CONTEXT_CURRENT); + /* avoid context switch in this case */ + if (!dst->attached && + TEXTURE_ALLOCATED (&dst->texture) && + !REGION_NOTEMPTY (&dst->texture_damage)) + { + dst->drawable->backend->push_current (dst->drawable, dst, + GLITZ_ANY_CONTEXT_CURRENT, + &restore_state); + texture = &dst->texture; + + /* we are using a foreign context so we must restore all state when we + are done */ + if (restore_state) + { + /* get pixel store state */ + gl->get_integer_v (GLITZ_GL_UNPACK_ROW_LENGTH, &unpackrowlength); + gl->get_integer_v (GLITZ_GL_UNPACK_ALIGNMENT, &unpackalignment); + gl->get_integer_v (GLITZ_GL_UNPACK_SKIP_ROWS, &unpackskiprows); + gl->get_integer_v (GLITZ_GL_UNPACK_SKIP_PIXELS, &unpackskippixels); + + /* get texture bindings */ + gl->get_integer_v (GLITZ_GL_TEXTURE_2D, &t2d); + gl->get_integer_v (GLITZ_GL_TEXTURE_BINDING_2D, &tbind2d); + gl->get_integer_v (GLITZ_GL_TEXTURE_RECTANGLE, &trect); + gl->get_integer_v (GLITZ_GL_TEXTURE_BINDING_RECTANGLE, &tbindrect); - texture = glitz_surface_get_texture (dst, 1); - if (!texture) { - glitz_surface_pop_current (dst); - return; + /* TODO: save PBO state */ + } + + surface = NULL; + } + else + { + glitz_surface_push_current (dst, GLITZ_ANY_CONTEXT_CURRENT); + + texture = glitz_surface_get_texture (dst, 1); + if (!texture) { + glitz_surface_pop_current (dst); + return; + } + + restore_state = 0; + surface = dst; } if (height > 1) { @@ -1247,7 +1289,39 @@ BAIL: glitz_texture_unbind (gl, texture); - glitz_surface_pop_current (dst); + + if (surface) + { + glitz_surface_pop_current (surface); + } + else + { + dst->drawable->backend->pop_current (dst->drawable); + } + + if (restore_state) + { + /* pixel store state */ + gl->pixel_store_i (GLITZ_GL_UNPACK_ROW_LENGTH, unpackrowlength); + gl->pixel_store_i (GLITZ_GL_UNPACK_ALIGNMENT, unpackalignment); + gl->pixel_store_i (GLITZ_GL_UNPACK_SKIP_ROWS, unpackskiprows); + gl->pixel_store_i (GLITZ_GL_UNPACK_SKIP_PIXELS, unpackskippixels); + + /* get texture bindings */ + if (t2d) + gl->enable (GLITZ_GL_TEXTURE_2D); + else + gl->disable (GLITZ_GL_TEXTURE_2D); + + gl->bind_texture (GLITZ_GL_TEXTURE_2D, tbind2d); + + if (trect) + gl->enable (GLITZ_GL_TEXTURE_RECTANGLE); + else + gl->disable (GLITZ_GL_TEXTURE_RECTANGLE); + + gl->bind_texture (GLITZ_GL_TEXTURE_RECTANGLE, tbindrect); + } } void diff -urN --exclude=CVS --exclude=.cvsignore --exclude=.svn --exclude=.svnignore old/glitz-0.5.4/src/glitz_surface.c new/glitz-0.5.4/src/glitz_surface.c --- old/glitz-0.5.4/src/glitz_surface.c 2005-12-21 17:19:51.000000000 +0100 +++ new/glitz-0.5.4/src/glitz_surface.c 2006-03-12 14:23:12.000000000 +0100 @@ -601,7 +601,7 @@ { drawable = surface->attached; if (drawable->backend->push_current (drawable, surface, - constraint)) + constraint, NULL)) { if (constraint == GLITZ_DRAWABLE_CURRENT) { @@ -641,12 +641,12 @@ if (constraint == GLITZ_DRAWABLE_CURRENT) { drawable->backend->push_current (drawable, surface, - GLITZ_ANY_CONTEXT_CURRENT); + GLITZ_ANY_CONTEXT_CURRENT, NULL); } else { return drawable->backend->push_current (drawable, surface, - constraint); + constraint, NULL); } } diff -urN --exclude=CVS --exclude=.cvsignore --exclude=.svn --exclude=.svnignore old/glitz-0.5.4/src/glitzint.h new/glitz-0.5.4/src/glitzint.h --- old/glitz-0.5.4/src/glitzint.h 2005-12-21 17:19:51.000000000 +0100 +++ new/glitz-0.5.4/src/glitzint.h 2006-03-12 14:22:19.000000000 +0100 @@ -374,7 +374,8 @@ glitz_bool_t (*push_current) (void *drawable, glitz_surface_t *surface, - glitz_constraint_t constraint); + glitz_constraint_t constraint, + glitz_bool_t *restore_state); glitz_surface_t * (*pop_current) (void *drawable); @@ -390,6 +391,12 @@ glitz_bool_t (*swap_buffers) (void *drawable); + glitz_bool_t + (*copy_sub_buffer) (void *drawable, + int x, + int y, + int width, + int height); glitz_context_t * (*create_context) (void *drawable, @@ -444,6 +451,8 @@ int width, height; glitz_rectangle_t viewport; glitz_bool_t update_all; + glitz_bool_t flushed; + glitz_bool_t finished; glitz_surface_t *front; glitz_surface_t *back; }; diff -urN --exclude=CVS --exclude=.cvsignore --exclude=.svn --exclude=.svnignore old/glitz-0.5.4/src/glx/glitz_glx_context.c new/glitz-0.5.4/src/glx/glitz_glx_context.c --- old/glitz-0.5.4/src/glx/glitz_glx_context.c 2005-12-21 17:19:51.000000000 +0100 +++ new/glitz-0.5.4/src/glx/glitz_glx_context.c 2006-03-12 15:59:42.000000000 +0100 @@ -279,6 +279,7 @@ context->backend.attach_notify = _glitz_glx_notify_dummy; context->backend.detach_notify = _glitz_glx_notify_dummy; context->backend.swap_buffers = glitz_glx_swap_buffers; + context->backend.copy_sub_buffer = glitz_glx_copy_sub_buffer; context->backend.create_context = _glitz_glx_create_context; context->backend.destroy_context = _glitz_glx_context_destroy; @@ -364,6 +365,9 @@ } } + if (screen_info->glx_feature_mask & GLITZ_GLX_FEATURE_COPY_SUB_BUFFER_MASK) + context->backend.feature_mask |= GLITZ_FEATURE_COPY_SUB_BUFFER_MASK; + context->initialized = 1; } @@ -375,7 +379,10 @@ drawable->screen_info->display_info; if (finish) + { glFinish (); + drawable->base.finished = 1; + } if (display_info->thread_info->cctx) { @@ -400,11 +407,23 @@ static void _glitz_glx_context_update (glitz_glx_drawable_t *drawable, - glitz_constraint_t constraint) + glitz_constraint_t constraint, + glitz_bool_t *restore_state) { glitz_glx_display_info_t *dinfo = drawable->screen_info->display_info; GLXContext context = NULL; + if (restore_state && constraint == GLITZ_ANY_CONTEXT_CURRENT) + { + if (dinfo->thread_info->cctx) + { + *restore_state = 1; + return; + } + } + + drawable->base.flushed = drawable->base.finished = 0; + switch (constraint) { case GLITZ_NONE: break; @@ -442,13 +461,17 @@ glitz_bool_t glitz_glx_push_current (void *abstract_drawable, glitz_surface_t *surface, - glitz_constraint_t constraint) + glitz_constraint_t constraint, + glitz_bool_t *restore_state) { glitz_glx_drawable_t *drawable = (glitz_glx_drawable_t *) abstract_drawable; glitz_glx_context_info_t *context_info; int index; + if (restore_state) + *restore_state = 0; + index = drawable->screen_info->context_stack_size++; context_info = &drawable->screen_info->context_stack[index]; @@ -456,7 +479,8 @@ context_info->surface = surface; context_info->constraint = constraint; - _glitz_glx_context_update (context_info->drawable, constraint); + _glitz_glx_context_update (context_info->drawable, constraint, + restore_state); return 1; } @@ -476,7 +500,8 @@ if (context_info->drawable) _glitz_glx_context_update (context_info->drawable, - context_info->constraint); + context_info->constraint, + NULL); if (context_info->constraint == GLITZ_DRAWABLE_CURRENT) return context_info->surface; diff -urN --exclude=CVS --exclude=.cvsignore --exclude=.svn --exclude=.svnignore old/glitz-0.5.4/src/glx/glitz_glx_drawable.c new/glitz-0.5.4/src/glx/glitz_glx_drawable.c --- old/glitz-0.5.4/src/glx/glitz_glx_drawable.c 2006-02-06 23:26:05.000000000 +0100 +++ new/glitz-0.5.4/src/glx/glitz_glx_drawable.c 2006-03-13 10:27:43.000000000 +0100 @@ -57,7 +57,7 @@ width, height); if (!context->initialized) { - glitz_glx_push_current (drawable, NULL, GLITZ_CONTEXT_CURRENT); + glitz_glx_push_current (drawable, NULL, GLITZ_CONTEXT_CURRENT, NULL); glitz_glx_pop_current (drawable); } @@ -213,7 +213,7 @@ * be our last chance to have a context current. */ glitz_glx_push_current (abstract_drawable, NULL, - GLITZ_CONTEXT_CURRENT); + GLITZ_CONTEXT_CURRENT, NULL); glitz_program_map_fini (drawable->base.backend->gl, &drawable->screen_info->program_map); glitz_program_map_init (&drawable->screen_info->program_map); @@ -241,3 +241,26 @@ return 1; } + +glitz_bool_t +glitz_glx_copy_sub_buffer (void *abstract_drawable, + int x, + int y, + int width, + int height) +{ + glitz_glx_drawable_t *drawable = (glitz_glx_drawable_t *) + abstract_drawable; + glitz_glx_screen_info_t *screen_info = drawable->screen_info; + + if (screen_info->glx_feature_mask & GLITZ_GLX_FEATURE_COPY_SUB_BUFFER_MASK) + { + screen_info->glx.copy_sub_buffer (screen_info->display_info->display, + drawable->drawable, + x, y, width, height); + + return 1; + } + + return 0; +} diff -urN --exclude=CVS --exclude=.cvsignore --exclude=.svn --exclude=.svnignore old/glitz-0.5.4/src/glx/glitz_glx_extension.c new/glitz-0.5.4/src/glx/glitz_glx_extension.c --- old/glitz-0.5.4/src/glx/glitz_glx_extension.c 2006-02-14 15:23:47.000000000 +0100 +++ new/glitz-0.5.4/src/glx/glitz_glx_extension.c 2006-03-12 21:03:24.000000000 +0100 @@ -39,17 +39,27 @@ { 0.0, NULL, 0 } }; +static glitz_extension_map glx_client_extensions[] = { + { 0.0, "GLX_MESA_copy_sub_buffer", GLITZ_GLX_FEATURE_COPY_SUB_BUFFER_MASK }, + { 0.0, NULL, 0 } +}; + void glitz_glx_query_extensions (glitz_glx_screen_info_t *screen_info, glitz_gl_float_t glx_version) { const char *glx_extensions_string; + const char *glx_client_extensions_string; const char *vendor; glx_extensions_string = glXQueryExtensionsString (screen_info->display_info->display, screen_info->screen); + glx_client_extensions_string = + glXGetClientString (screen_info->display_info->display, + GLX_EXTENSIONS); + vendor = glXGetClientString (screen_info->display_info->display, GLX_VENDOR); @@ -68,6 +78,11 @@ glx_extensions_string, glx_extensions); + screen_info->glx_feature_mask |= + glitz_extensions_query (glx_version, + glx_client_extensions_string, + glx_client_extensions); + if (vendor) { if (screen_info->glx_feature_mask & GLITZ_GLX_FEATURE_MULTISAMPLE_MASK) diff -urN --exclude=CVS --exclude=.cvsignore --exclude=.svn --exclude=.svnignore old/glitz-0.5.4/src/glx/glitz_glx_info.c new/glitz-0.5.4/src/glx/glitz_glx_info.c --- old/glitz-0.5.4/src/glx/glitz_glx_info.c 2005-09-14 17:57:16.000000000 +0200 +++ new/glitz-0.5.4/src/glx/glitz_glx_info.c 2006-03-11 12:10:48.000000000 +0100 @@ -256,6 +256,17 @@ ~GLITZ_GLX_FEATURE_MAKE_CURRENT_READ_MASK; } + if (screen_info->glx_feature_mask & GLITZ_GLX_FEATURE_COPY_SUB_BUFFER_MASK) + { + screen_info->glx.copy_sub_buffer = (glitz_glx_copy_sub_buffer_t) + glitz_glx_get_proc_address ("glXCopySubBufferMESA", + (void *) screen_info); + + if (!screen_info->glx.copy_sub_buffer) + screen_info->glx_feature_mask &= + ~GLITZ_GLX_FEATURE_COPY_SUB_BUFFER_MASK; + } + if (screen_info->glx_feature_mask & GLITZ_GLX_FEATURE_GET_PROC_ADDRESS_MASK) { if (screen_info->glx_version >= 1.4f) { diff -urN --exclude=CVS --exclude=.cvsignore --exclude=.svn --exclude=.svnignore old/glitz-0.5.4/src/glx/glitz_glxext.h new/glitz-0.5.4/src/glx/glitz_glxext.h --- old/glitz-0.5.4/src/glx/glitz_glxext.h 2005-09-14 17:57:16.000000000 +0200 +++ new/glitz-0.5.4/src/glx/glitz_glxext.h 2006-03-11 12:26:12.000000000 +0100 @@ -120,9 +120,7 @@ #define GLX_SAMPLES_ARB 0x186a1 #endif -typedef Bool *(* glitz_glx_bind_tex_image_t) - (Display *display, GLXPbuffer pbuffer, int buffer); -typedef Bool (* glitz_glx_release_tex_image_t) - (Display *display, GLXPbuffer pbuffer, int buffer); +typedef void *(* glitz_glx_copy_sub_buffer_t) + (Display *display, GLXDrawable draw, int x, int y, int w, int h); #endif /* GLITZ_GLXEXT_H_INCLUDED */ diff -urN --exclude=CVS --exclude=.cvsignore --exclude=.svn --exclude=.svnignore old/glitz-0.5.4/src/glx/glitz_glxint.h new/glitz-0.5.4/src/glx/glitz_glxint.h --- old/glitz-0.5.4/src/glx/glitz_glxint.h 2005-09-14 17:57:16.000000000 +0200 +++ new/glitz-0.5.4/src/glx/glitz_glxint.h 2006-03-12 14:32:41.000000000 +0100 @@ -43,6 +43,7 @@ #define GLITZ_GLX_FEATURE_GET_PROC_ADDRESS_MASK (1L << 4) #define GLITZ_GLX_FEATURE_MULTISAMPLE_MASK (1L << 5) #define GLITZ_GLX_FEATURE_PBUFFER_MULTISAMPLE_MASK (1L << 6) +#define GLITZ_GLX_FEATURE_COPY_SUB_BUFFER_MASK (1L << 7) typedef struct _glitz_glx_drawable glitz_glx_drawable_t; typedef struct _glitz_glx_screen_info_t glitz_glx_screen_info_t; @@ -58,6 +59,7 @@ glitz_glx_query_drawable_t query_drawable; glitz_glx_make_context_current_t make_context_current; glitz_glx_create_new_context_t create_new_context; + glitz_glx_copy_sub_buffer_t copy_sub_buffer; } glitz_glx_static_proc_address_list_t; typedef struct _glitz_glx_thread_info_t { @@ -165,7 +167,8 @@ extern glitz_bool_t __internal_linkage glitz_glx_push_current (void *abstract_drawable, glitz_surface_t *surface, - glitz_constraint_t constraint); + glitz_constraint_t constraint, + glitz_bool_t *restore_state); extern glitz_surface_t __internal_linkage * glitz_glx_pop_current (void *abstract_drawable); @@ -183,6 +186,13 @@ extern glitz_bool_t __internal_linkage glitz_glx_swap_buffers (void *abstract_drawable); +extern glitz_bool_t __internal_linkage +glitz_glx_copy_sub_buffer (void *abstract_drawable, + int x, + int y, + int width, + int height); + /* Avoid unnecessary PLT entries. */ slim_hidden_proto(glitz_glx_init) diff -urN --exclude=CVS --exclude=.cvsignore --exclude=.svn --exclude=.svnignore old/glitz-0.5.4/src/wgl/glitz_wgl_context.c new/glitz-0.5.4/src/wgl/glitz_wgl_context.c --- old/glitz-0.5.4/src/wgl/glitz_wgl_context.c 2005-12-21 17:19:51.000000000 +0100 +++ new/glitz-0.5.4/src/wgl/glitz_wgl_context.c 2006-03-12 14:38:16.000000000 +0100 @@ -186,6 +186,7 @@ context->backend.attach_notify = _glitz_wgl_notify_dummy; context->backend.detach_notify = _glitz_wgl_notify_dummy; context->backend.swap_buffers = glitz_wgl_swap_buffers; + context->backend.copy_sub_buffer = glitz_wgl_copy_sub_buffer; context->backend.create_context = _glitz_wgl_create_context; context->backend.destroy_context = _glitz_wgl_destroy_context; @@ -265,6 +266,8 @@ { HGLRC context; + drawable->base.flushed = drawable->base.finished = 0; + switch (constraint) { case GLITZ_NONE: break; @@ -290,12 +293,16 @@ glitz_bool_t glitz_wgl_push_current (void *abstract_drawable, glitz_surface_t *surface, - glitz_constraint_t constraint) + glitz_constraint_t constraint, + glitz_bool_t *restore_state) { glitz_wgl_drawable_t *drawable = (glitz_wgl_drawable_t *) abstract_drawable; glitz_wgl_context_info_t *context_info; int index; + if (restore_state) + *restore_state = 0; + index = drawable->screen_info->context_stack_size++; context_info = &drawable->screen_info->context_stack[index]; diff -urN --exclude=CVS --exclude=.cvsignore --exclude=.svn --exclude=.svnignore old/glitz-0.5.4/src/wgl/glitz_wgl_drawable.c new/glitz-0.5.4/src/wgl/glitz_wgl_drawable.c --- old/glitz-0.5.4/src/wgl/glitz_wgl_drawable.c 2005-12-07 22:22:49.000000000 +0100 +++ new/glitz-0.5.4/src/wgl/glitz_wgl_drawable.c 2006-03-12 14:35:57.000000000 +0100 @@ -75,7 +75,7 @@ height); if (!context->initialized) { - glitz_wgl_push_current (drawable, NULL, GLITZ_CONTEXT_CURRENT); + glitz_wgl_push_current (drawable, NULL, GLITZ_CONTEXT_CURRENT, NULL); glitz_wgl_pop_current (drawable); } @@ -199,7 +199,8 @@ * Last drawable? We have to destroy all fragment programs as this may * be our last chance to have a context current. */ - glitz_wgl_push_current (abstract_drawable, NULL, GLITZ_CONTEXT_CURRENT); + glitz_wgl_push_current (abstract_drawable, NULL, GLITZ_CONTEXT_CURRENT, + NULL); glitz_program_map_fini (drawable->base.backend->gl, &drawable->screen_info->program_map); glitz_program_map_init (&drawable->screen_info->program_map); @@ -226,3 +227,13 @@ return 1; } + +glitz_bool_t +glitz_wgl_copy_sub_buffer (void *abstract_drawable, + int x, + int y, + int width, + int height) +{ + return 0; +} diff -urN --exclude=CVS --exclude=.cvsignore --exclude=.svn --exclude=.svnignore old/glitz-0.5.4/src/wgl/glitz_wglint.h new/glitz-0.5.4/src/wgl/glitz_wglint.h --- old/glitz-0.5.4/src/wgl/glitz_wglint.h 2005-11-09 13:32:24.000000000 +0100 +++ new/glitz-0.5.4/src/wgl/glitz_wglint.h 2006-03-12 14:34:39.000000000 +0100 @@ -173,7 +173,8 @@ extern glitz_bool_t __internal_linkage glitz_wgl_push_current (void *abstract_drawable, glitz_surface_t *surface, - glitz_constraint_t constraint); + glitz_constraint_t constraint, + glitz_bool_t *restore_state); extern glitz_surface_t *__internal_linkage glitz_wgl_pop_current (void *abstract_drawable); @@ -187,6 +188,13 @@ extern glitz_bool_t __internal_linkage glitz_wgl_swap_buffers (void *abstract_drawable); +extern glitz_bool_t __internal_linkage +glitz_wgl_copy_sub_buffer (void *abstract_drawable, + int x, + int y, + int width, + int height); + extern void __internal_linkage glitz_wgl_print_win32_error_string (int error_code); ++++++ xgl-xpstubs-link-hack.diff ++++++ --- hw/xgl/Makefile.in.orig 2006-04-03 09:38:17.000000000 +0200 +++ hw/xgl/Makefile.in 2006-04-03 09:39:20.000000000 +0200 @@ -454,7 +454,7 @@ XSERVERCFLAGS_LIBS = @XSERVERCFLAGS_LIBS@ XSERVERLIBS_CFLAGS = @XSERVERLIBS_CFLAGS@ XSERVERLIBS_LIBS = @XSERVERLIBS_LIBS@ -XSERVER_LIBS = @XSERVER_LIBS@ +XSERVER_LIBS = @XSERVER_LIBS@ ../../dix/libxpstubs.la XTRAP_FALSE = @XTRAP_FALSE@ XTRAP_TRUE = @XTRAP_TRUE@ XTSTEXAMPLES_DEP_CFLAGS = @XTSTEXAMPLES_DEP_CFLAGS@ ++++++ xorg-server-1.0.1.tar.bz2 -> xorg-server-1.1.99.1.tar.bz2 ++++++ ++++ 112640 lines of diff (skipped) ++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++ Remember to have fun...