Add coverage for transition between compute and indirect draw
authorAri Suonpaa <ari.suonpaa@siru.fi>
Thu, 13 Jan 2022 07:55:09 +0000 (09:55 +0200)
committerMatthew Netsch <quic_mnetsch@quicinc.com>
Sun, 16 Jan 2022 00:14:03 +0000 (00:14 +0000)
This change adds a new test parameter to indirect draw tests which
enables sourcing the indirect draw data from a compute shader.

Also removed a beginCommandBuffer call from
DrawTestsBaseClass::beginRender as the compute commands needed to
be added before rendering. There wasn't an endCommandBuffer call
in endRender function either, so it makes more sense to also have
the beginCommandBuffer outside the function.

VK-GL-CTS Issue: 3391

New tests:

dEQP-VK.draw.*.indirect_draw.*_data_from_compute*

Components: Vulkan
Change-Id: Ic1c305b715513dfdb13600d7937a08ee0cf2d647

12 files changed:
android/cts/main/vk-master-2021-03-01/draw.txt
android/cts/main/vk-master/draw.txt
external/vulkancts/data/vulkan/draw/NegateData.comp [new file with mode: 0644]
external/vulkancts/modules/vulkan/conditional_rendering/vktConditionalClearAttachmentTests.cpp
external/vulkancts/modules/vulkan/conditional_rendering/vktConditionalDrawTests.cpp
external/vulkancts/modules/vulkan/draw/vktDrawBaseClass.cpp
external/vulkancts/modules/vulkan/draw/vktDrawConcurrentTests.cpp
external/vulkancts/modules/vulkan/draw/vktDrawIndexedTest.cpp
external/vulkancts/modules/vulkan/draw/vktDrawIndirectTest.cpp
external/vulkancts/modules/vulkan/draw/vktDrawShaderDrawParametersTests.cpp
external/vulkancts/modules/vulkan/draw/vktDrawSimpleTest.cpp
external/vulkancts/mustpass/main/vk-default/draw.txt

index 350dcbf..fdeef6e 100644 (file)
@@ -14,6 +14,54 @@ dEQP-VK.draw.renderpass.indirect_draw.indexed.indirect_draw_param_count_instance
 dEQP-VK.draw.renderpass.indirect_draw.indexed.indirect_draw_param_count_instanced.no_first_instance.triangle_strip
 dEQP-VK.draw.renderpass.indirect_draw.indexed.indirect_draw_param_count_instanced.first_instance.triangle_list
 dEQP-VK.draw.renderpass.indirect_draw.indexed.indirect_draw_param_count_instanced.first_instance.triangle_strip
+dEQP-VK.draw.renderpass.indirect_draw.sequential_data_from_compute.indirect_draw.triangle_list
+dEQP-VK.draw.renderpass.indirect_draw.sequential_data_from_compute.indirect_draw.triangle_strip
+dEQP-VK.draw.renderpass.indirect_draw.sequential_data_from_compute.indirect_draw_count.triangle_list
+dEQP-VK.draw.renderpass.indirect_draw.sequential_data_from_compute.indirect_draw_count.triangle_strip
+dEQP-VK.draw.renderpass.indirect_draw.sequential_data_from_compute.indirect_draw_param_count.triangle_list
+dEQP-VK.draw.renderpass.indirect_draw.sequential_data_from_compute.indirect_draw_param_count.triangle_strip
+dEQP-VK.draw.renderpass.indirect_draw.sequential_data_from_compute.indirect_draw_first_instance.triangle_list
+dEQP-VK.draw.renderpass.indirect_draw.sequential_data_from_compute.indirect_draw_first_instance.triangle_strip
+dEQP-VK.draw.renderpass.indirect_draw.sequential_data_from_compute.indirect_draw_count_first_instance.triangle_list
+dEQP-VK.draw.renderpass.indirect_draw.sequential_data_from_compute.indirect_draw_count_first_instance.triangle_strip
+dEQP-VK.draw.renderpass.indirect_draw.sequential_data_from_compute.indirect_draw_param_count_first_instance.triangle_list
+dEQP-VK.draw.renderpass.indirect_draw.sequential_data_from_compute.indirect_draw_param_count_first_instance.triangle_strip
+dEQP-VK.draw.renderpass.indirect_draw.sequential_data_from_compute.indirect_draw_instanced.no_first_instance.triangle_list
+dEQP-VK.draw.renderpass.indirect_draw.sequential_data_from_compute.indirect_draw_instanced.no_first_instance.triangle_strip
+dEQP-VK.draw.renderpass.indirect_draw.sequential_data_from_compute.indirect_draw_instanced.first_instance.triangle_list
+dEQP-VK.draw.renderpass.indirect_draw.sequential_data_from_compute.indirect_draw_instanced.first_instance.triangle_strip
+dEQP-VK.draw.renderpass.indirect_draw.sequential_data_from_compute.indirect_draw_count_instanced.no_first_instance.triangle_list
+dEQP-VK.draw.renderpass.indirect_draw.sequential_data_from_compute.indirect_draw_count_instanced.no_first_instance.triangle_strip
+dEQP-VK.draw.renderpass.indirect_draw.sequential_data_from_compute.indirect_draw_count_instanced.first_instance.triangle_list
+dEQP-VK.draw.renderpass.indirect_draw.sequential_data_from_compute.indirect_draw_count_instanced.first_instance.triangle_strip
+dEQP-VK.draw.renderpass.indirect_draw.sequential_data_from_compute.indirect_draw_param_count_instanced.no_first_instance.triangle_list
+dEQP-VK.draw.renderpass.indirect_draw.sequential_data_from_compute.indirect_draw_param_count_instanced.no_first_instance.triangle_strip
+dEQP-VK.draw.renderpass.indirect_draw.sequential_data_from_compute.indirect_draw_param_count_instanced.first_instance.triangle_list
+dEQP-VK.draw.renderpass.indirect_draw.sequential_data_from_compute.indirect_draw_param_count_instanced.first_instance.triangle_strip
+dEQP-VK.draw.renderpass.indirect_draw.indexed_data_from_compute.indirect_draw.triangle_list
+dEQP-VK.draw.renderpass.indirect_draw.indexed_data_from_compute.indirect_draw.triangle_strip
+dEQP-VK.draw.renderpass.indirect_draw.indexed_data_from_compute.indirect_draw_count.triangle_list
+dEQP-VK.draw.renderpass.indirect_draw.indexed_data_from_compute.indirect_draw_count.triangle_strip
+dEQP-VK.draw.renderpass.indirect_draw.indexed_data_from_compute.indirect_draw_param_count.triangle_list
+dEQP-VK.draw.renderpass.indirect_draw.indexed_data_from_compute.indirect_draw_param_count.triangle_strip
+dEQP-VK.draw.renderpass.indirect_draw.indexed_data_from_compute.indirect_draw_first_instance.triangle_list
+dEQP-VK.draw.renderpass.indirect_draw.indexed_data_from_compute.indirect_draw_first_instance.triangle_strip
+dEQP-VK.draw.renderpass.indirect_draw.indexed_data_from_compute.indirect_draw_count_first_instance.triangle_list
+dEQP-VK.draw.renderpass.indirect_draw.indexed_data_from_compute.indirect_draw_count_first_instance.triangle_strip
+dEQP-VK.draw.renderpass.indirect_draw.indexed_data_from_compute.indirect_draw_param_count_first_instance.triangle_list
+dEQP-VK.draw.renderpass.indirect_draw.indexed_data_from_compute.indirect_draw_param_count_first_instance.triangle_strip
+dEQP-VK.draw.renderpass.indirect_draw.indexed_data_from_compute.indirect_draw_instanced.no_first_instance.triangle_list
+dEQP-VK.draw.renderpass.indirect_draw.indexed_data_from_compute.indirect_draw_instanced.no_first_instance.triangle_strip
+dEQP-VK.draw.renderpass.indirect_draw.indexed_data_from_compute.indirect_draw_instanced.first_instance.triangle_list
+dEQP-VK.draw.renderpass.indirect_draw.indexed_data_from_compute.indirect_draw_instanced.first_instance.triangle_strip
+dEQP-VK.draw.renderpass.indirect_draw.indexed_data_from_compute.indirect_draw_count_instanced.no_first_instance.triangle_list
+dEQP-VK.draw.renderpass.indirect_draw.indexed_data_from_compute.indirect_draw_count_instanced.no_first_instance.triangle_strip
+dEQP-VK.draw.renderpass.indirect_draw.indexed_data_from_compute.indirect_draw_count_instanced.first_instance.triangle_list
+dEQP-VK.draw.renderpass.indirect_draw.indexed_data_from_compute.indirect_draw_count_instanced.first_instance.triangle_strip
+dEQP-VK.draw.renderpass.indirect_draw.indexed_data_from_compute.indirect_draw_param_count_instanced.no_first_instance.triangle_list
+dEQP-VK.draw.renderpass.indirect_draw.indexed_data_from_compute.indirect_draw_param_count_instanced.no_first_instance.triangle_strip
+dEQP-VK.draw.renderpass.indirect_draw.indexed_data_from_compute.indirect_draw_param_count_instanced.first_instance.triangle_list
+dEQP-VK.draw.renderpass.indirect_draw.indexed_data_from_compute.indirect_draw_param_count_instanced.first_instance.triangle_strip
 dEQP-VK.draw.renderpass.inverted_depth_ranges.depthclamp_deltasmall
 dEQP-VK.draw.renderpass.inverted_depth_ranges.depthclamp_deltaone
 dEQP-VK.draw.renderpass.inverted_depth_ranges.depthclamp_deltaone_bias_clamp_neg
@@ -5749,6 +5797,54 @@ dEQP-VK.draw.dynamic_rendering.indirect_draw.indexed.indirect_draw_param_count_i
 dEQP-VK.draw.dynamic_rendering.indirect_draw.indexed.indirect_draw_param_count_instanced.no_first_instance.triangle_strip
 dEQP-VK.draw.dynamic_rendering.indirect_draw.indexed.indirect_draw_param_count_instanced.first_instance.triangle_list
 dEQP-VK.draw.dynamic_rendering.indirect_draw.indexed.indirect_draw_param_count_instanced.first_instance.triangle_strip
