[Mesa-dev] [PATCH] r200: revalidate after radeon_update_renderbuffers

Alex Deucher alexdeucher at gmail.com
Mon Oct 11 12:23:36 PDT 2010


On Sun, Oct 10, 2010 at 11:04 AM, Daniel Vetter <daniel.vetter at ffwll.ch> 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 <mario.kleiner at tuebingen.mpg.de>
> Signed-off-by: Daniel Vetter <daniel.vetter at ffwll.ch>
> ---
> 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
> mesa-dev at lists.freedesktop.org
> http://lists.freedesktop.org/mailman/listinfo/mesa-dev
>


More information about the mesa-dev mailing list