summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
-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