[Mesa-dev] [PATCH] st/mesa: only flip stipple pattern for winsys fbo's

Ilia Mirkin imirkin at alum.mit.edu
Wed Oct 12 18:06:26 UTC 2016


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 on nv50 and nvc0.

Signed-off-by: Ilia Mirkin <imirkin at alum.mit.edu>
---

This keeps working on llvmpipe. I assume this is because the emulation
uses fragcoord to determine the effect, which will be fixed up by the
state tracker's wpos logic.

 src/mesa/state_tracker/st_atom_stipple.c | 10 +++++++---
 1 file changed, 7 insertions(+), 3 deletions(-)

diff --git a/src/mesa/state_tracker/st_atom_stipple.c b/src/mesa/state_tracker/st_atom_stipple.c
index a30215f..5f7bf82 100644
--- a/src/mesa/state_tracker/st_atom_stipple.c
+++ b/src/mesa/state_tracker/st_atom_stipple.c
@@ -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);
    }
-- 
2.7.3



More information about the mesa-dev mailing list