This commit is contained in:
parent
bcca5ca8d5
commit
94a9ca698d
237
Mesa-6.5.2-fix_radeon_cliprect.diff
Normal file
237
Mesa-6.5.2-fix_radeon_cliprect.diff
Normal file
@ -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;
|
||||
}
|
||||
|
||||
|
@ -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
|
||||
|
||||
|
@ -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)
|
||||
|
Loading…
Reference in New Issue
Block a user