Mesa (main): turnip: do not ignore early_fragment_tests

GitLab Mirror gitlab-mirror at kemper.freedesktop.org
Mon May 17 09:21:15 UTC 2021


Module: Mesa
Branch: main
Commit: 3a29e45a9084c1ade5b3975bcb29a23290160fcd
URL:    http://cgit.freedesktop.org/mesa/mesa/commit/?id=3a29e45a9084c1ade5b3975bcb29a23290160fcd

Author: Danylo Piliaiev <dpiliaiev at igalia.com>
Date:   Fri May 14 15:35:17 2021 +0300

turnip: do not ignore early_fragment_tests

Specifying "early_fragment_tests" in fragment shader takes precedence
over our internal conditions.

Fixes test:
 dEQP-VK.fragment_operations.early_fragment.early_fragment_tests_stencil

Fixes: b2a60c157e4d6cc62c55d8fe8777f7cbd548a722 "turnip: add LRZ early-z support"

Signed-off-by: Danylo Piliaiev <dpiliaiev at igalia.com>
Reviewed-by: Emma Anholt <emma at anholt.net>
Reviewed-by: Samuel Iglesias Gonsálvez <siglesias at igalia.com>
Part-of: <https://gitlab.freedesktop.org/mesa/mesa/-/merge_requests/10803>

---

 src/freedreno/ci/deqp-freedreno-a630-fails.txt | 1 -
 src/freedreno/vulkan/tu_cmd_buffer.c           | 4 ++++
 src/freedreno/vulkan/tu_pipeline.c             | 1 +
 src/freedreno/vulkan/tu_private.h              | 1 +
 4 files changed, 6 insertions(+), 1 deletion(-)

diff --git a/src/freedreno/ci/deqp-freedreno-a630-fails.txt b/src/freedreno/ci/deqp-freedreno-a630-fails.txt
index 938593db231..7cc29115a07 100644
--- a/src/freedreno/ci/deqp-freedreno-a630-fails.txt
+++ b/src/freedreno/ci/deqp-freedreno-a630-fails.txt
@@ -40,7 +40,6 @@ dEQP-VK.draw.shader_viewport_index.vertex_shader_5,Fail
 dEQP-VK.draw.shader_viewport_index.vertex_shader_6,Fail
 dEQP-VK.draw.shader_viewport_index.vertex_shader_7,Fail
 dEQP-VK.draw.shader_viewport_index.vertex_shader_9,Fail
-dEQP-VK.fragment_operations.early_fragment.early_fragment_tests_stencil,Fail
 dEQP-VK.glsl.atomic_operations.add_unsigned_geometry,Fail
 dEQP-VK.glsl.atomic_operations.and_signed_geometry,Fail
 dEQP-VK.glsl.atomic_operations.and_unsigned_geometry,Fail
diff --git a/src/freedreno/vulkan/tu_cmd_buffer.c b/src/freedreno/vulkan/tu_cmd_buffer.c
index 1841fd3b80d..e209bc9ee4e 100644
--- a/src/freedreno/vulkan/tu_cmd_buffer.c
+++ b/src/freedreno/vulkan/tu_cmd_buffer.c
@@ -3594,6 +3594,10 @@ tu6_build_depth_plane_z_mode(struct tu_cmd_buffer *cmd)
    if (cmd->state.pipeline->lrz.force_late_z || !depth_test_enable)
       zmode = A6XX_LATE_Z;
 
+   /* User defined early tests take precedence above all else */
+   if (cmd->state.pipeline->lrz.early_fragment_tests)
+      zmode = A6XX_EARLY_Z;
+
    tu_cs_emit_pkt4(&cs, REG_A6XX_GRAS_SU_DEPTH_PLANE_CNTL, 1);
    tu_cs_emit(&cs, A6XX_GRAS_SU_DEPTH_PLANE_CNTL_Z_MODE(zmode));
 
diff --git a/src/freedreno/vulkan/tu_pipeline.c b/src/freedreno/vulkan/tu_pipeline.c
index c974eac4826..c3931079553 100644
--- a/src/freedreno/vulkan/tu_pipeline.c
+++ b/src/freedreno/vulkan/tu_pipeline.c
@@ -1442,6 +1442,7 @@ tu6_emit_fs_outputs(struct tu_cs *cs,
 
    if (pipeline) {
       pipeline->lrz.fs_has_kill = fs->has_kill;
+      pipeline->lrz.early_fragment_tests = fs->shader->nir->info.fs.early_fragment_tests;
 
       if ((fs->shader && !fs->shader->nir->info.fs.early_fragment_tests) &&
           (fs->no_earlyz || fs->has_kill || fs->writes_pos || fs->writes_stencilref || no_earlyz || fs->writes_smask)) {
diff --git a/src/freedreno/vulkan/tu_private.h b/src/freedreno/vulkan/tu_private.h
index ea70b5e4547..341c7c90a7c 100644
--- a/src/freedreno/vulkan/tu_private.h
+++ b/src/freedreno/vulkan/tu_private.h
@@ -862,6 +862,7 @@ struct tu_lrz_pipeline
    uint32_t force_disable_mask;
    bool fs_has_kill;
    bool force_late_z;
+   bool early_fragment_tests;
 };
 
 struct tu_lrz_state



More information about the mesa-commit mailing list