diff options
author | Danylo Piliaiev <dpiliaiev@igalia.com> | 2021-05-14 15:35:17 +0300 |
---|---|---|
committer | Danylo Piliaiev <dpiliaiev@igalia.com> | 2021-05-17 11:56:32 +0300 |
commit | 3a29e45a9084c1ade5b3975bcb29a23290160fcd (patch) | |
tree | a0ab224dc44aa164b45393e8990e768170a81906 | |
parent | 075d43821a40eb65b20aa8ded271effe51ff4d95 (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.txt | 1 | ||||
-rw-r--r-- | src/freedreno/vulkan/tu_cmd_buffer.c | 4 | ||||
-rw-r--r-- | src/freedreno/vulkan/tu_pipeline.c | 1 | ||||
-rw-r--r-- | src/freedreno/vulkan/tu_private.h | 1 |
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 |