st/mesa: only flip stipple pattern for winsys fbo's
authorIlia Mirkin <imirkin@alum.mit.edu>
Wed, 12 Oct 2016 18:01:34 +0000 (14:01 -0400)
committerIlia Mirkin <imirkin@alum.mit.edu>
Wed, 12 Oct 2016 21:04:16 +0000 (17:04 -0400)
Gallium is completely oblivious to whether the fbo is flipped or not.
Only flip the stipple pattern when the fbo is flipped as well. Otherwise
the driver has no idea when to unflip the pattern.

Fixes bin/gl-2.1-polygon-stipple-fs -fbo

Signed-off-by: Ilia Mirkin <imirkin@alum.mit.edu>
Reviewed-by: Brian Paul <brianp@vmware.com>
Tested-by: Brian Paul <brianp@vmware.com>
Reviewed-by: Marek Olšák <marek.olsak@amd.com>
src/mesa/state_tracker/st_atom_stipple.c

index a30215ff326ab4163fbdb1f66ac277a45763a888..5f7bf82c0b4169b31f6db10a0d4bf630c19c771b 100644 (file)
@@ -61,7 +61,7 @@ invert_stipple(GLuint dest[32], const GLuint src[32], GLuint winHeight)
 
 
 
-static void 
+static void
 update_stipple( struct st_context *st )
 {
    const struct gl_context *ctx = st->ctx;
@@ -74,8 +74,12 @@ update_stipple( struct st_context *st )
 
       memcpy(st->state.poly_stipple, ctx->PolygonStipple, sz);
 
-      invert_stipple(newStipple.stipple, ctx->PolygonStipple,
-                     ctx->DrawBuffer->Height);
+      if (_mesa_is_user_fbo(ctx->DrawBuffer)) {
+         memcpy(newStipple.stipple, ctx->PolygonStipple, sizeof(newStipple.stipple));
+      } else {
+         invert_stipple(newStipple.stipple, ctx->PolygonStipple,
+                        ctx->DrawBuffer->Height);
+      }
 
       st->pipe->set_polygon_stipple(st->pipe, &newStipple);
    }