vc4: Add support for depth texturing.
authorEric Anholt <eric@anholt.net>
Sun, 7 Sep 2014 19:53:03 +0000 (12:53 -0700)
committerEric Anholt <eric@anholt.net>
Wed, 10 Sep 2014 03:38:39 +0000 (20:38 -0700)
src/gallium/drivers/vc4/vc4_program.c

index 2f85cc6ee3cef2104624191e18b25105e73d5536..ba6ed3c243eedfe72b08cf7bfe6937464b4bd257 100644 (file)
@@ -499,11 +499,21 @@ tgsi_to_qir_tex(struct vc4_compile *c,
         c->num_texture_samples++;
         struct qreg r4 = qir_TEX_RESULT(c);
 
+        enum pipe_format format = c->key->tex_format[unit];
+
         struct qreg unpacked[4];
-        for (int i = 0; i < 4; i++)
-                unpacked[i] = qir_R4_UNPACK(c, r4, i);
+        if (util_format_is_depth_or_stencil(format)) {
+                struct qreg depthf = qir_ITOF(c, qir_SHR(c, r4,
+                                                         qir_uniform_ui(c, 8)));
+                struct qreg normalized = qir_FMUL(c, depthf,
+                                                  qir_uniform_f(c, 1.0f/0xffffff));
+                for (int i = 0; i < 4; i++)
+                        unpacked[i] = normalized;
+        } else {
+                for (int i = 0; i < 4; i++)
+                        unpacked[i] = qir_R4_UNPACK(c, r4, i);
+        }
 
-        enum pipe_format format = c->key->tex_format[unit];
         const uint8_t *swiz = vc4_get_format_swizzle(format);
         for (int i = 0; i < 4; i++) {
                 if (!(tgsi_inst->Dst[0].Register.WriteMask & (1 << i)))