summaryrefslogtreecommitdiffstats
path: root/src/gallium/drivers/vc4/vc4_program.c
diff options
context:
space:
mode:
Diffstat (limited to 'src/gallium/drivers/vc4/vc4_program.c')
-rw-r--r--src/gallium/drivers/vc4/vc4_program.c16
1 files changed, 15 insertions, 1 deletions
diff --git a/src/gallium/drivers/vc4/vc4_program.c b/src/gallium/drivers/vc4/vc4_program.c
index 963e6eb3b44..82526300879 100644
--- a/src/gallium/drivers/vc4/vc4_program.c
+++ b/src/gallium/drivers/vc4/vc4_program.c
@@ -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;