From e7a6c544739a266bae02813da2fa775f146d5d72 Mon Sep 17 00:00:00 2001 From: Eric Anholt Date: Sun, 7 Sep 2014 12:53:03 -0700 Subject: vc4: Add support for depth texturing. --- src/gallium/drivers/vc4/vc4_program.c | 16 +++++++++++++--- 1 file changed, 13 insertions(+), 3 deletions(-) (limited to 'src/gallium/drivers') diff --git a/src/gallium/drivers/vc4/vc4_program.c b/src/gallium/drivers/vc4/vc4_program.c index 2f85cc6ee3c..ba6ed3c243e 100644 --- a/src/gallium/drivers/vc4/vc4_program.c +++ b/src/gallium/drivers/vc4/vc4_program.c @@ -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))) -- cgit v1.2.3