+dEQP-VK.draw.dynamic_rendering.indirect_draw.sequential_data_from_compute.indirect_draw.triangle_list
+dEQP-VK.draw.dynamic_rendering.indirect_draw.sequential_data_from_compute.indirect_draw.triangle_strip
+dEQP-VK.draw.dynamic_rendering.indirect_draw.sequential_data_from_compute.indirect_draw_count.triangle_list
+dEQP-VK.draw.dynamic_rendering.indirect_draw.sequential_data_from_compute.indirect_draw_count.triangle_strip
+dEQP-VK.draw.dynamic_rendering.indirect_draw.sequential_data_from_compute.indirect_draw_param_count.triangle_list
+dEQP-VK.draw.dynamic_rendering.indirect_draw.sequential_data_from_compute.indirect_draw_param_count.triangle_strip
+dEQP-VK.draw.dynamic_rendering.indirect_draw.sequential_data_from_compute.indirect_draw_first_instance.triangle_list
+dEQP-VK.draw.dynamic_rendering.indirect_draw.sequential_data_from_compute.indirect_draw_first_instance.triangle_strip
+dEQP-VK.draw.dynamic_rendering.indirect_draw.sequential_data_from_compute.indirect_draw_count_first_instance.triangle_list
+dEQP-VK.draw.dynamic_rendering.indirect_draw.sequential_data_from_compute.indirect_draw_count_first_instance.triangle_strip
+dEQP-VK.draw.dynamic_rendering.indirect_draw.sequential_data_from_compute.indirect_draw_param_count_first_instance.triangle_list
+dEQP-VK.draw.dynamic_rendering.indirect_draw.sequential_data_from_compute.indirect_draw_param_count_first_instance.triangle_strip
+dEQP-VK.draw.dynamic_rendering.indirect_draw.sequential_data_from_compute.indirect_draw_instanced.no_first_instance.triangle_list
+dEQP-VK.draw.dynamic_rendering.indirect_draw.sequential_data_from_compute.indirect_draw_instanced.no_first_instance.triangle_strip
+dEQP-VK.draw.dynamic_rendering.indirect_draw.sequential_data_from_compute.indirect_draw_instanced.first_instance.triangle_list
+dEQP-VK.draw.dynamic_rendering.indirect_draw.sequential_data_from_compute.indirect_draw_instanced.first_instance.triangle_strip
+dEQP-VK.draw.dynamic_rendering.indirect_draw.sequential_data_from_compute.indirect_draw_count_instanced.no_first_instance.triangle_list
+dEQP-VK.draw.dynamic_rendering.indirect_draw.sequential_data_from_compute.indirect_draw_count_instanced.no_first_instance.triangle_strip
+dEQP-VK.draw.dynamic_rendering.indirect_draw.sequential_data_from_compute.indirect_draw_count_instanced.first_instance.triangle_list
+dEQP-VK.draw.dynamic_rendering.indirect_draw.sequential_data_from_compute.indirect_draw_count_instanced.first_instance.triangle_strip
+dEQP-VK.draw.dynamic_rendering.indirect_draw.sequential_data_from_compute.indirect_draw_param_count_instanced.no_first_instance.triangle_list
+dEQP-VK.draw.dynamic_rendering.indirect_draw.sequential_data_from_compute.indirect_draw_param_count_instanced.no_first_instance.triangle_strip
+dEQP-VK.draw.dynamic_rendering.indirect_draw.sequential_data_from_compute.indirect_draw_param_count_instanced.first_instance.triangle_list
+dEQP-VK.draw.dynamic_rendering.indirect_draw.sequential_data_from_compute.indirect_draw_param_count_instanced.first_instance.triangle_strip
+dEQP-VK.draw.dynamic_rendering.indirect_draw.indexed_data_from_compute.indirect_draw.triangle_list
+dEQP-VK.draw.dynamic_rendering.indirect_draw.indexed_data_from_compute.indirect_draw.triangle_strip
+dEQP-VK.draw.dynamic_rendering.indirect_draw.indexed_data_from_compute.indirect_draw_count.triangle_list
+dEQP-VK.draw.dynamic_rendering.indirect_draw.indexed_data_from_compute.indirect_draw_count.triangle_strip
+dEQP-VK.draw.dynamic_rendering.indirect_draw.indexed_data_from_compute.indirect_draw_param_count.triangle_list
+dEQP-VK.draw.dynamic_rendering.indirect_draw.indexed_data_from_compute.indirect_draw_param_count.triangle_strip
+dEQP-VK.draw.dynamic_rendering.indirect_draw.indexed_data_from_compute.indirect_draw_first_instance.triangle_list
+dEQP-VK.draw.dynamic_rendering.indirect_draw.indexed_data_from_compute.indirect_draw_first_instance.triangle_strip
+dEQP-VK.draw.dynamic_rendering.indirect_draw.indexed_data_from_compute.indirect_draw_count_first_instance.triangle_list
+dEQP-VK.draw.dynamic_rendering.indirect_draw.indexed_data_from_compute.indirect_draw_count_first_instance.triangle_strip
+dEQP-VK.draw.dynamic_rendering.indirect_draw.indexed_data_from_compute.indirect_draw_param_count_first_instance.triangle_list
+dEQP-VK.draw.dynamic_rendering.indirect_draw.indexed_data_from_compute.indirect_draw_param_count_first_instance.triangle_strip
+dEQP-VK.draw.dynamic_rendering.indirect_draw.indexed_data_from_compute.indirect_draw_instanced.no_first_instance.triangle_list
+dEQP-VK.draw.dynamic_rendering.indirect_draw.indexed_data_from_compute.indirect_draw_instanced.no_first_instance.triangle_strip
+dEQP-VK.draw.dynamic_rendering.indirect_draw.indexed_data_from_compute.indirect_draw_instanced.first_instance.triangle_list
+dEQP-VK.draw.dynamic_rendering.indirect_draw.indexed_data_from_compute.indirect_draw_instanced.first_instance.triangle_strip
+dEQP-VK.draw.dynamic_rendering.indirect_draw.indexed_data_from_compute.indirect_draw_count_instanced.no_first_instance.triangle_list
+dEQP-VK.draw.dynamic_rendering.indirect_draw.indexed_data_from_compute.indirect_draw_count_instanced.no_first_instance.triangle_strip
+dEQP-VK.draw.dynamic_rendering.indirect_draw.indexed_data_from_compute.indirect_draw_count_instanced.first_instance.triangle_list
+dEQP-VK.draw.dynamic_rendering.indirect_draw.indexed_data_from_compute.indirect_draw_count_instanced.first_instance.triangle_strip
+dEQP-VK.draw.dynamic_rendering.indirect_draw.indexed_data_from_compute.indirect_draw_param_count_instanced.no_first_instance.triangle_list
+dEQP-VK.draw.dynamic_rendering.indirect_draw.indexed_data_from_compute.indirect_draw_param_count_instanced.no_first_instance.triangle_strip
+dEQP-VK.draw.dynamic_rendering.indirect_draw.indexed_data_from_compute.indirect_draw_param_count_instanced.first_instance.triangle_list
+dEQP-VK.draw.dynamic_rendering.indirect_draw.indexed_data_from_compute.indirect_draw_param_count_instanced.first_instance.triangle_strip
 dEQP-VK.draw.dynamic_rendering.basic_draw.draw.point_list.1
 dEQP-VK.draw.dynamic_rendering.basic_draw.draw.point_list.45
 dEQP-VK.draw.dynamic_rendering.basic_draw.draw.line_list.1
index 4e3e76d..35156ae 100644 (file)
@@ -55,6 +55,54 @@ dEQP-VK.draw.renderpass.indirect_draw.indexed.indirect_draw_param_count_instance
 dEQP-VK.draw.renderpass.indirect_draw.indexed.indirect_draw_param_count_instanced.no_first_instance.triangle_strip
 dEQP-VK.draw.renderpass.indirect_draw.indexed.indirect_draw_param_count_instanced.first_instance.triangle_list
 dEQP-VK.draw.renderpass.indirect_draw.indexed.indirect_draw_param_count_instanced.first_instance.triangle_strip
