vc4: Add proper translation from Zc to Zs for vertex output.
authorEric Anholt <eric@anholt.net>
Fri, 1 Aug 2014 23:02:37 +0000 (16:02 -0700)
committerEric Anholt <eric@anholt.net>
Mon, 11 Aug 2014 21:45:31 +0000 (14:45 -0700)
This fixes the remaining failure in depthfunc.

src/gallium/drivers/vc4/vc4_program.c
src/gallium/drivers/vc4/vc4_qir.h

index 963e6eb3b44a51e1287725f6531821c77e3b8ce6..82526300879624aeb2dcff90394b2adc9fc77fb6 100644 (file)
@@ -778,7 +778,14 @@ emit_zs_write(struct tgsi_to_qir *trans, struct qreg rcp_w)
 {
         struct qcompile *c = trans->c;
 
-        qir_VPM_WRITE(c, qir_FMUL(c, trans->outputs[2], rcp_w));
+        struct qreg zscale = add_uniform(trans, QUNIFORM_VIEWPORT_Z_SCALE, 0);
+        struct qreg zoffset = add_uniform(trans, QUNIFORM_VIEWPORT_Z_OFFSET, 0);
+
+        qir_VPM_WRITE(c, qir_FMUL(c, qir_FADD(c, qir_FMUL(c,
+                                                          trans->outputs[2],
+                                                          zscale),
+                                              zoffset),
+                                  rcp_w));
 }
 
 static void
@@ -1241,6 +1248,13 @@ vc4_write_uniforms(struct vc4_context *vc4, struct vc4_compiled_shader *shader,
                                                    -16.0f / 2.0f));
                         break;
 
+                case QUNIFORM_VIEWPORT_Z_OFFSET:
+                        cl_u32(&vc4->uniforms, fui(vc4->viewport.translate[2]));
+                        break;
+                case QUNIFORM_VIEWPORT_Z_SCALE:
+                        cl_u32(&vc4->uniforms, fui(vc4->viewport.scale[2]));
+                        break;
+
                 case QUNIFORM_TEXTURE_CONFIG_P0:
                         write_texture_p0(vc4, texstate, uinfo->data[i]);
                         break;
index b578e7e0b9ec3f6d55a4f5b8f6e00dc08bcb1d83..5d1f088ee374a94bbe6ed3007a03096d70a42ff2 100644 (file)
@@ -140,6 +140,9 @@ enum quniform_contents {
         QUNIFORM_VIEWPORT_Y_SCALE,
         /** @} */
 
+        QUNIFORM_VIEWPORT_Z_OFFSET,
+        QUNIFORM_VIEWPORT_Z_SCALE,
+
         /**
          * A reference to a texture config parameter 0 uniform.
          *