By calling radeon_draw_buffers (which sets the necessary flags
in radeon->NewGLState) and revalidating if NewGLState is non-zero
in r200TclPrimitive. This fixes an assert in libdrm (the color-/
depthbuffer was changed but not yet validated) and and stops the
kernel cs checker from complaining about them (when they're too
small).

Thanks to Mario Kleiner for the hint to call radeon_draw_buffer
(instead of my half-broken hack).

v2: Also fix the swtcl r200 path.

Cc: Mario Kleiner <[email protected]>
Signed-off-by: Daniel Vetter <[email protected]>
---
I've also tested on my rv570 agp. r300c seems to suffer from the same           
                                             
problem: it crashes glxgears with and without this patch. r300g seems to be     
                                             
fine.                                                                           
                                             
                                                                                
                                             
I'll see whether I can create a r300c patch, too (after this patch survived     
                                             
review).                                                                        
                                             
                                                                                
                                             
Please review and apply.                                                        
                                             
                                                                                
                                             
Thanks, Daniel                                                                  
                                             

 src/mesa/drivers/dri/r200/r200_swtcl.c             |    3 +++
 src/mesa/drivers/dri/r200/r200_tcl.c               |    2 ++
 .../drivers/dri/radeon/radeon_common_context.c     |    8 +++++---
 3 files changed, 10 insertions(+), 3 deletions(-)

diff --git a/src/mesa/drivers/dri/r200/r200_swtcl.c 
b/src/mesa/drivers/dri/r200/r200_swtcl.c
index dbf4ad4..effe6fb 100644
--- a/src/mesa/drivers/dri/r200/r200_swtcl.c
+++ b/src/mesa/drivers/dri/r200/r200_swtcl.c
@@ -613,6 +613,9 @@ static void r200RasterPrimitive( GLcontext *ctx, GLuint 
hwprim )
    r200ContextPtr rmesa = R200_CONTEXT(ctx);
 
    radeon_prepare_render(&rmesa->radeon);
+   if (rmesa->radeon.NewGLState)
+      r200ValidateState( ctx );
+
 
    if (rmesa->radeon.swtcl.hw_primitive != hwprim) {
       /* need to disable perspective-correct texturing for point sprites */
diff --git a/src/mesa/drivers/dri/r200/r200_tcl.c 
b/src/mesa/drivers/dri/r200/r200_tcl.c
index 4ae0f30..ba54177 100644
--- a/src/mesa/drivers/dri/r200/r200_tcl.c
+++ b/src/mesa/drivers/dri/r200/r200_tcl.c
@@ -265,6 +265,8 @@ void r200TclPrimitive( GLcontext *ctx,
    GLuint newprim = hw_prim | R200_VF_TCL_OUTPUT_VTX_ENABLE;
 
    radeon_prepare_render(&rmesa->radeon);
+   if (rmesa->radeon.NewGLState)
+      r200ValidateState( ctx );
 
    if (newprim != rmesa->tcl.hw_primitive ||
        !discrete_prim[hw_prim&0xf]) {
diff --git a/src/mesa/drivers/dri/radeon/radeon_common_context.c 
b/src/mesa/drivers/dri/radeon/radeon_common_context.c
index 85e4988..8804b9c 100644
--- a/src/mesa/drivers/dri/radeon/radeon_common_context.c
+++ b/src/mesa/drivers/dri/radeon/radeon_common_context.c
@@ -521,6 +521,7 @@ void radeon_prepare_render(radeonContextPtr radeon)
     __DRIcontext *driContext = radeon->dri.context;
     __DRIdrawable *drawable;
     __DRIscreen *screen;
+    struct radeon_framebuffer *draw;
 
     screen = driContext->driScreenPriv;
     if (!screen->dri2.loader)
@@ -531,9 +532,10 @@ void radeon_prepare_render(radeonContextPtr radeon)
        if (drawable->lastStamp != drawable->dri2.stamp)
            radeon_update_renderbuffers(driContext, drawable, GL_FALSE);
 
-       /* Intel driver does the equivalent of this, no clue if it is needed:
-        * radeon_draw_buffer(radeon->glCtx, &(drawable->driverPrivate)->base);
-        */
+       /* Intel driver does the equivalent of this, no clue if it is needed:*/
+       draw = drawable->driverPrivate;
+       radeon_draw_buffer(radeon->glCtx, &draw->base);
+
        driContext->dri2.draw_stamp = drawable->dri2.stamp;
     }
 
-- 
1.7.1

_______________________________________________
mesa-dev mailing list
[email protected]
http://lists.freedesktop.org/mailman/listinfo/mesa-dev

Reply via email to