On Sun, Oct 10, 2010 at 11:04 AM, Daniel Vetter <[email protected]> wrote: > 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. >
Thanks. Pushed to master and 7.9 Alex > 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 > _______________________________________________ mesa-dev mailing list [email protected] http://lists.freedesktop.org/mailman/listinfo/mesa-dev