+dEQP-VK.draw.renderpass.indirect_draw.sequential_data_from_compute.indirect_draw.triangle_list
+dEQP-VK.draw.renderpass.indirect_draw.sequential_data_from_compute.indirect_draw.triangle_strip
+dEQP-VK.draw.renderpass.indirect_draw.sequential_data_from_compute.indirect_draw_count.triangle_list
+dEQP-VK.draw.renderpass.indirect_draw.sequential_data_from_compute.indirect_draw_count.triangle_strip
+dEQP-VK.draw.renderpass.indirect_draw.sequential_data_from_compute.indirect_draw_param_count.triangle_list
+dEQP-VK.draw.renderpass.indirect_draw.sequential_data_from_compute.indirect_draw_param_count.triangle_strip
+dEQP-VK.draw.renderpass.indirect_draw.sequential_data_from_compute.indirect_draw_first_instance.triangle_list
+dEQP-VK.draw.renderpass.indirect_draw.sequential_data_from_compute.indirect_draw_first_instance.triangle_strip
+dEQP-VK.draw.renderpass.indirect_draw.sequential_data_from_compute.indirect_draw_count_first_instance.triangle_list
+dEQP-VK.draw.renderpass.indirect_draw.sequential_data_from_compute.indirect_draw_count_first_instance.triangle_strip
+dEQP-VK.draw.renderpass.indirect_draw.sequential_data_from_compute.indirect_draw_param_count_first_instance.triangle_list
+dEQP-VK.draw.renderpass.indirect_draw.sequential_data_from_compute.indirect_draw_param_count_first_instance.triangle_strip
+dEQP-VK.draw.renderpass.indirect_draw.sequential_data_from_compute.indirect_draw_instanced.no_first_instance.triangle_list
+dEQP-VK.draw.renderpass.indirect_draw.sequential_data_from_compute.indirect_draw_instanced.no_first_instance.triangle_strip
+dEQP-VK.draw.renderpass.indirect_draw.sequential_data_from_compute.indirect_draw_instanced.first_instance.triangle_list
+dEQP-VK.draw.renderpass.indirect_draw.sequential_data_from_compute.indirect_draw_instanced.first_instance.triangle_strip
+dEQP-VK.draw.renderpass.indirect_draw.sequential_data_from_compute.indirect_draw_count_instanced.no_first_instance.triangle_list
+dEQP-VK.draw.renderpass.indirect_draw.sequential_data_from_compute.indirect_draw_count_instanced.no_first_instance.triangle_strip
+dEQP-VK.draw.renderpass.indirect_draw.sequential_data_from_compute.indirect_draw_count_instanced.first_instance.triangle_list
+dEQP-VK.draw.renderpass.indirect_draw.sequential_data_from_compute.indirect_draw_count_instanced.first_instance.triangle_strip
+dEQP-VK.draw.renderpass.indirect_draw.sequential_data_from_compute.indirect_draw_param_count_instanced.no_first_instance.triangle_list
+dEQP-VK.draw.renderpass.indirect_draw.sequential_data_from_compute.indirect_draw_param_count_instanced.no_first_instance.triangle_strip
+dEQP-VK.draw.renderpass.indirect_draw.sequential_data_from_compute.indirect_draw_param_count_instanced.first_instance.triangle_list
+dEQP-VK.draw.renderpass.indirect_draw.sequential_data_from_compute.indirect_draw_param_count_instanced.first_instance.triangle_strip
+dEQP-VK.draw.renderpass.indirect_draw.indexed_data_from_compute.indirect_draw.triangle_list
+dEQP-VK.draw.renderpass.indirect_draw.indexed_data_from_compute.indirect_draw.triangle_strip
+dEQP-VK.draw.renderpass.indirect_draw.indexed_data_from_compute.indirect_draw_count.triangle_list
+dEQP-VK.draw.renderpass.indirect_draw.indexed_data_from_compute.indirect_draw_count.triangle_strip
+dEQP-VK.draw.renderpass.indirect_draw.indexed_data_from_compute.indirect_draw_param_count.triangle_list
+dEQP-VK.draw.renderpass.indirect_draw.indexed_data_from_compute.indirect_draw_param_count.triangle_strip
+dEQP-VK.draw.renderpass.indirect_draw.indexed_data_from_compute.indirect_draw_first_instance.triangle_list
+dEQP-VK.draw.renderpass.indirect_draw.indexed_data_from_compute.indirect_draw_first_instance.triangle_strip
+dEQP-VK.draw.renderpass.indirect_draw.indexed_data_from_compute.indirect_draw_count_first_instance.triangle_list
+dEQP-VK.draw.renderpass.indirect_draw.indexed_data_from_compute.indirect_draw_count_first_instance.triangle_strip
+dEQP-VK.draw.renderpass.indirect_draw.indexed_data_from_compute.indirect_draw_param_count_first_instance.triangle_list
+dEQP-VK.draw.renderpass.indirect_draw.indexed_data_from_compute.indirect_draw_param_count_first_instance.triangle_strip
+dEQP-VK.draw.renderpass.indirect_draw.indexed_data_from_compute.indirect_draw_instanced.no_first_instance.triangle_list
+dEQP-VK.draw.renderpass.indirect_draw.indexed_data_from_compute.indirect_draw_instanced.no_first_instance.triangle_strip
+dEQP-VK.draw.renderpass.indirect_draw.indexed_data_from_compute.indirect_draw_instanced.first_instance.triangle_list
+dEQP-VK.draw.renderpass.indirect_draw.indexed_data_from_compute.indirect_draw_instanced.first_instance.triangle_strip
+dEQP-VK.draw.renderpass.indirect_draw.indexed_data_from_compute.indirect_draw_count_instanced.no_first_instance.triangle_list
+dEQP-VK.draw.renderpass.indirect_draw.indexed_data_from_compute.indirect_draw_count_instanced.no_first_instance.triangle_strip
+dEQP-VK.draw.renderpass.indirect_draw.indexed_data_from_compute.indirect_draw_count_instanced.first_instance.triangle_list
+dEQP-VK.draw.renderpass.indirect_draw.indexed_data_from_compute.indirect_draw_count_instanced.first_instance.triangle_strip
+dEQP-VK.draw.renderpass.indirect_draw.indexed_data_from_compute.indirect_draw_param_count_instanced.no_first_instance.triangle_list
+dEQP-VK.draw.renderpass.indirect_draw.indexed_data_from_compute.indirect_draw_param_count_instanced.no_first_instance.triangle_strip
+dEQP-VK.draw.renderpass.indirect_draw.indexed_data_from_compute.indirect_draw_param_count_instanced.first_instance.triangle_list
+dEQP-VK.draw.renderpass.indirect_draw.indexed_data_from_compute.indirect_draw_param_count_instanced.first_instance.triangle_strip
 dEQP-VK.draw.renderpass.basic_draw.draw.point_list.1
 dEQP-VK.draw.renderpass.basic_draw.draw.point_list.3
 dEQP-VK.draw.renderpass.basic_draw.draw.point_list.17
@@ -6482,6 +6530,54 @@ dEQP-VK.draw.dynamic_rendering.indirect_draw.indexed.indirect_draw_param_count_i
 dEQP-VK.draw.dynamic_rendering.indirect_draw.indexed.indirect_draw_param_count_instanced.no_first_instance.triangle_strip
 dEQP-VK.draw.dynamic_rendering.indirect_draw.indexed.indirect_draw_param_count_instanced.first_instance.triangle_list
 dEQP-VK.draw.dynamic_rendering.indirect_draw.indexed.indirect_draw_param_count_instanced.first_instance.triangle_strip
+dEQP-VK.draw.dynamic_rendering.indirect_draw.sequential_data_from_compute.indirect_draw.triangle_list
+dEQP-VK.draw.dynamic_rendering.indirect_draw.sequential_data_from_compute.indirect_draw.triangle_strip
+dEQP-VK.draw.dynamic_rendering.indirect_draw.sequential_data_from_compute.indirect_draw_count.triangle_list
+dEQP-VK.draw.dynamic_rendering.indirect_draw.sequential_data_from_compute.indirect_draw_count.triangle_strip
+dEQP-VK.draw.dynamic_rendering.indirect_draw.sequential_data_from_compute.indirect_draw_param_count.triangle_list
+dEQP-VK.draw.dynamic_rendering.indirect_draw.sequential_data_from_compute.indirect_draw_param_count.triangle_strip
+dEQP-VK.draw.dynamic_rendering.indirect_draw.sequential_data_from_compute.indirect_draw_first_instance.triangle_list
+dEQP-VK.draw.dynamic_rendering.indirect_draw.sequential_data_from_compute.indirect_draw_first_instance.triangle_strip
+dEQP-VK.draw.dynamic_rendering.indirect_draw.sequential_data_from_compute.indirect_draw_count_first_instance.triangle_list
+dEQP-VK.draw.dynamic_rendering.indirect_draw.sequential_data_from_compute.indirect_draw_count_first_instance.triangle_strip
+dEQP-VK.draw.dynamic_rendering.indirect_draw.sequential_data_from_compute.indirect_draw_param_count_first_instance.triangle_list
+dEQP-VK.draw.dynamic_rendering.indirect_draw.sequential_data_from_compute.indirect_draw_param_count_first_instance.triangle_strip
+dEQP-VK.draw.dynamic_rendering.indirect_draw.sequential_data_from_compute.indirect_draw_instanced.no_first_instance.triangle_list
+dEQP-VK.draw.dynamic_rendering.indirect_draw.sequential_data_from_compute.indirect_draw_instanced.no_first_instance.triangle_strip
+dEQP-VK.draw.dynamic_rendering.indirect_draw.sequential_data_from_compute.indirect_draw_instanced.first_instance.triangle_list
+dEQP-VK.draw.dynamic_rendering.indirect_draw.sequential_data_from_compute.indirect_draw_instanced.first_instance.triangle_strip
+dEQP-VK.draw.dynamic_rendering.indirect_draw.sequential_data_from_compute.indirect_draw_count_instanced.no_first_instance.triangle_list
+dEQP-VK.draw.dynamic_rendering.indirect_draw.sequential_data_from_compute.indirect_draw_count_instanced.no_first_instance.triangle_strip
+dEQP-VK.draw.dynamic_rendering.indirect_draw.sequential_data_from_compute.indirect_draw_count_instanced.first_instance.triangle_list
+dEQP-VK.draw.dynamic_rendering.indirect_draw.sequential_data_from_compute.indirect_draw_count_instanced.first_instance.triangle_strip
+dEQP-VK.draw.dynamic_rendering.indirect_draw.sequential_data_from_compute.indirect_draw_param_count_instanced.no_first_instance.triangle_list
+dEQP-VK.draw.dynamic_rendering.indirect_draw.sequential_data_from_compute.indirect_draw_param_count_instanced.no_first_instance.triangle_strip
+dEQP-VK.draw.dynamic_rendering.indirect_draw.sequential_data_from_compute.indirect_draw_param_count_instanced.first_instance.triangle_list
+dEQP-VK.draw.dynamic_rendering.indirect_draw.sequential_data_from_compute.indirect_draw_param_count_instanced.first_instance.triangle_strip
+dEQP-VK.draw.dynamic_rendering.indirect_draw.indexed_data_from_compute.indirect_draw.triangle_list
+dEQP-VK.draw.dynamic_rendering.indirect_draw.indexed_data_from_compute.indirect_draw.triangle_strip
+dEQP-VK.draw.dynamic_rendering.indirect_draw.indexed_data_from_compute.indirect_draw_count.triangle_list
+dEQP-VK.draw.dynamic_rendering.indirect_draw.indexed_data_from_compute.indirect_draw_count.triangle_strip
+dEQP-VK.draw.dynamic_rendering.indirect_draw.indexed_data_from_compute.indirect_draw_param_count.triangle_list
+dEQP-VK.draw.dynamic_rendering.indirect_draw.indexed_data_from_compute.indirect_draw_param_count.triangle_strip
+dEQP-VK.draw.dynamic_rendering.indirect_draw.indexed_data_from_compute.indirect_draw_first_instance.triangle_list
+dEQP-VK.draw.dynamic_rendering.indirect_draw.indexed_data_from_compute.indirect_draw_first_instance.triangle_strip
+dEQP-VK.draw.dynamic_rendering.indirect_draw.indexed_data_from_compute.indirect_draw_count_first_instance.triangle_list
+dEQP-VK.draw.dynamic_rendering.indirect_draw.indexed_data_from_compute.indirect_draw_count_first_instance.triangle_strip
+dEQP-VK.draw.dynamic_rendering.indirect_draw.indexed_data_from_compute.indirect_draw_param_count_first_instance.triangle_list
+dEQP-VK.draw.dynamic_rendering.indirect_draw.indexed_data_from_compute.indirect_draw_param_count_first_instance.triangle_strip
+dEQP-VK.draw.dynamic_rendering.indirect_draw.indexed_data_from_compute.indirect_draw_instanced.no_first_instance.triangle_list
+dEQP-VK.draw.dynamic_rendering.indirect_draw.indexed_data_from_compute.indirect_draw_instanced.no_first_instance.triangle_strip
+dEQP-VK.draw.dynamic_rendering.indirect_draw.indexed_data_from_compute.indirect_draw_instanced.first_instance.triangle_list
+dEQP-VK.draw.dynamic_rendering.indirect_draw.indexed_data_from_compute.indirect_draw_instanced.first_instance.triangle_strip
+dEQP-VK.draw.dynamic_rendering.indirect_draw.indexed_data_from_compute.indirect_draw_count_instanced.no_first_instance.triangle_list
+dEQP-VK.draw.dynamic_rendering.indirect_draw.indexed_data_from_compute.indirect_draw_count_instanced.no_first_instance.triangle_strip
+dEQP-VK.draw.dynamic_rendering.indirect_draw.indexed_data_from_compute.indirect_draw_count_instanced.first_instance.triangle_list
+dEQP-VK.draw.dynamic_rendering.indirect_draw.indexed_data_from_compute.indirect_draw_count_instanced.first_instance.triangle_strip
+dEQP-VK.draw.dynamic_rendering.indirect_draw.indexed_data_from_compute.indirect_draw_param_count_instanced.no_first_instance.triangle_list
+dEQP-VK.draw.dynamic_rendering.indirect_draw.indexed_data_from_compute.indirect_draw_param_count_instanced.no_first_instance.triangle_strip
+dEQP-VK.draw.dynamic_rendering.indirect_draw.indexed_data_from_compute.indirect_draw_param_count_instanced.first_instance.triangle_list
+dEQP-VK.draw.dynamic_rendering.indirect_draw.indexed_data_from_compute.indirect_draw_param_count_instanced.first_instance.triangle_strip
 dEQP-VK.draw.dynamic_rendering.basic_draw.draw.point_list.1
 dEQP-VK.draw.dynamic_rendering.basic_draw.draw.point_list.45
 dEQP-VK.draw.dynamic_rendering.basic_draw.draw.line_list.1
