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
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
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
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
--- /dev/null
+#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];
+}
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);
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);
{
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);
const VkQueue drawQueue = m_context.getUniversalQueue();
const VkDevice drawDevice = m_context.getDevice();
+ beginCommandBuffer(m_vk, *m_cmdBuffer, 0u);
beginRender();
const VkDeviceSize vertexBufferOffset = 0;
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);
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);
#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
{
: 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
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();
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);
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);
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)
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);
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);
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)
void IndirectDrawTests::init (void)
{
+ for (auto dataFromCompute : {false, true})
for (int drawTypeIdx = 0; drawTypeIdx < DRAWTYPE_LAST; drawTypeIdx++)
{
std::string drawTypeStr;
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");
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> >
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> >
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> >
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> >
{
// Draw
{
+ beginCommandBuffer(m_vk, *m_cmdBuffer, 0u);
beginRender();
const vk::VkDeviceSize vertexBufferOffset = 0;
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;
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;
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
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