summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorDanylo Piliaiev <dpiliaiev@igalia.com>2021-02-18 19:15:14 +0200
committerMarge Bot <eric+marge@anholt.net>2021-02-19 09:16:00 +0000
commitb6b3b38434a87b21eb8811baca7f6244d24e33aa (patch)
treeb8a8b1a56e597d4a407d198df25bc0266e8e1231
parent88f42ea93e0dbe16ef56c965083d2d9324a423cf (diff)
turnip: consider HW limit on number of views when apply multipos opt
Blob doesn't apply multipos optimization starting from 11 views even on a650, however in practice, with the limit of 16 views, tests pass on a640/a650 and fail on a630. Fixes tests: dEQP-VK.multiview.draw_indexed.max_multi_view_view_count dEQP-VK.multiview.input_attachments.max_multi_view_view_count dEQP-VK.multiview.masks.max_multi_view_view_count dEQP-VK.multiview.multisample.max_multi_view_view_count dEQP-VK.multiview.queries.max_multi_view_view_count dEQP-VK.multiview.renderpass2.index.fragment_shader.max_multi_view_view_count dEQP-VK.multiview.secondary_cmd_buffer.max_multi_view_view_count Fixes: 8d275778 ("tu: Enable multi-position output") Signed-off-by: Danylo Piliaiev <dpiliaiev@igalia.com> Part-of: <https://gitlab.freedesktop.org/mesa/mesa/-/merge_requests/9135>
-rw-r--r--ci-expects/freedreno/deqp-freedreno-a630-fails.txt7
-rw-r--r--src/freedreno/vulkan/tu_nir_lower_multiview.c10
2 files changed, 9 insertions, 8 deletions
diff --git a/ci-expects/freedreno/deqp-freedreno-a630-fails.txt b/ci-expects/freedreno/deqp-freedreno-a630-fails.txt
index b63d6b2782e..204802657ff 100644
--- a/ci-expects/freedreno/deqp-freedreno-a630-fails.txt
+++ b/ci-expects/freedreno/deqp-freedreno-a630-fails.txt
@@ -54,13 +54,6 @@ dEQP-VK.memory_model.message_passing.core11.u32.coherent.fence_fence.atomicwrite
dEQP-VK.memory_model.write_after_read.core11.u32.coherent.fence_fence.atomicwrite.workgroup.payload_local.image.guard_nonlocal.workgroup.comp,Fail
dEQP-VK.memory.requirements.dedicated_allocation.buffer.regular,Fail
dEQP-VK.memory.requirements.dedicated_allocation.image.transient_tiling_optimal,Fail
-dEQP-VK.multiview.draw_indexed.max_multi_view_view_count,Fail
-dEQP-VK.multiview.input_attachments.max_multi_view_view_count,Fail
-dEQP-VK.multiview.masks.max_multi_view_view_count,Fail
-dEQP-VK.multiview.multisample.max_multi_view_view_count,Fail
-dEQP-VK.multiview.queries.max_multi_view_view_count,Fail
-dEQP-VK.multiview.renderpass2.index.fragment_shader.max_multi_view_view_count,Fail
-dEQP-VK.multiview.secondary_cmd_buffer.max_multi_view_view_count,Fail
dEQP-VK.pipeline.extended_dynamic_state.after_pipelines.depth_compare_greater_equal_greater,Fail
dEQP-VK.pipeline.extended_dynamic_state.before_draw.depth_compare_always_greater,Fail
dEQP-VK.pipeline.extended_dynamic_state.before_draw.depth_compare_greater_equal_greater_then_equal,Fail
diff --git a/src/freedreno/vulkan/tu_nir_lower_multiview.c b/src/freedreno/vulkan/tu_nir_lower_multiview.c
index d69bb36cc77..b039afdde4f 100644
--- a/src/freedreno/vulkan/tu_nir_lower_multiview.c
+++ b/src/freedreno/vulkan/tu_nir_lower_multiview.c
@@ -83,6 +83,13 @@ tu_nir_lower_multiview(nir_shader *nir, uint32_t mask, bool *multi_pos_output,
unsigned num_views = util_logbase2(mask) + 1;
+ /* Blob doesn't apply multipos optimization starting from 11 views
+ * even on a650, however in practice, with the limit of 16 views,
+ * tests pass on a640/a650 and fail on a630.
+ */
+ unsigned max_views_for_multipos =
+ dev->physical_device->info.a6xx.supports_multiview_mask ? 16 : 10;
+
/* Speculatively assign output locations so that we know num_outputs. We
* will assign output locations for real after this pass.
*/
@@ -93,7 +100,8 @@ tu_nir_lower_multiview(nir_shader *nir, uint32_t mask, bool *multi_pos_output,
* overflow VPC with the extra copies of gl_Position.
*/
if (likely(!(dev->physical_device->instance->debug_flags & TU_DEBUG_NOMULTIPOS)) &&
- num_outputs + (num_views - 1) <= 32 && nir_can_lower_multiview(nir)) {
+ num_views <= max_views_for_multipos && num_outputs + (num_views - 1) <= 32 &&
+ nir_can_lower_multiview(nir)) {
*multi_pos_output = true;
/* It appears that the multiview mask is ignored when multi-position