diff --git a/external/vulkancts/data/vulkan/draw/NegateData.comp b/external/vulkancts/data/vulkan/draw/NegateData.comp
new file mode 100644 (file)
index 0000000..0c56e9f
--- /dev/null
@@ -0,0 +1,18 @@
+#version 310 es
+
+layout (local_size_x = 1, local_size_y = 1, local_size_z = 1) in;
+layout(binding = 0) buffer InOut
+{
+    uint values[];
+} sb_inout;
+
+void main (void)
+{
+    uvec3 size           = gl_NumWorkGroups * gl_WorkGroupSize;
+    uint numValuesPerInv = uint(sb_inout.values.length()) / (size.x*size.y*size.z);
+    uint groupNdx        = size.x*size.y*gl_GlobalInvocationID.z + size.x*gl_GlobalInvocationID.y + gl_GlobalInvocationID.x;
+    uint offset          = numValuesPerInv*groupNdx;
+
+    for (uint ndx = 0u; ndx < numValuesPerInv; ndx++)
+        sb_inout.values[offset + ndx] = ~sb_inout.values[offset + ndx];
+}
index f41083c..f2326ed 100644 (file)
@@ -89,6 +89,7 @@ tcu::TestStatus ConditionalClearAttachmentTest::iterate (void)
        const tcu::Vec4 clearColor      = tcu::RGBA::black().toVec();
        const tcu::Vec4 drawColor       = tcu::RGBA::blue().toVec();
 
+       beginCommandBuffer(m_vk, *m_cmdBuffer, 0u);
        const bool useSecondaryCmdBuffer = m_conditionalData.conditionInherited || m_conditionalData.conditionInSecondaryCommandBuffer;
        beginRender(useSecondaryCmdBuffer ? vk::VK_SUBPASS_CONTENTS_SECONDARY_COMMAND_BUFFERS : vk::VK_SUBPASS_CONTENTS_INLINE);
 
index c0c75c3..a40e404 100644 (file)
@@ -331,6 +331,7 @@ tcu::TestStatus ConditionalDraw::iterate (void)
        const vk::VkQueue       queue   = m_context.getUniversalQueue();
        const vk::VkDevice      device  = m_context.getDevice();
 
+       beginCommandBuffer(m_vk, *m_cmdBuffer, 0u);
        const bool useSecondaryCmdBuffer = m_conditionalData.conditionInherited || m_conditionalData.conditionInSecondaryCommandBuffer;
        beginRender(useSecondaryCmdBuffer ? vk::VK_SUBPASS_CONTENTS_SECONDARY_COMMAND_BUFFERS : vk::VK_SUBPASS_CONTENTS_INLINE);
 
index 94f9887..508dbd8 100644 (file)
@@ -189,8 +189,6 @@ void DrawTestsBaseClass::beginRender (const vk::VkSubpassContents content)
 {
        const vk::VkClearValue clearColor { { { 0.0f, 0.0f, 0.0f, 1.0f } } };
 
-       beginCommandBuffer(m_vk, *m_cmdBuffer, 0u);
-
        initialTransitionColor2DImage(m_vk, *m_cmdBuffer, m_colorTargetImage->object(), vk::VK_IMAGE_LAYOUT_GENERAL,
                                                                  vk::VK_ACCESS_TRANSFER_WRITE_BIT, vk::VK_PIPELINE_STAGE_TRANSFER_BIT);
 
index d286b76..16ae200 100644 (file)
@@ -247,6 +247,7 @@ tcu::TestStatus ConcurrentDraw::iterate (void)
        const VkQueue           drawQueue                       = m_context.getUniversalQueue();
        const VkDevice          drawDevice                      = m_context.getDevice();
 
+       beginCommandBuffer(m_vk, *m_cmdBuffer, 0u);
        beginRender();
 
        const VkDeviceSize      vertexBufferOffset      = 0;
index f72851d..9de7747 100644 (file)
@@ -138,6 +138,7 @@ tcu::TestStatus DrawIndexed::iterate (void)
        const vk::VkQueue       queue   = m_context.getUniversalQueue();
        const vk::VkDevice      device  = m_context.getDevice();
 
+       beginCommandBuffer(m_vk, *m_cmdBuffer, 0u);
        beginRender();
 
        const vk::VkDeviceSize dataSize = m_indexes.size() * sizeof(deUint32);
@@ -220,6 +221,7 @@ tcu::TestStatus DrawInstancedIndexed::iterate (void)
        const vk::VkQueue       queue   = m_context.getUniversalQueue();
        const vk::VkDevice      device  = m_context.getDevice();
 
+       beginCommandBuffer(m_vk, *m_cmdBuffer, 0u);
        beginRender();
 
        const vk::VkDeviceSize dataSize = m_indexes.size() * sizeof(deUint32);
index 68f2879..6ab492f 100644 (file)
@@ -26,6 +26,7 @@
 
 #include "vktTestCaseUtil.hpp"
 #include "vktDrawTestCaseUtil.hpp"
+#include "../compute/vktComputeTestsUtil.hpp"
 
 #include "vktDrawBaseClass.hpp"
 
 
 #include "vkDefs.hpp"
 #include "vkCmdUtil.hpp"
+#include "vkBuilderUtil.hpp"
+#include "vkObjUtil.hpp"
+#include "vkTypeUtil.hpp"
+#include "vkBarrierUtil.hpp"
 
 namespace vkt
 {
@@ -85,46 +90,58 @@ struct DrawTypedTestSpec : public TestSpecBase
                : drawType(DRAWTYPE_LAST)
                , testFirstInstanceNdx(false)
                , testIndirectCountExt(IndirectCountType::NONE)
+               , dataFromCompute(false)
        {}
 
        DrawType                        drawType;
        bool                            testFirstInstanceNdx;
        IndirectCountType       testIndirectCountExt;
+       bool                            dataFromCompute;
 };
 
 class IndirectDraw : public DrawTestsBaseClass
 {
 public:
-       typedef DrawTypedTestSpec       TestSpec;
+       typedef DrawTypedTestSpec                       TestSpec;
 
-                                                               IndirectDraw    (Context &context, TestSpec testSpec);
-       virtual tcu::TestStatus         iterate                 (void);
+                                                                               IndirectDraw                                    (Context &context, TestSpec testSpec);
+       virtual tcu::TestStatus                         iterate                                                 (void);
 
-       template<typename T> void       addCommand              (const T&);
+       template<typename T> void                       addCommand                                              (const T&);
 
 protected:
-       void                                            setVertexBuffer                                         (void);
-       void                                            setFirstInstanceVertexBuffer            (void);
-
-       std::vector<char>                       m_indirectBufferContents;
-       de::SharedPtr<Buffer>           m_indirectBuffer;
-       vk::VkDeviceSize                        m_offsetInBuffer;
-       deUint32                                        m_strideInBuffer;
-
-       const IndirectCountType         m_testIndirectCountExt;
-       de::SharedPtr<Buffer>           m_indirectCountBuffer;
-       vk::VkDeviceSize                        m_offsetInCountBuffer;
-       const deUint32                          m_indirectCountExtDrawPadding;
-
-       deUint32                                        m_drawCount;
-       JunkData                                        m_junkData;
-
-       const DrawType                          m_drawType;
-       const bool                                      m_testFirstInstanceNdx;
-       deBool                                          m_isMultiDrawEnabled;
-       deUint32                                        m_drawIndirectMaxCount;
-
-       de::SharedPtr<Buffer>           m_indexBuffer;
+       void                                                            setVertexBuffer                                 (void);
+       void                                                            setFirstInstanceVertexBuffer    (void);
+       void                                                            negateDataUsingCompute                  (vk::VkDeviceSize indirectBufferSize, vk::VkDeviceSize countBufferSize);
+
+       std::vector<char>                                       m_indirectBufferContents;
+       de::SharedPtr<Buffer>                           m_indirectBuffer;
+       vk::VkDeviceSize                                        m_offsetInBuffer;
+       deUint32                                                        m_strideInBuffer;
+
+       const IndirectCountType                         m_testIndirectCountExt;
+       de::SharedPtr<Buffer>                           m_indirectCountBuffer;
+       vk::VkDeviceSize                                        m_offsetInCountBuffer;
+       const deUint32                                          m_indirectCountExtDrawPadding;
+
+       deUint32                                                        m_drawCount;
+       JunkData                                                        m_junkData;
+
+       const DrawType                                          m_drawType;
+       const bool                                                      m_testFirstInstanceNdx;
+       deBool                                                          m_isMultiDrawEnabled;
+       deUint32                                                        m_drawIndirectMaxCount;
+       deBool                                                          m_dataFromComputeShader;
+
+       de::SharedPtr<Buffer>                           m_indexBuffer;
+
+       vk::Move<vk::VkDescriptorSetLayout>     m_descriptorSetLayout;
+       vk::Move<vk::VkDescriptorPool>          m_descriptorPool;
+       vk::Move<vk::VkDescriptorSet>           m_descriptorSetIndirectBuffer;
+       vk::Move<vk::VkDescriptorSet>           m_descriptorSetCountBuffer;
+       vk::Move<vk::VkShaderModule>            m_computeShaderModule;
+       vk::Move<vk::VkPipelineLayout>          m_pipelineLayout;
+       vk::Move<vk::VkPipeline>                        m_computePipeline;
 };
 
 struct FirstInstanceSupported
@@ -247,12 +264,63 @@ void IndirectDraw::setFirstInstanceVertexBuffer (void)
        m_data.push_back(VertexElementData(tcu::Vec4(-1.0f, 1.0f, 1.0f, 1.0f), tcu::RGBA::blue().toVec(), -1));
 }
 
