Mesa (master): vc4: Fix triangle-guardband-viewport piglit test.

Eric Anholt anholt at kemper.freedesktop.org
Fri Dec 12 07:53:10 UTC 2014


Module: Mesa
Branch: master
Commit: 0ae5e002e090c5e1bd237fa3f23549f9ab105a44
URL:    http://cgit.freedesktop.org/mesa/mesa/commit/?id=0ae5e002e090c5e1bd237fa3f23549f9ab105a44

Author: Eric Anholt <eric at anholt.net>
Date:   Thu Dec 11 20:11:21 2014 -0800

vc4: Fix triangle-guardband-viewport piglit test.

The original Broadcom driver also did this with the viewport.

---

 src/gallium/drivers/vc4/vc4_emit.c |   19 ++++++++++++++-----
 1 file changed, 14 insertions(+), 5 deletions(-)

diff --git a/src/gallium/drivers/vc4/vc4_emit.c b/src/gallium/drivers/vc4/vc4_emit.c
index 8df7073..6856441 100644
--- a/src/gallium/drivers/vc4/vc4_emit.c
+++ b/src/gallium/drivers/vc4/vc4_emit.c
@@ -28,12 +28,21 @@ vc4_emit_state(struct pipe_context *pctx)
 {
         struct vc4_context *vc4 = vc4_context(pctx);
 
-        if (vc4->dirty & VC4_DIRTY_SCISSOR) {
+        if (vc4->dirty & (VC4_DIRTY_SCISSOR | VC4_DIRTY_VIEWPORT)) {
+                float *vpscale = vc4->viewport.scale;
+                float *vptranslate = vc4->viewport.translate;
+                float vp_minx = -fabs(vpscale[0]) + vptranslate[0];
+                float vp_maxx = fabs(vpscale[0]) + vptranslate[0];
+                float vp_miny = -fabs(vpscale[1]) + vptranslate[1];
+                float vp_maxy = fabs(vpscale[1]) + vptranslate[1];
+                uint32_t minx = MAX2(vc4->scissor.minx, vp_minx);
+                uint32_t miny = MAX2(vc4->scissor.miny, vp_miny);
+
                 cl_u8(&vc4->bcl, VC4_PACKET_CLIP_WINDOW);
-                cl_u16(&vc4->bcl, vc4->scissor.minx);
-                cl_u16(&vc4->bcl, vc4->scissor.miny);
-                cl_u16(&vc4->bcl, vc4->scissor.maxx - vc4->scissor.minx);
-                cl_u16(&vc4->bcl, vc4->scissor.maxy - vc4->scissor.miny);
+                cl_u16(&vc4->bcl, minx);
+                cl_u16(&vc4->bcl, miny);
+                cl_u16(&vc4->bcl, MIN2(vc4->scissor.maxx, vp_maxx) - minx);
+                cl_u16(&vc4->bcl, MIN2(vc4->scissor.maxy, vp_maxy) - miny);
         }
 
         if (vc4->dirty & (VC4_DIRTY_RASTERIZER | VC4_DIRTY_ZSA)) {




More information about the mesa-commit mailing list