mesa/r300classic: Fix dri2Invalidate/radeon_prepare_render for page flipping.
authorMario Kleiner <mario.kleiner@tuebingen.mpg.de>
Mon, 8 Nov 2010 03:09:33 +0000 (04:09 +0100)
committerAlex Deucher <alexdeucher@gmail.com>
Mon, 8 Nov 2010 18:53:23 +0000 (13:53 -0500)
A call to radeon_prepare_render() at the beginning of draw
operations was placed too deep in the call chain,
inside r300RunRenderPrimitive(), instead of
r300DrawPrims() where it belongs. This leads to
emission of stale target color renderbuffer into the cs if
bufferswaps via page-flipping are used, and thereby causes
massive rendering corruption due to unsynchronized
rendering into the active frontbuffer.

This patch fixes such problems for use with the
upcoming radeon page-flipping patches.

Signed-off-by: Mario Kleiner <mario.kleiner@tuebingen.mpg.de>
src/mesa/drivers/dri/r300/r300_draw.c
src/mesa/drivers/dri/r300/r300_render.c

index 81769e1ee5f53d001cd935d47d3bef384addbf3a..0c4d8537c61a53627edd1fb73def61c37fae5849 100644 (file)
@@ -717,6 +717,10 @@ static void r300DrawPrims(struct gl_context *ctx,
                         GLuint max_index)
 {
        GLboolean retval;
+       struct r300_context *r300 = R300_CONTEXT(ctx);
+       radeonContextPtr radeon = &r300->radeon;
+
+       radeon_prepare_render(radeon);
 
        /* This check should get folded into just the places that
         * min/max index are really needed.
index 821318e7a59539212deaa6bc509e0741d2bf7e14..44090ec2894d2a57ea63885d34b0d9dd5667488e 100644 (file)
@@ -327,8 +327,6 @@ void r300RunRenderPrimitive(struct gl_context * ctx, int start, int end, int pri
        BATCH_LOCALS(&rmesa->radeon);
        int type, num_verts;
 
-       radeon_prepare_render(&rmesa->radeon);
-
        type = r300PrimitiveType(rmesa, prim);
        num_verts = r300NumVerts(rmesa, end - start, prim);