summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorDanylo Piliaiev <dpiliaiev@igalia.com>2021-05-14 15:35:17 +0300
committerDanylo Piliaiev <dpiliaiev@igalia.com>2021-05-17 11:56:32 +0300
commit3a29e45a9084c1ade5b3975bcb29a23290160fcd (patch)
treea0ab224dc44aa164b45393e8990e768170a81906
parent075d43821a40eb65b20aa8ded271effe51ff4d95 (diff)
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@igalia.com> Reviewed-by: Emma Anholt <emma@anholt.net> Reviewed-by: Samuel Iglesias Gonsálvez <siglesias@igalia.com> Part-of: <https://gitlab.freedesktop.org/mesa/mesa/-/merge_requests/10803>
-rw-r--r--src/freedreno/ci/deqp-freedreno-a630-fails.txt1
-rw-r--r--src/freedreno/vulkan/tu_cmd_buffer.c4
-rw-r--r--src/freedreno/vulkan/tu_pipeline.c1
-rw-r--r--src/freedreno/vulkan/tu_private.h1
4 files changed, 6 insertions, 1 deletions
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