From a65c605365f80b656fae0fab01012124807d92aa Mon Sep 17 00:00:00 2001 From: Iago Toral Quiroga Date: Fri, 3 Dec 2021 10:22:45 +0100 Subject: [PATCH] broadcom/compiler: track passthrough Z writes MIME-Version: 1.0 Content-Type: text/plain; charset=utf8 Content-Transfer-Encoding: 8bit In some cases we need to make the shaders write the Z value produced from rasterization (FEP). Track these instances because they are relevant to early EZ setup. Reviewed-by: Alejandro Piñeiro Part-of: --- src/broadcom/compiler/nir_to_vir.c | 1 + src/broadcom/compiler/v3d_compiler.h | 2 ++ src/broadcom/compiler/vir.c | 1 + 3 files changed, 4 insertions(+) diff --git a/src/broadcom/compiler/nir_to_vir.c b/src/broadcom/compiler/nir_to_vir.c index 028c380..6e64520 100644 --- a/src/broadcom/compiler/nir_to_vir.c +++ b/src/broadcom/compiler/nir_to_vir.c @@ -1741,6 +1741,7 @@ emit_frag_end(struct v3d_compile *c) /* Shader doesn't write to gl_FragDepth, take Z from * FEP. */ + c->writes_z_from_fep = true; inst = vir_MOV_dest(c, tlbu_reg, vir_nop_reg()); if (c->devinfo->ver >= 42) { diff --git a/src/broadcom/compiler/v3d_compiler.h b/src/broadcom/compiler/v3d_compiler.h index d7b2fb8..dda8814 100644 --- a/src/broadcom/compiler/v3d_compiler.h +++ b/src/broadcom/compiler/v3d_compiler.h @@ -655,6 +655,7 @@ struct v3d_compile { bool uses_center_w; bool writes_z; + bool writes_z_from_fep; bool reads_z; bool uses_implicit_point_line_varyings; @@ -968,6 +969,7 @@ struct v3d_fs_prog_data { uint8_t num_inputs; bool writes_z; + bool writes_z_from_fep; bool disable_ez; bool uses_center_w; bool uses_implicit_point_line_varyings; diff --git a/src/broadcom/compiler/vir.c b/src/broadcom/compiler/vir.c index 764000b..eb2f380 100644 --- a/src/broadcom/compiler/vir.c +++ b/src/broadcom/compiler/vir.c @@ -807,6 +807,7 @@ v3d_fs_set_prog_data(struct v3d_compile *c, { v3d_set_fs_prog_data_inputs(c, prog_data); prog_data->writes_z = c->writes_z; + prog_data->writes_z_from_fep = c->writes_z_from_fep; prog_data->disable_ez = !c->s->info.fs.early_fragment_tests; prog_data->uses_center_w = c->uses_center_w; prog_data->uses_implicit_point_line_varyings = -- 2.7.4