238 lines
7.2 KiB
Diff
238 lines
7.2 KiB
Diff
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;
|
|
}
|
|
|
|
|