From 94a9ca698d7d5ab3c7db084b1aec7ce509fa398982920273aaa429a7a3c203b2 Mon Sep 17 00:00:00 2001 From: OBS User unknown Date: Thu, 12 Apr 2007 16:10:59 +0000 Subject: [PATCH] OBS-URL: https://build.opensuse.org/package/show/openSUSE:Factory/Mesa?expand=0&rev=8 --- Mesa-6.5.2-fix_radeon_cliprect.diff | 237 ++++++++++++++++++++++++++++ Mesa.changes | 6 + Mesa.spec | 7 +- 3 files changed, 249 insertions(+), 1 deletion(-) create mode 100644 Mesa-6.5.2-fix_radeon_cliprect.diff diff --git a/Mesa-6.5.2-fix_radeon_cliprect.diff b/Mesa-6.5.2-fix_radeon_cliprect.diff new file mode 100644 index 0000000..760b093 --- /dev/null +++ b/Mesa-6.5.2-fix_radeon_cliprect.diff @@ -0,0 +1,237 @@ +unchanged: +--- a/src/mesa/drivers/dri/radeon/radeon_context.c ++++ b/src/mesa/drivers/dri/radeon/radeon_context.c +@@ -594,12 +594,14 @@ radeonMakeCurrent( __DRIcontextPrivate * + driDrawableInitVBlank( driDrawPriv, newCtx->vblank_flags, + &newCtx->vbl_seq ); + } +- +- if ( (newCtx->dri.drawable != driDrawPriv) +- || (newCtx->dri.readable != driReadPriv) ) { ++ ++ newCtx->dri.readable = driReadPriv; ++ ++ if ( (newCtx->dri.drawable != driDrawPriv) || ++ newCtx->lastStamp != driDrawPriv->lastStamp ) { + newCtx->dri.drawable = driDrawPriv; +- newCtx->dri.readable = driReadPriv; + ++ radeonSetCliprects(newCtx); + radeonUpdateWindow( newCtx->glCtx ); + radeonUpdateViewportOffset( newCtx->glCtx ); + } +unchanged: +--- a/src/mesa/drivers/dri/radeon/radeon_lock.c ++++ b/src/mesa/drivers/dri/radeon/radeon_lock.c +@@ -96,7 +96,6 @@ void radeonGetLock( radeonContextPtr rme + radeonSetCliprects( rmesa ); + radeonUpdateViewportOffset( rmesa->glCtx ); + driUpdateFramebufferSize(rmesa->glCtx, drawable); +- rmesa->lastStamp = drawable->lastStamp; + } + + RADEON_STATECHANGE( rmesa, ctx ); +unchanged: +--- a/src/mesa/drivers/dri/radeon/radeon_state.c ++++ b/src/mesa/drivers/dri/radeon/radeon_state.c +@@ -1675,6 +1675,8 @@ void radeonSetCliprects( radeonContextPt + + if (rmesa->state.scissor.enabled) + radeonRecalcScissorRects( rmesa ); ++ ++ rmesa->lastStamp = drawable->lastStamp; + } + + +unchanged: +--- b/src/mesa/drivers/dri/r200/r200_context.c ++++ b/src/mesa/drivers/dri/r200/r200_context.c +@@ -673,11 +673,13 @@ + &newCtx->vbl_seq ); + } + ++ newCtx->dri.readable = driReadPriv; ++ + if ( newCtx->dri.drawable != driDrawPriv || +- newCtx->dri.readable != driReadPriv ) { ++ newCtx->lastStamp != driDrawPriv->lastStamp ) { + newCtx->dri.drawable = driDrawPriv; +- newCtx->dri.readable = driReadPriv; + ++ r200SetCliprects(newCtx); + r200UpdateWindow( newCtx->glCtx ); + r200UpdateViewportOffset( newCtx->glCtx ); + } +unchanged: +--- b/src/mesa/drivers/dri/r200/r200_lock.c ++++ b/src/mesa/drivers/dri/r200/r200_lock.c +@@ -92,13 +92,9 @@ + + if ( rmesa->lastStamp != drawable->lastStamp ) { + r200UpdatePageFlipping( rmesa ); +- if (rmesa->glCtx->DrawBuffer->_ColorDrawBufferMask[0] == BUFFER_BIT_BACK_LEFT) +- r200SetCliprects( rmesa, GL_BACK_LEFT ); +- else +- r200SetCliprects( rmesa, GL_FRONT_LEFT ); ++ r200SetCliprects( rmesa ); + r200UpdateViewportOffset( rmesa->glCtx ); + driUpdateFramebufferSize(rmesa->glCtx, drawable); +- rmesa->lastStamp = drawable->lastStamp; + } + + R200_STATECHANGE( rmesa, ctx ); +unchanged: +--- b/src/mesa/drivers/dri/r200/r200_state.c ++++ b/src/mesa/drivers/dri/r200/r200_state.c +@@ -1691,6 +1691,11 @@ + #define SUBPIXEL_X 0.125 + #define SUBPIXEL_Y 0.125 + ++ ++/** ++ * Called when window size or position changes or viewport or depth range ++ * state is changed. We update the hardware viewport state here. ++ */ + void r200UpdateWindow( GLcontext *ctx ) + { + r200ContextPtr rmesa = R200_CONTEXT(ctx); +@@ -1843,19 +1848,18 @@ + } + + +-void r200SetCliprects( r200ContextPtr rmesa, GLenum mode ) ++/* ++ * Set up the cliprects for either front or back-buffer drawing. ++ */ ++void r200SetCliprects( r200ContextPtr rmesa ) + { + __DRIdrawablePrivate *const drawable = rmesa->dri.drawable; + __DRIdrawablePrivate *const readable = rmesa->dri.readable; + GLframebuffer *const draw_fb = (GLframebuffer*) drawable->driverPrivate; + GLframebuffer *const read_fb = (GLframebuffer*) readable->driverPrivate; + +- switch ( mode ) { +- case GL_FRONT_LEFT: +- rmesa->numClipRects = drawable->numClipRects; +- rmesa->pClipRects = drawable->pClipRects; +- break; +- case GL_BACK_LEFT: ++ if (draw_fb->_ColorDrawBufferMask[0] ++ == BUFFER_BIT_BACK_LEFT) { + /* Can't ignore 2d windows if we are page flipping. + */ + if ( drawable->numBackClipRects == 0 || rmesa->doPageFlip ) { +@@ -1866,11 +1870,12 @@ + rmesa->numClipRects = drawable->numBackClipRects; + rmesa->pClipRects = drawable->pBackClipRects; + } +- break; +- default: +- fprintf(stderr, "bad mode in r200SetCliprects\n"); +- return; + } ++ else { ++ /* front buffer (or none, or multiple buffers) */ ++ rmesa->numClipRects = drawable->numClipRects; ++ rmesa->pClipRects = drawable->pClipRects; ++ } + + if ((draw_fb->Width != drawable->w) || (draw_fb->Height != drawable->h)) { + _mesa_resize_framebuffer(rmesa->glCtx, draw_fb, +@@ -1889,6 +1894,8 @@ + + if (rmesa->state.scissor.enabled) + r200RecalcScissorRects( rmesa ); ++ ++ rmesa->lastStamp = drawable->lastStamp; + } + + +@@ -1908,19 +1915,17 @@ + */ + switch ( ctx->DrawBuffer->_ColorDrawBufferMask[0] ) { + case BUFFER_BIT_FRONT_LEFT: +- FALLBACK( rmesa, R200_FALLBACK_DRAW_BUFFER, GL_FALSE ); +- r200SetCliprects( rmesa, GL_FRONT_LEFT ); +- break; + case BUFFER_BIT_BACK_LEFT: + FALLBACK( rmesa, R200_FALLBACK_DRAW_BUFFER, GL_FALSE ); +- r200SetCliprects( rmesa, GL_BACK_LEFT ); + break; + default: +- /* GL_NONE or GL_FRONT_AND_BACK or stereo left&right, etc */ ++ /* 0 (GL_NONE) buffers or multiple color drawing buffers */ + FALLBACK( rmesa, R200_FALLBACK_DRAW_BUFFER, GL_TRUE ); + return; + } + ++ r200SetCliprects( rmesa ); ++ + /* We'll set the drawing engine's offset/pitch parameters later + * when we update other state. + */ +unchanged: +--- a/src/mesa/drivers/dri/r200/r200_state.h ++++ b/src/mesa/drivers/dri/r200/r200_state.h +@@ -44,7 +44,7 @@ extern void r200InitTnlFuncs( GLcontext + + extern void r200UpdateMaterial( GLcontext *ctx ); + +-extern void r200SetCliprects( r200ContextPtr rmesa, GLenum mode ); ++extern void r200SetCliprects( r200ContextPtr rmesa ); + extern void r200RecalcScissorRects( r200ContextPtr rmesa ); + extern void r200UpdateViewportOffset( GLcontext *ctx ); + extern void r200UpdateWindow( GLcontext *ctx ); +only in patch2: +unchanged: +--- b/src/mesa/drivers/dri/r300/radeon_context.c ++++ b/src/mesa/drivers/dri/r300/radeon_context.c +@@ -51,6 +51,7 @@ + #include "radeon_macros.h" + #include "radeon_reg.h" + ++#include "radeon_state.h" + #include "r300_state.h" + + #include "utils.h" +@@ -272,11 +273,13 @@ + &radeon->vbl_seq); + } + ++ radeon->dri.readable = driReadPriv; ++ + if (radeon->dri.drawable != driDrawPriv || +- radeon->dri.readable != driReadPriv) { ++ radeon->lastStamp != driDrawPriv->lastStamp) { + radeon->dri.drawable = driDrawPriv; +- radeon->dri.readable = driReadPriv; + ++ radeonSetCliprects(radeon); + r300UpdateWindow(radeon->glCtx); + r300UpdateViewportOffset(radeon->glCtx); + } +only in patch2: +unchanged: +--- a/src/mesa/drivers/dri/r300/radeon_lock.c ++++ b/src/mesa/drivers/dri/r300/radeon_lock.c +@@ -90,7 +90,6 @@ static void r300RegainedLock(radeonConte + #else + radeonUpdateScissor(radeon->glCtx); + #endif +- radeon->lastStamp = drawable->lastStamp; + } + + if (sarea->ctx_owner != radeon->dri.hwContext) { +only in patch2: +unchanged: +--- a/src/mesa/drivers/dri/r300/radeon_state.c ++++ b/src/mesa/drivers/dri/r300/radeon_state.c +@@ -185,6 +185,8 @@ void radeonSetCliprects(radeonContextPtr + + if (radeon->state.scissor.enabled) + radeonRecalcScissorRects(radeon); ++ ++ radeon->lastStamp = drawable->lastStamp; + } + + diff --git a/Mesa.changes b/Mesa.changes index 2dfbead..3c4e09b 100644 --- a/Mesa.changes +++ b/Mesa.changes @@ -1,3 +1,9 @@ +------------------------------------------------------------------- +Tue Apr 10 15:29:53 CEST 2007 - sndirsch@suse.de + +- Mesa-6.5.2-fix_radeon_cliprect.diff: + * fixes X.Org Bug #9876 + ------------------------------------------------------------------- Wed Apr 4 22:03:24 CEST 2007 - sndirsch@suse.de diff --git a/Mesa.spec b/Mesa.spec index 7bb6cb8..b50f60b 100644 --- a/Mesa.spec +++ b/Mesa.spec @@ -19,7 +19,7 @@ Provides: xorg-x11-Mesa Obsoletes: xorg-x11-Mesa Autoreqprov: on Version: 6.5.2 -Release: 25 +Release: 27 Summary: Mesa is a 3-D graphics library with an API which is very similar to that of OpenGL.* Source: Mesa-%{version}.tar.bz2 Source3: README.updates @@ -45,6 +45,7 @@ Patch16: bug-211314-patch-9.diff Patch17: bug-211314-patch-10.diff Patch18: bug-211314-patch-11.diff Patch19: bug-211314_mesa-refcount-memleak-fixes.diff +Patch20: Mesa-6.5.2-fix_radeon_cliprect.diff BuildRoot: %{_tmppath}/%{name}-%{version}-build %description @@ -142,6 +143,7 @@ rm -rf src/glw/ %patch17 -p1 %patch18 -p1 %patch19 -p1 +%patch20 -p1 %build @@ -260,6 +262,9 @@ rm -rf $RPM_BUILD_ROOT /usr/%{_lib}/libMesaGL.a %changelog +* Tue Apr 10 2007 - sndirsch@suse.de +- Mesa-6.5.2-fix_radeon_cliprect.diff: + * fixes X.Org Bug #9876 * Wed Apr 04 2007 - sndirsch@suse.de - bug-211314_mesa-refcount-memleak-fixes.diff: * Fix for memleaks and refount bugs (Bug #211314)