+// When testing indirect data generation from a compute shader, the original data is negated bitwise
+// and compute shader restores it before being used in an indirect draw.
+void IndirectDraw::negateDataUsingCompute(vk::VkDeviceSize indirectBufferSize, vk::VkDeviceSize countBufferSize)
+{
+       m_descriptorSetLayout   = vk::DescriptorSetLayoutBuilder().addSingleBinding(vk::VK_DESCRIPTOR_TYPE_STORAGE_BUFFER, vk::VK_SHADER_STAGE_COMPUTE_BIT).build(m_vk, m_context.getDevice());
+       m_descriptorPool                = vk::DescriptorPoolBuilder().addType(vk::VK_DESCRIPTOR_TYPE_STORAGE_BUFFER, 2u).build(m_vk, m_context.getDevice(), vk::VK_DESCRIPTOR_POOL_CREATE_FREE_DESCRIPTOR_SET_BIT, 2u);
+
+       // Indirect buffer
+       {
+               m_descriptorSetIndirectBuffer = vk::makeDescriptorSet(m_vk, m_context.getDevice(), *m_descriptorPool, *m_descriptorSetLayout);
+               const vk::VkDescriptorBufferInfo bufferDescriptorInfo = vk::makeDescriptorBufferInfo(m_indirectBuffer->object(), 0ull, indirectBufferSize);
+               vk::DescriptorSetUpdateBuilder()
+                               .writeSingle(*m_descriptorSetIndirectBuffer, vk::DescriptorSetUpdateBuilder::Location::binding(0u),
+                                                        vk::VK_DESCRIPTOR_TYPE_STORAGE_BUFFER, &bufferDescriptorInfo)
+                               .update(m_vk, m_context.getDevice());
+       }
+
+       // Indirect count buffer
+       if (m_testIndirectCountExt != IndirectCountType::NONE)
+       {
+               m_descriptorSetCountBuffer = vk::makeDescriptorSet(m_vk, m_context.getDevice(), *m_descriptorPool, *m_descriptorSetLayout);
+               const vk::VkDescriptorBufferInfo bufferDescriptorInfo = vk::makeDescriptorBufferInfo(m_indirectCountBuffer->object(), 0ull, countBufferSize);
+               vk::DescriptorSetUpdateBuilder()
+                               .writeSingle(*m_descriptorSetCountBuffer, vk::DescriptorSetUpdateBuilder::Location::binding(0u),
+                                                        vk::VK_DESCRIPTOR_TYPE_STORAGE_BUFFER, &bufferDescriptorInfo)
+                               .update(m_vk, m_context.getDevice());
+       }
+
+       m_computeShaderModule   = vk::createShaderModule(m_vk, m_context.getDevice(), m_context.getBinaryCollection().get("vulkan/draw/NegateData.comp"), 0u);
+       m_pipelineLayout                = vk::makePipelineLayout(m_vk, m_context.getDevice(), *m_descriptorSetLayout);
+       m_computePipeline               = vkt::compute::makeComputePipeline(m_vk, m_context.getDevice(), *m_pipelineLayout, *m_computeShaderModule);
+
+       const vk::VkBufferMemoryBarrier         hostWriteBarrier        = vk::makeBufferMemoryBarrier(vk::VK_ACCESS_HOST_WRITE_BIT, vk::VK_ACCESS_SHADER_READ_BIT, m_indirectBuffer->object(), 0ull, indirectBufferSize);
+       const vk::VkBufferMemoryBarrier         indirectDrawBarrier     = vk::makeBufferMemoryBarrier(vk::VK_ACCESS_SHADER_WRITE_BIT, vk::VK_ACCESS_INDIRECT_COMMAND_READ_BIT, m_indirectBuffer->object(), 0ull, indirectBufferSize);
+
+       m_vk.cmdBindPipeline(*m_cmdBuffer, vk::VK_PIPELINE_BIND_POINT_COMPUTE, *m_computePipeline);
+       m_vk.cmdBindDescriptorSets(*m_cmdBuffer, vk::VK_PIPELINE_BIND_POINT_COMPUTE, *m_pipelineLayout, 0u, 1u, &m_descriptorSetIndirectBuffer.get(), 0u, DE_NULL);
+       m_vk.cmdPipelineBarrier(*m_cmdBuffer, vk::VK_PIPELINE_STAGE_HOST_BIT, vk::VK_PIPELINE_STAGE_COMPUTE_SHADER_BIT, (vk::VkDependencyFlags)0, 0, (const vk::VkMemoryBarrier*)DE_NULL, 1, &hostWriteBarrier, 0, (const vk::VkImageMemoryBarrier*)DE_NULL);
+       m_vk.cmdDispatch(*m_cmdBuffer, 1, 1, 1);
+       m_vk.cmdPipelineBarrier(*m_cmdBuffer, vk::VK_PIPELINE_STAGE_COMPUTE_SHADER_BIT, vk::VK_PIPELINE_STAGE_DRAW_INDIRECT_BIT, (vk::VkDependencyFlags)0, 0, (const vk::VkMemoryBarrier*)DE_NULL, 1, &indirectDrawBarrier, 0, (const vk::VkImageMemoryBarrier*)DE_NULL);
+
+       if (m_testIndirectCountExt != IndirectCountType::NONE)
+       {
+               m_vk.cmdBindDescriptorSets(*m_cmdBuffer, vk::VK_PIPELINE_BIND_POINT_COMPUTE, *m_pipelineLayout, 0u, 1u, &m_descriptorSetCountBuffer.get(), 0u, DE_NULL);
+               m_vk.cmdPipelineBarrier(*m_cmdBuffer, vk::VK_PIPELINE_STAGE_HOST_BIT, vk::VK_PIPELINE_STAGE_COMPUTE_SHADER_BIT, (vk::VkDependencyFlags)0, 0, (const vk::VkMemoryBarrier*)DE_NULL, 1, &hostWriteBarrier, 0, (const vk::VkImageMemoryBarrier*)DE_NULL);
+               m_vk.cmdDispatch(*m_cmdBuffer, 1, 1, 1);
+               m_vk.cmdPipelineBarrier(*m_cmdBuffer, vk::VK_PIPELINE_STAGE_COMPUTE_SHADER_BIT, vk::VK_PIPELINE_STAGE_DRAW_INDIRECT_BIT, (vk::VkDependencyFlags)0, 0, (const vk::VkMemoryBarrier*)DE_NULL, 1, &indirectDrawBarrier, 0, (const vk::VkImageMemoryBarrier*)DE_NULL);
+       }
+}
+
 IndirectDraw::IndirectDraw (Context &context, TestSpec testSpec)
        : DrawTestsBaseClass                            (context, testSpec.shaders[glu::SHADERTYPE_VERTEX], testSpec.shaders[glu::SHADERTYPE_FRAGMENT], testSpec.useDynamicRendering, testSpec.topology)
        , m_testIndirectCountExt                        (testSpec.testIndirectCountExt)
        , m_indirectCountExtDrawPadding         (1u)
        , m_drawType                                            (testSpec.drawType)
        , m_testFirstInstanceNdx                        (testSpec.testFirstInstanceNdx)
+       , m_dataFromComputeShader                       (testSpec.dataFromCompute)
 {
        if (m_testFirstInstanceNdx)
                setFirstInstanceVertexBuffer();
@@ -474,19 +542,15 @@ tcu::TestStatus IndirectDraw::iterate (void)
                m_strideInBuffer = 2 * (deUint32)sizeof(vk::VkDrawIndexedIndirectCommand);
        }
 
-       beginRender();
-
-       const vk::VkDeviceSize vertexBufferOffset       = 0;
-       const vk::VkBuffer vertexBuffer                         = m_vertexBuffer->object();
-
-       m_vk.cmdBindVertexBuffers(*m_cmdBuffer, 0, 1, &vertexBuffer, &vertexBufferOffset);
-
-       const vk::VkDeviceSize dataSize = m_indirectBufferContents.size();
+       const vk::VkDeviceSize  dataSize                        = m_indirectBufferContents.size();
+       const vk::VkDeviceSize  indirectBufferSize      = dataSize + m_offsetInBuffer;
+       vk::VkBufferUsageFlags  usageFlags                      = vk::VK_BUFFER_USAGE_INDIRECT_BUFFER_BIT;
+       if (m_dataFromComputeShader)
+               usageFlags |= vk::VK_BUFFER_USAGE_STORAGE_BUFFER_BIT;
 
        m_indirectBuffer = Buffer::createAndAlloc(      m_vk,
                                                                                                m_context.getDevice(),
-                                                                                               BufferCreateInfo(dataSize + m_offsetInBuffer,
-                                                                                                                                vk::VK_BUFFER_USAGE_INDIRECT_BUFFER_BIT),
+                                                                                               BufferCreateInfo(indirectBufferSize, usageFlags),
                                                                                                m_context.getDefaultAllocator(),
                                                                                                vk::MemoryRequirement::HostVisible);
 
