diff options
author | Eric Anholt <[email protected]> | 2014-09-07 12:53:03 -0700 |
---|---|---|
committer | Eric Anholt <[email protected]> | 2014-09-09 20:38:39 -0700 |
commit | e7a6c544739a266bae02813da2fa775f146d5d72 (patch) | |
tree | 335b597b5023f183649407cfb40d88966e38217b /src | |
parent | d952a98c5322e64cb436bd8b0f0064441f37ac77 (diff) |
vc4: Add support for depth texturing.
Diffstat (limited to 'src')
-rw-r--r-- | src/gallium/drivers/vc4/vc4_program.c | 16 |
1 files changed, 13 insertions, 3 deletions
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))) |