@@ -495,15 +559,25 @@ tcu::TestStatus IndirectDraw::iterate (void)
        deMemcpy(ptr, &m_junkData, static_cast<size_t>(m_offsetInBuffer));
        deMemcpy(ptr + m_offsetInBuffer, &m_indirectBufferContents[0], static_cast<size_t>(dataSize));
 
+       if (m_dataFromComputeShader)
+       {
+               // Negate all the buffer data and let a compute shader restore it to original.
+               for (int i = 0; i < static_cast<int>(indirectBufferSize); i++)
+               {
+                       ptr[i] = static_cast<deUint8>(~ptr[i]);
+               }
+       }
+
        vk::flushAlloc(m_vk, m_context.getDevice(), m_indirectBuffer->getBoundMemory());
 
+       m_offsetInCountBuffer = sizeof(tcu::Vec3);
+       const vk::VkDeviceSize countBufferSize  = m_offsetInCountBuffer + sizeof(m_drawCount);
+
        if (m_testIndirectCountExt != IndirectCountType::NONE)
        {
-               m_offsetInCountBuffer = sizeof(tcu::Vec3);
                m_indirectCountBuffer = Buffer::createAndAlloc(m_vk,
                                                                                                           m_context.getDevice(),
-                                                                                                          BufferCreateInfo(m_offsetInCountBuffer + sizeof(m_drawCount),
-                                                                                                                                               vk::VK_BUFFER_USAGE_INDIRECT_BUFFER_BIT),
+                                                                                                          BufferCreateInfo(countBufferSize, usageFlags),
                                                                                                           m_context.getDefaultAllocator(),
                                                                                                           vk::MemoryRequirement::HostVisible);
 
@@ -515,9 +589,30 @@ tcu::TestStatus IndirectDraw::iterate (void)
                else
                        *(deUint32*)(countBufferPtr + m_offsetInCountBuffer) = (m_testIndirectCountExt == IndirectCountType::BUFFER_LIMIT ? 1u : m_drawCount + m_indirectCountExtDrawPadding);
 
+               if (m_dataFromComputeShader)
+               {
+                       // Negate all the buffer data and let a compute shader restore it to original.
+                       for (int i = 0; i < static_cast<int>(countBufferSize); i++)
+                       {
+                               countBufferPtr[i] = static_cast<deUint8>(~countBufferPtr[i]);
+                       }
+               }
+
                vk::flushAlloc(m_vk, m_context.getDevice(), m_indirectCountBuffer->getBoundMemory());
        }
 
+       beginCommandBuffer(m_vk, *m_cmdBuffer, 0u);
+
+       if (m_dataFromComputeShader)
+               negateDataUsingCompute(indirectBufferSize, countBufferSize);
+
+       beginRender();
+
+       const vk::VkDeviceSize vertexBufferOffset       = 0;
+       const vk::VkBuffer vertexBuffer                         = m_vertexBuffer->object();
+
+       m_vk.cmdBindVertexBuffers(*m_cmdBuffer, 0, 1, &vertexBuffer, &vertexBufferOffset);
+
        m_vk.cmdBindPipeline(*m_cmdBuffer, vk::VK_PIPELINE_BIND_POINT_GRAPHICS, *m_pipeline);
 
        if (m_drawType == DRAW_TYPE_INDEXED)
@@ -819,19 +914,15 @@ tcu::TestStatus IndirectDrawInstanced<FirstInstanceSupport>::iterate (void)
                m_strideInBuffer = 2 * (deUint32)sizeof(vk::VkDrawIndexedIndirectCommand);
        }
 
-       beginRender();
-
-       const vk::VkDeviceSize vertexBufferOffset = 0;
-       const vk::VkBuffer vertexBuffer = m_vertexBuffer->object();
-
-       m_vk.cmdBindVertexBuffers(*m_cmdBuffer, 0, 1, &vertexBuffer, &vertexBufferOffset);
-
-       const vk::VkDeviceSize dataSize = m_indirectBufferContents.size();
+       const vk::VkDeviceSize dataSize                         = m_indirectBufferContents.size();
+       const vk::VkDeviceSize indirectBufferSize       = dataSize + m_offsetInBuffer;
+       vk::VkBufferUsageFlags  usageFlags                      = vk::VK_BUFFER_USAGE_INDIRECT_BUFFER_BIT;
+       if (m_dataFromComputeShader)
+               usageFlags |= vk::VK_BUFFER_USAGE_STORAGE_BUFFER_BIT;
 
        m_indirectBuffer = Buffer::createAndAlloc(      m_vk,
                                                                                                m_context.getDevice(),
-                                                                                               BufferCreateInfo(dataSize + m_offsetInBuffer,
-                                                                                                                                vk::VK_BUFFER_USAGE_INDIRECT_BUFFER_BIT),
+                                                                                               BufferCreateInfo(indirectBufferSize, usageFlags),
                                                                                                m_context.getDefaultAllocator(),
                                                                                                vk::MemoryRequirement::HostVisible);
 
@@ -840,15 +931,25 @@ tcu::TestStatus IndirectDrawInstanced<FirstInstanceSupport>::iterate (void)
        deMemcpy(ptr, &m_junkData, static_cast<size_t>(m_offsetInBuffer));
        deMemcpy((ptr + m_offsetInBuffer), &m_indirectBufferContents[0], static_cast<size_t>(dataSize));
 
+       if (m_dataFromComputeShader)
+       {
+               // Negate all the buffer data and let a compute shader restore it to original.
+               for (int i = 0; i < static_cast<int>(indirectBufferSize); i++)
+               {
+                       ptr[i] = static_cast<deUint8>(~ptr[i]);
+               }
+       }
+
        vk::flushAlloc(m_vk, m_context.getDevice(), m_indirectBuffer->getBoundMemory());
 
+       m_offsetInCountBuffer = sizeof(tcu::Vec3);
+       const vk::VkDeviceSize  countBufferSize = m_offsetInCountBuffer + sizeof(m_drawCount);
+
        if (m_testIndirectCountExt != IndirectCountType::NONE)
        {
-               m_offsetInCountBuffer = sizeof(tcu::Vec3);
                m_indirectCountBuffer = Buffer::createAndAlloc(m_vk,
                                                                                                           m_context.getDevice(),
-                                                                                                          BufferCreateInfo(m_offsetInCountBuffer + sizeof(m_drawCount),
-                                                                                                                                               vk::VK_BUFFER_USAGE_INDIRECT_BUFFER_BIT),
+                                                                                                          BufferCreateInfo(countBufferSize, usageFlags),
                                                                                                           m_context.getDefaultAllocator(),
                                                                                                           vk::MemoryRequirement::HostVisible);
 
@@ -860,9 +961,30 @@ tcu::TestStatus IndirectDrawInstanced<FirstInstanceSupport>::iterate (void)
                else
                        *(deUint32*)(countBufferPtr + m_offsetInCountBuffer) = 1u;
 
+               if (m_dataFromComputeShader)
+               {
+                       // Negate all the buffer data and let a compute shader restore it to original.
+                       for (int i = 0; i < static_cast<int>(countBufferSize); i++)
+                       {
+                               countBufferPtr[i] = static_cast<deUint8>(~countBufferPtr[i]);
+                       }
+               }
+
                vk::flushAlloc(m_vk, m_context.getDevice(), m_indirectCountBuffer->getBoundMemory());
        }
 
+       beginCommandBuffer(m_vk, *m_cmdBuffer, 0u);
+
+       if (m_dataFromComputeShader)
+               negateDataUsingCompute(indirectBufferSize, countBufferSize);
+
+       beginRender();
+
+       const vk::VkDeviceSize  vertexBufferOffset      = 0;
+       const vk::VkBuffer              vertexBuffer            = m_vertexBuffer->object();
+
+       m_vk.cmdBindVertexBuffers(*m_cmdBuffer, 0, 1, &vertexBuffer, &vertexBufferOffset);
+
        m_vk.cmdBindPipeline(*m_cmdBuffer, vk::VK_PIPELINE_BIND_POINT_GRAPHICS, *m_pipeline);
 
        if (m_drawType == DRAW_TYPE_INDEXED)
@@ -1014,6 +1136,7 @@ IndirectDrawTests::~IndirectDrawTests (void) {}
 
 void IndirectDrawTests::init (void)
 {
+       for (auto dataFromCompute : {false, true})
        for (int drawTypeIdx = 0; drawTypeIdx < DRAWTYPE_LAST; drawTypeIdx++)
        {
                std::string drawTypeStr;
@@ -1029,6 +1152,9 @@ void IndirectDrawTests::init (void)
                                TCU_FAIL("impossible");
                }
 
+               if (dataFromCompute)
+                       drawTypeStr += "_data_from_compute";
+
                tcu::TestCaseGroup* drawTypeGroup = new tcu::TestCaseGroup(m_testCtx, drawTypeStr.c_str(), ("Draws geometry using " + drawTypeStr + "draw call").c_str());
                {
                        tcu::TestCaseGroup* indirectDrawGroup                   = new tcu::TestCaseGroup(m_testCtx, "indirect_draw", "Draws geometry");
@@ -1038,8 +1164,11 @@ void IndirectDrawTests::init (void)
                                IndirectDraw::TestSpec testSpec;
                                testSpec.drawType = static_cast<DrawType>(drawTypeIdx);
                                testSpec.useDynamicRendering = m_useDynamicRendering;
+                               testSpec.dataFromCompute = dataFromCompute;
                                testSpec.shaders[glu::SHADERTYPE_VERTEX] = "vulkan/draw/VertexFetch.vert";
                                testSpec.shaders[glu::SHADERTYPE_FRAGMENT] = "vulkan/draw/VertexFetch.frag";
+                               if (dataFromCompute)
+                                       testSpec.shaders[glu::SHADERTYPE_COMPUTE] = "vulkan/draw/NegateData.comp";
 
                                testSpec.topology = vk::VK_PRIMITIVE_TOPOLOGY_TRIANGLE_LIST;
                                indirectDrawGroup->addChild(new InstanceFactory<IndirectDraw, FunctionSupport1<IndirectDraw::TestSpec> >
@@ -1077,8 +1206,11 @@ void IndirectDrawTests::init (void)
                                        testSpec.testFirstInstanceNdx = true;
                                        testSpec.drawType = static_cast<DrawType>(drawTypeIdx);
                                        testSpec.useDynamicRendering = m_useDynamicRendering;
+                                       testSpec.dataFromCompute = dataFromCompute;
                                        testSpec.shaders[glu::SHADERTYPE_VERTEX] = "vulkan/draw/VertexFetchInstanceIndex.vert";
                                        testSpec.shaders[glu::SHADERTYPE_FRAGMENT] = "vulkan/draw/VertexFetch.frag";
+                                       if (dataFromCompute)
+                                               testSpec.shaders[glu::SHADERTYPE_COMPUTE] = "vulkan/draw/NegateData.comp";
 
                                        testSpec.topology = vk::VK_PRIMITIVE_TOPOLOGY_TRIANGLE_LIST;
                                        indirectDrawFirstInstanceGroup->addChild(new InstanceFactory<IndirectDraw, FunctionSupport1<IndirectDraw::TestSpec> >
@@ -1121,9 +1253,12 @@ void IndirectDrawTests::init (void)
                                        IDFirstInstanceNotSupported::TestSpec testSpec;
                                        testSpec.drawType = static_cast<DrawType>(drawTypeIdx);
                                        testSpec.useDynamicRendering = m_useDynamicRendering;
+                                       testSpec.dataFromCompute = dataFromCompute;
 
                                        testSpec.shaders[glu::SHADERTYPE_VERTEX] = "vulkan/draw/VertexFetchInstanced.vert";
                                        testSpec.shaders[glu::SHADERTYPE_FRAGMENT] = "vulkan/draw/VertexFetch.frag";
+                                       if (dataFromCompute)
+                                               testSpec.shaders[glu::SHADERTYPE_COMPUTE] = "vulkan/draw/NegateData.comp";
 
                                        testSpec.topology = vk::VK_PRIMITIVE_TOPOLOGY_TRIANGLE_LIST;
                                        indirectDrawNoFirstInstanceGroup->addChild(new InstanceFactory<IDFirstInstanceNotSupported, FunctionSupport1<IDFirstInstanceNotSupported::TestSpec> >
@@ -1161,9 +1296,12 @@ void IndirectDrawTests::init (void)
                                        IDFirstInstanceSupported::TestSpec testSpec;
                                        testSpec.drawType = static_cast<DrawType>(drawTypeIdx);
                                        testSpec.useDynamicRendering = m_useDynamicRendering;
+                                       testSpec.dataFromCompute = dataFromCompute;
 
                                        testSpec.shaders[glu::SHADERTYPE_VERTEX] = "vulkan/draw/VertexFetchInstancedFirstInstance.vert";
                                        testSpec.shaders[glu::SHADERTYPE_FRAGMENT] = "vulkan/draw/VertexFetch.frag";
+                                       if (dataFromCompute)
+                                               testSpec.shaders[glu::SHADERTYPE_COMPUTE] = "vulkan/draw/NegateData.comp";
 
                                        testSpec.topology = vk::VK_PRIMITIVE_TOPOLOGY_TRIANGLE_LIST;
                                        indirectDrawFirstInstanceGroup->addChild(new InstanceFactory<IDFirstInstanceSupported, FunctionSupport1<IDFirstInstanceSupported::TestSpec> >
index f66d17f..be80bff 100644 (file)
@@ -218,6 +218,7 @@ tcu::TestStatus DrawTest::iterate (void)
 {
        // Draw
        {
+               beginCommandBuffer(m_vk, *m_cmdBuffer, 0u);
                beginRender();
 
                const vk::VkDeviceSize  vertexBufferOffset      = 0;
index a37d2f3..125f11c 100644 (file)
@@ -113,6 +113,7 @@ tcu::TestStatus SimpleDraw::iterate (void)
        const vk::VkQueue               queue                           = m_context.getUniversalQueue();
        const vk::VkDevice              device                          = m_context.getDevice();
 
+       beginCommandBuffer(m_vk, *m_cmdBuffer, 0u);
        beginRender();
 
        const vk::VkDeviceSize  vertexBufferOffset      = 0;
@@ -204,6 +205,7 @@ tcu::TestStatus SimpleDrawInstanced::iterate (void)
        const vk::VkQueue       queue                                   = m_context.getUniversalQueue();
        const vk::VkDevice      device                                  = m_context.getDevice();
 
+       beginCommandBuffer(m_vk, *m_cmdBuffer, 0u);
        beginRender();
 
        const vk::VkDeviceSize  vertexBufferOffset      = 0;
index 30872a5..8fbf8e8 100644 (file)
@@ -55,6 +55,54 @@ dEQP-VK.draw.renderpass.indirect_draw.indexed.indirect_draw_param_count_instance
 dEQP-VK.draw.renderpass.indirect_draw.indexed.indirect_draw_param_count_instanced.no_first_instance.triangle_strip
 dEQP-VK.draw.renderpass.indirect_draw.indexed.indirect_draw_param_count_instanced.first_instance.triangle_list
 dEQP-VK.draw.renderpass.indirect_draw.indexed.indirect_draw_param_count_instanced.first_instance.triangle_strip
+dEQP-VK.draw.renderpass.indirect_draw.sequential_data_from_compute.indirect_draw.triangle_list
+dEQP-VK.draw.renderpass.indirect_draw.sequential_data_from_compute.indirect_draw.triangle_strip
+dEQP-VK.draw.renderpass.indirect_draw.sequential_data_from_compute.indirect_draw_count.triangle_list
+dEQP-VK.draw.renderpass.indirect_draw.sequential_data_from_compute.indirect_draw_count.triangle_strip
+dEQP-VK.draw.renderpass.indirect_draw.sequential_data_from_compute.indirect_draw_param_count.triangle_list
+dEQP-VK.draw.renderpass.indirect_draw.sequential_data_from_compute.indirect_draw_param_count.triangle_strip
+dEQP-VK.draw.renderpass.indirect_draw.sequential_data_from_compute.indirect_draw_first_instance.triangle_list
+dEQP-VK.draw.renderpass.indirect_draw.sequential_data_from_compute.indirect_draw_first_instance.triangle_strip
+dEQP-VK.draw.renderpass.indirect_draw.sequential_data_from_compute.indirect_draw_count_first_instance.triangle_list
+dEQP-VK.draw.renderpass.indirect_draw.sequential_data_from_compute.indirect_draw_count_first_instance.triangle_strip
+dEQP-VK.draw.renderpass.indirect_draw.sequential_data_from_compute.indirect_draw_param_count_first_instance.triangle_list
+dEQP-VK.draw.renderpass.indirect_draw.sequential_data_from_compute.indirect_draw_param_count_first_instance.triangle_strip
+dEQP-VK.draw.renderpass.indirect_draw.sequential_data_from_compute.indirect_draw_instanced.no_first_instance.triangle_list
+dEQP-VK.draw.renderpass.indirect_draw.sequential_data_from_compute.indirect_draw_instanced.no_first_instance.triangle_strip
+dEQP-VK.draw.renderpass.indirect_draw.sequential_data_from_compute.indirect_draw_instanced.first_instance.triangle_list
+dEQP-VK.draw.renderpass.indirect_draw.sequential_data_from_compute.indirect_draw_instanced.first_instance.triangle_strip
+dEQP-VK.draw.renderpass.indirect_draw.sequential_data_from_compute.indirect_draw_count_instanced.no_first_instance.triangle_list
+dEQP-VK.draw.renderpass.indirect_draw.sequential_data_from_compute.indirect_draw_count_instanced.no_first_instance.triangle_strip
+dEQP-VK.draw.renderpass.indirect_draw.sequential_data_from_compute.indirect_draw_count_instanced.first_instance.triangle_list
+dEQP-VK.draw.renderpass.indirect_draw.sequential_data_from_compute.indirect_draw_count_instanced.first_instance.triangle_strip
+dEQP-VK.draw.renderpass.indirect_draw.sequential_data_from_compute.indirect_draw_param_count_instanced.no_first_instance.triangle_list
+dEQP-VK.draw.renderpass.indirect_draw.sequential_data_from_compute.indirect_draw_param_count_instanced.no_first_instance.triangle_strip
+dEQP-VK.draw.renderpass.indirect_draw.sequential_data_from_compute.indirect_draw_param_count_instanced.first_instance.triangle_list
+dEQP-VK.draw.renderpass.indirect_draw.sequential_data_from_compute.indirect_draw_param_count_instanced.first_instance.triangle_strip
+dEQP-VK.draw.renderpass.indirect_draw.indexed_data_from_compute.indirect_draw.triangle_list
+dEQP-VK.draw.renderpass.indirect_draw.indexed_data_from_compute.indirect_draw.triangle_strip
+dEQP-VK.draw.renderpass.indirect_draw.indexed_data_from_compute.indirect_draw_count.triangle_list
+dEQP-VK.draw.renderpass.indirect_draw.indexed_data_from_compute.indirect_draw_count.triangle_strip
+dEQP-VK.draw.renderpass.indirect_draw.indexed_data_from_compute.indirect_draw_param_count.triangle_list
+dEQP-VK.draw.renderpass.indirect_draw.indexed_data_from_compute.indirect_draw_param_count.triangle_strip
+dEQP-VK.draw.renderpass.indirect_draw.indexed_data_from_compute.indirect_draw_first_instance.triangle_list
+dEQP-VK.draw.renderpass.indirect_draw.indexed_data_from_compute.indirect_draw_first_instance.triangle_strip
+dEQP-VK.draw.renderpass.indirect_draw.indexed_data_from_compute.indirect_draw_count_first_instance.triangle_list
+dEQP-VK.draw.renderpass.indirect_draw.indexed_data_from_compute.indirect_draw_count_first_instance.triangle_strip
+dEQP-VK.draw.renderpass.indirect_draw.indexed_data_from_compute.indirect_draw_param_count_first_instance.triangle_list
+dEQP-VK.draw.renderpass.indirect_draw.indexed_data_from_compute.indirect_draw_param_count_first_instance.triangle_strip
+dEQP-VK.draw.renderpass.indirect_draw.indexed_data_from_compute.indirect_draw_instanced.no_first_instance.triangle_list
+dEQP-VK.draw.renderpass.indirect_draw.indexed_data_from_compute.indirect_draw_instanced.no_first_instance.triangle_strip
+dEQP-VK.draw.renderpass.indirect_draw.indexed_data_from_compute.indirect_draw_instanced.first_instance.triangle_list
+dEQP-VK.draw.renderpass.indirect_draw.indexed_data_from_compute.indirect_draw_instanced.first_instance.triangle_strip
+dEQP-VK.draw.renderpass.indirect_draw.indexed_data_from_compute.indirect_draw_count_instanced.no_first_instance.triangle_list
+dEQP-VK.draw.renderpass.indirect_draw.indexed_data_from_compute.indirect_draw_count_instanced.no_first_instance.triangle_strip
+dEQP-VK.draw.renderpass.indirect_draw.indexed_data_from_compute.indirect_draw_count_instanced.first_instance.triangle_list
+dEQP-VK.draw.renderpass.indirect_draw.indexed_data_from_compute.indirect_draw_count_instanced.first_instance.triangle_strip
+dEQP-VK.draw.renderpass.indirect_draw.indexed_data_from_compute.indirect_draw_param_count_instanced.no_first_instance.triangle_list
+dEQP-VK.draw.renderpass.indirect_draw.indexed_data_from_compute.indirect_draw_param_count_instanced.no_first_instance.triangle_strip
+dEQP-VK.draw.renderpass.indirect_draw.indexed_data_from_compute.indirect_draw_param_count_instanced.first_instance.triangle_list
+dEQP-VK.draw.renderpass.indirect_draw.indexed_data_from_compute.indirect_draw_param_count_instanced.first_instance.triangle_strip
 dEQP-VK.draw.renderpass.basic_draw.draw.point_list.1
 dEQP-VK.draw.renderpass.basic_draw.draw.point_list.3
 dEQP-VK.draw.renderpass.basic_draw.draw.point_list.17
@@ -6483,6 +6531,54 @@ dEQP-VK.draw.dynamic_rendering.indirect_draw.indexed.indirect_draw_param_count_i
 dEQP-VK.draw.dynamic_rendering.indirect_draw.indexed.indirect_draw_param_count_instanced.no_first_instance.triangle_strip
 dEQP-VK.draw.dynamic_rendering.indirect_draw.indexed.indirect_draw_param_count_instanced.first_instance.triangle_list
 dEQP-VK.draw.dynamic_rendering.indirect_draw.indexed.indirect_draw_param_count_instanced.first_instance.triangle_strip
+dEQP-VK.draw.dynamic_rendering.indirect_draw.sequential_data_from_compute.indirect_draw.triangle_list
+dEQP-VK.draw.dynamic_rendering.indirect_draw.sequential_data_from_compute.indirect_draw.triangle_strip
+dEQP-VK.draw.dynamic_rendering.indirect_draw.sequential_data_from_compute.indirect_draw_count.triangle_list
+dEQP-VK.draw.dynamic_rendering.indirect_draw.sequential_data_from_compute.indirect_draw_count.triangle_strip
+dEQP-VK.draw.dynamic_rendering.indirect_draw.sequential_data_from_compute.indirect_draw_param_count.triangle_list
+dEQP-VK.draw.dynamic_rendering.indirect_draw.sequential_data_from_compute.indirect_draw_param_count.triangle_strip
+dEQP-VK.draw.dynamic_rendering.indirect_draw.sequential_data_from_compute.indirect_draw_first_instance.triangle_list
+dEQP-VK.draw.dynamic_rendering.indirect_draw.sequential_data_from_compute.indirect_draw_first_instance.triangle_strip
+dEQP-VK.draw.dynamic_rendering.indirect_draw.sequential_data_from_compute.indirect_draw_count_first_instance.triangle_list
+dEQP-VK.draw.dynamic_rendering.indirect_draw.sequential_data_from_compute.indirect_draw_count_first_instance.triangle_strip
+dEQP-VK.draw.dynamic_rendering.indirect_draw.sequential_data_from_compute.indirect_draw_param_count_first_instance.triangle_list
+dEQP-VK.draw.dynamic_rendering.indirect_draw.sequential_data_from_compute.indirect_draw_param_count_first_instance.triangle_strip
+dEQP-VK.draw.dynamic_rendering.indirect_draw.sequential_data_from_compute.indirect_draw_instanced.no_first_instance.triangle_list
+dEQP-VK.draw.dynamic_rendering.indirect_draw.sequential_data_from_compute.indirect_draw_instanced.no_first_instance.triangle_strip
+dEQP-VK.draw.dynamic_rendering.indirect_draw.sequential_data_from_compute.indirect_draw_instanced.first_instance.triangle_list
+dEQP-VK.draw.dynamic_rendering.indirect_draw.sequential_data_from_compute.indirect_draw_instanced.first_instance.triangle_strip
+dEQP-VK.draw.dynamic_rendering.indirect_draw.sequential_data_from_compute.indirect_draw_count_instanced.no_first_instance.triangle_list
+dEQP-VK.draw.dynamic_rendering.indirect_draw.sequential_data_from_compute.indirect_draw_count_instanced.no_first_instance.triangle_strip
+dEQP-VK.draw.dynamic_rendering.indirect_draw.sequential_data_from_compute.indirect_draw_count_instanced.first_instance.triangle_list
+dEQP-VK.draw.dynamic_rendering.indirect_draw.sequential_data_from_compute.indirect_draw_count_instanced.first_instance.triangle_strip
+dEQP-VK.draw.dynamic_rendering.indirect_draw.sequential_data_from_compute.indirect_draw_param_count_instanced.no_first_instance.triangle_list
+dEQP-VK.draw.dynamic_rendering.indirect_draw.sequential_data_from_compute.indirect_draw_param_count_instanced.no_first_instance.triangle_strip
+dEQP-VK.draw.dynamic_rendering.indirect_draw.sequential_data_from_compute.indirect_draw_param_count_instanced.first_instance.triangle_list
+dEQP-VK.draw.dynamic_rendering.indirect_draw.sequential_data_from_compute.indirect_draw_param_count_instanced.first_instance.triangle_strip
+dEQP-VK.draw.dynamic_rendering.indirect_draw.indexed_data_from_compute.indirect_draw.triangle_list
+dEQP-VK.draw.dynamic_rendering.indirect_draw.indexed_data_from_compute.indirect_draw.triangle_strip
+dEQP-VK.draw.dynamic_rendering.indirect_draw.indexed_data_from_compute.indirect_draw_count.triangle_list
+dEQP-VK.draw.dynamic_rendering.indirect_draw.indexed_data_from_compute.indirect_draw_count.triangle_strip
+dEQP-VK.draw.dynamic_rendering.indirect_draw.indexed_data_from_compute.indirect_draw_param_count.triangle_list
+dEQP-VK.draw.dynamic_rendering.indirect_draw.indexed_data_from_compute.indirect_draw_param_count.triangle_strip
+dEQP-VK.draw.dynamic_rendering.indirect_draw.indexed_data_from_compute.indirect_draw_first_instance.triangle_list
+dEQP-VK.draw.dynamic_rendering.indirect_draw.indexed_data_from_compute.indirect_draw_first_instance.triangle_strip
+dEQP-VK.draw.dynamic_rendering.indirect_draw.indexed_data_from_compute.indirect_draw_count_first_instance.triangle_list
+dEQP-VK.draw.dynamic_rendering.indirect_draw.indexed_data_from_compute.indirect_draw_count_first_instance.triangle_strip
+dEQP-VK.draw.dynamic_rendering.indirect_draw.indexed_data_from_compute.indirect_draw_param_count_first_instance.triangle_list
+dEQP-VK.draw.dynamic_rendering.indirect_draw.indexed_data_from_compute.indirect_draw_param_count_first_instance.triangle_strip
+dEQP-VK.draw.dynamic_rendering.indirect_draw.indexed_data_from_compute.indirect_draw_instanced.no_first_instance.triangle_list
+dEQP-VK.draw.dynamic_rendering.indirect_draw.indexed_data_from_compute.indirect_draw_instanced.no_first_instance.triangle_strip
+dEQP-VK.draw.dynamic_rendering.indirect_draw.indexed_data_from_compute.indirect_draw_instanced.first_instance.triangle_list
+dEQP-VK.draw.dynamic_rendering.indirect_draw.indexed_data_from_compute.indirect_draw_instanced.first_instance.triangle_strip
+dEQP-VK.draw.dynamic_rendering.indirect_draw.indexed_data_from_compute.indirect_draw_count_instanced.no_first_instance.triangle_list
+dEQP-VK.draw.dynamic_rendering.indirect_draw.indexed_data_from_compute.indirect_draw_count_instanced.no_first_instance.triangle_strip
+dEQP-VK.draw.dynamic_rendering.indirect_draw.indexed_data_from_compute.indirect_draw_count_instanced.first_instance.triangle_list
+dEQP-VK.draw.dynamic_rendering.indirect_draw.indexed_data_from_compute.indirect_draw_count_instanced.first_instance.triangle_strip
+dEQP-VK.draw.dynamic_rendering.indirect_draw.indexed_data_from_compute.indirect_draw_param_count_instanced.no_first_instance.triangle_list
+dEQP-VK.draw.dynamic_rendering.indirect_draw.indexed_data_from_compute.indirect_draw_param_count_instanced.no_first_instance.triangle_strip
+dEQP-VK.draw.dynamic_rendering.indirect_draw.indexed_data_from_compute.indirect_draw_param_count_instanced.first_instance.triangle_list
+dEQP-VK.draw.dynamic_rendering.indirect_draw.indexed_data_from_compute.indirect_draw_param_count_instanced.first_instance.triangle_strip
 dEQP-VK.draw.dynamic_rendering.basic_draw.draw.point_list.1
 dEQP-VK.draw.dynamic_rendering.basic_draw.draw.point_list.45
 dEQP-VK.draw.dynamic_rendering.basic_draw.draw.line_list.1