Handle VK_PIPELINE_CREATE_RAY_TRACING_NO_NULL_* flags
authormichal_jakubek <michal.jakubek@mobica.com>
Thu, 5 Aug 2021 13:00:57 +0000 (15:00 +0200)
committerMatthew Netsch <quic_mnetsch@quicinc.com>
Fri, 7 Jan 2022 21:13:49 +0000 (21:13 +0000)
All tests use SBT with a ShaderRecordBufferKHR block
filled with certain data that is read by the shader group.
However, not all SBT elements are filled, but only these
that satisfy the Hit group index calculation equation.
The remaining are filled with empty group and dummy data.
Tests compute Hit group index on host and perform
offline raytracing. When the results from the device
and offline work are the same, the tests are passed.

New tests:
dEQP-VK.ray_tracing_pipeline.pipeline_no_null_shaders_flag.*

Components: Vulkan

VK-GL-CTS issue: 2777

Change-Id: If9eeda1f98c7a5f91c94d5ed307c92ba27f99cb5

AndroidGen.mk
android/cts/master/vk-master-2021-03-01/ray-tracing-pipeline.txt
android/cts/master/vk-master/ray-tracing-pipeline.txt
external/vulkancts/framework/vulkan/vkRayTracingUtil.cpp
external/vulkancts/framework/vulkan/vkRayTracingUtil.hpp
external/vulkancts/modules/vulkan/ray_tracing/CMakeLists.txt
external/vulkancts/modules/vulkan/ray_tracing/vktRayTracingAccelerationStructuresTests.cpp
external/vulkancts/modules/vulkan/ray_tracing/vktRayTracingPipelineFlagsTests.cpp [new file with mode: 0644]
external/vulkancts/modules/vulkan/ray_tracing/vktRayTracingPipelineFlagsTests.hpp [new file with mode: 0644]
external/vulkancts/modules/vulkan/ray_tracing/vktRayTracingTests.cpp
external/vulkancts/mustpass/master/vk-default/ray-tracing-pipeline.txt

index 71e3456..9df9476 100644 (file)
@@ -339,6 +339,7 @@ LOCAL_SRC_FILES := \
        external/vulkancts/modules/vulkan/ray_tracing/vktRayTracingMiscTests.cpp \
        external/vulkancts/modules/vulkan/ray_tracing/vktRayTracingNonUniformArgsTests.cpp \
        external/vulkancts/modules/vulkan/ray_tracing/vktRayTracingNullASTests.cpp \
+       external/vulkancts/modules/vulkan/ray_tracing/vktRayTracingPipelineFlagsTests.cpp \
        external/vulkancts/modules/vulkan/ray_tracing/vktRayTracingPipelineLibraryTests.cpp \
        external/vulkancts/modules/vulkan/ray_tracing/vktRayTracingProceduralGeometryTests.cpp \
        external/vulkancts/modules/vulkan/ray_tracing/vktRayTracingShaderBindingTableTests.cpp \
index d3aac1c..9c57f96 100644 (file)
@@ -9493,3 +9493,299 @@ dEQP-VK.ray_tracing_pipeline.non_uniform_args.miss_cause_3
 dEQP-VK.ray_tracing_pipeline.non_uniform_args.miss_cause_4
 dEQP-VK.ray_tracing_pipeline.non_uniform_args.miss_cause_5
 dEQP-VK.ray_tracing_pipeline.non_uniform_args.miss_cause_6
+dEQP-VK.ray_tracing_pipeline.pipeline_no_null_shaders_flag.gpu.triangles.stride_3.offset_7.use_libs.miss
+dEQP-VK.ray_tracing_pipeline.pipeline_no_null_shaders_flag.gpu.triangles.stride_3.offset_7.use_libs.chit
+dEQP-VK.ray_tracing_pipeline.pipeline_no_null_shaders_flag.gpu.triangles.stride_3.offset_7.use_libs.chit_or_miss
+dEQP-VK.ray_tracing_pipeline.pipeline_no_null_shaders_flag.gpu.triangles.stride_3.offset_7.use_libs.any
+dEQP-VK.ray_tracing_pipeline.pipeline_no_null_shaders_flag.gpu.triangles.stride_3.offset_7.use_libs.any_or_miss
+dEQP-VK.ray_tracing_pipeline.pipeline_no_null_shaders_flag.gpu.triangles.stride_3.offset_7.use_libs.any_or_chit
+dEQP-VK.ray_tracing_pipeline.pipeline_no_null_shaders_flag.gpu.triangles.stride_3.offset_7.use_libs.any_or_chit_or_miss
+dEQP-VK.ray_tracing_pipeline.pipeline_no_null_shaders_flag.gpu.triangles.stride_3.offset_7.no_libs.miss
+dEQP-VK.ray_tracing_pipeline.pipeline_no_null_shaders_flag.gpu.triangles.stride_3.offset_7.no_libs.chit
+dEQP-VK.ray_tracing_pipeline.pipeline_no_null_shaders_flag.gpu.triangles.stride_3.offset_7.no_libs.chit_or_miss
+dEQP-VK.ray_tracing_pipeline.pipeline_no_null_shaders_flag.gpu.triangles.stride_3.offset_7.no_libs.any
+dEQP-VK.ray_tracing_pipeline.pipeline_no_null_shaders_flag.gpu.triangles.stride_3.offset_7.no_libs.any_or_miss
+dEQP-VK.ray_tracing_pipeline.pipeline_no_null_shaders_flag.gpu.triangles.stride_3.offset_7.no_libs.any_or_chit
+dEQP-VK.ray_tracing_pipeline.pipeline_no_null_shaders_flag.gpu.triangles.stride_3.offset_7.no_libs.any_or_chit_or_miss
+dEQP-VK.ray_tracing_pipeline.pipeline_no_null_shaders_flag.gpu.triangles.stride_5.offset_7.use_libs.miss
+dEQP-VK.ray_tracing_pipeline.pipeline_no_null_shaders_flag.gpu.triangles.stride_5.offset_7.use_libs.chit
+dEQP-VK.ray_tracing_pipeline.pipeline_no_null_shaders_flag.gpu.triangles.stride_5.offset_7.use_libs.chit_or_miss
+dEQP-VK.ray_tracing_pipeline.pipeline_no_null_shaders_flag.gpu.triangles.stride_5.offset_7.use_libs.any
+dEQP-VK.ray_tracing_pipeline.pipeline_no_null_shaders_flag.gpu.triangles.stride_5.offset_7.use_libs.any_or_miss
+dEQP-VK.ray_tracing_pipeline.pipeline_no_null_shaders_flag.gpu.triangles.stride_5.offset_7.use_libs.any_or_chit
+dEQP-VK.ray_tracing_pipeline.pipeline_no_null_shaders_flag.gpu.triangles.stride_5.offset_7.use_libs.any_or_chit_or_miss
+dEQP-VK.ray_tracing_pipeline.pipeline_no_null_shaders_flag.gpu.triangles.stride_5.offset_7.no_libs.miss
+dEQP-VK.ray_tracing_pipeline.pipeline_no_null_shaders_flag.gpu.triangles.stride_5.offset_7.no_libs.chit
+dEQP-VK.ray_tracing_pipeline.pipeline_no_null_shaders_flag.gpu.triangles.stride_5.offset_7.no_libs.chit_or_miss
+dEQP-VK.ray_tracing_pipeline.pipeline_no_null_shaders_flag.gpu.triangles.stride_5.offset_7.no_libs.any
+dEQP-VK.ray_tracing_pipeline.pipeline_no_null_shaders_flag.gpu.triangles.stride_5.offset_7.no_libs.any_or_miss
+dEQP-VK.ray_tracing_pipeline.pipeline_no_null_shaders_flag.gpu.triangles.stride_5.offset_7.no_libs.any_or_chit
+dEQP-VK.ray_tracing_pipeline.pipeline_no_null_shaders_flag.gpu.triangles.stride_5.offset_7.no_libs.any_or_chit_or_miss
+dEQP-VK.ray_tracing_pipeline.pipeline_no_null_shaders_flag.gpu.boxes.stride_3.offset_7.use_libs.any_or_chit_or_isect_or_miss
+dEQP-VK.ray_tracing_pipeline.pipeline_no_null_shaders_flag.gpu.boxes.stride_3.offset_7.use_libs.chit_or_isect_or_miss
+dEQP-VK.ray_tracing_pipeline.pipeline_no_null_shaders_flag.gpu.boxes.stride_3.offset_7.use_libs.isect_or_miss
+dEQP-VK.ray_tracing_pipeline.pipeline_no_null_shaders_flag.gpu.boxes.stride_3.offset_7.use_libs.isect
+dEQP-VK.ray_tracing_pipeline.pipeline_no_null_shaders_flag.gpu.boxes.stride_3.offset_7.use_libs.miss
+dEQP-VK.ray_tracing_pipeline.pipeline_no_null_shaders_flag.gpu.boxes.stride_3.offset_7.use_libs.chit_or_isect
+dEQP-VK.ray_tracing_pipeline.pipeline_no_null_shaders_flag.gpu.boxes.stride_3.offset_7.use_libs.chit
+dEQP-VK.ray_tracing_pipeline.pipeline_no_null_shaders_flag.gpu.boxes.stride_3.offset_7.use_libs.chit_or_miss
+dEQP-VK.ray_tracing_pipeline.pipeline_no_null_shaders_flag.gpu.boxes.stride_3.offset_7.use_libs.any_or_isect_or_miss
+dEQP-VK.ray_tracing_pipeline.pipeline_no_null_shaders_flag.gpu.boxes.stride_3.offset_7.use_libs.any_or_isect
+dEQP-VK.ray_tracing_pipeline.pipeline_no_null_shaders_flag.gpu.boxes.stride_3.offset_7.use_libs.any
+dEQP-VK.ray_tracing_pipeline.pipeline_no_null_shaders_flag.gpu.boxes.stride_3.offset_7.use_libs.any_or_miss
+dEQP-VK.ray_tracing_pipeline.pipeline_no_null_shaders_flag.gpu.boxes.stride_3.offset_7.use_libs.any_or_chit_or_isect
+dEQP-VK.ray_tracing_pipeline.pipeline_no_null_shaders_flag.gpu.boxes.stride_3.offset_7.use_libs.any_or_chit
+dEQP-VK.ray_tracing_pipeline.pipeline_no_null_shaders_flag.gpu.boxes.stride_3.offset_7.use_libs.any_or_chit_or_miss
+dEQP-VK.ray_tracing_pipeline.pipeline_no_null_shaders_flag.gpu.boxes.stride_3.offset_7.no_libs.any_or_chit_or_isect_or_miss
+dEQP-VK.ray_tracing_pipeline.pipeline_no_null_shaders_flag.gpu.boxes.stride_3.offset_7.no_libs.chit_or_isect_or_miss
+dEQP-VK.ray_tracing_pipeline.pipeline_no_null_shaders_flag.gpu.boxes.stride_3.offset_7.no_libs.isect_or_miss
+dEQP-VK.ray_tracing_pipeline.pipeline_no_null_shaders_flag.gpu.boxes.stride_3.offset_7.no_libs.isect
+dEQP-VK.ray_tracing_pipeline.pipeline_no_null_shaders_flag.gpu.boxes.stride_3.offset_7.no_libs.miss
+dEQP-VK.ray_tracing_pipeline.pipeline_no_null_shaders_flag.gpu.boxes.stride_3.offset_7.no_libs.chit_or_isect
+dEQP-VK.ray_tracing_pipeline.pipeline_no_null_shaders_flag.gpu.boxes.stride_3.offset_7.no_libs.chit
+dEQP-VK.ray_tracing_pipeline.pipeline_no_null_shaders_flag.gpu.boxes.stride_3.offset_7.no_libs.chit_or_miss
+dEQP-VK.ray_tracing_pipeline.pipeline_no_null_shaders_flag.gpu.boxes.stride_3.offset_7.no_libs.any_or_isect_or_miss
+dEQP-VK.ray_tracing_pipeline.pipeline_no_null_shaders_flag.gpu.boxes.stride_3.offset_7.no_libs.any_or_isect
+dEQP-VK.ray_tracing_pipeline.pipeline_no_null_shaders_flag.gpu.boxes.stride_3.offset_7.no_libs.any
+dEQP-VK.ray_tracing_pipeline.pipeline_no_null_shaders_flag.gpu.boxes.stride_3.offset_7.no_libs.any_or_miss
+dEQP-VK.ray_tracing_pipeline.pipeline_no_null_shaders_flag.gpu.boxes.stride_3.offset_7.no_libs.any_or_chit_or_isect
+dEQP-VK.ray_tracing_pipeline.pipeline_no_null_shaders_flag.gpu.boxes.stride_3.offset_7.no_libs.any_or_chit
+dEQP-VK.ray_tracing_pipeline.pipeline_no_null_shaders_flag.gpu.boxes.stride_3.offset_7.no_libs.any_or_chit_or_miss
+dEQP-VK.ray_tracing_pipeline.pipeline_no_null_shaders_flag.gpu.boxes.stride_5.offset_7.use_libs.any_or_chit_or_isect_or_miss
+dEQP-VK.ray_tracing_pipeline.pipeline_no_null_shaders_flag.gpu.boxes.stride_5.offset_7.use_libs.chit_or_isect_or_miss
+dEQP-VK.ray_tracing_pipeline.pipeline_no_null_shaders_flag.gpu.boxes.stride_5.offset_7.use_libs.isect_or_miss
+dEQP-VK.ray_tracing_pipeline.pipeline_no_null_shaders_flag.gpu.boxes.stride_5.offset_7.use_libs.isect
+dEQP-VK.ray_tracing_pipeline.pipeline_no_null_shaders_flag.gpu.boxes.stride_5.offset_7.use_libs.miss
+dEQP-VK.ray_tracing_pipeline.pipeline_no_null_shaders_flag.gpu.boxes.stride_5.offset_7.use_libs.chit_or_isect
+dEQP-VK.ray_tracing_pipeline.pipeline_no_null_shaders_flag.gpu.boxes.stride_5.offset_7.use_libs.chit
+dEQP-VK.ray_tracing_pipeline.pipeline_no_null_shaders_flag.gpu.boxes.stride_5.offset_7.use_libs.chit_or_miss
+dEQP-VK.ray_tracing_pipeline.pipeline_no_null_shaders_flag.gpu.boxes.stride_5.offset_7.use_libs.any_or_isect_or_miss
+dEQP-VK.ray_tracing_pipeline.pipeline_no_null_shaders_flag.gpu.boxes.stride_5.offset_7.use_libs.any_or_isect
+dEQP-VK.ray_tracing_pipeline.pipeline_no_null_shaders_flag.gpu.boxes.stride_5.offset_7.use_libs.any
+dEQP-VK.ray_tracing_pipeline.pipeline_no_null_shaders_flag.gpu.boxes.stride_5.offset_7.use_libs.any_or_miss
+dEQP-VK.ray_tracing_pipeline.pipeline_no_null_shaders_flag.gpu.boxes.stride_5.offset_7.use_libs.any_or_chit_or_isect
+dEQP-VK.ray_tracing_pipeline.pipeline_no_null_shaders_flag.gpu.boxes.stride_5.offset_7.use_libs.any_or_chit
+dEQP-VK.ray_tracing_pipeline.pipeline_no_null_shaders_flag.gpu.boxes.stride_5.offset_7.use_libs.any_or_chit_or_miss
+dEQP-VK.ray_tracing_pipeline.pipeline_no_null_shaders_flag.gpu.boxes.stride_5.offset_7.no_libs.any_or_chit_or_isect_or_miss
+dEQP-VK.ray_tracing_pipeline.pipeline_no_null_shaders_flag.gpu.boxes.stride_5.offset_7.no_libs.chit_or_isect_or_miss
+dEQP-VK.ray_tracing_pipeline.pipeline_no_null_shaders_flag.gpu.boxes.stride_5.offset_7.no_libs.isect_or_miss
+dEQP-VK.ray_tracing_pipeline.pipeline_no_null_shaders_flag.gpu.boxes.stride_5.offset_7.no_libs.isect
+dEQP-VK.ray_tracing_pipeline.pipeline_no_null_shaders_flag.gpu.boxes.stride_5.offset_7.no_libs.miss
+dEQP-VK.ray_tracing_pipeline.pipeline_no_null_shaders_flag.gpu.boxes.stride_5.offset_7.no_libs.chit_or_isect
+dEQP-VK.ray_tracing_pipeline.pipeline_no_null_shaders_flag.gpu.boxes.stride_5.offset_7.no_libs.chit
+dEQP-VK.ray_tracing_pipeline.pipeline_no_null_shaders_flag.gpu.boxes.stride_5.offset_7.no_libs.chit_or_miss
+dEQP-VK.ray_tracing_pipeline.pipeline_no_null_shaders_flag.gpu.boxes.stride_5.offset_7.no_libs.any_or_isect_or_miss
+dEQP-VK.ray_tracing_pipeline.pipeline_no_null_shaders_flag.gpu.boxes.stride_5.offset_7.no_libs.any_or_isect
+dEQP-VK.ray_tracing_pipeline.pipeline_no_null_shaders_flag.gpu.boxes.stride_5.offset_7.no_libs.any
+dEQP-VK.ray_tracing_pipeline.pipeline_no_null_shaders_flag.gpu.boxes.stride_5.offset_7.no_libs.any_or_miss
+dEQP-VK.ray_tracing_pipeline.pipeline_no_null_shaders_flag.gpu.boxes.stride_5.offset_7.no_libs.any_or_chit_or_isect
+dEQP-VK.ray_tracing_pipeline.pipeline_no_null_shaders_flag.gpu.boxes.stride_5.offset_7.no_libs.any_or_chit
+dEQP-VK.ray_tracing_pipeline.pipeline_no_null_shaders_flag.gpu.boxes.stride_5.offset_7.no_libs.any_or_chit_or_miss
+dEQP-VK.ray_tracing_pipeline.pipeline_no_null_shaders_flag.gpu.tri_and_box.stride_3.offset_7.use_libs.any_or_chit_or_isect_or_miss
+dEQP-VK.ray_tracing_pipeline.pipeline_no_null_shaders_flag.gpu.tri_and_box.stride_3.offset_7.use_libs.chit_or_isect_or_miss
+dEQP-VK.ray_tracing_pipeline.pipeline_no_null_shaders_flag.gpu.tri_and_box.stride_3.offset_7.use_libs.isect_or_miss
+dEQP-VK.ray_tracing_pipeline.pipeline_no_null_shaders_flag.gpu.tri_and_box.stride_3.offset_7.use_libs.isect
+dEQP-VK.ray_tracing_pipeline.pipeline_no_null_shaders_flag.gpu.tri_and_box.stride_3.offset_7.use_libs.miss
+dEQP-VK.ray_tracing_pipeline.pipeline_no_null_shaders_flag.gpu.tri_and_box.stride_3.offset_7.use_libs.chit_or_isect
+dEQP-VK.ray_tracing_pipeline.pipeline_no_null_shaders_flag.gpu.tri_and_box.stride_3.offset_7.use_libs.chit
+dEQP-VK.ray_tracing_pipeline.pipeline_no_null_shaders_flag.gpu.tri_and_box.stride_3.offset_7.use_libs.chit_or_miss
+dEQP-VK.ray_tracing_pipeline.pipeline_no_null_shaders_flag.gpu.tri_and_box.stride_3.offset_7.use_libs.any_or_isect_or_miss
+dEQP-VK.ray_tracing_pipeline.pipeline_no_null_shaders_flag.gpu.tri_and_box.stride_3.offset_7.use_libs.any_or_isect
+dEQP-VK.ray_tracing_pipeline.pipeline_no_null_shaders_flag.gpu.tri_and_box.stride_3.offset_7.use_libs.any
+dEQP-VK.ray_tracing_pipeline.pipeline_no_null_shaders_flag.gpu.tri_and_box.stride_3.offset_7.use_libs.any_or_miss
+dEQP-VK.ray_tracing_pipeline.pipeline_no_null_shaders_flag.gpu.tri_and_box.stride_3.offset_7.use_libs.any_or_chit_or_isect
+dEQP-VK.ray_tracing_pipeline.pipeline_no_null_shaders_flag.gpu.tri_and_box.stride_3.offset_7.use_libs.any_or_chit
+dEQP-VK.ray_tracing_pipeline.pipeline_no_null_shaders_flag.gpu.tri_and_box.stride_3.offset_7.use_libs.any_or_chit_or_miss
+dEQP-VK.ray_tracing_pipeline.pipeline_no_null_shaders_flag.gpu.tri_and_box.stride_3.offset_7.no_libs.any_or_chit_or_isect_or_miss
+dEQP-VK.ray_tracing_pipeline.pipeline_no_null_shaders_flag.gpu.tri_and_box.stride_3.offset_7.no_libs.chit_or_isect_or_miss
+dEQP-VK.ray_tracing_pipeline.pipeline_no_null_shaders_flag.gpu.tri_and_box.stride_3.offset_7.no_libs.isect_or_miss
+dEQP-VK.ray_tracing_pipeline.pipeline_no_null_shaders_flag.gpu.tri_and_box.stride_3.offset_7.no_libs.isect
+dEQP-VK.ray_tracing_pipeline.pipeline_no_null_shaders_flag.gpu.tri_and_box.stride_3.offset_7.no_libs.miss
+dEQP-VK.ray_tracing_pipeline.pipeline_no_null_shaders_flag.gpu.tri_and_box.stride_3.offset_7.no_libs.chit_or_isect
+dEQP-VK.ray_tracing_pipeline.pipeline_no_null_shaders_flag.gpu.tri_and_box.stride_3.offset_7.no_libs.chit
+dEQP-VK.ray_tracing_pipeline.pipeline_no_null_shaders_flag.gpu.tri_and_box.stride_3.offset_7.no_libs.chit_or_miss
+dEQP-VK.ray_tracing_pipeline.pipeline_no_null_shaders_flag.gpu.tri_and_box.stride_3.offset_7.no_libs.any_or_isect_or_miss
+dEQP-VK.ray_tracing_pipeline.pipeline_no_null_shaders_flag.gpu.tri_and_box.stride_3.offset_7.no_libs.any_or_isect
+dEQP-VK.ray_tracing_pipeline.pipeline_no_null_shaders_flag.gpu.tri_and_box.stride_3.offset_7.no_libs.any
+dEQP-VK.ray_tracing_pipeline.pipeline_no_null_shaders_flag.gpu.tri_and_box.stride_3.offset_7.no_libs.any_or_miss
+dEQP-VK.ray_tracing_pipeline.pipeline_no_null_shaders_flag.gpu.tri_and_box.stride_3.offset_7.no_libs.any_or_chit_or_isect
+dEQP-VK.ray_tracing_pipeline.pipeline_no_null_shaders_flag.gpu.tri_and_box.stride_3.offset_7.no_libs.any_or_chit
+dEQP-VK.ray_tracing_pipeline.pipeline_no_null_shaders_flag.gpu.tri_and_box.stride_3.offset_7.no_libs.any_or_chit_or_miss
+dEQP-VK.ray_tracing_pipeline.pipeline_no_null_shaders_flag.gpu.tri_and_box.stride_5.offset_7.use_libs.any_or_chit_or_isect_or_miss
+dEQP-VK.ray_tracing_pipeline.pipeline_no_null_shaders_flag.gpu.tri_and_box.stride_5.offset_7.use_libs.chit_or_isect_or_miss
+dEQP-VK.ray_tracing_pipeline.pipeline_no_null_shaders_flag.gpu.tri_and_box.stride_5.offset_7.use_libs.isect_or_miss
+dEQP-VK.ray_tracing_pipeline.pipeline_no_null_shaders_flag.gpu.tri_and_box.stride_5.offset_7.use_libs.isect
+dEQP-VK.ray_tracing_pipeline.pipeline_no_null_shaders_flag.gpu.tri_and_box.stride_5.offset_7.use_libs.miss
+dEQP-VK.ray_tracing_pipeline.pipeline_no_null_shaders_flag.gpu.tri_and_box.stride_5.offset_7.use_libs.chit_or_isect
+dEQP-VK.ray_tracing_pipeline.pipeline_no_null_shaders_flag.gpu.tri_and_box.stride_5.offset_7.use_libs.chit
+dEQP-VK.ray_tracing_pipeline.pipeline_no_null_shaders_flag.gpu.tri_and_box.stride_5.offset_7.use_libs.chit_or_miss
+dEQP-VK.ray_tracing_pipeline.pipeline_no_null_shaders_flag.gpu.tri_and_box.stride_5.offset_7.use_libs.any_or_isect_or_miss
+dEQP-VK.ray_tracing_pipeline.pipeline_no_null_shaders_flag.gpu.tri_and_box.stride_5.offset_7.use_libs.any_or_isect
+dEQP-VK.ray_tracing_pipeline.pipeline_no_null_shaders_flag.gpu.tri_and_box.stride_5.offset_7.use_libs.any
+dEQP-VK.ray_tracing_pipeline.pipeline_no_null_shaders_flag.gpu.tri_and_box.stride_5.offset_7.use_libs.any_or_miss
+dEQP-VK.ray_tracing_pipeline.pipeline_no_null_shaders_flag.gpu.tri_and_box.stride_5.offset_7.use_libs.any_or_chit_or_isect
+dEQP-VK.ray_tracing_pipeline.pipeline_no_null_shaders_flag.gpu.tri_and_box.stride_5.offset_7.use_libs.any_or_chit
+dEQP-VK.ray_tracing_pipeline.pipeline_no_null_shaders_flag.gpu.tri_and_box.stride_5.offset_7.use_libs.any_or_chit_or_miss
+dEQP-VK.ray_tracing_pipeline.pipeline_no_null_shaders_flag.gpu.tri_and_box.stride_5.offset_7.no_libs.any_or_chit_or_isect_or_miss
+dEQP-VK.ray_tracing_pipeline.pipeline_no_null_shaders_flag.gpu.tri_and_box.stride_5.offset_7.no_libs.chit_or_isect_or_miss
+dEQP-VK.ray_tracing_pipeline.pipeline_no_null_shaders_flag.gpu.tri_and_box.stride_5.offset_7.no_libs.isect_or_miss
+dEQP-VK.ray_tracing_pipeline.pipeline_no_null_shaders_flag.gpu.tri_and_box.stride_5.offset_7.no_libs.isect
+dEQP-VK.ray_tracing_pipeline.pipeline_no_null_shaders_flag.gpu.tri_and_box.stride_5.offset_7.no_libs.miss
+dEQP-VK.ray_tracing_pipeline.pipeline_no_null_shaders_flag.gpu.tri_and_box.stride_5.offset_7.no_libs.chit_or_isect
+dEQP-VK.ray_tracing_pipeline.pipeline_no_null_shaders_flag.gpu.tri_and_box.stride_5.offset_7.no_libs.chit
+dEQP-VK.ray_tracing_pipeline.pipeline_no_null_shaders_flag.gpu.tri_and_box.stride_5.offset_7.no_libs.chit_or_miss
+dEQP-VK.ray_tracing_pipeline.pipeline_no_null_shaders_flag.gpu.tri_and_box.stride_5.offset_7.no_libs.any_or_isect_or_miss
+dEQP-VK.ray_tracing_pipeline.pipeline_no_null_shaders_flag.gpu.tri_and_box.stride_5.offset_7.no_libs.any_or_isect
+dEQP-VK.ray_tracing_pipeline.pipeline_no_null_shaders_flag.gpu.tri_and_box.stride_5.offset_7.no_libs.any
+dEQP-VK.ray_tracing_pipeline.pipeline_no_null_shaders_flag.gpu.tri_and_box.stride_5.offset_7.no_libs.any_or_miss
+dEQP-VK.ray_tracing_pipeline.pipeline_no_null_shaders_flag.gpu.tri_and_box.stride_5.offset_7.no_libs.any_or_chit_or_isect
+dEQP-VK.ray_tracing_pipeline.pipeline_no_null_shaders_flag.gpu.tri_and_box.stride_5.offset_7.no_libs.any_or_chit
+dEQP-VK.ray_tracing_pipeline.pipeline_no_null_shaders_flag.gpu.tri_and_box.stride_5.offset_7.no_libs.any_or_chit_or_miss
+dEQP-VK.ray_tracing_pipeline.pipeline_no_null_shaders_flag.cpu.triangles.stride_3.offset_7.use_libs.miss
+dEQP-VK.ray_tracing_pipeline.pipeline_no_null_shaders_flag.cpu.triangles.stride_3.offset_7.use_libs.chit
+dEQP-VK.ray_tracing_pipeline.pipeline_no_null_shaders_flag.cpu.triangles.stride_3.offset_7.use_libs.chit_or_miss
+dEQP-VK.ray_tracing_pipeline.pipeline_no_null_shaders_flag.cpu.triangles.stride_3.offset_7.use_libs.any
+dEQP-VK.ray_tracing_pipeline.pipeline_no_null_shaders_flag.cpu.triangles.stride_3.offset_7.use_libs.any_or_miss
+dEQP-VK.ray_tracing_pipeline.pipeline_no_null_shaders_flag.cpu.triangles.stride_3.offset_7.use_libs.any_or_chit
+dEQP-VK.ray_tracing_pipeline.pipeline_no_null_shaders_flag.cpu.triangles.stride_3.offset_7.use_libs.any_or_chit_or_miss
+dEQP-VK.ray_tracing_pipeline.pipeline_no_null_shaders_flag.cpu.triangles.stride_3.offset_7.no_libs.miss
+dEQP-VK.ray_tracing_pipeline.pipeline_no_null_shaders_flag.cpu.triangles.stride_3.offset_7.no_libs.chit
+dEQP-VK.ray_tracing_pipeline.pipeline_no_null_shaders_flag.cpu.triangles.stride_3.offset_7.no_libs.chit_or_miss
+dEQP-VK.ray_tracing_pipeline.pipeline_no_null_shaders_flag.cpu.triangles.stride_3.offset_7.no_libs.any
+dEQP-VK.ray_tracing_pipeline.pipeline_no_null_shaders_flag.cpu.triangles.stride_3.offset_7.no_libs.any_or_miss
+dEQP-VK.ray_tracing_pipeline.pipeline_no_null_shaders_flag.cpu.triangles.stride_3.offset_7.no_libs.any_or_chit
+dEQP-VK.ray_tracing_pipeline.pipeline_no_null_shaders_flag.cpu.triangles.stride_3.offset_7.no_libs.any_or_chit_or_miss
+dEQP-VK.ray_tracing_pipeline.pipeline_no_null_shaders_flag.cpu.triangles.stride_5.offset_7.use_libs.miss
+dEQP-VK.ray_tracing_pipeline.pipeline_no_null_shaders_flag.cpu.triangles.stride_5.offset_7.use_libs.chit
+dEQP-VK.ray_tracing_pipeline.pipeline_no_null_shaders_flag.cpu.triangles.stride_5.offset_7.use_libs.chit_or_miss
+dEQP-VK.ray_tracing_pipeline.pipeline_no_null_shaders_flag.cpu.triangles.stride_5.offset_7.use_libs.any
+dEQP-VK.ray_tracing_pipeline.pipeline_no_null_shaders_flag.cpu.triangles.stride_5.offset_7.use_libs.any_or_miss
+dEQP-VK.ray_tracing_pipeline.pipeline_no_null_shaders_flag.cpu.triangles.stride_5.offset_7.use_libs.any_or_chit
+dEQP-VK.ray_tracing_pipeline.pipeline_no_null_shaders_flag.cpu.triangles.stride_5.offset_7.use_libs.any_or_chit_or_miss
+dEQP-VK.ray_tracing_pipeline.pipeline_no_null_shaders_flag.cpu.triangles.stride_5.offset_7.no_libs.miss
+dEQP-VK.ray_tracing_pipeline.pipeline_no_null_shaders_flag.cpu.triangles.stride_5.offset_7.no_libs.chit
+dEQP-VK.ray_tracing_pipeline.pipeline_no_null_shaders_flag.cpu.triangles.stride_5.offset_7.no_libs.chit_or_miss
+dEQP-VK.ray_tracing_pipeline.pipeline_no_null_shaders_flag.cpu.triangles.stride_5.offset_7.no_libs.any
+dEQP-VK.ray_tracing_pipeline.pipeline_no_null_shaders_flag.cpu.triangles.stride_5.offset_7.no_libs.any_or_miss
+dEQP-VK.ray_tracing_pipeline.pipeline_no_null_shaders_flag.cpu.triangles.stride_5.offset_7.no_libs.any_or_chit
+dEQP-VK.ray_tracing_pipeline.pipeline_no_null_shaders_flag.cpu.triangles.stride_5.offset_7.no_libs.any_or_chit_or_miss
+dEQP-VK.ray_tracing_pipeline.pipeline_no_null_shaders_flag.cpu.boxes.stride_3.offset_7.use_libs.any_or_chit_or_isect_or_miss
+dEQP-VK.ray_tracing_pipeline.pipeline_no_null_shaders_flag.cpu.boxes.stride_3.offset_7.use_libs.chit_or_isect_or_miss
+dEQP-VK.ray_tracing_pipeline.pipeline_no_null_shaders_flag.cpu.boxes.stride_3.offset_7.use_libs.isect_or_miss
+dEQP-VK.ray_tracing_pipeline.pipeline_no_null_shaders_flag.cpu.boxes.stride_3.offset_7.use_libs.isect
+dEQP-VK.ray_tracing_pipeline.pipeline_no_null_shaders_flag.cpu.boxes.stride_3.offset_7.use_libs.miss
+dEQP-VK.ray_tracing_pipeline.pipeline_no_null_shaders_flag.cpu.boxes.stride_3.offset_7.use_libs.chit_or_isect
+dEQP-VK.ray_tracing_pipeline.pipeline_no_null_shaders_flag.cpu.boxes.stride_3.offset_7.use_libs.chit
+dEQP-VK.ray_tracing_pipeline.pipeline_no_null_shaders_flag.cpu.boxes.stride_3.offset_7.use_libs.chit_or_miss
+dEQP-VK.ray_tracing_pipeline.pipeline_no_null_shaders_flag.cpu.boxes.stride_3.offset_7.use_libs.any_or_isect_or_miss
+dEQP-VK.ray_tracing_pipeline.pipeline_no_null_shaders_flag.cpu.boxes.stride_3.offset_7.use_libs.any_or_isect
+dEQP-VK.ray_tracing_pipeline.pipeline_no_null_shaders_flag.cpu.boxes.stride_3.offset_7.use_libs.any
+dEQP-VK.ray_tracing_pipeline.pipeline_no_null_shaders_flag.cpu.boxes.stride_3.offset_7.use_libs.any_or_miss
+dEQP-VK.ray_tracing_pipeline.pipeline_no_null_shaders_flag.cpu.boxes.stride_3.offset_7.use_libs.any_or_chit_or_isect
+dEQP-VK.ray_tracing_pipeline.pipeline_no_null_shaders_flag.cpu.boxes.stride_3.offset_7.use_libs.any_or_chit
+dEQP-VK.ray_tracing_pipeline.pipeline_no_null_shaders_flag.cpu.boxes.stride_3.offset_7.use_libs.any_or_chit_or_miss
+dEQP-VK.ray_tracing_pipeline.pipeline_no_null_shaders_flag.cpu.boxes.stride_3.offset_7.no_libs.any_or_chit_or_isect_or_miss
+dEQP-VK.ray_tracing_pipeline.pipeline_no_null_shaders_flag.cpu.boxes.stride_3.offset_7.no_libs.chit_or_isect_or_miss
+dEQP-VK.ray_tracing_pipeline.pipeline_no_null_shaders_flag.cpu.boxes.stride_3.offset_7.no_libs.isect_or_miss
+dEQP-VK.ray_tracing_pipeline.pipeline_no_null_shaders_flag.cpu.boxes.stride_3.offset_7.no_libs.isect
+dEQP-VK.ray_tracing_pipeline.pipeline_no_null_shaders_flag.cpu.boxes.stride_3.offset_7.no_libs.miss
+dEQP-VK.ray_tracing_pipeline.pipeline_no_null_shaders_flag.cpu.boxes.stride_3.offset_7.no_libs.chit_or_isect
+dEQP-VK.ray_tracing_pipeline.pipeline_no_null_shaders_flag.cpu.boxes.stride_3.offset_7.no_libs.chit
+dEQP-VK.ray_tracing_pipeline.pipeline_no_null_shaders_flag.cpu.boxes.stride_3.offset_7.no_libs.chit_or_miss
+dEQP-VK.ray_tracing_pipeline.pipeline_no_null_shaders_flag.cpu.boxes.stride_3.offset_7.no_libs.any_or_isect_or_miss
+dEQP-VK.ray_tracing_pipeline.pipeline_no_null_shaders_flag.cpu.boxes.stride_3.offset_7.no_libs.any_or_isect
+dEQP-VK.ray_tracing_pipeline.pipeline_no_null_shaders_flag.cpu.boxes.stride_3.offset_7.no_libs.any
+dEQP-VK.ray_tracing_pipeline.pipeline_no_null_shaders_flag.cpu.boxes.stride_3.offset_7.no_libs.any_or_miss
+dEQP-VK.ray_tracing_pipeline.pipeline_no_null_shaders_flag.cpu.boxes.stride_3.offset_7.no_libs.any_or_chit_or_isect
+dEQP-VK.ray_tracing_pipeline.pipeline_no_null_shaders_flag.cpu.boxes.stride_3.offset_7.no_libs.any_or_chit
+dEQP-VK.ray_tracing_pipeline.pipeline_no_null_shaders_flag.cpu.boxes.stride_3.offset_7.no_libs.any_or_chit_or_miss
+dEQP-VK.ray_tracing_pipeline.pipeline_no_null_shaders_flag.cpu.boxes.stride_5.offset_7.use_libs.any_or_chit_or_isect_or_miss
+dEQP-VK.ray_tracing_pipeline.pipeline_no_null_shaders_flag.cpu.boxes.stride_5.offset_7.use_libs.chit_or_isect_or_miss
+dEQP-VK.ray_tracing_pipeline.pipeline_no_null_shaders_flag.cpu.boxes.stride_5.offset_7.use_libs.isect_or_miss
+dEQP-VK.ray_tracing_pipeline.pipeline_no_null_shaders_flag.cpu.boxes.stride_5.offset_7.use_libs.isect
+dEQP-VK.ray_tracing_pipeline.pipeline_no_null_shaders_flag.cpu.boxes.stride_5.offset_7.use_libs.miss
+dEQP-VK.ray_tracing_pipeline.pipeline_no_null_shaders_flag.cpu.boxes.stride_5.offset_7.use_libs.chit_or_isect
+dEQP-VK.ray_tracing_pipeline.pipeline_no_null_shaders_flag.cpu.boxes.stride_5.offset_7.use_libs.chit
+dEQP-VK.ray_tracing_pipeline.pipeline_no_null_shaders_flag.cpu.boxes.stride_5.offset_7.use_libs.chit_or_miss
+dEQP-VK.ray_tracing_pipeline.pipeline_no_null_shaders_flag.cpu.boxes.stride_5.offset_7.use_libs.any_or_isect_or_miss
+dEQP-VK.ray_tracing_pipeline.pipeline_no_null_shaders_flag.cpu.boxes.stride_5.offset_7.use_libs.any_or_isect
+dEQP-VK.ray_tracing_pipeline.pipeline_no_null_shaders_flag.cpu.boxes.stride_5.offset_7.use_libs.any
+dEQP-VK.ray_tracing_pipeline.pipeline_no_null_shaders_flag.cpu.boxes.stride_5.offset_7.use_libs.any_or_miss
+dEQP-VK.ray_tracing_pipeline.pipeline_no_null_shaders_flag.cpu.boxes.stride_5.offset_7.use_libs.any_or_chit_or_isect
+dEQP-VK.ray_tracing_pipeline.pipeline_no_null_shaders_flag.cpu.boxes.stride_5.offset_7.use_libs.any_or_chit
+dEQP-VK.ray_tracing_pipeline.pipeline_no_null_shaders_flag.cpu.boxes.stride_5.offset_7.use_libs.any_or_chit_or_miss
+dEQP-VK.ray_tracing_pipeline.pipeline_no_null_shaders_flag.cpu.boxes.stride_5.offset_7.no_libs.any_or_chit_or_isect_or_miss
+dEQP-VK.ray_tracing_pipeline.pipeline_no_null_shaders_flag.cpu.boxes.stride_5.offset_7.no_libs.chit_or_isect_or_miss
+dEQP-VK.ray_tracing_pipeline.pipeline_no_null_shaders_flag.cpu.boxes.stride_5.offset_7.no_libs.isect_or_miss
+dEQP-VK.ray_tracing_pipeline.pipeline_no_null_shaders_flag.cpu.boxes.stride_5.offset_7.no_libs.isect
+dEQP-VK.ray_tracing_pipeline.pipeline_no_null_shaders_flag.cpu.boxes.stride_5.offset_7.no_libs.miss
+dEQP-VK.ray_tracing_pipeline.pipeline_no_null_shaders_flag.cpu.boxes.stride_5.offset_7.no_libs.chit_or_isect
+dEQP-VK.ray_tracing_pipeline.pipeline_no_null_shaders_flag.cpu.boxes.stride_5.offset_7.no_libs.chit
+dEQP-VK.ray_tracing_pipeline.pipeline_no_null_shaders_flag.cpu.boxes.stride_5.offset_7.no_libs.chit_or_miss
+dEQP-VK.ray_tracing_pipeline.pipeline_no_null_shaders_flag.cpu.boxes.stride_5.offset_7.no_libs.any_or_isect_or_miss
+dEQP-VK.ray_tracing_pipeline.pipeline_no_null_shaders_flag.cpu.boxes.stride_5.offset_7.no_libs.any_or_isect
+dEQP-VK.ray_tracing_pipeline.pipeline_no_null_shaders_flag.cpu.boxes.stride_5.offset_7.no_libs.any
+dEQP-VK.ray_tracing_pipeline.pipeline_no_null_shaders_flag.cpu.boxes.stride_5.offset_7.no_libs.any_or_miss
+dEQP-VK.ray_tracing_pipeline.pipeline_no_null_shaders_flag.cpu.boxes.stride_5.offset_7.no_libs.any_or_chit_or_isect
+dEQP-VK.ray_tracing_pipeline.pipeline_no_null_shaders_flag.cpu.boxes.stride_5.offset_7.no_libs.any_or_chit
+dEQP-VK.ray_tracing_pipeline.pipeline_no_null_shaders_flag.cpu.boxes.stride_5.offset_7.no_libs.any_or_chit_or_miss
+dEQP-VK.ray_tracing_pipeline.pipeline_no_null_shaders_flag.cpu.tri_and_box.stride_3.offset_7.use_libs.any_or_chit_or_isect_or_miss
+dEQP-VK.ray_tracing_pipeline.pipeline_no_null_shaders_flag.cpu.tri_and_box.stride_3.offset_7.use_libs.chit_or_isect_or_miss
+dEQP-VK.ray_tracing_pipeline.pipeline_no_null_shaders_flag.cpu.tri_and_box.stride_3.offset_7.use_libs.isect_or_miss
+dEQP-VK.ray_tracing_pipeline.pipeline_no_null_shaders_flag.cpu.tri_and_box.stride_3.offset_7.use_libs.isect
+dEQP-VK.ray_tracing_pipeline.pipeline_no_null_shaders_flag.cpu.tri_and_box.stride_3.offset_7.use_libs.miss
+dEQP-VK.ray_tracing_pipeline.pipeline_no_null_shaders_flag.cpu.tri_and_box.stride_3.offset_7.use_libs.chit_or_isect
+dEQP-VK.ray_tracing_pipeline.pipeline_no_null_shaders_flag.cpu.tri_and_box.stride_3.offset_7.use_libs.chit
+dEQP-VK.ray_tracing_pipeline.pipeline_no_null_shaders_flag.cpu.tri_and_box.stride_3.offset_7.use_libs.chit_or_miss
+dEQP-VK.ray_tracing_pipeline.pipeline_no_null_shaders_flag.cpu.tri_and_box.stride_3.offset_7.use_libs.any_or_isect_or_miss
+dEQP-VK.ray_tracing_pipeline.pipeline_no_null_shaders_flag.cpu.tri_and_box.stride_3.offset_7.use_libs.any_or_isect
+dEQP-VK.ray_tracing_pipeline.pipeline_no_null_shaders_flag.cpu.tri_and_box.stride_3.offset_7.use_libs.any
+dEQP-VK.ray_tracing_pipeline.pipeline_no_null_shaders_flag.cpu.tri_and_box.stride_3.offset_7.use_libs.any_or_miss
+dEQP-VK.ray_tracing_pipeline.pipeline_no_null_shaders_flag.cpu.tri_and_box.stride_3.offset_7.use_libs.any_or_chit_or_isect
+dEQP-VK.ray_tracing_pipeline.pipeline_no_null_shaders_flag.cpu.tri_and_box.stride_3.offset_7.use_libs.any_or_chit
+dEQP-VK.ray_tracing_pipeline.pipeline_no_null_shaders_flag.cpu.tri_and_box.stride_3.offset_7.use_libs.any_or_chit_or_miss
+dEQP-VK.ray_tracing_pipeline.pipeline_no_null_shaders_flag.cpu.tri_and_box.stride_3.offset_7.no_libs.any_or_chit_or_isect_or_miss
+dEQP-VK.ray_tracing_pipeline.pipeline_no_null_shaders_flag.cpu.tri_and_box.stride_3.offset_7.no_libs.chit_or_isect_or_miss
+dEQP-VK.ray_tracing_pipeline.pipeline_no_null_shaders_flag.cpu.tri_and_box.stride_3.offset_7.no_libs.isect_or_miss
+dEQP-VK.ray_tracing_pipeline.pipeline_no_null_shaders_flag.cpu.tri_and_box.stride_3.offset_7.no_libs.isect
+dEQP-VK.ray_tracing_pipeline.pipeline_no_null_shaders_flag.cpu.tri_and_box.stride_3.offset_7.no_libs.miss
+dEQP-VK.ray_tracing_pipeline.pipeline_no_null_shaders_flag.cpu.tri_and_box.stride_3.offset_7.no_libs.chit_or_isect
+dEQP-VK.ray_tracing_pipeline.pipeline_no_null_shaders_flag.cpu.tri_and_box.stride_3.offset_7.no_libs.chit
+dEQP-VK.ray_tracing_pipeline.pipeline_no_null_shaders_flag.cpu.tri_and_box.stride_3.offset_7.no_libs.chit_or_miss
+dEQP-VK.ray_tracing_pipeline.pipeline_no_null_shaders_flag.cpu.tri_and_box.stride_3.offset_7.no_libs.any_or_isect_or_miss
+dEQP-VK.ray_tracing_pipeline.pipeline_no_null_shaders_flag.cpu.tri_and_box.stride_3.offset_7.no_libs.any_or_isect
+dEQP-VK.ray_tracing_pipeline.pipeline_no_null_shaders_flag.cpu.tri_and_box.stride_3.offset_7.no_libs.any
+dEQP-VK.ray_tracing_pipeline.pipeline_no_null_shaders_flag.cpu.tri_and_box.stride_3.offset_7.no_libs.any_or_miss
+dEQP-VK.ray_tracing_pipeline.pipeline_no_null_shaders_flag.cpu.tri_and_box.stride_3.offset_7.no_libs.any_or_chit_or_isect
+dEQP-VK.ray_tracing_pipeline.pipeline_no_null_shaders_flag.cpu.tri_and_box.stride_3.offset_7.no_libs.any_or_chit
+dEQP-VK.ray_tracing_pipeline.pipeline_no_null_shaders_flag.cpu.tri_and_box.stride_3.offset_7.no_libs.any_or_chit_or_miss
+dEQP-VK.ray_tracing_pipeline.pipeline_no_null_shaders_flag.cpu.tri_and_box.stride_5.offset_7.use_libs.any_or_chit_or_isect_or_miss
+dEQP-VK.ray_tracing_pipeline.pipeline_no_null_shaders_flag.cpu.tri_and_box.stride_5.offset_7.use_libs.chit_or_isect_or_miss
+dEQP-VK.ray_tracing_pipeline.pipeline_no_null_shaders_flag.cpu.tri_and_box.stride_5.offset_7.use_libs.isect_or_miss
+dEQP-VK.ray_tracing_pipeline.pipeline_no_null_shaders_flag.cpu.tri_and_box.stride_5.offset_7.use_libs.isect
+dEQP-VK.ray_tracing_pipeline.pipeline_no_null_shaders_flag.cpu.tri_and_box.stride_5.offset_7.use_libs.miss
+dEQP-VK.ray_tracing_pipeline.pipeline_no_null_shaders_flag.cpu.tri_and_box.stride_5.offset_7.use_libs.chit_or_isect
+dEQP-VK.ray_tracing_pipeline.pipeline_no_null_shaders_flag.cpu.tri_and_box.stride_5.offset_7.use_libs.chit
+dEQP-VK.ray_tracing_pipeline.pipeline_no_null_shaders_flag.cpu.tri_and_box.stride_5.offset_7.use_libs.chit_or_miss
+dEQP-VK.ray_tracing_pipeline.pipeline_no_null_shaders_flag.cpu.tri_and_box.stride_5.offset_7.use_libs.any_or_isect_or_miss
+dEQP-VK.ray_tracing_pipeline.pipeline_no_null_shaders_flag.cpu.tri_and_box.stride_5.offset_7.use_libs.any_or_isect
+dEQP-VK.ray_tracing_pipeline.pipeline_no_null_shaders_flag.cpu.tri_and_box.stride_5.offset_7.use_libs.any
+dEQP-VK.ray_tracing_pipeline.pipeline_no_null_shaders_flag.cpu.tri_and_box.stride_5.offset_7.use_libs.any_or_miss
+dEQP-VK.ray_tracing_pipeline.pipeline_no_null_shaders_flag.cpu.tri_and_box.stride_5.offset_7.use_libs.any_or_chit_or_isect
+dEQP-VK.ray_tracing_pipeline.pipeline_no_null_shaders_flag.cpu.tri_and_box.stride_5.offset_7.use_libs.any_or_chit
+dEQP-VK.ray_tracing_pipeline.pipeline_no_null_shaders_flag.cpu.tri_and_box.stride_5.offset_7.use_libs.any_or_chit_or_miss
+dEQP-VK.ray_tracing_pipeline.pipeline_no_null_shaders_flag.cpu.tri_and_box.stride_5.offset_7.no_libs.any_or_chit_or_isect_or_miss
+dEQP-VK.ray_tracing_pipeline.pipeline_no_null_shaders_flag.cpu.tri_and_box.stride_5.offset_7.no_libs.chit_or_isect_or_miss
+dEQP-VK.ray_tracing_pipeline.pipeline_no_null_shaders_flag.cpu.tri_and_box.stride_5.offset_7.no_libs.isect_or_miss
+dEQP-VK.ray_tracing_pipeline.pipeline_no_null_shaders_flag.cpu.tri_and_box.stride_5.offset_7.no_libs.isect
+dEQP-VK.ray_tracing_pipeline.pipeline_no_null_shaders_flag.cpu.tri_and_box.stride_5.offset_7.no_libs.miss
+dEQP-VK.ray_tracing_pipeline.pipeline_no_null_shaders_flag.cpu.tri_and_box.stride_5.offset_7.no_libs.chit_or_isect
+dEQP-VK.ray_tracing_pipeline.pipeline_no_null_shaders_flag.cpu.tri_and_box.stride_5.offset_7.no_libs.chit
+dEQP-VK.ray_tracing_pipeline.pipeline_no_null_shaders_flag.cpu.tri_and_box.stride_5.offset_7.no_libs.chit_or_miss
+dEQP-VK.ray_tracing_pipeline.pipeline_no_null_shaders_flag.cpu.tri_and_box.stride_5.offset_7.no_libs.any_or_isect_or_miss
+dEQP-VK.ray_tracing_pipeline.pipeline_no_null_shaders_flag.cpu.tri_and_box.stride_5.offset_7.no_libs.any_or_isect
+dEQP-VK.ray_tracing_pipeline.pipeline_no_null_shaders_flag.cpu.tri_and_box.stride_5.offset_7.no_libs.any
+dEQP-VK.ray_tracing_pipeline.pipeline_no_null_shaders_flag.cpu.tri_and_box.stride_5.offset_7.no_libs.any_or_miss
+dEQP-VK.ray_tracing_pipeline.pipeline_no_null_shaders_flag.cpu.tri_and_box.stride_5.offset_7.no_libs.any_or_chit_or_isect
+dEQP-VK.ray_tracing_pipeline.pipeline_no_null_shaders_flag.cpu.tri_and_box.stride_5.offset_7.no_libs.any_or_chit
+dEQP-VK.ray_tracing_pipeline.pipeline_no_null_shaders_flag.cpu.tri_and_box.stride_5.offset_7.no_libs.any_or_chit_or_miss
index d3aac1c..9c57f96 100644 (file)
@@ -9493,3 +9493,299 @@ dEQP-VK.ray_tracing_pipeline.non_uniform_args.miss_cause_3
 dEQP-VK.ray_tracing_pipeline.non_uniform_args.miss_cause_4
 dEQP-VK.ray_tracing_pipeline.non_uniform_args.miss_cause_5
 dEQP-VK.ray_tracing_pipeline.non_uniform_args.miss_cause_6
+dEQP-VK.ray_tracing_pipeline.pipeline_no_null_shaders_flag.gpu.triangles.stride_3.offset_7.use_libs.miss
+dEQP-VK.ray_tracing_pipeline.pipeline_no_null_shaders_flag.gpu.triangles.stride_3.offset_7.use_libs.chit
+dEQP-VK.ray_tracing_pipeline.pipeline_no_null_shaders_flag.gpu.triangles.stride_3.offset_7.use_libs.chit_or_miss
+dEQP-VK.ray_tracing_pipeline.pipeline_no_null_shaders_flag.gpu.triangles.stride_3.offset_7.use_libs.any
+dEQP-VK.ray_tracing_pipeline.pipeline_no_null_shaders_flag.gpu.triangles.stride_3.offset_7.use_libs.any_or_miss
+dEQP-VK.ray_tracing_pipeline.pipeline_no_null_shaders_flag.gpu.triangles.stride_3.offset_7.use_libs.any_or_chit
+dEQP-VK.ray_tracing_pipeline.pipeline_no_null_shaders_flag.gpu.triangles.stride_3.offset_7.use_libs.any_or_chit_or_miss
+dEQP-VK.ray_tracing_pipeline.pipeline_no_null_shaders_flag.gpu.triangles.stride_3.offset_7.no_libs.miss
+dEQP-VK.ray_tracing_pipeline.pipeline_no_null_shaders_flag.gpu.triangles.stride_3.offset_7.no_libs.chit
+dEQP-VK.ray_tracing_pipeline.pipeline_no_null_shaders_flag.gpu.triangles.stride_3.offset_7.no_libs.chit_or_miss
+dEQP-VK.ray_tracing_pipeline.pipeline_no_null_shaders_flag.gpu.triangles.stride_3.offset_7.no_libs.any
+dEQP-VK.ray_tracing_pipeline.pipeline_no_null_shaders_flag.gpu.triangles.stride_3.offset_7.no_libs.any_or_miss
+dEQP-VK.ray_tracing_pipeline.pipeline_no_null_shaders_flag.gpu.triangles.stride_3.offset_7.no_libs.any_or_chit
+dEQP-VK.ray_tracing_pipeline.pipeline_no_null_shaders_flag.gpu.triangles.stride_3.offset_7.no_libs.any_or_chit_or_miss
+dEQP-VK.ray_tracing_pipeline.pipeline_no_null_shaders_flag.gpu.triangles.stride_5.offset_7.use_libs.miss
+dEQP-VK.ray_tracing_pipeline.pipeline_no_null_shaders_flag.gpu.triangles.stride_5.offset_7.use_libs.chit
+dEQP-VK.ray_tracing_pipeline.pipeline_no_null_shaders_flag.gpu.triangles.stride_5.offset_7.use_libs.chit_or_miss
+dEQP-VK.ray_tracing_pipeline.pipeline_no_null_shaders_flag.gpu.triangles.stride_5.offset_7.use_libs.any
+dEQP-VK.ray_tracing_pipeline.pipeline_no_null_shaders_flag.gpu.triangles.stride_5.offset_7.use_libs.any_or_miss
+dEQP-VK.ray_tracing_pipeline.pipeline_no_null_shaders_flag.gpu.triangles.stride_5.offset_7.use_libs.any_or_chit
+dEQP-VK.ray_tracing_pipeline.pipeline_no_null_shaders_flag.gpu.triangles.stride_5.offset_7.use_libs.any_or_chit_or_miss
+dEQP-VK.ray_tracing_pipeline.pipeline_no_null_shaders_flag.gpu.triangles.stride_5.offset_7.no_libs.miss
+dEQP-VK.ray_tracing_pipeline.pipeline_no_null_shaders_flag.gpu.triangles.stride_5.offset_7.no_libs.chit
+dEQP-VK.ray_tracing_pipeline.pipeline_no_null_shaders_flag.gpu.triangles.stride_5.offset_7.no_libs.chit_or_miss
+dEQP-VK.ray_tracing_pipeline.pipeline_no_null_shaders_flag.gpu.triangles.stride_5.offset_7.no_libs.any
+dEQP-VK.ray_tracing_pipeline.pipeline_no_null_shaders_flag.gpu.triangles.stride_5.offset_7.no_libs.any_or_miss
+dEQP-VK.ray_tracing_pipeline.pipeline_no_null_shaders_flag.gpu.triangles.stride_5.offset_7.no_libs.any_or_chit
+dEQP-VK.ray_tracing_pipeline.pipeline_no_null_shaders_flag.gpu.triangles.stride_5.offset_7.no_libs.any_or_chit_or_miss
+dEQP-VK.ray_tracing_pipeline.pipeline_no_null_shaders_flag.gpu.boxes.stride_3.offset_7.use_libs.any_or_chit_or_isect_or_miss
+dEQP-VK.ray_tracing_pipeline.pipeline_no_null_shaders_flag.gpu.boxes.stride_3.offset_7.use_libs.chit_or_isect_or_miss
+dEQP-VK.ray_tracing_pipeline.pipeline_no_null_shaders_flag.gpu.boxes.stride_3.offset_7.use_libs.isect_or_miss
+dEQP-VK.ray_tracing_pipeline.pipeline_no_null_shaders_flag.gpu.boxes.stride_3.offset_7.use_libs.isect
+dEQP-VK.ray_tracing_pipeline.pipeline_no_null_shaders_flag.gpu.boxes.stride_3.offset_7.use_libs.miss
+dEQP-VK.ray_tracing_pipeline.pipeline_no_null_shaders_flag.gpu.boxes.stride_3.offset_7.use_libs.chit_or_isect
+dEQP-VK.ray_tracing_pipeline.pipeline_no_null_shaders_flag.gpu.boxes.stride_3.offset_7.use_libs.chit
+dEQP-VK.ray_tracing_pipeline.pipeline_no_null_shaders_flag.gpu.boxes.stride_3.offset_7.use_libs.chit_or_miss
+dEQP-VK.ray_tracing_pipeline.pipeline_no_null_shaders_flag.gpu.boxes.stride_3.offset_7.use_libs.any_or_isect_or_miss
+dEQP-VK.ray_tracing_pipeline.pipeline_no_null_shaders_flag.gpu.boxes.stride_3.offset_7.use_libs.any_or_isect
+dEQP-VK.ray_tracing_pipeline.pipeline_no_null_shaders_flag.gpu.boxes.stride_3.offset_7.use_libs.any
+dEQP-VK.ray_tracing_pipeline.pipeline_no_null_shaders_flag.gpu.boxes.stride_3.offset_7.use_libs.any_or_miss
+dEQP-VK.ray_tracing_pipeline.pipeline_no_null_shaders_flag.gpu.boxes.stride_3.offset_7.use_libs.any_or_chit_or_isect
+dEQP-VK.ray_tracing_pipeline.pipeline_no_null_shaders_flag.gpu.boxes.stride_3.offset_7.use_libs.any_or_chit
+dEQP-VK.ray_tracing_pipeline.pipeline_no_null_shaders_flag.gpu.boxes.stride_3.offset_7.use_libs.any_or_chit_or_miss
+dEQP-VK.ray_tracing_pipeline.pipeline_no_null_shaders_flag.gpu.boxes.stride_3.offset_7.no_libs.any_or_chit_or_isect_or_miss
+dEQP-VK.ray_tracing_pipeline.pipeline_no_null_shaders_flag.gpu.boxes.stride_3.offset_7.no_libs.chit_or_isect_or_miss
+dEQP-VK.ray_tracing_pipeline.pipeline_no_null_shaders_flag.gpu.boxes.stride_3.offset_7.no_libs.isect_or_miss
+dEQP-VK.ray_tracing_pipeline.pipeline_no_null_shaders_flag.gpu.boxes.stride_3.offset_7.no_libs.isect
+dEQP-VK.ray_tracing_pipeline.pipeline_no_null_shaders_flag.gpu.boxes.stride_3.offset_7.no_libs.miss
+dEQP-VK.ray_tracing_pipeline.pipeline_no_null_shaders_flag.gpu.boxes.stride_3.offset_7.no_libs.chit_or_isect
+dEQP-VK.ray_tracing_pipeline.pipeline_no_null_shaders_flag.gpu.boxes.stride_3.offset_7.no_libs.chit
+dEQP-VK.ray_tracing_pipeline.pipeline_no_null_shaders_flag.gpu.boxes.stride_3.offset_7.no_libs.chit_or_miss
+dEQP-VK.ray_tracing_pipeline.pipeline_no_null_shaders_flag.gpu.boxes.stride_3.offset_7.no_libs.any_or_isect_or_miss
+dEQP-VK.ray_tracing_pipeline.pipeline_no_null_shaders_flag.gpu.boxes.stride_3.offset_7.no_libs.any_or_isect
+dEQP-VK.ray_tracing_pipeline.pipeline_no_null_shaders_flag.gpu.boxes.stride_3.offset_7.no_libs.any
+dEQP-VK.ray_tracing_pipeline.pipeline_no_null_shaders_flag.gpu.boxes.stride_3.offset_7.no_libs.any_or_miss
+dEQP-VK.ray_tracing_pipeline.pipeline_no_null_shaders_flag.gpu.boxes.stride_3.offset_7.no_libs.any_or_chit_or_isect
+dEQP-VK.ray_tracing_pipeline.pipeline_no_null_shaders_flag.gpu.boxes.stride_3.offset_7.no_libs.any_or_chit
+dEQP-VK.ray_tracing_pipeline.pipeline_no_null_shaders_flag.gpu.boxes.stride_3.offset_7.no_libs.any_or_chit_or_miss
+dEQP-VK.ray_tracing_pipeline.pipeline_no_null_shaders_flag.gpu.boxes.stride_5.offset_7.use_libs.any_or_chit_or_isect_or_miss
+dEQP-VK.ray_tracing_pipeline.pipeline_no_null_shaders_flag.gpu.boxes.stride_5.offset_7.use_libs.chit_or_isect_or_miss
+dEQP-VK.ray_tracing_pipeline.pipeline_no_null_shaders_flag.gpu.boxes.stride_5.offset_7.use_libs.isect_or_miss
+dEQP-VK.ray_tracing_pipeline.pipeline_no_null_shaders_flag.gpu.boxes.stride_5.offset_7.use_libs.isect
+dEQP-VK.ray_tracing_pipeline.pipeline_no_null_shaders_flag.gpu.boxes.stride_5.offset_7.use_libs.miss
+dEQP-VK.ray_tracing_pipeline.pipeline_no_null_shaders_flag.gpu.boxes.stride_5.offset_7.use_libs.chit_or_isect
+dEQP-VK.ray_tracing_pipeline.pipeline_no_null_shaders_flag.gpu.boxes.stride_5.offset_7.use_libs.chit
+dEQP-VK.ray_tracing_pipeline.pipeline_no_null_shaders_flag.gpu.boxes.stride_5.offset_7.use_libs.chit_or_miss
+dEQP-VK.ray_tracing_pipeline.pipeline_no_null_shaders_flag.gpu.boxes.stride_5.offset_7.use_libs.any_or_isect_or_miss
+dEQP-VK.ray_tracing_pipeline.pipeline_no_null_shaders_flag.gpu.boxes.stride_5.offset_7.use_libs.any_or_isect
+dEQP-VK.ray_tracing_pipeline.pipeline_no_null_shaders_flag.gpu.boxes.stride_5.offset_7.use_libs.any
+dEQP-VK.ray_tracing_pipeline.pipeline_no_null_shaders_flag.gpu.boxes.stride_5.offset_7.use_libs.any_or_miss
+dEQP-VK.ray_tracing_pipeline.pipeline_no_null_shaders_flag.gpu.boxes.stride_5.offset_7.use_libs.any_or_chit_or_isect
+dEQP-VK.ray_tracing_pipeline.pipeline_no_null_shaders_flag.gpu.boxes.stride_5.offset_7.use_libs.any_or_chit
+dEQP-VK.ray_tracing_pipeline.pipeline_no_null_shaders_flag.gpu.boxes.stride_5.offset_7.use_libs.any_or_chit_or_miss
+dEQP-VK.ray_tracing_pipeline.pipeline_no_null_shaders_flag.gpu.boxes.stride_5.offset_7.no_libs.any_or_chit_or_isect_or_miss
+dEQP-VK.ray_tracing_pipeline.pipeline_no_null_shaders_flag.gpu.boxes.stride_5.offset_7.no_libs.chit_or_isect_or_miss
+dEQP-VK.ray_tracing_pipeline.pipeline_no_null_shaders_flag.gpu.boxes.stride_5.offset_7.no_libs.isect_or_miss
+dEQP-VK.ray_tracing_pipeline.pipeline_no_null_shaders_flag.gpu.boxes.stride_5.offset_7.no_libs.isect
+dEQP-VK.ray_tracing_pipeline.pipeline_no_null_shaders_flag.gpu.boxes.stride_5.offset_7.no_libs.miss
+dEQP-VK.ray_tracing_pipeline.pipeline_no_null_shaders_flag.gpu.boxes.stride_5.offset_7.no_libs.chit_or_isect
+dEQP-VK.ray_tracing_pipeline.pipeline_no_null_shaders_flag.gpu.boxes.stride_5.offset_7.no_libs.chit
+dEQP-VK.ray_tracing_pipeline.pipeline_no_null_shaders_flag.gpu.boxes.stride_5.offset_7.no_libs.chit_or_miss
+dEQP-VK.ray_tracing_pipeline.pipeline_no_null_shaders_flag.gpu.boxes.stride_5.offset_7.no_libs.any_or_isect_or_miss
+dEQP-VK.ray_tracing_pipeline.pipeline_no_null_shaders_flag.gpu.boxes.stride_5.offset_7.no_libs.any_or_isect
+dEQP-VK.ray_tracing_pipeline.pipeline_no_null_shaders_flag.gpu.boxes.stride_5.offset_7.no_libs.any
+dEQP-VK.ray_tracing_pipeline.pipeline_no_null_shaders_flag.gpu.boxes.stride_5.offset_7.no_libs.any_or_miss
+dEQP-VK.ray_tracing_pipeline.pipeline_no_null_shaders_flag.gpu.boxes.stride_5.offset_7.no_libs.any_or_chit_or_isect
+dEQP-VK.ray_tracing_pipeline.pipeline_no_null_shaders_flag.gpu.boxes.stride_5.offset_7.no_libs.any_or_chit
+dEQP-VK.ray_tracing_pipeline.pipeline_no_null_shaders_flag.gpu.boxes.stride_5.offset_7.no_libs.any_or_chit_or_miss
+dEQP-VK.ray_tracing_pipeline.pipeline_no_null_shaders_flag.gpu.tri_and_box.stride_3.offset_7.use_libs.any_or_chit_or_isect_or_miss
+dEQP-VK.ray_tracing_pipeline.pipeline_no_null_shaders_flag.gpu.tri_and_box.stride_3.offset_7.use_libs.chit_or_isect_or_miss
+dEQP-VK.ray_tracing_pipeline.pipeline_no_null_shaders_flag.gpu.tri_and_box.stride_3.offset_7.use_libs.isect_or_miss
+dEQP-VK.ray_tracing_pipeline.pipeline_no_null_shaders_flag.gpu.tri_and_box.stride_3.offset_7.use_libs.isect
+dEQP-VK.ray_tracing_pipeline.pipeline_no_null_shaders_flag.gpu.tri_and_box.stride_3.offset_7.use_libs.miss
+dEQP-VK.ray_tracing_pipeline.pipeline_no_null_shaders_flag.gpu.tri_and_box.stride_3.offset_7.use_libs.chit_or_isect
+dEQP-VK.ray_tracing_pipeline.pipeline_no_null_shaders_flag.gpu.tri_and_box.stride_3.offset_7.use_libs.chit
+dEQP-VK.ray_tracing_pipeline.pipeline_no_null_shaders_flag.gpu.tri_and_box.stride_3.offset_7.use_libs.chit_or_miss
+dEQP-VK.ray_tracing_pipeline.pipeline_no_null_shaders_flag.gpu.tri_and_box.stride_3.offset_7.use_libs.any_or_isect_or_miss
+dEQP-VK.ray_tracing_pipeline.pipeline_no_null_shaders_flag.gpu.tri_and_box.stride_3.offset_7.use_libs.any_or_isect
+dEQP-VK.ray_tracing_pipeline.pipeline_no_null_shaders_flag.gpu.tri_and_box.stride_3.offset_7.use_libs.any
+dEQP-VK.ray_tracing_pipeline.pipeline_no_null_shaders_flag.gpu.tri_and_box.stride_3.offset_7.use_libs.any_or_miss
+dEQP-VK.ray_tracing_pipeline.pipeline_no_null_shaders_flag.gpu.tri_and_box.stride_3.offset_7.use_libs.any_or_chit_or_isect
+dEQP-VK.ray_tracing_pipeline.pipeline_no_null_shaders_flag.gpu.tri_and_box.stride_3.offset_7.use_libs.any_or_chit
+dEQP-VK.ray_tracing_pipeline.pipeline_no_null_shaders_flag.gpu.tri_and_box.stride_3.offset_7.use_libs.any_or_chit_or_miss
+dEQP-VK.ray_tracing_pipeline.pipeline_no_null_shaders_flag.gpu.tri_and_box.stride_3.offset_7.no_libs.any_or_chit_or_isect_or_miss
+dEQP-VK.ray_tracing_pipeline.pipeline_no_null_shaders_flag.gpu.tri_and_box.stride_3.offset_7.no_libs.chit_or_isect_or_miss
+dEQP-VK.ray_tracing_pipeline.pipeline_no_null_shaders_flag.gpu.tri_and_box.stride_3.offset_7.no_libs.isect_or_miss
+dEQP-VK.ray_tracing_pipeline.pipeline_no_null_shaders_flag.gpu.tri_and_box.stride_3.offset_7.no_libs.isect
+dEQP-VK.ray_tracing_pipeline.pipeline_no_null_shaders_flag.gpu.tri_and_box.stride_3.offset_7.no_libs.miss
+dEQP-VK.ray_tracing_pipeline.pipeline_no_null_shaders_flag.gpu.tri_and_box.stride_3.offset_7.no_libs.chit_or_isect
+dEQP-VK.ray_tracing_pipeline.pipeline_no_null_shaders_flag.gpu.tri_and_box.stride_3.offset_7.no_libs.chit
+dEQP-VK.ray_tracing_pipeline.pipeline_no_null_shaders_flag.gpu.tri_and_box.stride_3.offset_7.no_libs.chit_or_miss
+dEQP-VK.ray_tracing_pipeline.pipeline_no_null_shaders_flag.gpu.tri_and_box.stride_3.offset_7.no_libs.any_or_isect_or_miss
+dEQP-VK.ray_tracing_pipeline.pipeline_no_null_shaders_flag.gpu.tri_and_box.stride_3.offset_7.no_libs.any_or_isect
+dEQP-VK.ray_tracing_pipeline.pipeline_no_null_shaders_flag.gpu.tri_and_box.stride_3.offset_7.no_libs.any
+dEQP-VK.ray_tracing_pipeline.pipeline_no_null_shaders_flag.gpu.tri_and_box.stride_3.offset_7.no_libs.any_or_miss
+dEQP-VK.ray_tracing_pipeline.pipeline_no_null_shaders_flag.gpu.tri_and_box.stride_3.offset_7.no_libs.any_or_chit_or_isect
+dEQP-VK.ray_tracing_pipeline.pipeline_no_null_shaders_flag.gpu.tri_and_box.stride_3.offset_7.no_libs.any_or_chit
+dEQP-VK.ray_tracing_pipeline.pipeline_no_null_shaders_flag.gpu.tri_and_box.stride_3.offset_7.no_libs.any_or_chit_or_miss
+dEQP-VK.ray_tracing_pipeline.pipeline_no_null_shaders_flag.gpu.tri_and_box.stride_5.offset_7.use_libs.any_or_chit_or_isect_or_miss
+dEQP-VK.ray_tracing_pipeline.pipeline_no_null_shaders_flag.gpu.tri_and_box.stride_5.offset_7.use_libs.chit_or_isect_or_miss
+dEQP-VK.ray_tracing_pipeline.pipeline_no_null_shaders_flag.gpu.tri_and_box.stride_5.offset_7.use_libs.isect_or_miss
+dEQP-VK.ray_tracing_pipeline.pipeline_no_null_shaders_flag.gpu.tri_and_box.stride_5.offset_7.use_libs.isect
+dEQP-VK.ray_tracing_pipeline.pipeline_no_null_shaders_flag.gpu.tri_and_box.stride_5.offset_7.use_libs.miss
+dEQP-VK.ray_tracing_pipeline.pipeline_no_null_shaders_flag.gpu.tri_and_box.stride_5.offset_7.use_libs.chit_or_isect
+dEQP-VK.ray_tracing_pipeline.pipeline_no_null_shaders_flag.gpu.tri_and_box.stride_5.offset_7.use_libs.chit
+dEQP-VK.ray_tracing_pipeline.pipeline_no_null_shaders_flag.gpu.tri_and_box.stride_5.offset_7.use_libs.chit_or_miss
+dEQP-VK.ray_tracing_pipeline.pipeline_no_null_shaders_flag.gpu.tri_and_box.stride_5.offset_7.use_libs.any_or_isect_or_miss
+dEQP-VK.ray_tracing_pipeline.pipeline_no_null_shaders_flag.gpu.tri_and_box.stride_5.offset_7.use_libs.any_or_isect
+dEQP-VK.ray_tracing_pipeline.pipeline_no_null_shaders_flag.gpu.tri_and_box.stride_5.offset_7.use_libs.any
+dEQP-VK.ray_tracing_pipeline.pipeline_no_null_shaders_flag.gpu.tri_and_box.stride_5.offset_7.use_libs.any_or_miss
+dEQP-VK.ray_tracing_pipeline.pipeline_no_null_shaders_flag.gpu.tri_and_box.stride_5.offset_7.use_libs.any_or_chit_or_isect
+dEQP-VK.ray_tracing_pipeline.pipeline_no_null_shaders_flag.gpu.tri_and_box.stride_5.offset_7.use_libs.any_or_chit
+dEQP-VK.ray_tracing_pipeline.pipeline_no_null_shaders_flag.gpu.tri_and_box.stride_5.offset_7.use_libs.any_or_chit_or_miss
+dEQP-VK.ray_tracing_pipeline.pipeline_no_null_shaders_flag.gpu.tri_and_box.stride_5.offset_7.no_libs.any_or_chit_or_isect_or_miss
+dEQP-VK.ray_tracing_pipeline.pipeline_no_null_shaders_flag.gpu.tri_and_box.stride_5.offset_7.no_libs.chit_or_isect_or_miss
+dEQP-VK.ray_tracing_pipeline.pipeline_no_null_shaders_flag.gpu.tri_and_box.stride_5.offset_7.no_libs.isect_or_miss
+dEQP-VK.ray_tracing_pipeline.pipeline_no_null_shaders_flag.gpu.tri_and_box.stride_5.offset_7.no_libs.isect
+dEQP-VK.ray_tracing_pipeline.pipeline_no_null_shaders_flag.gpu.tri_and_box.stride_5.offset_7.no_libs.miss
+dEQP-VK.ray_tracing_pipeline.pipeline_no_null_shaders_flag.gpu.tri_and_box.stride_5.offset_7.no_libs.chit_or_isect
+dEQP-VK.ray_tracing_pipeline.pipeline_no_null_shaders_flag.gpu.tri_and_box.stride_5.offset_7.no_libs.chit
+dEQP-VK.ray_tracing_pipeline.pipeline_no_null_shaders_flag.gpu.tri_and_box.stride_5.offset_7.no_libs.chit_or_miss
+dEQP-VK.ray_tracing_pipeline.pipeline_no_null_shaders_flag.gpu.tri_and_box.stride_5.offset_7.no_libs.any_or_isect_or_miss
+dEQP-VK.ray_tracing_pipeline.pipeline_no_null_shaders_flag.gpu.tri_and_box.stride_5.offset_7.no_libs.any_or_isect
+dEQP-VK.ray_tracing_pipeline.pipeline_no_null_shaders_flag.gpu.tri_and_box.stride_5.offset_7.no_libs.any
+dEQP-VK.ray_tracing_pipeline.pipeline_no_null_shaders_flag.gpu.tri_and_box.stride_5.offset_7.no_libs.any_or_miss
+dEQP-VK.ray_tracing_pipeline.pipeline_no_null_shaders_flag.gpu.tri_and_box.stride_5.offset_7.no_libs.any_or_chit_or_isect
+dEQP-VK.ray_tracing_pipeline.pipeline_no_null_shaders_flag.gpu.tri_and_box.stride_5.offset_7.no_libs.any_or_chit
+dEQP-VK.ray_tracing_pipeline.pipeline_no_null_shaders_flag.gpu.tri_and_box.stride_5.offset_7.no_libs.any_or_chit_or_miss
+dEQP-VK.ray_tracing_pipeline.pipeline_no_null_shaders_flag.cpu.triangles.stride_3.offset_7.use_libs.miss
+dEQP-VK.ray_tracing_pipeline.pipeline_no_null_shaders_flag.cpu.triangles.stride_3.offset_7.use_libs.chit
+dEQP-VK.ray_tracing_pipeline.pipeline_no_null_shaders_flag.cpu.triangles.stride_3.offset_7.use_libs.chit_or_miss
+dEQP-VK.ray_tracing_pipeline.pipeline_no_null_shaders_flag.cpu.triangles.stride_3.offset_7.use_libs.any
+dEQP-VK.ray_tracing_pipeline.pipeline_no_null_shaders_flag.cpu.triangles.stride_3.offset_7.use_libs.any_or_miss
+dEQP-VK.ray_tracing_pipeline.pipeline_no_null_shaders_flag.cpu.triangles.stride_3.offset_7.use_libs.any_or_chit
+dEQP-VK.ray_tracing_pipeline.pipeline_no_null_shaders_flag.cpu.triangles.stride_3.offset_7.use_libs.any_or_chit_or_miss
+dEQP-VK.ray_tracing_pipeline.pipeline_no_null_shaders_flag.cpu.triangles.stride_3.offset_7.no_libs.miss
+dEQP-VK.ray_tracing_pipeline.pipeline_no_null_shaders_flag.cpu.triangles.stride_3.offset_7.no_libs.chit
+dEQP-VK.ray_tracing_pipeline.pipeline_no_null_shaders_flag.cpu.triangles.stride_3.offset_7.no_libs.chit_or_miss
+dEQP-VK.ray_tracing_pipeline.pipeline_no_null_shaders_flag.cpu.triangles.stride_3.offset_7.no_libs.any
+dEQP-VK.ray_tracing_pipeline.pipeline_no_null_shaders_flag.cpu.triangles.stride_3.offset_7.no_libs.any_or_miss
+dEQP-VK.ray_tracing_pipeline.pipeline_no_null_shaders_flag.cpu.triangles.stride_3.offset_7.no_libs.any_or_chit
+dEQP-VK.ray_tracing_pipeline.pipeline_no_null_shaders_flag.cpu.triangles.stride_3.offset_7.no_libs.any_or_chit_or_miss
+dEQP-VK.ray_tracing_pipeline.pipeline_no_null_shaders_flag.cpu.triangles.stride_5.offset_7.use_libs.miss
+dEQP-VK.ray_tracing_pipeline.pipeline_no_null_shaders_flag.cpu.triangles.stride_5.offset_7.use_libs.chit
+dEQP-VK.ray_tracing_pipeline.pipeline_no_null_shaders_flag.cpu.triangles.stride_5.offset_7.use_libs.chit_or_miss
+dEQP-VK.ray_tracing_pipeline.pipeline_no_null_shaders_flag.cpu.triangles.stride_5.offset_7.use_libs.any
+dEQP-VK.ray_tracing_pipeline.pipeline_no_null_shaders_flag.cpu.triangles.stride_5.offset_7.use_libs.any_or_miss
+dEQP-VK.ray_tracing_pipeline.pipeline_no_null_shaders_flag.cpu.triangles.stride_5.offset_7.use_libs.any_or_chit
+dEQP-VK.ray_tracing_pipeline.pipeline_no_null_shaders_flag.cpu.triangles.stride_5.offset_7.use_libs.any_or_chit_or_miss
+dEQP-VK.ray_tracing_pipeline.pipeline_no_null_shaders_flag.cpu.triangles.stride_5.offset_7.no_libs.miss
+dEQP-VK.ray_tracing_pipeline.pipeline_no_null_shaders_flag.cpu.triangles.stride_5.offset_7.no_libs.chit
+dEQP-VK.ray_tracing_pipeline.pipeline_no_null_shaders_flag.cpu.triangles.stride_5.offset_7.no_libs.chit_or_miss
+dEQP-VK.ray_tracing_pipeline.pipeline_no_null_shaders_flag.cpu.triangles.stride_5.offset_7.no_libs.any
+dEQP-VK.ray_tracing_pipeline.pipeline_no_null_shaders_flag.cpu.triangles.stride_5.offset_7.no_libs.any_or_miss
+dEQP-VK.ray_tracing_pipeline.pipeline_no_null_shaders_flag.cpu.triangles.stride_5.offset_7.no_libs.any_or_chit
+dEQP-VK.ray_tracing_pipeline.pipeline_no_null_shaders_flag.cpu.triangles.stride_5.offset_7.no_libs.any_or_chit_or_miss
+dEQP-VK.ray_tracing_pipeline.pipeline_no_null_shaders_flag.cpu.boxes.stride_3.offset_7.use_libs.any_or_chit_or_isect_or_miss
+dEQP-VK.ray_tracing_pipeline.pipeline_no_null_shaders_flag.cpu.boxes.stride_3.offset_7.use_libs.chit_or_isect_or_miss
+dEQP-VK.ray_tracing_pipeline.pipeline_no_null_shaders_flag.cpu.boxes.stride_3.offset_7.use_libs.isect_or_miss
+dEQP-VK.ray_tracing_pipeline.pipeline_no_null_shaders_flag.cpu.boxes.stride_3.offset_7.use_libs.isect
+dEQP-VK.ray_tracing_pipeline.pipeline_no_null_shaders_flag.cpu.boxes.stride_3.offset_7.use_libs.miss
+dEQP-VK.ray_tracing_pipeline.pipeline_no_null_shaders_flag.cpu.boxes.stride_3.offset_7.use_libs.chit_or_isect
+dEQP-VK.ray_tracing_pipeline.pipeline_no_null_shaders_flag.cpu.boxes.stride_3.offset_7.use_libs.chit
+dEQP-VK.ray_tracing_pipeline.pipeline_no_null_shaders_flag.cpu.boxes.stride_3.offset_7.use_libs.chit_or_miss
+dEQP-VK.ray_tracing_pipeline.pipeline_no_null_shaders_flag.cpu.boxes.stride_3.offset_7.use_libs.any_or_isect_or_miss
+dEQP-VK.ray_tracing_pipeline.pipeline_no_null_shaders_flag.cpu.boxes.stride_3.offset_7.use_libs.any_or_isect
+dEQP-VK.ray_tracing_pipeline.pipeline_no_null_shaders_flag.cpu.boxes.stride_3.offset_7.use_libs.any
+dEQP-VK.ray_tracing_pipeline.pipeline_no_null_shaders_flag.cpu.boxes.stride_3.offset_7.use_libs.any_or_miss
+dEQP-VK.ray_tracing_pipeline.pipeline_no_null_shaders_flag.cpu.boxes.stride_3.offset_7.use_libs.any_or_chit_or_isect
+dEQP-VK.ray_tracing_pipeline.pipeline_no_null_shaders_flag.cpu.boxes.stride_3.offset_7.use_libs.any_or_chit
+dEQP-VK.ray_tracing_pipeline.pipeline_no_null_shaders_flag.cpu.boxes.stride_3.offset_7.use_libs.any_or_chit_or_miss
+dEQP-VK.ray_tracing_pipeline.pipeline_no_null_shaders_flag.cpu.boxes.stride_3.offset_7.no_libs.any_or_chit_or_isect_or_miss
+dEQP-VK.ray_tracing_pipeline.pipeline_no_null_shaders_flag.cpu.boxes.stride_3.offset_7.no_libs.chit_or_isect_or_miss
+dEQP-VK.ray_tracing_pipeline.pipeline_no_null_shaders_flag.cpu.boxes.stride_3.offset_7.no_libs.isect_or_miss
+dEQP-VK.ray_tracing_pipeline.pipeline_no_null_shaders_flag.cpu.boxes.stride_3.offset_7.no_libs.isect
+dEQP-VK.ray_tracing_pipeline.pipeline_no_null_shaders_flag.cpu.boxes.stride_3.offset_7.no_libs.miss
+dEQP-VK.ray_tracing_pipeline.pipeline_no_null_shaders_flag.cpu.boxes.stride_3.offset_7.no_libs.chit_or_isect
+dEQP-VK.ray_tracing_pipeline.pipeline_no_null_shaders_flag.cpu.boxes.stride_3.offset_7.no_libs.chit
+dEQP-VK.ray_tracing_pipeline.pipeline_no_null_shaders_flag.cpu.boxes.stride_3.offset_7.no_libs.chit_or_miss
+dEQP-VK.ray_tracing_pipeline.pipeline_no_null_shaders_flag.cpu.boxes.stride_3.offset_7.no_libs.any_or_isect_or_miss
+dEQP-VK.ray_tracing_pipeline.pipeline_no_null_shaders_flag.cpu.boxes.stride_3.offset_7.no_libs.any_or_isect
+dEQP-VK.ray_tracing_pipeline.pipeline_no_null_shaders_flag.cpu.boxes.stride_3.offset_7.no_libs.any
+dEQP-VK.ray_tracing_pipeline.pipeline_no_null_shaders_flag.cpu.boxes.stride_3.offset_7.no_libs.any_or_miss
+dEQP-VK.ray_tracing_pipeline.pipeline_no_null_shaders_flag.cpu.boxes.stride_3.offset_7.no_libs.any_or_chit_or_isect
+dEQP-VK.ray_tracing_pipeline.pipeline_no_null_shaders_flag.cpu.boxes.stride_3.offset_7.no_libs.any_or_chit
+dEQP-VK.ray_tracing_pipeline.pipeline_no_null_shaders_flag.cpu.boxes.stride_3.offset_7.no_libs.any_or_chit_or_miss
+dEQP-VK.ray_tracing_pipeline.pipeline_no_null_shaders_flag.cpu.boxes.stride_5.offset_7.use_libs.any_or_chit_or_isect_or_miss
+dEQP-VK.ray_tracing_pipeline.pipeline_no_null_shaders_flag.cpu.boxes.stride_5.offset_7.use_libs.chit_or_isect_or_miss
+dEQP-VK.ray_tracing_pipeline.pipeline_no_null_shaders_flag.cpu.boxes.stride_5.offset_7.use_libs.isect_or_miss
+dEQP-VK.ray_tracing_pipeline.pipeline_no_null_shaders_flag.cpu.boxes.stride_5.offset_7.use_libs.isect
+dEQP-VK.ray_tracing_pipeline.pipeline_no_null_shaders_flag.cpu.boxes.stride_5.offset_7.use_libs.miss
+dEQP-VK.ray_tracing_pipeline.pipeline_no_null_shaders_flag.cpu.boxes.stride_5.offset_7.use_libs.chit_or_isect
+dEQP-VK.ray_tracing_pipeline.pipeline_no_null_shaders_flag.cpu.boxes.stride_5.offset_7.use_libs.chit
+dEQP-VK.ray_tracing_pipeline.pipeline_no_null_shaders_flag.cpu.boxes.stride_5.offset_7.use_libs.chit_or_miss
+dEQP-VK.ray_tracing_pipeline.pipeline_no_null_shaders_flag.cpu.boxes.stride_5.offset_7.use_libs.any_or_isect_or_miss
+dEQP-VK.ray_tracing_pipeline.pipeline_no_null_shaders_flag.cpu.boxes.stride_5.offset_7.use_libs.any_or_isect
+dEQP-VK.ray_tracing_pipeline.pipeline_no_null_shaders_flag.cpu.boxes.stride_5.offset_7.use_libs.any
+dEQP-VK.ray_tracing_pipeline.pipeline_no_null_shaders_flag.cpu.boxes.stride_5.offset_7.use_libs.any_or_miss
+dEQP-VK.ray_tracing_pipeline.pipeline_no_null_shaders_flag.cpu.boxes.stride_5.offset_7.use_libs.any_or_chit_or_isect
+dEQP-VK.ray_tracing_pipeline.pipeline_no_null_shaders_flag.cpu.boxes.stride_5.offset_7.use_libs.any_or_chit
+dEQP-VK.ray_tracing_pipeline.pipeline_no_null_shaders_flag.cpu.boxes.stride_5.offset_7.use_libs.any_or_chit_or_miss
+dEQP-VK.ray_tracing_pipeline.pipeline_no_null_shaders_flag.cpu.boxes.stride_5.offset_7.no_libs.any_or_chit_or_isect_or_miss
+dEQP-VK.ray_tracing_pipeline.pipeline_no_null_shaders_flag.cpu.boxes.stride_5.offset_7.no_libs.chit_or_isect_or_miss
+dEQP-VK.ray_tracing_pipeline.pipeline_no_null_shaders_flag.cpu.boxes.stride_5.offset_7.no_libs.isect_or_miss
+dEQP-VK.ray_tracing_pipeline.pipeline_no_null_shaders_flag.cpu.boxes.stride_5.offset_7.no_libs.isect
+dEQP-VK.ray_tracing_pipeline.pipeline_no_null_shaders_flag.cpu.boxes.stride_5.offset_7.no_libs.miss
+dEQP-VK.ray_tracing_pipeline.pipeline_no_null_shaders_flag.cpu.boxes.stride_5.offset_7.no_libs.chit_or_isect
+dEQP-VK.ray_tracing_pipeline.pipeline_no_null_shaders_flag.cpu.boxes.stride_5.offset_7.no_libs.chit
+dEQP-VK.ray_tracing_pipeline.pipeline_no_null_shaders_flag.cpu.boxes.stride_5.offset_7.no_libs.chit_or_miss
+dEQP-VK.ray_tracing_pipeline.pipeline_no_null_shaders_flag.cpu.boxes.stride_5.offset_7.no_libs.any_or_isect_or_miss
+dEQP-VK.ray_tracing_pipeline.pipeline_no_null_shaders_flag.cpu.boxes.stride_5.offset_7.no_libs.any_or_isect
+dEQP-VK.ray_tracing_pipeline.pipeline_no_null_shaders_flag.cpu.boxes.stride_5.offset_7.no_libs.any
+dEQP-VK.ray_tracing_pipeline.pipeline_no_null_shaders_flag.cpu.boxes.stride_5.offset_7.no_libs.any_or_miss
+dEQP-VK.ray_tracing_pipeline.pipeline_no_null_shaders_flag.cpu.boxes.stride_5.offset_7.no_libs.any_or_chit_or_isect
+dEQP-VK.ray_tracing_pipeline.pipeline_no_null_shaders_flag.cpu.boxes.stride_5.offset_7.no_libs.any_or_chit
+dEQP-VK.ray_tracing_pipeline.pipeline_no_null_shaders_flag.cpu.boxes.stride_5.offset_7.no_libs.any_or_chit_or_miss
+dEQP-VK.ray_tracing_pipeline.pipeline_no_null_shaders_flag.cpu.tri_and_box.stride_3.offset_7.use_libs.any_or_chit_or_isect_or_miss
+dEQP-VK.ray_tracing_pipeline.pipeline_no_null_shaders_flag.cpu.tri_and_box.stride_3.offset_7.use_libs.chit_or_isect_or_miss
+dEQP-VK.ray_tracing_pipeline.pipeline_no_null_shaders_flag.cpu.tri_and_box.stride_3.offset_7.use_libs.isect_or_miss
+dEQP-VK.ray_tracing_pipeline.pipeline_no_null_shaders_flag.cpu.tri_and_box.stride_3.offset_7.use_libs.isect
+dEQP-VK.ray_tracing_pipeline.pipeline_no_null_shaders_flag.cpu.tri_and_box.stride_3.offset_7.use_libs.miss
+dEQP-VK.ray_tracing_pipeline.pipeline_no_null_shaders_flag.cpu.tri_and_box.stride_3.offset_7.use_libs.chit_or_isect
+dEQP-VK.ray_tracing_pipeline.pipeline_no_null_shaders_flag.cpu.tri_and_box.stride_3.offset_7.use_libs.chit
+dEQP-VK.ray_tracing_pipeline.pipeline_no_null_shaders_flag.cpu.tri_and_box.stride_3.offset_7.use_libs.chit_or_miss
+dEQP-VK.ray_tracing_pipeline.pipeline_no_null_shaders_flag.cpu.tri_and_box.stride_3.offset_7.use_libs.any_or_isect_or_miss
+dEQP-VK.ray_tracing_pipeline.pipeline_no_null_shaders_flag.cpu.tri_and_box.stride_3.offset_7.use_libs.any_or_isect
+dEQP-VK.ray_tracing_pipeline.pipeline_no_null_shaders_flag.cpu.tri_and_box.stride_3.offset_7.use_libs.any
+dEQP-VK.ray_tracing_pipeline.pipeline_no_null_shaders_flag.cpu.tri_and_box.stride_3.offset_7.use_libs.any_or_miss
+dEQP-VK.ray_tracing_pipeline.pipeline_no_null_shaders_flag.cpu.tri_and_box.stride_3.offset_7.use_libs.any_or_chit_or_isect
+dEQP-VK.ray_tracing_pipeline.pipeline_no_null_shaders_flag.cpu.tri_and_box.stride_3.offset_7.use_libs.any_or_chit
+dEQP-VK.ray_tracing_pipeline.pipeline_no_null_shaders_flag.cpu.tri_and_box.stride_3.offset_7.use_libs.any_or_chit_or_miss
+dEQP-VK.ray_tracing_pipeline.pipeline_no_null_shaders_flag.cpu.tri_and_box.stride_3.offset_7.no_libs.any_or_chit_or_isect_or_miss
+dEQP-VK.ray_tracing_pipeline.pipeline_no_null_shaders_flag.cpu.tri_and_box.stride_3.offset_7.no_libs.chit_or_isect_or_miss
+dEQP-VK.ray_tracing_pipeline.pipeline_no_null_shaders_flag.cpu.tri_and_box.stride_3.offset_7.no_libs.isect_or_miss
+dEQP-VK.ray_tracing_pipeline.pipeline_no_null_shaders_flag.cpu.tri_and_box.stride_3.offset_7.no_libs.isect
+dEQP-VK.ray_tracing_pipeline.pipeline_no_null_shaders_flag.cpu.tri_and_box.stride_3.offset_7.no_libs.miss
+dEQP-VK.ray_tracing_pipeline.pipeline_no_null_shaders_flag.cpu.tri_and_box.stride_3.offset_7.no_libs.chit_or_isect
+dEQP-VK.ray_tracing_pipeline.pipeline_no_null_shaders_flag.cpu.tri_and_box.stride_3.offset_7.no_libs.chit
+dEQP-VK.ray_tracing_pipeline.pipeline_no_null_shaders_flag.cpu.tri_and_box.stride_3.offset_7.no_libs.chit_or_miss
+dEQP-VK.ray_tracing_pipeline.pipeline_no_null_shaders_flag.cpu.tri_and_box.stride_3.offset_7.no_libs.any_or_isect_or_miss
+dEQP-VK.ray_tracing_pipeline.pipeline_no_null_shaders_flag.cpu.tri_and_box.stride_3.offset_7.no_libs.any_or_isect
+dEQP-VK.ray_tracing_pipeline.pipeline_no_null_shaders_flag.cpu.tri_and_box.stride_3.offset_7.no_libs.any
+dEQP-VK.ray_tracing_pipeline.pipeline_no_null_shaders_flag.cpu.tri_and_box.stride_3.offset_7.no_libs.any_or_miss
+dEQP-VK.ray_tracing_pipeline.pipeline_no_null_shaders_flag.cpu.tri_and_box.stride_3.offset_7.no_libs.any_or_chit_or_isect
+dEQP-VK.ray_tracing_pipeline.pipeline_no_null_shaders_flag.cpu.tri_and_box.stride_3.offset_7.no_libs.any_or_chit
+dEQP-VK.ray_tracing_pipeline.pipeline_no_null_shaders_flag.cpu.tri_and_box.stride_3.offset_7.no_libs.any_or_chit_or_miss
+dEQP-VK.ray_tracing_pipeline.pipeline_no_null_shaders_flag.cpu.tri_and_box.stride_5.offset_7.use_libs.any_or_chit_or_isect_or_miss
+dEQP-VK.ray_tracing_pipeline.pipeline_no_null_shaders_flag.cpu.tri_and_box.stride_5.offset_7.use_libs.chit_or_isect_or_miss
+dEQP-VK.ray_tracing_pipeline.pipeline_no_null_shaders_flag.cpu.tri_and_box.stride_5.offset_7.use_libs.isect_or_miss
+dEQP-VK.ray_tracing_pipeline.pipeline_no_null_shaders_flag.cpu.tri_and_box.stride_5.offset_7.use_libs.isect
+dEQP-VK.ray_tracing_pipeline.pipeline_no_null_shaders_flag.cpu.tri_and_box.stride_5.offset_7.use_libs.miss
+dEQP-VK.ray_tracing_pipeline.pipeline_no_null_shaders_flag.cpu.tri_and_box.stride_5.offset_7.use_libs.chit_or_isect
+dEQP-VK.ray_tracing_pipeline.pipeline_no_null_shaders_flag.cpu.tri_and_box.stride_5.offset_7.use_libs.chit
+dEQP-VK.ray_tracing_pipeline.pipeline_no_null_shaders_flag.cpu.tri_and_box.stride_5.offset_7.use_libs.chit_or_miss
+dEQP-VK.ray_tracing_pipeline.pipeline_no_null_shaders_flag.cpu.tri_and_box.stride_5.offset_7.use_libs.any_or_isect_or_miss
+dEQP-VK.ray_tracing_pipeline.pipeline_no_null_shaders_flag.cpu.tri_and_box.stride_5.offset_7.use_libs.any_or_isect
+dEQP-VK.ray_tracing_pipeline.pipeline_no_null_shaders_flag.cpu.tri_and_box.stride_5.offset_7.use_libs.any
+dEQP-VK.ray_tracing_pipeline.pipeline_no_null_shaders_flag.cpu.tri_and_box.stride_5.offset_7.use_libs.any_or_miss
+dEQP-VK.ray_tracing_pipeline.pipeline_no_null_shaders_flag.cpu.tri_and_box.stride_5.offset_7.use_libs.any_or_chit_or_isect
+dEQP-VK.ray_tracing_pipeline.pipeline_no_null_shaders_flag.cpu.tri_and_box.stride_5.offset_7.use_libs.any_or_chit
+dEQP-VK.ray_tracing_pipeline.pipeline_no_null_shaders_flag.cpu.tri_and_box.stride_5.offset_7.use_libs.any_or_chit_or_miss
+dEQP-VK.ray_tracing_pipeline.pipeline_no_null_shaders_flag.cpu.tri_and_box.stride_5.offset_7.no_libs.any_or_chit_or_isect_or_miss
+dEQP-VK.ray_tracing_pipeline.pipeline_no_null_shaders_flag.cpu.tri_and_box.stride_5.offset_7.no_libs.chit_or_isect_or_miss
+dEQP-VK.ray_tracing_pipeline.pipeline_no_null_shaders_flag.cpu.tri_and_box.stride_5.offset_7.no_libs.isect_or_miss
+dEQP-VK.ray_tracing_pipeline.pipeline_no_null_shaders_flag.cpu.tri_and_box.stride_5.offset_7.no_libs.isect
+dEQP-VK.ray_tracing_pipeline.pipeline_no_null_shaders_flag.cpu.tri_and_box.stride_5.offset_7.no_libs.miss
+dEQP-VK.ray_tracing_pipeline.pipeline_no_null_shaders_flag.cpu.tri_and_box.stride_5.offset_7.no_libs.chit_or_isect
+dEQP-VK.ray_tracing_pipeline.pipeline_no_null_shaders_flag.cpu.tri_and_box.stride_5.offset_7.no_libs.chit
+dEQP-VK.ray_tracing_pipeline.pipeline_no_null_shaders_flag.cpu.tri_and_box.stride_5.offset_7.no_libs.chit_or_miss
+dEQP-VK.ray_tracing_pipeline.pipeline_no_null_shaders_flag.cpu.tri_and_box.stride_5.offset_7.no_libs.any_or_isect_or_miss
+dEQP-VK.ray_tracing_pipeline.pipeline_no_null_shaders_flag.cpu.tri_and_box.stride_5.offset_7.no_libs.any_or_isect
+dEQP-VK.ray_tracing_pipeline.pipeline_no_null_shaders_flag.cpu.tri_and_box.stride_5.offset_7.no_libs.any
+dEQP-VK.ray_tracing_pipeline.pipeline_no_null_shaders_flag.cpu.tri_and_box.stride_5.offset_7.no_libs.any_or_miss
+dEQP-VK.ray_tracing_pipeline.pipeline_no_null_shaders_flag.cpu.tri_and_box.stride_5.offset_7.no_libs.any_or_chit_or_isect
+dEQP-VK.ray_tracing_pipeline.pipeline_no_null_shaders_flag.cpu.tri_and_box.stride_5.offset_7.no_libs.any_or_chit
+dEQP-VK.ray_tracing_pipeline.pipeline_no_null_shaders_flag.cpu.tri_and_box.stride_5.offset_7.no_libs.any_or_chit_or_miss
index a385939..554a57f 100644 (file)
@@ -53,6 +53,21 @@ std::string getFormatSimpleName (vk::VkFormat format)
        return de::toLower(de::toString(format).substr(kPrefixLen));
 }
 
+bool pointInTriangle2D(const tcu::Vec3& p, const tcu::Vec3& p0, const tcu::Vec3& p1, const tcu::Vec3& p2)
+{
+       float s = p0.y() * p2.x() - p0.x() * p2.y() + (p2.y() - p0.y()) * p.x() + (p0.x() - p2.x()) * p.y();
+       float t = p0.x() * p1.y() - p0.y() * p1.x() + (p0.y() - p1.y()) * p.x() + (p1.x() - p0.x()) * p.y();
+
+       if ((s < 0) != (t < 0))
+               return false;
+
+       float a = -p1.y() * p2.x() + p0.y() * (p2.x() - p1.x()) + p0.x() * (p1.y() - p2.y()) + p1.x() * p2.y();
+
+       return a < 0 ?
+               (s <= 0 && s + t >= a) :
+               (s >= 0 && s + t <= a);
+}
+
 // Returns true if VK_FORMAT_FEATURE_ACCELERATION_STRUCTURE_VERTEX_BUFFER_BIT_KHR needs to be supported for the given format.
 static bool isMandatoryAccelerationStructureVertexBufferFormat (vk::VkFormat format)
 {
index 7e1a3a3..948ff6f 100644 (file)
@@ -81,6 +81,9 @@ std::string getCommonRayGenerationShader (void);
 // Get lowercase version of the format name with no VK_FORMAT_ prefix.
 std::string getFormatSimpleName (vk::VkFormat format);
 
+// Test whether given poin p belons to the triangle (p0, p1, p2)
+bool pointInTriangle2D(const tcu::Vec3& p, const tcu::Vec3& p0, const tcu::Vec3& p1, const tcu::Vec3& p2);
+
 // Checks the given vertex buffer format is valid for acceleration structures.
 // Note: VK_KHR_get_physical_device_properties2 and VK_KHR_acceleration_structure are supposed to be supported.
 void checkAccelerationStructureVertexBufferFormat (const vk::InstanceInterface &vki, vk::VkPhysicalDevice physicalDevice, vk::VkFormat format);
index 65e3e0f..6a68684 100644 (file)
@@ -50,6 +50,8 @@ set(DEQP_VK_RAY_TRACING_SRCS
        vktRayTracingCaptureReplayTests.hpp
        vktRayTracingTests.cpp
        vktRayTracingTests.hpp
+       vktRayTracingPipelineFlagsTests.cpp
+       vktRayTracingPipelineFlagsTests.hpp
        )
 
 set(DEQP_VK_RAY_TRACING_LIBS
index 47201f3..13769f9 100644 (file)
@@ -763,21 +763,6 @@ void SingleTriangleConfiguration::initShaderBindingTables(de::MovePtr<RayTracing
        missShaderBindingTable                                                                                          = rayTracingPipeline->createShaderBindingTable(vkd, device, pipeline, allocator, shaderGroupHandleSize, shaderGroupBaseAlignment, 2, 1 );
 }
 
-bool pointInTriangle2D(const tcu::Vec3& p, const tcu::Vec3& p0, const tcu::Vec3& p1, const tcu::Vec3& p2)
-{
-       float s = p0.y() * p2.x() - p0.x() * p2.y() + (p2.y() - p0.y()) * p.x() + (p0.x() - p2.x()) * p.y();
-       float t = p0.x() * p1.y() - p0.y() * p1.x() + (p0.y() - p1.y()) * p.x() + (p1.x() - p0.x()) * p.y();
-
-       if ((s < 0) != (t < 0))
-               return false;
-
-       float a = -p1.y() * p2.x() + p0.y() * (p2.x() - p1.x()) + p0.x() * (p1.y() - p2.y()) + p1.x() * p2.y();
-
-       return a < 0 ?
-               (s <= 0 && s + t >= a) :
-               (s >= 0 && s + t <= a);
-}
-
 bool SingleTriangleConfiguration::verifyImage(BufferWithMemory* resultBuffer, Context& context, TestParams& testParams)
 {
        tcu::TextureFormat                      imageFormat             = vk::mapVkFormat(getResultImageFormat());
diff --git a/external/vulkancts/modules/vulkan/ray_tracing/vktRayTracingPipelineFlagsTests.cpp b/external/vulkancts/modules/vulkan/ray_tracing/vktRayTracingPipelineFlagsTests.cpp
new file mode 100644 (file)
index 0000000..419abe9
--- /dev/null
@@ -0,0 +1,1503 @@
+/*------------------------------------------------------------------------
+ * Vulkan Conformance Tests
+ * ------------------------
+ *
+ * Copyright (c) 2020 The Khronos Group Inc.
+ *
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ *       http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ *
+ *//*!
+ * \file
+ * \brief Ray Tracing Pipeline Flags tests
+ *//*--------------------------------------------------------------------*/
+
+#include "vktRayTracingPipelineFlagsTests.hpp"
+
+#include "vkDefs.hpp"
+#include "vktTestCase.hpp"
+#include "vktTestGroupUtil.hpp"
+#include "vktCustomInstancesDevices.hpp"
+#include "vkCmdUtil.hpp"
+#include "vkObjUtil.hpp"
+#include "vkBuilderUtil.hpp"
+#include "vkBarrierUtil.hpp"
+#include "vkBufferWithMemory.hpp"
+#include "vkImageWithMemory.hpp"
+#include "vkTypeUtil.hpp"
+#include "vkImageUtil.hpp"
+#include "vkRayTracingUtil.hpp"
+#include "tcuCommandLine.hpp"
+#include "tcuTextureUtil.hpp"
+#include "tcuStringTemplate.hpp"
+
+#include <algorithm>
+#include <array>
+#include <cmath>
+#include <functional>
+#include <iterator>
+#include <memory>
+#include <set>
+#include <tuple>
+
+#ifdef INTERNAL_DEBUG
+#include <iostream>
+#endif
+
+#define ALL_RAY_TRACING_STAGES (VK_SHADER_STAGE_RAYGEN_BIT_KHR                 \
+                                                               | VK_SHADER_STAGE_ANY_HIT_BIT_KHR               \
+                                                               | VK_SHADER_STAGE_CLOSEST_HIT_BIT_KHR   \
+                                                               | VK_SHADER_STAGE_MISS_BIT_KHR                  \
+                                                               | VK_SHADER_STAGE_INTERSECTION_BIT_KHR  \
+                                                               | VK_SHADER_STAGE_CALLABLE_BIT_KHR)
+namespace vkt
+{
+namespace RayTracing
+{
+namespace
+{
+using namespace vk;
+using namespace vkt;
+
+#define ALIGN_STD430(type_) alignas(sizeof(type_)) type_
+
+#define INRANGE(x_, a_, b_) (((x_) >= (a_) && (x_) <= (b_)) || ((x_) >= (b_) && (x_) <= (a_)))
+
+enum class GeometryTypes : deUint32
+{
+       None                    = 0x0,
+       Triangle                = 0x1,
+       Box                             = 0x2,
+       TriangleAndBox  = Triangle | Box
+};
+
+struct TestParams
+{
+       deUint32                                width;
+       deUint32                                height;
+       VkBool32                                onHhost;
+       VkPipelineCreateFlags   flags;
+       bool                                    useLibs;
+       deUint32                                instCount;
+       GeometryTypes                   geomTypes;
+       deUint32                                geomCount;
+       deUint32                                stbRecStride;
+       deUint32                                stbRecOffset;
+       float                                   accuracy;
+#define ENABLED(val_, mask_) (((val_)&(mask_))==(mask_))
+       bool miss()             const { return ENABLED(flags, VK_PIPELINE_CREATE_RAY_TRACING_NO_NULL_MISS_SHADERS_BIT_KHR);     }
+       bool ahit()             const { return ENABLED(flags, VK_PIPELINE_CREATE_RAY_TRACING_NO_NULL_ANY_HIT_SHADERS_BIT_KHR); }
+       bool chit()             const { return ENABLED(flags, VK_PIPELINE_CREATE_RAY_TRACING_NO_NULL_CLOSEST_HIT_SHADERS_BIT_KHR); }
+       bool isect()    const { return ENABLED(flags, VK_PIPELINE_CREATE_RAY_TRACING_NO_NULL_INTERSECTION_SHADERS_BIT_KHR); }
+};
+
+tcu::Vec3 rotateCcwZ (const tcu::Vec3& p, const tcu::Vec3& center, const float& radians)
+{
+       const float s = std::sin(radians);
+       const float c = std::cos(radians);
+       const auto  t = p - center;
+       return tcu::Vec3(c * t.x() - s * t.y(), s * t.x() + c * t.y(), t.z()) + center;
+}
+
+bool pointInRect2D(const tcu::Vec3& p, const tcu::Vec3& p0, const tcu::Vec3& p1)
+{
+       return INRANGE(p.x(), p0.x(), p1.x()) && INRANGE(p.y(), p0.y(), p1.y());
+}
+
+deUint32 computeEffectiveShaderGroupCount(const TestParams& p)
+{
+       DE_ASSERT(p.instCount && p.geomCount);
+       return (p.geomCount * p.stbRecStride + p.stbRecOffset + 1);
+}
+
+class RayTracingTestPipeline;
+
+class PipelineFlagsCase : public TestCase
+{
+public:
+                                                       PipelineFlagsCase               (tcu::TestContext&      testCtx,
+                                                                                                        const std::string&     name,
+                                                                                                        const TestParams&      testParams);
+       virtual                                 ~PipelineFlagsCase              (void) = default;
+       virtual void                    initPrograms                    (SourceCollections&     programCollection) const override;
+       virtual TestInstance*   createInstance                  (Context&                       context) const override;
+       virtual void                    checkSupport                    (Context&                       context) const override;
+
+       const deUint32&                 shaderGroupHandleSize;
+       const deUint32&                 shaderGroupBaseAlignment;
+
+private:
+       const TestParams                m_params;
+
+       const tcu::IVec4                m_rgenPayload;
+       const deInt32                   m_defMissRetGreenComp;
+       const deInt32                   m_defTriRetGreenComp;
+       const deInt32                   m_defBoxRetGreenComp;
+       static  deInt32                 calcDefBoxRetGreenComp  (const TestParams&      params,
+                                                                                                        deInt32                        defTriRetGreenComp);
+
+       static deUint32                 m_shaderGroupHandleSize;
+       static deUint32                 m_shaderGroupBaseAlignment;
+};
+
+deInt32 PipelineFlagsCase::calcDefBoxRetGreenComp (const TestParams& params, deInt32 defTriRetGreenComp)
+{
+       const deUint32  nameCount               = params.stbRecStride ? (params.geomCount * params.instCount) : params.instCount;
+       const deUint32  triangleCount   = (params.geomTypes == GeometryTypes::Triangle || params.geomTypes == GeometryTypes::TriangleAndBox) ? nameCount : 0u;
+       return defTriRetGreenComp + std::max(triangleCount, 32u);
+}
+deUint32 PipelineFlagsCase::m_shaderGroupHandleSize;
+deUint32 PipelineFlagsCase::m_shaderGroupBaseAlignment;
+
+class PipelineFlagsInstance : public TestInstance
+{
+       using TopLevelASPtr             = de::SharedPtr<TopLevelAccelerationStructure>;
+       using BottomLevelASPtr  = de::SharedPtr<BottomLevelAccelerationStructure>;
+       using BottomLevelASPtrs = std::vector<BottomLevelASPtr>;
+       using TriGeometry               = std::array<tcu::Vec3, 3>;
+       using BoxGeometry               = std::array<tcu::Vec3, 2>;
+
+       friend class RayTracingTestPipeline;
+public:
+                                                                       PipelineFlagsInstance                                   (Context&                                       context,
+                                                                                                                                                        const TestParams&                      params,
+                                                                                                                                                        const deUint32&                        shaderGroupHandleSize_,
+                                                                                                                                                        const deUint32&                        shaderGroupBaseAlignment_,
+                                                                                                                                                        const tcu::IVec4&                      rgenPayload_,
+                                                                                                                                                        deInt32                                        defMissRetGreenComp_,
+                                                                                                                                                        deInt32                                        defTriRetGreenComp_,
+                                                                                                                                                        deInt32                                        defBoxRetGreenComp_);
+       virtual                                                 ~PipelineFlagsInstance                                  (void) =  default;
+
+       struct ShaderRecordEXT
+       {
+               ALIGN_STD430(GeometryTypes)     geomType;
+               ALIGN_STD430(deUint32)          geomIndex;
+               ALIGN_STD430(tcu::IVec4)        retValue;
+
+               ShaderRecordEXT ();
+               ShaderRecordEXT (GeometryTypes type, deUint32 index, const tcu::IVec4& ret);
+       };
+
+       virtual tcu::TestStatus                 iterate                                                                 (void) override;
+
+       const tcu::IVec4                                rgenPayload;
+       const deInt32                                   defMissRetGreenComp;
+       const deInt32                                   defTriRetGreenComp;
+       const deInt32                                   defBoxRetGreenComp;
+
+       const deUint32                                  shaderGroupHandleSize;
+       const deUint32                                  shaderGroupBaseAlignment;
+
+private:
+       struct HitGroup;
+       using ShaderRecordEntry = std::tuple<VkShaderStageFlags, HitGroup, ShaderRecordEXT>;
+
+       VkImageCreateInfo                               makeImageCreateInfo                                             () const;
+       std::vector<TriGeometry>                prepareTriGeometries                                    (const float                                            zCoord)                 const;
+       std::vector<BoxGeometry>                prepareBoxGeometries                                    (const float                                            zFront,
+                                                                                                                                                        const float                                            zBack)                  const;
+       std::vector<ShaderRecordEntry>  prepareShaderBindingTable                               (void)                                                                                          const;
+       BottomLevelASPtrs                               createBottomLevelAccelerationStructs    (VkCommandBuffer                                        cmdBuffer)              const;
+       TopLevelASPtr                                   createTopLevelAccelerationStruct                (VkCommandBuffer                                        cmdBuffer,
+                                                                                                                                                        const BottomLevelASPtrs&                       blasPtrs)               const;
+       bool                                                    verifyResult                                                    (const BufferWithMemory*                        resultBuffer)   const;
+#ifdef INTERNAL_DEBUG
+       void                                                    printImage                                                              (const tcu::IVec4*                                      image)                  const;
+#endif
+
+       template<class rayPayloadEXT, class shaderRecordEXT>
+       struct Shader
+       {
+               virtual bool                    ignoreIntersection      (const rayPayloadEXT&, const shaderRecordEXT&) const { return false; }
+               virtual rayPayloadEXT   invoke                          (const rayPayloadEXT&, const shaderRecordEXT&) const = 0;
+       };
+       struct ShaderBase : Shader<tcu::IVec4, ShaderRecordEXT>
+       {
+               typedef tcu::IVec4                      rayPayloadEXT;
+               typedef ShaderRecordEXT         shaderRecordEXT;
+               static const rayPayloadEXT      dummyPayload;
+               virtual rayPayloadEXT   invoke                          (const rayPayloadEXT&, const shaderRecordEXT&) const override {
+                       return rayPayloadEXT();
+               }
+       };
+       struct ClosestHitShader : ShaderBase
+       {
+               virtual rayPayloadEXT   invoke                          (const rayPayloadEXT& hitAttr, const shaderRecordEXT& rec) const override {
+                       return (rec.geomType == GeometryTypes::Triangle) ? rec.retValue : hitAttr;
+               }
+       };
+       struct AnyHitShader : ShaderBase
+       {
+               virtual bool                    ignoreIntersection(const rayPayloadEXT&, const shaderRecordEXT& rec) const override {
+                       return (rec.geomIndex % 2 == 1);
+               }
+       };
+       struct IntersectionShader : ShaderBase
+       {
+               virtual rayPayloadEXT   invoke(const rayPayloadEXT&, const shaderRecordEXT& rec) const override {
+                       return (rec.retValue + tcu::IVec4(0, 2, 3, 4));
+               }
+       };
+       struct MissShader : ShaderBase
+       {
+               virtual rayPayloadEXT   invoke(const rayPayloadEXT&, const shaderRecordEXT& rec) const override {
+                       return rec.retValue; }
+       };
+       struct HitGroup
+       {
+               de::SharedPtr<AnyHitShader>                     ahit;
+               de::SharedPtr<ClosestHitShader>         chit;
+               de::SharedPtr<IntersectionShader>       isect;
+       };
+
+       tcu::IVec2                                      rayToImage                                                              (const tcu::Vec2&                                                               rayCoords) const;
+       tcu::Vec2                                       imageToRay                                                              (const tcu::IVec2&                                                              imageCoords) const;
+       deUint32                                        computeSamePixelCount                                   (const std::vector<tcu::IVec4>&                                 image,
+                                                                                                                                                const tcu::Vec2                                                                pixelCoords,
+                                                                                                                                                const tcu::IVec4&                                                              requiredColor,
+                                                                                                                                                const tcu::IVec4&                                                              floodColor,
+                                                                                                                                                const std::function<bool(const tcu::Vec3&)>&   pointInGeometry,
+                                                                                                                                                std::vector<std::pair<tcu::IVec4, tcu::IVec2>> &auxBuffer) const;
+       void                                            travelRay                                                               (std::vector<tcu::IVec4>&                                               outImage,
+                                                                                                                                                const deUint32                                                                 glLaunchIdExtX,
+                                                                                                                                                const deUint32                                                                 glLaunchIdExtY,
+                                                                                                                                                const std::vector<ShaderRecordEntry>&                  shaderBindingTable,
+                                                                                                                                                const MissShader&                                                              missShader,
+                                                                                                                                                const std::vector<TriGeometry>&                                triangleGeometries,
+                                                                                                                                                const std::vector<BoxGeometry>&                                boxGeometries) const;
+       const TestParams                        m_params;
+       const VkFormat                          m_format;
+};
+PipelineFlagsInstance::ShaderBase::rayPayloadEXT const PipelineFlagsInstance::ShaderBase::dummyPayload{};
+
+PipelineFlagsInstance::ShaderRecordEXT::ShaderRecordEXT ()
+       : geomType      (GeometryTypes::None)
+       , geomIndex     (~0u)
+       , retValue      ()
+{
+}
+
+PipelineFlagsInstance::ShaderRecordEXT::ShaderRecordEXT (GeometryTypes type, deUint32 index, const tcu::IVec4& ret)
+       : geomType(type)
+       , geomIndex(index)
+       , retValue(ret)
+{
+}
+
+class RayTracingTestPipeline : protected RayTracingPipeline
+{
+public:
+       RayTracingTestPipeline (Context& context, const PipelineFlagsInstance& testInstance, const TestParams& params)
+               : m_context                     (context)
+               , m_vkd                         (context.getDeviceInterface())
+               , m_device                      (context.getDevice())
+               , m_allocator           (context.getDefaultAllocator())
+               , m_testInstance        (testInstance)
+               , m_params                      (params)
+       {
+               m_rgenModule = createShaderModule(m_vkd, m_device, m_context.getBinaryCollection().get("rgen"), 0);
+
+               // miss shader is loaded into each test regardless m_params.miss() is set
+               m_missModule = createShaderModule(m_vkd, m_device, m_context.getBinaryCollection().get("miss"), 0);
+
+               if (m_params.chit())
+                       m_chitModule = createShaderModule(m_vkd, m_device, m_context.getBinaryCollection().get("chit"), 0);
+
+               if (m_params.ahit())
+                       m_ahitModule = createShaderModule(m_vkd, m_device, m_context.getBinaryCollection().get("ahit"), 0);
+
+               if (m_params.isect() || (m_params.geomTypes == GeometryTypes::Box) || (m_params.geomTypes == GeometryTypes::TriangleAndBox))
+                       m_isectModule = createShaderModule(m_vkd, m_device, m_context.getBinaryCollection().get("isect"), 0);
+
+               setCreateFlags(m_params.flags);
+               setMaxPayloadSize(sizeof(PipelineFlagsInstance::ShaderRecordEXT::retValue));
+               setMaxAttributeSize(sizeof(PipelineFlagsInstance::ShaderRecordEXT::retValue));
+       }
+
+       template<class ShaderRecord> struct SBT
+       {
+               static const deUint32 recordSize = static_cast<deUint32>(sizeof(ShaderRecord));
+
+               const DeviceInterface&                  m_vkd;
+               const VkDevice                                  m_dev;
+               const VkPipeline                                m_pipeline;
+               const deUint32                                  m_groupCount;
+               const deUint32                                  m_handleSize;
+               const deUint32                                  m_alignment;
+               de::MovePtr<BufferWithMemory>   m_buffer;
+               deUint8*                                                m_content;
+
+               SBT (const DeviceInterface& vkd, VkDevice dev, Allocator& allocator, VkPipeline pipeline,
+                        deUint32 groupCount, deUint32 shaderGroupHandleSize,  deUint32 shaderGroupBaseAlignment)
+                       : m_vkd(vkd), m_dev(dev), m_pipeline(pipeline)
+                       , m_groupCount(groupCount), m_handleSize(shaderGroupHandleSize)
+                       , m_alignment(deAlign32(shaderGroupHandleSize + recordSize, shaderGroupBaseAlignment))
+                       , m_buffer(), m_content()
+               {
+                       const deUint32                          size            = groupCount * m_alignment;
+                       const VkBufferUsageFlags        flags           = VK_BUFFER_USAGE_TRANSFER_DST_BIT | VK_BUFFER_USAGE_SHADER_BINDING_TABLE_BIT_KHR | VK_BUFFER_USAGE_SHADER_DEVICE_ADDRESS_BIT;
+                       VkBufferCreateInfo                      info            = makeBufferCreateInfo(size, flags);
+                       const MemoryRequirement         memReq          = MemoryRequirement::HostVisible | MemoryRequirement::Coherent | MemoryRequirement::DeviceAddress;
+                       m_buffer        = de::MovePtr<BufferWithMemory>(new BufferWithMemory(m_vkd, m_dev, allocator, info, memReq));
+                       m_content       = (deUint8*)m_buffer->getAllocation().getHostPtr();
+               }
+
+               void updateAt (deUint32 index, const deUint8* handle, const ShaderRecord& rec)
+               {
+                       DE_ASSERT(index < m_groupCount);
+                       deUint8* groupPos = m_content + index * m_alignment;
+                       deMemcpy(groupPos, handle, m_handleSize);
+                       deMemcpy(groupPos + m_handleSize, &rec, recordSize);
+               }
+
+               void flush ()
+               {
+                       Allocation&                                     alloc   = m_buffer->getAllocation();
+                       flushMappedMemoryRange(m_vkd, m_dev, alloc.getMemory(), alloc.getOffset(), VK_WHOLE_SIZE);
+               }
+
+               deUint32        getAlignment () const { return m_alignment; }
+
+               de::MovePtr<BufferWithMemory> get () { return m_buffer; }
+       };
+
+       struct PLDeleter
+       {
+               const RayTracingTestPipeline*                           pipeline;
+               std::function<void(RayTracingPipeline*)>        whenDestroying;
+               PLDeleter (RayTracingTestPipeline* pl, std::function<void(RayTracingPipeline*)> doWhenDestroying)
+                       : pipeline(pl), whenDestroying(doWhenDestroying) {}
+               void operator()(RayTracingPipeline* pl)
+               {
+                       if (pipeline != pl && pipeline->m_params.useLibs)
+                       {
+                               if (whenDestroying) whenDestroying(pl);
+                               delete pl;
+                       }
+               }
+       };
+
+       auto createLibraryPipeline (std::function<void(RayTracingPipeline*)> doWhenDestroying)
+               -> de::UniquePtr<RayTracingPipeline, PLDeleter>
+       {
+               RayTracingPipeline* pl = this;
+               if (m_params.useLibs) {
+                       pl = new RayTracingPipeline;
+                       pl->setCreateFlags(m_params.flags | VK_PIPELINE_CREATE_LIBRARY_BIT_KHR);
+                       pl->setMaxPayloadSize(sizeof(PipelineFlagsInstance::ShaderRecordEXT::retValue));
+                       pl->setMaxAttributeSize(sizeof(PipelineFlagsInstance::ShaderRecordEXT::retValue));
+               }
+               return de::UniquePtr<RayTracingPipeline, PLDeleter>(pl, PLDeleter(this, doWhenDestroying));
+       }
+
+       Move<VkPipeline>        createPipeline (const VkPipelineLayout pipelineLayout)
+       {
+               deUint32        groupIndex      = 0;
+               const bool      checkIsect      = (m_params.geomTypes == GeometryTypes::Box) || (m_params.geomTypes == GeometryTypes::TriangleAndBox);
+
+               auto            appendPipelineLibrary   = [this, &pipelineLayout](RayTracingPipeline* pl) -> void
+               {
+                       m_libraries.emplace_back(makeVkSharedPtr(pl->createPipeline(m_vkd, m_device, pipelineLayout)));
+               };
+
+               DE_ASSERT(                                              (VkShaderModule(0) != *m_rgenModule));
+               DE_ASSERT(                                              (VkShaderModule(0) != *m_missModule));
+               DE_ASSERT(m_params.ahit()       ==      (VkShaderModule(0) != *m_ahitModule));
+               DE_ASSERT(m_params.chit()       ==      (VkShaderModule(0) != *m_chitModule));
+               DE_ASSERT(checkIsect            ==      (VkShaderModule(0) != *m_isectModule));
+
+               // rgen in the main pipeline only
+               addShader(VK_SHADER_STAGE_RAYGEN_BIT_KHR, *m_rgenModule, groupIndex++);
+
+               createLibraryPipeline(appendPipelineLibrary)->addShader(VK_SHADER_STAGE_MISS_BIT_KHR, *m_missModule, (m_params.useLibs ? 0 : groupIndex++));
+
+               if (m_params.ahit() || m_params.chit() || m_params.isect() || checkIsect)
+               {
+                       const deUint32 hitGroupIndex = m_params.useLibs ? 0 : groupIndex;
+                       auto pipeline = createLibraryPipeline(appendPipelineLibrary);
+                       if (m_params.ahit())    pipeline->addShader(VK_SHADER_STAGE_ANY_HIT_BIT_KHR,            *m_ahitModule, hitGroupIndex);
+                       if (m_params.chit())    pipeline->addShader(VK_SHADER_STAGE_CLOSEST_HIT_BIT_KHR,        *m_chitModule, hitGroupIndex);
+                       if (checkIsect)                 pipeline->addShader(VK_SHADER_STAGE_INTERSECTION_BIT_KHR,       *m_isectModule, hitGroupIndex);
+               }
+
+               for (const auto& sg : m_shadersGroupCreateInfos)
+               {
+                       static_cast<void>(sg);
+                       DE_ASSERT(sg.type != VK_RAY_TRACING_SHADER_GROUP_TYPE_MAX_ENUM_KHR);
+               }
+
+               return RayTracingPipeline::createPipeline(m_vkd, m_device, pipelineLayout, m_libraries);
+       }
+
+       std::pair<de::SharedPtr<BufferWithMemory>, VkStridedDeviceAddressRegionKHR>     createRaygenShaderBindingTable (VkPipeline pipeline)
+       {
+               de::MovePtr<BufferWithMemory>   sbt     = createShaderBindingTable(m_vkd, m_device, pipeline, m_allocator,
+                                                                                                                                          m_testInstance.shaderGroupHandleSize,
+                                                                                                                                          m_testInstance.shaderGroupBaseAlignment, 0, 1);
+               VkStridedDeviceAddressRegionKHR rgn     = makeStridedDeviceAddressRegionKHR(getBufferDeviceAddress(m_vkd, m_device, **sbt, 0),
+                                                                                                                                                               m_testInstance.shaderGroupBaseAlignment,
+                                                                                                                                                               m_testInstance.shaderGroupHandleSize);
+               return { de::SharedPtr<BufferWithMemory>(sbt.release()), rgn };
+       }
+
+       std::pair<de::SharedPtr<BufferWithMemory>, VkStridedDeviceAddressRegionKHR>     createMissShaderBindingTable (VkPipeline pipeline)
+       {
+               const auto              entries                 = m_testInstance.prepareShaderBindingTable();
+               const void*             shaderRecPtr    = static_cast<PipelineFlagsInstance::ShaderRecordEXT const*>(&std::get<2>(entries[1]));
+               const deUint32  shaderRecSize   = static_cast<deUint32>(sizeof(PipelineFlagsInstance::ShaderRecordEXT));
+               const deUint32  alignment               = deAlign32(m_testInstance.shaderGroupHandleSize + shaderRecSize, m_testInstance.shaderGroupBaseAlignment);
+               const deUint32  sbtOffset               = 0;
+
+               de::MovePtr<BufferWithMemory>   sbt     = createShaderBindingTable(m_vkd, m_device, pipeline, m_allocator,
+                                                                                                                                          m_testInstance.shaderGroupHandleSize,
+                                                                                                                                          m_testInstance.shaderGroupBaseAlignment,
+                                                                                                                                          1, 1,
+                                                                                                                                          VkBufferCreateFlags(0u),
+                                                                                                                                          VkBufferUsageFlags(0u),
+                                                                                                                                          MemoryRequirement::Any,
+                                                                                                                                          VkDeviceAddress(0),
+                                                                                                                                          sbtOffset,
+                                                                                                                                          shaderRecSize,
+                                                                                                                                          &shaderRecPtr);
+
+               VkStridedDeviceAddressRegionKHR rgn     = makeStridedDeviceAddressRegionKHR(getBufferDeviceAddress(m_vkd, m_device, **sbt, 0),
+                                                                                                                                                               alignment,
+                                                                                                                                                               m_testInstance.shaderGroupHandleSize);
+               return { de::SharedPtr<BufferWithMemory>(sbt.release()), rgn };
+       }
+
+       std::pair<de::SharedPtr<BufferWithMemory>, VkStridedDeviceAddressRegionKHR>     createHitShaderBindingTable (VkPipeline pipeline)
+       {
+               de::MovePtr<BufferWithMemory>   buf;
+               VkStridedDeviceAddressRegionKHR rgn;
+
+               if ((m_params.geomTypes == GeometryTypes::Box) || (m_params.geomTypes == GeometryTypes::TriangleAndBox) || m_params.ahit() || m_params.chit())
+               {
+                       std::vector<deUint8>    handles                 (m_testInstance.shaderGroupHandleSize);
+                       auto                                    records                 = m_testInstance.prepareShaderBindingTable();
+                       const deUint32                  hitGroupCount   = deUint32(records.size() - 2);
+
+                       SBT<PipelineFlagsInstance::ShaderRecordEXT> sbt(m_vkd, m_device, m_allocator, pipeline, hitGroupCount,
+                                                                                                                       m_testInstance.shaderGroupHandleSize, m_testInstance.shaderGroupBaseAlignment);
+
+                       VK_CHECK(m_vkd.getRayTracingShaderGroupHandlesKHR(m_device, pipeline, 2, 1, handles.size(), handles.data()));
+
+                       for (deUint32 i = 0; i < hitGroupCount; ++i)
+                       {
+                               const VkShaderStageFlags        flags = std::get<0>(records[i + 2]);
+                               if (flags)
+                               {
+                                       const PipelineFlagsInstance::ShaderRecordEXT& rec = std::get<2>(records[i + 2]);
+                                       sbt.updateAt(i, handles.data(), rec);
+                               }
+                       }
+
+                       sbt.flush();
+                       buf     = sbt.get();
+                       rgn = makeStridedDeviceAddressRegionKHR(getBufferDeviceAddress(m_vkd, m_device, **buf, 0),
+                                                                                                                                                  sbt.getAlignment(),  m_testInstance.shaderGroupHandleSize);
+               }
+               else
+               {
+                       rgn = makeStridedDeviceAddressRegionKHR(DE_NULL, 0, 0);
+               }
+
+               return { de::SharedPtr<BufferWithMemory>(buf.release()), rgn };
+       }
+
+private:
+       Context&                                                                                m_context;
+       const DeviceInterface&                                                  m_vkd;
+       const VkDevice                                                                  m_device;
+       Allocator&                                                                              m_allocator;
+       const PipelineFlagsInstance&                                    m_testInstance;
+       const TestParams                                                                m_params;
+       Move<VkShaderModule>                                                    m_rgenModule;
+       Move<VkShaderModule>                                                    m_chitModule;
+       Move<VkShaderModule>                                                    m_ahitModule;
+       Move<VkShaderModule>                                                    m_isectModule;
+       Move<VkShaderModule>                                                    m_missModule;
+       Move<VkShaderModule>                                                    m_gapModule;
+       std::vector<de::SharedPtr<Move<VkPipeline>>>    m_libraries;
+};
+
+template<class T, class P = T(*)[1], class R = decltype(std::begin(*std::declval<P>()))>
+auto makeStdBeginEnd(T* p, deUint32 n) -> std::pair<R, R>
+{
+       auto tmp = std::begin(*P(p));
+       auto begin = tmp;
+       std::advance(tmp, n);
+       return { begin, tmp };
+}
+
+PipelineFlagsCase::PipelineFlagsCase (tcu::TestContext& testCtx, const std::string& name, const TestParams& params)
+       : TestCase                                      (testCtx, name, std::string())
+       , shaderGroupHandleSize         (m_shaderGroupHandleSize)
+       , shaderGroupBaseAlignment      (m_shaderGroupBaseAlignment)
+       , m_params                                      (params)
+       , m_rgenPayload                         (0, ':', 0, 0)
+       , m_defMissRetGreenComp         ('-')
+       , m_defTriRetGreenComp          ('A')
+       , m_defBoxRetGreenComp          (calcDefBoxRetGreenComp(params, m_defTriRetGreenComp))
+{
+}
+
+void PipelineFlagsCase::checkSupport (Context& context) const
+{
+       const auto& vki = context.getInstanceInterface();
+       const auto      physicalDevice = context.getPhysicalDevice();
+       const auto      supportedExtensions = enumerateDeviceExtensionProperties(vki, physicalDevice, nullptr);
+
+       if ((VK_PIPELINE_CREATE_RAY_TRACING_NO_NULL_INTERSECTION_SHADERS_BIT_KHR & m_params.flags)
+               && (GeometryTypes::Triangle == m_params.geomTypes))
+       {
+               TCU_THROW(InternalError, "Illegal params combination: VK_PIPELINE_CREATE_RAY_TRACING_NO_NULL_INTERSECTION_SHADERS_BIT_KHR and Triangles");
+       }
+
+       if (!isExtensionSupported(supportedExtensions, RequiredExtension("VK_KHR_ray_tracing_pipeline")))
+               TCU_THROW(NotSupportedError, "VK_KHR_ray_tracing_pipeline not supported");
+
+       // VK_KHR_acceleration_structure is required by VK_KHR_ray_tracing_pipeline.
+       if (!isExtensionSupported(supportedExtensions, RequiredExtension("VK_KHR_acceleration_structure")))
+               TCU_FAIL("VK_KHR_acceleration_structure not supported but VK_KHR_ray_tracing_pipeline supported");
+
+       // The same for VK_KHR_buffer_device_address.
+       if (!isExtensionSupported(supportedExtensions, RequiredExtension("VK_KHR_buffer_device_address")))
+               TCU_FAIL("VK_KHR_buffer_device_address not supported but VK_KHR_acceleration_structure supported");
+
+       if (m_params.useLibs && !isExtensionSupported(supportedExtensions, RequiredExtension("VK_KHR_pipeline_library")))
+               TCU_FAIL("VK_KHR_pipeline_library not supported but VK_KHR_ray_tracing_pipeline supported");
+
+       const VkPhysicalDeviceRayTracingPipelineFeaturesKHR& rayTracingPipelineFeaturesKHR = context.getRayTracingPipelineFeatures();
+       if (rayTracingPipelineFeaturesKHR.rayTracingPipeline == DE_FALSE)
+               TCU_THROW(NotSupportedError, "Requires VkPhysicalDeviceRayTracingPipelineFeaturesKHR.rayTracingPipeline");
+
+       const VkPhysicalDeviceAccelerationStructureFeaturesKHR& accelerationStructureFeaturesKHR = context.getAccelerationStructureFeatures();
+       if (accelerationStructureFeaturesKHR.accelerationStructure == DE_FALSE)
+               TCU_THROW(TestError, "VK_KHR_ray_tracing_pipeline requires VkPhysicalDeviceAccelerationStructureFeaturesKHR.accelerationStructure");
+
+       if (m_params.onHhost && accelerationStructureFeaturesKHR.accelerationStructureHostCommands == DE_FALSE)
+               TCU_THROW(NotSupportedError, "Requires VkPhysicalDeviceAccelerationStructureFeaturesKHR.accelerationStructureHostCommands");
+
+       checkAccelerationStructureVertexBufferFormat(context.getInstanceInterface(), context.getPhysicalDevice(), VK_FORMAT_R32G32B32_SFLOAT);
+
+       auto rayTracingProperties       = makeRayTracingProperties(context.getInstanceInterface(), context.getPhysicalDevice());
+       m_shaderGroupHandleSize         = rayTracingProperties->getShaderGroupHandleSize();
+       m_shaderGroupBaseAlignment      = rayTracingProperties->getShaderGroupBaseAlignment();
+}
+
+void PipelineFlagsCase::initPrograms (SourceCollections& programCollection) const
+{
+       const vk::ShaderBuildOptions    buildOptions    (programCollection.usedVulkanVersion, vk::SPIRV_VERSION_1_4, 0u, true);
+       const char                                              endl                    = '\n';
+       const deUint32                                  missIdx                 = 0;
+
+       const std::string                               payloadInDecl   =
+               "layout(location = 0) rayPayloadInEXT ivec4 payload;";
+
+       const std::string                               recordDecl              =
+               "layout(shaderRecordEXT, std430) buffer Rec {\n"
+               "  uint  geomType;\n"
+               "  uint  geomIndex;\n"
+               "  ivec4 retValue;\n"
+               "} record;";
+
+       {
+               std::stringstream str;
+               str << "#version 460 core"                                                                                                                                                      << endl
+                       << "#extension GL_EXT_ray_tracing : require"                                                                                                    << endl
+                       << "layout(location = 0) rayPayloadEXT ivec4 payload;"                                                                                  << endl
+                       << "layout(r32i, set = 0, binding = 0) uniform iimage2D result;"                                                                << endl
+                       << "layout(set = 0, binding = 1) uniform accelerationStructureEXT topLevelAS;"                                  << endl
+                       << "void main()"                                                                                                                                                                << endl
+                       << "{"                                                                                                                                                                                  << endl
+                       << "  float rx           = (float(gl_LaunchIDEXT.x * 2) / float(gl_LaunchSizeEXT.x)) - 1.0;"    << endl
+                       << "  float ry           = (float(gl_LaunchIDEXT.y) + 0.5) / float(gl_LaunchSizeEXT.y);"                << endl
+                       << "  payload            = ivec4" << m_rgenPayload << ";"                                                                               << endl
+                       << "  uint  rayFlags     = gl_RayFlagsNoneEXT;"                                                                                                 << endl
+                       << "  uint  cullMask     = 0xFFu;"                                                                                                                              << endl
+                       << "  uint  stbRecOffset = " << m_params.stbRecOffset << "u;"                                                                   << endl
+                       << "  uint  stbRecStride = " << m_params.stbRecStride << "u;"                                                                   << endl
+                       << "  uint  missIdx      = " << missIdx << "u;"                                                                                                 << endl
+                       << "  vec3  orig         = vec3(rx, ry, 1.0);"                                                                                                  << endl
+                       << "  float tmin         = 0.0;"                                                                                                                                << endl
+                       << "  vec3  dir          = vec3(0.0, 0.0, -1.0);"                                                                                               << endl
+                       << "  float tmax         = 1000.0;"                                                                                                                             << endl
+                       << "  traceRayEXT(topLevelAS, rayFlags, cullMask, stbRecOffset, stbRecStride, missIdx, orig, tmin, dir, tmax, 0);"      << endl
+                       << "  imageStore(result, ivec2(gl_LaunchIDEXT.xy), payload);"                                                                   << endl
+                       << "}";
+               programCollection.glslSources.add("rgen") << glu::RaygenSource(str.str()) << buildOptions;
+       }
+
+       // miss shader is created in each test regardless the m_params.miss() is set
+       {
+               std::stringstream str;
+               str     << "#version 460 core"                                                  << endl
+                       << "#extension GL_EXT_ray_tracing : require"    << endl
+                       << payloadInDecl                                                                << endl
+                       << recordDecl                                                                   << endl
+                       << "void main()"                                                                << endl
+                       << "{"                                                                                  << endl
+                       << "  payload = record.retValue;"                               << endl
+                       << "}";
+               programCollection.glslSources.add("miss") << glu::MissSource(str.str()) << buildOptions;
+       }
+
+       if (m_params.chit())
+       {
+               std::stringstream str;
+               str << "#version 460 core"                                                                                                              << endl
+                       << "#extension GL_EXT_ray_tracing : require"                                                            << endl
+                       << "hitAttributeEXT ivec4 hitAttribute;"                                                                        << endl
+                       << payloadInDecl                                                                                                                        << endl
+                       << recordDecl                                                                                                                           << endl
+                       << "void main()"                                                                                                                        << endl
+                       << "{"                                                                                                                                          << endl
+                       << "  if (record.geomType == " << deUint32(GeometryTypes::Triangle) << ")"      << endl
+                       << "    payload = record.retValue;"                                                                                     << endl
+                       << "  else payload = hitAttribute;"                                                                                     << endl
+                       << "}";
+               programCollection.glslSources.add("chit") << glu::ClosestHitSource(str.str()) << buildOptions;
+       }
+
+       if (m_params.ahit())
+       {
+               std::stringstream str;
+               str << "#version 460 core"                                                      << endl
+                       << "#extension GL_EXT_ray_tracing : require"    << endl
+                       << recordDecl                                                                   << endl
+                       << "void main()"                                                                << endl
+                       << "{"                                                                                  << endl
+                       << "  if (record.geomIndex % 2 == 1)"                   << endl
+                       << "    ignoreIntersectionEXT;"                                 << endl
+                       << "}";
+               programCollection.glslSources.add("ahit") << glu::AnyHitSource(str.str()) << buildOptions;
+       }
+
+       if (m_params.isect() || (m_params.geomTypes == GeometryTypes::Box) || (m_params.geomTypes == GeometryTypes::TriangleAndBox))
+       {
+               std::stringstream str;
+               str << "#version 460 core"                                                              << endl
+                       << "#extension GL_EXT_ray_tracing : require"            << endl
+                       << "hitAttributeEXT ivec4 hitAttribute;"                        << endl
+                       << recordDecl                                                                           << endl
+                       << "void main()"                                                                        << endl
+                       << "{"                                                                                          << endl
+                       << "  hitAttribute = ivec4(record.retValue.x + 0"       << endl
+                       << "                      ,record.retValue.y + 2"       << endl
+                       << "                      ,record.retValue.z + 3"       << endl
+                       << "                      ,record.retValue.w + 4);"     << endl
+                       << "  reportIntersectionEXT(0.0, 0);"                           << endl
+                       << "}";
+               programCollection.glslSources.add("isect") << glu::IntersectionSource(str.str()) << buildOptions;
+       }
+}
+
+TestInstance* PipelineFlagsCase::createInstance (Context& context) const
+{
+       return new PipelineFlagsInstance(context, m_params, shaderGroupHandleSize, shaderGroupBaseAlignment,
+                                                                                                       m_rgenPayload, m_defMissRetGreenComp, m_defTriRetGreenComp, m_defBoxRetGreenComp);
+}
+
+PipelineFlagsInstance::PipelineFlagsInstance (Context&                 context,
+                                                                                         const TestParams&     params,
+                                                                                         const deUint32&       shaderGroupHandleSize_,
+                                                                                         const deUint32&       shaderGroupBaseAlignment_,
+                                                                                         const tcu::IVec4& rgenPayload_,
+                                                                                         deInt32                       defMissRetGreenComp_,
+                                                                                         deInt32                       defTriRetGreenComp_,
+                                                                                         deInt32                       defBoxRetGreenComp_)
+       : TestInstance                          (context)
+       , rgenPayload                           (rgenPayload_)
+       , defMissRetGreenComp           (defMissRetGreenComp_)
+       , defTriRetGreenComp            (defTriRetGreenComp_)
+       , defBoxRetGreenComp            (defBoxRetGreenComp_)
+       , shaderGroupHandleSize         (shaderGroupHandleSize_)
+       , shaderGroupBaseAlignment      (shaderGroupBaseAlignment_)
+       , m_params                                      (params)
+       , m_format                                      (VK_FORMAT_R32G32B32A32_SINT)
+{
+}
+
+VkImageCreateInfo PipelineFlagsInstance::makeImageCreateInfo () const
+{
+       const deUint32                          familyIndex             = m_context.getUniversalQueueFamilyIndex();
+       const VkImageCreateInfo         imageCreateInfo =
+       {
+               VK_STRUCTURE_TYPE_IMAGE_CREATE_INFO,                                                                                                                            // VkStructureType                      sType;
+               DE_NULL,                                                                                                                                                                                        // const void*                          pNext;
+               (VkImageCreateFlags)0u,                                                                                                                                                         // VkImageCreateFlags           flags;
+               VK_IMAGE_TYPE_2D,                                                                                                                                                                       // VkImageType                          imageType;
+               m_format,                                                                                                                                                                                       // VkFormat                                     format;
+               makeExtent3D(m_params.width, m_params.height, 1u),                                                                                                      // VkExtent3D                           extent;
+               1u,                                                                                                                                                                                                     // deUint32                                     mipLevels;
+               1u,                                                                                                                                                                                                     // deUint32                                     arrayLayers;
+               VK_SAMPLE_COUNT_1_BIT,                                                                                                                                                          // VkSampleCountFlagBits        samples;
+               VK_IMAGE_TILING_OPTIMAL,                                                                                                                                                        // VkImageTiling                        tiling;
+               VK_IMAGE_USAGE_STORAGE_BIT | VK_IMAGE_USAGE_TRANSFER_SRC_BIT | VK_IMAGE_USAGE_TRANSFER_DST_BIT,         // VkImageUsageFlags            usage;
+               VK_SHARING_MODE_EXCLUSIVE,                                                                                                                                                      // VkSharingMode                        sharingMode;
+               1u,                                                                                                                                                                                                     // deUint32                                     queueFamilyIndexCount;
+               &familyIndex,                                                                                                                                                                           // const deUint32*                      pQueueFamilyIndices;
+               VK_IMAGE_LAYOUT_UNDEFINED                                                                                                                                                       // VkImageLayout                        initialLayout;
+       };
+
+       return imageCreateInfo;
+}
+
+std::vector<PipelineFlagsInstance::TriGeometry>
+PipelineFlagsInstance::prepareTriGeometries (const float zCoord) const
+{
+       const tcu::Vec3 center(-0.5f, 0.5f, zCoord);
+       const tcu::Vec3 start(0.0f, 0.5f, zCoord);
+       const deUint32 maxTriangles = m_params.instCount * m_params.geomCount;
+       const deUint32 trianglesCount = deMaxu32(maxTriangles, 3);
+       const float angle = (4.0f * std::acos(0.0f)) / float(trianglesCount);
+
+       tcu::Vec3       point(start);
+       std::vector<TriGeometry> geometries(maxTriangles);
+       for (deUint32 inst = 0, idx = 0; inst < m_params.instCount; ++inst)
+       {
+               for (deUint32 geom = 0; geom < m_params.geomCount; ++geom, ++idx)
+               {
+                       TriGeometry& geometry = geometries[idx];
+
+                       geometry[0] = center;
+                       geometry[1] = point;
+                       geometry[2] = (maxTriangles >= 3 && trianglesCount - idx == 1u) ? start : rotateCcwZ(point, center, angle);
+
+                       point = geometry[2];
+               }
+       }
+
+       return geometries;
+}
+
+std::vector<PipelineFlagsInstance::BoxGeometry>
+PipelineFlagsInstance::prepareBoxGeometries (const float zFront, const float zBack) const
+{
+       const deUint32                          maxBoxes        = m_params.instCount * m_params.geomCount;
+
+       std::vector<BoxGeometry>        boxes           (maxBoxes);
+       deUint32                                        boxesPerDim     = 0u;
+       float                                           boxWidth        = 0.0f;
+       float                                           boxHeight       = 0.0f;
+
+       // find nearest square ceil number
+       do
+       {
+               ++boxesPerDim;
+               boxWidth = 1.0f / float(boxesPerDim);
+               boxHeight = 1.0f / float(boxesPerDim);
+       } while (boxesPerDim * boxesPerDim < maxBoxes);
+
+       for (deUint32 boxY = 0, boxIdx = 0; boxY < boxesPerDim && boxIdx < maxBoxes; ++boxY)
+       {
+               for (deUint32 boxX = 0; boxX < boxesPerDim && boxIdx < maxBoxes; ++boxX, ++boxIdx)
+               {
+                       const float x = float(boxX) * boxWidth;
+                       const float y = float(boxY) * boxHeight;
+                       BoxGeometry box = { tcu::Vec3(x, y, zFront), tcu::Vec3((x + boxWidth), (y + boxHeight), zBack) };
+                       boxes[boxIdx].swap(box);
+               }
+       }
+
+       return boxes;
+}
+
+PipelineFlagsInstance::BottomLevelASPtrs
+PipelineFlagsInstance::createBottomLevelAccelerationStructs (VkCommandBuffer cmdBuffer) const
+{
+       const DeviceInterface&          vkd                     = m_context.getDeviceInterface();
+       const VkDevice                          device          = m_context.getDevice();
+       Allocator&                                      allocator       = m_context.getDefaultAllocator();
+       const VkGeometryFlagsKHR        geomFlags       = m_params.ahit() ? VK_GEOMETRY_NO_DUPLICATE_ANY_HIT_INVOCATION_BIT_KHR : VK_GEOMETRY_OPAQUE_BIT_KHR;
+
+       BottomLevelASPtrs                       result;
+
+       if (!m_params.isect() && ((m_params.geomTypes == GeometryTypes::Triangle) || (m_params.geomTypes == GeometryTypes::TriangleAndBox)))
+       {
+               const auto      geometries = prepareTriGeometries(0.0f);
+
+               for (deUint32 inst = 0, idx = 0; inst < m_params.instCount; ++inst)
+               {
+                       auto blas = makeBottomLevelAccelerationStructure();
+                       blas->setBuildType(m_params.onHhost ? VK_ACCELERATION_STRUCTURE_BUILD_TYPE_HOST_KHR : VK_ACCELERATION_STRUCTURE_BUILD_TYPE_DEVICE_KHR);
+
+                       for (deUint32 geom = 0; geom < m_params.geomCount; ++geom, ++idx)
+                       {
+                               const TriGeometry& triangle = geometries[idx];
+                               blas->addGeometry(std::vector<tcu::Vec3>(triangle.begin(), triangle.end()), true, geomFlags);
+                       }
+
+                       blas->createAndBuild(vkd, device, cmdBuffer, allocator);
+                       result.emplace_back(de::SharedPtr<BottomLevelAccelerationStructure>(blas.release()));
+               }
+       }
+
+       if (m_params.isect() || (m_params.geomTypes == GeometryTypes::Box) || (m_params.geomTypes == GeometryTypes::TriangleAndBox))
+       {
+               const auto      geometries = prepareBoxGeometries(0.0f, 0.0f);
+
+               for (deUint32 inst = 0, idx = 0; inst < m_params.instCount; ++inst)
+               {
+                       auto blas = makeBottomLevelAccelerationStructure();
+                       blas->setBuildType(m_params.onHhost ? VK_ACCELERATION_STRUCTURE_BUILD_TYPE_HOST_KHR : VK_ACCELERATION_STRUCTURE_BUILD_TYPE_DEVICE_KHR);
+
+                       for (deUint32 geom = 0; geom < m_params.geomCount; ++geom, ++idx)
+                       {
+                               const BoxGeometry& box = geometries[idx];
+                               blas->addGeometry(std::vector<tcu::Vec3>(box.begin(), box.end()), false, geomFlags);
+                       }
+
+                       blas->createAndBuild(vkd, device, cmdBuffer, allocator);
+                       result.emplace_back(de::SharedPtr<BottomLevelAccelerationStructure>(blas.release()));
+               }
+       }
+
+       return result;
+}
+
+PipelineFlagsInstance::TopLevelASPtr
+PipelineFlagsInstance::createTopLevelAccelerationStruct (VkCommandBuffer cmdBuffer, const BottomLevelASPtrs& blasPtrs) const
+{
+       const DeviceInterface&  vkd                                                     = m_context.getDeviceInterface();
+       const VkDevice                  device                                          = m_context.getDevice();
+       Allocator&                              allocator                                       = m_context.getDefaultAllocator();
+       const deUint32                  groupsAndGapsPerInstance        = computeEffectiveShaderGroupCount(m_params);
+
+       auto                                    tlas            = makeTopLevelAccelerationStructure();
+
+       tlas->setBuildType(m_params.onHhost ? VK_ACCELERATION_STRUCTURE_BUILD_TYPE_HOST_KHR : VK_ACCELERATION_STRUCTURE_BUILD_TYPE_DEVICE_KHR);
+       tlas->setInstanceCount(blasPtrs.size());
+       for (auto begin = blasPtrs.begin(), end = blasPtrs.end(), i = begin; i != end; ++i)
+       {
+               const deUint32 instanceShaderBindingTableRecordOffset = static_cast<deUint32>(std::distance(begin, i) * groupsAndGapsPerInstance);
+               tlas->addInstance(*i, identityMatrix3x4, 0, 0xFF, instanceShaderBindingTableRecordOffset);
+       }
+       tlas->createAndBuild(vkd, device, cmdBuffer, allocator);
+
+       return TopLevelASPtr(tlas.release());
+}
+
+std::vector<PipelineFlagsInstance::ShaderRecordEntry> PipelineFlagsInstance::prepareShaderBindingTable() const
+{
+       const bool                                              includeTriangles = (!m_params.isect() && ((m_params.geomTypes == GeometryTypes::Triangle) || (m_params.geomTypes == GeometryTypes::TriangleAndBox)));
+       const bool                                              includeBoxes = (m_params.isect() || (m_params.geomTypes == GeometryTypes::Box) || (m_params.geomTypes == GeometryTypes::TriangleAndBox));
+       const deUint32                                  groupsAndGapsPerInstance = computeEffectiveShaderGroupCount(m_params);
+       const deUint32                                  commonGroupCount = 2; // general groups for rgen and miss
+       const deUint32                                  triangleGroupCount = includeTriangles ? (groupsAndGapsPerInstance * m_params.instCount) : 0;
+       const deUint32                                  proceduralGroupCount = includeBoxes ? (groupsAndGapsPerInstance * m_params.instCount) : 0;
+       const deUint32                                  totalGroupCount = commonGroupCount + triangleGroupCount + proceduralGroupCount;
+
+       std::vector<ShaderRecordEntry>  shaderRecords(totalGroupCount);
+
+       shaderRecords[0] = { VK_SHADER_STAGE_RAYGEN_BIT_KHR, {}, {} };
+       shaderRecords[1] = { VK_SHADER_STAGE_MISS_BIT_KHR, {}, { GeometryTypes::Box, (~0u), tcu::IVec4(0, defMissRetGreenComp, 0, 0) } };
+
+       de::SharedPtr<AnyHitShader>                     ahit(new AnyHitShader);
+       de::SharedPtr<ClosestHitShader>         chit(new ClosestHitShader);
+       de::SharedPtr<IntersectionShader>       isect(new IntersectionShader);
+
+       if (includeTriangles)
+       {
+               std::set<deUint32>      usedIndexes;
+               deInt32 greenComp = defTriRetGreenComp;
+
+               const deUint32 recordsToSkip = commonGroupCount;
+
+               for (deUint32 instance = 0; instance < m_params.instCount; ++instance)
+               {
+                       const deUint32 instanceShaderBindingTableRecordOffset = recordsToSkip + instance * groupsAndGapsPerInstance;
+                       for (deUint32 geometryIndex = 0; geometryIndex < m_params.geomCount; ++geometryIndex)
+                       {
+                               const deUint32 shaderGroupIndex = instanceShaderBindingTableRecordOffset + geometryIndex * m_params.stbRecStride + m_params.stbRecOffset;
+                               if (usedIndexes.find(shaderGroupIndex) == usedIndexes.end())
+                               {
+                                       HitGroup                        hitGroup;
+                                       VkShaderStageFlags      flags = 0;
+                                       if (m_params.ahit()) {
+                                               flags |= VK_SHADER_STAGE_ANY_HIT_BIT_KHR;
+                                               hitGroup.ahit = ahit;
+                                       }
+                                       if (m_params.chit()) {
+                                               flags |= VK_SHADER_STAGE_CLOSEST_HIT_BIT_KHR;
+                                               hitGroup.chit = chit;
+                                       }
+                                       shaderRecords[shaderGroupIndex] = { flags, hitGroup, { GeometryTypes::Triangle, geometryIndex, tcu::IVec4(0, greenComp++, 0, 0) } };
+                                       usedIndexes.insert(shaderGroupIndex);
+                               }
+                       }
+               }
+       }
+
+       if (includeBoxes)
+       {
+               std::set<deUint32>      usedIndexes;
+               deInt32 greenComp = defBoxRetGreenComp;
+
+               const deUint32 recordsToSkip = triangleGroupCount + commonGroupCount;
+
+               for (deUint32 instance = 0; instance < m_params.instCount; ++instance)
+               {
+                       const deUint32 instanceShaderBindingTableRecordOffset = recordsToSkip + instance * groupsAndGapsPerInstance;
+                       for (deUint32 geometryIndex = 0; geometryIndex < m_params.geomCount; ++geometryIndex)
+                       {
+                               const deUint32 shaderGroupIndex = instanceShaderBindingTableRecordOffset + geometryIndex * m_params.stbRecStride + m_params.stbRecOffset;
+                               if (usedIndexes.find(shaderGroupIndex) == usedIndexes.end())
+                               {
+                                       HitGroup                        hitGroup;
+                                       VkShaderStageFlags      flags = 0;
+                                       if (m_params.ahit()) {
+                                               flags |= VK_SHADER_STAGE_ANY_HIT_BIT_KHR;
+                                               hitGroup.ahit = ahit;
+                                       }
+                                       if (m_params.chit()) {
+                                               flags |= VK_SHADER_STAGE_CLOSEST_HIT_BIT_KHR;
+                                               hitGroup.chit = chit;
+                                       }
+                                       { //In the case of AABB isect must be provided, otherwise we will process AABB with TRIANGLES_HIT_GROUP
+                                               flags |= VK_SHADER_STAGE_INTERSECTION_BIT_KHR;
+                                               hitGroup.isect = isect;
+                                       }
+                                       shaderRecords[shaderGroupIndex] = { flags, hitGroup, { GeometryTypes::Box, geometryIndex, tcu::IVec4(0, greenComp++, 0, 0) } };
+                                       usedIndexes.insert(shaderGroupIndex);
+                               }
+                       }
+               }
+       }
+
+       return shaderRecords;
+}
+
+tcu::IVec2 PipelineFlagsInstance::rayToImage(const tcu::Vec2& rayCoords) const
+{
+       return tcu::IVec2(
+               deInt32(((rayCoords.x() + 1.0f) * float(m_params.width)) / 2.0f),
+               deInt32((rayCoords.y() * float(m_params.height)) - 0.5f)
+       );
+}
+
+tcu::Vec2 PipelineFlagsInstance::imageToRay(const tcu::IVec2& imageCoords) const
+{
+       const float             rx = (float(imageCoords.x() * 2) / float(m_params.width)) - 1.0f;
+       const float             ry = (float(imageCoords.y()) + 0.5f) / float(m_params.height);
+       return tcu::Vec2(rx, ry);
+}
+
+deUint32 PipelineFlagsInstance::computeSamePixelCount (const std::vector<tcu::IVec4>&                                          image,
+                                                                                                                                    const tcu::Vec2                                                                    pixelCoords,
+                                                                                                                                        const tcu::IVec4&                                                                      requiredColor,
+                                                                                                                                        const tcu::IVec4&                                                                      floodColor,
+                                                                                                                                        const std::function<bool(const tcu::Vec3&)>&           pointInGeometry,
+                                                                                                                                        std::vector<std::pair<tcu::IVec4, tcu::IVec2>>&        auxBuffer) const
+{
+       if (!pointInGeometry(tcu::Vec3(pixelCoords.x(), pixelCoords.y(), 0.0f))) return 0;
+
+       auxBuffer.resize(image.size() * 4);
+       std::transform(image.begin(), image.end(), auxBuffer.begin(), [](const tcu::IVec4& c) -> std::pair<tcu::IVec4, tcu::IVec2> { return { c, tcu::IVec2() }; });
+
+       tcu::Vec2               rayCoord;
+       tcu::IVec2              imageCoords = rayToImage(pixelCoords);
+       deUint32                pixelIndex      = imageCoords.y() * m_params.width + imageCoords.x();
+       tcu::IVec4              imageColor      = image[pixelIndex];
+
+       if (requiredColor != imageColor) return 0;
+
+       deInt32                 stackIndex      = 0;
+       deUint32                sameCount       = 1;
+       auxBuffer[stackIndex].second = imageCoords;
+
+       while (stackIndex >= 0)
+       {
+               imageCoords = auxBuffer[stackIndex].second;             --stackIndex;
+
+               if (imageCoords.x() < 0 || imageCoords.x() >= deInt32(m_params.width)
+                       || imageCoords.y() < 0 || imageCoords.y() >= deInt32(m_params.height)) continue;
+
+               rayCoord = imageToRay(imageCoords);
+               if (!pointInGeometry(tcu::Vec3(rayCoord.x(), rayCoord.y(), 0.0f))) continue;
+
+               pixelIndex = imageCoords.y() * m_params.width + imageCoords.x();
+               imageColor = auxBuffer[pixelIndex].first;
+               if (requiredColor != imageColor) continue;
+
+               auxBuffer[pixelIndex].first = floodColor;
+               sameCount += 1;
+
+               auxBuffer[++stackIndex].second = tcu::IVec2(imageCoords.x() - 1, imageCoords.y());
+               auxBuffer[++stackIndex].second = tcu::IVec2(imageCoords.x() + 1, imageCoords.y());
+               auxBuffer[++stackIndex].second = tcu::IVec2(imageCoords.x(), imageCoords.y() - 1);
+               auxBuffer[++stackIndex].second = tcu::IVec2(imageCoords.x(), imageCoords.y() + 1);
+       }
+
+       return sameCount;
+}
+
+void PipelineFlagsInstance::travelRay (std::vector<tcu::IVec4>&                                        outImage,
+                                                                          const deUint32                                                       glLaunchIdExtX,
+                                                                          const deUint32                                                       glLaunchIdExtY,
+                                                                          const std::vector<ShaderRecordEntry>&        shaderBindingTable,
+                                                                          const MissShader&                                            missShader,
+                                                                          const std::vector<TriGeometry>&                      triangleGeometries,
+                                                                          const std::vector<BoxGeometry>&                      boxGeometries) const
+{
+       const tcu::Vec2 rayCoords                                       = imageToRay(tcu::IVec2(glLaunchIdExtX, glLaunchIdExtY));
+       const bool              includeTriangles                        = (!m_params.isect() && ((m_params.geomTypes == GeometryTypes::Triangle) || (m_params.geomTypes == GeometryTypes::TriangleAndBox)));
+       const bool              includeBoxes                            = (m_params.isect() || (m_params.geomTypes == GeometryTypes::Box) || (m_params.geomTypes == GeometryTypes::TriangleAndBox));
+       const deUint32  commonGroupCount                        = 2; // general groups for rgen and miss
+       const deUint32  groupsAndGapsPerInstance        = computeEffectiveShaderGroupCount(m_params);
+       const deUint32  triangleGroupCount                      = includeTriangles ? (groupsAndGapsPerInstance * m_params.instCount) : 0;
+
+       bool                    hitHappened                                     (false);
+       deUint32                shaderGroupIndex                        (~0u);
+       tcu::IVec4              payload                                         (rgenPayload);
+       const tcu::Vec3 origin                                          (rayCoords.x(), rayCoords.y(), 1.0f);
+
+       if (includeTriangles)
+       {
+               const deUint32 recordsToSkip = commonGroupCount;
+               for (deUint32 instance = 0; !hitHappened && (instance < m_params.instCount); ++instance)
+               {
+                       const deUint32 instanceShaderBindingTableRecordOffset = recordsToSkip + instance * groupsAndGapsPerInstance;
+                       for (deUint32 geometryIndex = 0; !hitHappened && (geometryIndex < m_params.geomCount); ++geometryIndex)
+                       {
+                               const TriGeometry& geometry = triangleGeometries[instance * m_params.geomCount + geometryIndex];
+                               shaderGroupIndex = instanceShaderBindingTableRecordOffset + geometryIndex * m_params.stbRecStride + m_params.stbRecOffset;
+                               if (pointInTriangle2D(origin, geometry[0], geometry[1], geometry[2]))
+                               {
+                                       hitHappened = true;
+                               }
+                       }
+               }
+       }
+
+       if (includeBoxes)
+       {
+               const deUint32 recordsToSkip = triangleGroupCount + commonGroupCount;
+               for (deUint32 instance = 0; !hitHappened && (instance < m_params.instCount); ++instance)
+               {
+                       const deUint32 instanceShaderBindingTableRecordOffset = recordsToSkip + instance * groupsAndGapsPerInstance;
+                       for (deUint32 geometryIndex = 0; !hitHappened && (geometryIndex < m_params.geomCount); ++geometryIndex)
+                       {
+                               const BoxGeometry& geometry = boxGeometries[instance * m_params.geomCount + geometryIndex];
+                               shaderGroupIndex = instanceShaderBindingTableRecordOffset + geometryIndex * m_params.stbRecStride + m_params.stbRecOffset;
+                               if (pointInRect2D(origin, geometry[0], geometry[1]))
+                               {
+                                       hitHappened = true;
+                               }
+                       }
+               }
+       }
+
+       if (hitHappened)
+       {
+               const ShaderRecordEXT&          shaderRecord    = std::get<2>(shaderBindingTable[shaderGroupIndex]);
+               const HitGroup&                         hitGroup                = std::get<1>(shaderBindingTable[shaderGroupIndex]);
+               const VkShaderStageFlags        flags                   = std::get<0>(shaderBindingTable[shaderGroupIndex]);
+               auto                                            hitAttribute    = rgenPayload;
+               bool                                            ignoreIsect             = false;
+
+               if (flags & VK_SHADER_STAGE_INTERSECTION_BIT_KHR)
+               {
+                       hitAttribute = hitGroup.isect->invoke(IntersectionShader::dummyPayload, shaderRecord);
+               }
+               if (flags & VK_SHADER_STAGE_ANY_HIT_BIT_KHR)
+               {
+                       ignoreIsect = hitGroup.ahit->ignoreIntersection(AnyHitShader::dummyPayload, shaderRecord);
+               }
+               if (ignoreIsect)
+               {
+                       payload = missShader.invoke(MissShader::dummyPayload, std::get<2>(shaderBindingTable[1]));
+               }
+               else if (flags & VK_SHADER_STAGE_CLOSEST_HIT_BIT_KHR)
+               {
+                       payload = hitGroup.chit->invoke(hitAttribute, shaderRecord);
+               }
+       }
+       else
+       {
+               payload = missShader.invoke(MissShader::dummyPayload, std::get<2>(shaderBindingTable[1]));
+       }
+
+       outImage[glLaunchIdExtY * m_params.width + glLaunchIdExtX] = payload;
+}
+
+#ifdef INTERNAL_DEBUG
+void PipelineFlagsInstance::printImage(const tcu::IVec4* image) const
+{
+       for (deUint32 y = 0; y < m_params.height; ++y)
+       {
+               for (deUint32 x = 0; x < m_params.width; ++x)
+                       std::cout << static_cast<char>(image[(m_params.height - y - 1) * m_params.width + x].y());
+               std::cout << std::endl;
+       }
+}
+#endif
+
+bool PipelineFlagsInstance::verifyResult (const BufferWithMemory* resultBuffer) const
+{
+       const auto                                                              triangleGeometries      = prepareTriGeometries(0.0f);
+       const auto                                                              boxGeometries           = prepareBoxGeometries(0.0f, 0.0f);
+
+       const bool                                                              includeTriangles        = (!m_params.isect() && ((m_params.geomTypes == GeometryTypes::Triangle) || (m_params.geomTypes == GeometryTypes::TriangleAndBox)));
+       const bool                                                              includeBoxes            = (m_params.isect() || (m_params.geomTypes == GeometryTypes::Box) || (m_params.geomTypes == GeometryTypes::TriangleAndBox));
+
+       const tcu::IVec4*                                               resultImageData         = (tcu::IVec4*)(resultBuffer->getAllocation().getHostPtr());
+       auto                                                                    resultImageBounds       = makeStdBeginEnd(resultImageData, (m_params.width * m_params.height));
+       const std::vector<tcu::IVec4>                   resultImage                     (resultImageBounds.first, resultImageBounds.second);
+       std::vector<tcu::IVec4>                                 referenceImage          (m_params.width * m_params.height);
+
+       const std::vector<ShaderRecordEntry>    shaderBindingTable      = prepareShaderBindingTable();
+
+       MissShader                                                              missShader{};
+
+       // perform offline ray-tracing
+       for (deUint32 glLaunchIdExtY = 0; glLaunchIdExtY < m_params.height; ++glLaunchIdExtY)
+       {
+               for (deUint32 glLaunchIdExtX = 0; glLaunchIdExtX < m_params.width; ++glLaunchIdExtX)
+               {
+                       travelRay(referenceImage, glLaunchIdExtX, glLaunchIdExtY,
+                                        shaderBindingTable, missShader,
+                                        triangleGeometries, boxGeometries);
+               }
+       }
+
+#ifdef INTERNAL_DEBUG
+       std::cout << "===== RES =====" << std::endl;
+       printImage(resultImageData);
+       std::cout << std::endl;
+       std::cout << "===== REF =====" << std::endl;
+       printImage(referenceImage.data());
+       std::cout << std::endl;
+#endif
+
+       const tcu::IVec4                                                                floodColor(0, '*', 0, 0);
+       std::vector<std::pair<tcu::IVec4, tcu::IVec2>>  auxBuffer(referenceImage.size() * 4);
+
+       if (includeTriangles)
+       {
+               TriGeometry                                                             tri;
+               std::function<bool(const tcu::Vec3&)>   pointInGeometry = std::bind(pointInTriangle2D, std::placeholders::_1, std::ref(tri[0]), std::ref(tri[1]), std::ref(tri[2]));
+
+               for (deUint32 instance = 0; instance < m_params.instCount; ++instance)
+               {
+                       for (deUint32 geometryIndex = 0; geometryIndex < m_params.geomCount; ++geometryIndex)
+                       {
+                               if (!(m_params.ahit() && (geometryIndex % 2 == 1)))
+                               {
+                                       tri = triangleGeometries[instance * m_params.geomCount + geometryIndex];
+                                       const tcu::Vec2 center((tri[0].x() + tri[1].x() + tri[2].x()) / 3.0f, (tri[0].y() + tri[1].y() + tri[2].y()) / 3.0f);
+
+                                       const tcu::IVec2        refImageCoords  = rayToImage(center);
+                                       const tcu::IVec4        requiredColor   = referenceImage[refImageCoords.y() * m_params.width + refImageCoords.x()];
+
+                                       deUint32 resultPixelCount = computeSamePixelCount(resultImage, center, requiredColor, floodColor, pointInGeometry, auxBuffer);
+                                       deUint32 referencePixelCount = computeSamePixelCount(referenceImage, center, requiredColor, floodColor, pointInGeometry, auxBuffer);
+
+                                       if (!resultPixelCount || !referencePixelCount) return false;
+                                       if (resultPixelCount > referencePixelCount) std::swap(resultPixelCount, referencePixelCount);
+
+                                       const float similarity = float(resultPixelCount) / float(referencePixelCount);
+                                       if (similarity < m_params.accuracy) return false;
+                               }
+                       }
+               }
+       }
+
+       if (includeBoxes)
+       {
+               BoxGeometry                                                             box;
+               std::function<bool(const tcu::Vec3&)>   pointInGeometry = std::bind(pointInRect2D, std::placeholders::_1, std::ref(box[0]), std::ref(box[1]));
+
+               for (deUint32 instance = 0; instance < m_params.instCount; ++instance)
+               {
+                       for (deUint32 geometryIndex = 0; geometryIndex < m_params.geomCount; ++geometryIndex)
+                       {
+                               if (!(m_params.ahit() && (geometryIndex % 2 == 1)))
+                               {
+                                       box = boxGeometries[instance * m_params.geomCount + geometryIndex];
+                                       const tcu::Vec2 center((box[0].x() + box[1].x()) / 2.0f, (box[0].y() + box[1].y()) / 2.0f);
+
+                                       const tcu::IVec2        refImageCoords = rayToImage(center);
+                                       const tcu::IVec4        requiredColor = referenceImage[refImageCoords.y() * m_params.width + refImageCoords.x()];
+
+                                       deUint32 resultPixelCount = computeSamePixelCount(resultImage, center, requiredColor, floodColor, pointInGeometry, auxBuffer);
+                                       deUint32 referencePixelCount = computeSamePixelCount(referenceImage, center, requiredColor, floodColor, pointInGeometry, auxBuffer);
+
+                                       if (!resultPixelCount || !referencePixelCount) return false;
+                                       if (resultPixelCount > referencePixelCount) std::swap(resultPixelCount, referencePixelCount);
+
+                                       const float similarity = float(resultPixelCount) / float(referencePixelCount);
+                                       if (similarity < m_params.accuracy) return false;
+                               }
+                       }
+               }
+       }
+
+       return true;
+}
+
+tcu::TestStatus PipelineFlagsInstance::iterate(void)
+{
+       const DeviceInterface& vkd = m_context.getDeviceInterface();
+       const VkDevice                                                  device = m_context.getDevice();
+       const deUint32                                                  familyIndex = m_context.getUniversalQueueFamilyIndex();
+       const VkQueue                                                   queue = m_context.getUniversalQueue();
+       Allocator& allocator = m_context.getDefaultAllocator();
+
+       const VkImageCreateInfo                                 imageCreateInfo = makeImageCreateInfo();
+       const VkImageSubresourceRange                   imageSubresourceRange = makeImageSubresourceRange(VK_IMAGE_ASPECT_COLOR_BIT, 0u, 1u, 0, 1u);
+       const de::MovePtr<ImageWithMemory>              image = de::MovePtr<ImageWithMemory>(new ImageWithMemory(vkd, device, allocator, imageCreateInfo, MemoryRequirement::Any));
+       const Move<VkImageView>                                 imageView = makeImageView(vkd, device, **image, VK_IMAGE_VIEW_TYPE_2D, m_format, imageSubresourceRange);
+       const VkDescriptorImageInfo                             descriptorImageInfo = makeDescriptorImageInfo(DE_NULL, *imageView, VK_IMAGE_LAYOUT_GENERAL);
+
+       const deUint32                                                  resultBufferSize = (m_params.width * m_params.height * mapVkFormat(m_format).getPixelSize());
+       const VkBufferCreateInfo                                resultBufferCreateInfo = makeBufferCreateInfo(resultBufferSize, VK_BUFFER_USAGE_TRANSFER_DST_BIT);
+       const VkImageSubresourceLayers                  resultBufferImageSubresourceLayers = makeImageSubresourceLayers(VK_IMAGE_ASPECT_COLOR_BIT, 0u, 0u, 1u);
+       const VkBufferImageCopy                                 resultBufferImageRegion = makeBufferImageCopy(makeExtent3D(m_params.width, m_params.height, 1u), resultBufferImageSubresourceLayers);
+       de::MovePtr<BufferWithMemory>                   resultBuffer = de::MovePtr<BufferWithMemory>(new BufferWithMemory(vkd, device, allocator, resultBufferCreateInfo, MemoryRequirement::HostVisible));
+
+       const Move<VkDescriptorSetLayout>               descriptorSetLayout = DescriptorSetLayoutBuilder()
+               .addSingleBinding(VK_DESCRIPTOR_TYPE_STORAGE_IMAGE, ALL_RAY_TRACING_STAGES)
+               .addSingleBinding(VK_DESCRIPTOR_TYPE_ACCELERATION_STRUCTURE_KHR, ALL_RAY_TRACING_STAGES)
+               .build(vkd, device);
+       const Move<VkDescriptorPool>                    descriptorPool = DescriptorPoolBuilder()
+               .addType(VK_DESCRIPTOR_TYPE_STORAGE_IMAGE)
+               .addType(VK_DESCRIPTOR_TYPE_ACCELERATION_STRUCTURE_KHR)
+               .build(vkd, device, VK_DESCRIPTOR_POOL_CREATE_FREE_DESCRIPTOR_SET_BIT, 1u);
+       const Move<VkDescriptorSet>                             descriptorSet = makeDescriptorSet(vkd, device, *descriptorPool, *descriptorSetLayout);
+
+       de::MovePtr<RayTracingTestPipeline>             rayTracingPipeline = de::newMovePtr<RayTracingTestPipeline>(std::ref(m_context), std::cref(*this), m_params);
+
+       const Move<VkPipelineLayout>                    pipelineLayout = makePipelineLayout(vkd, device, *descriptorSetLayout);
+       Move<VkPipeline>                                                pipeline = rayTracingPipeline->createPipeline(*pipelineLayout);
+
+       de::SharedPtr<BufferWithMemory>                 raygenShaderBindingTable;
+       VkStridedDeviceAddressRegionKHR                 raygenShaderBindingTableRegion;
+       std::tie(raygenShaderBindingTable, raygenShaderBindingTableRegion) = rayTracingPipeline->createRaygenShaderBindingTable(*pipeline);
+
+       de::SharedPtr<BufferWithMemory>                 missShaderBindingTable;
+       VkStridedDeviceAddressRegionKHR                 missShaderBindingTableRegion;
+       std::tie(missShaderBindingTable, missShaderBindingTableRegion) = rayTracingPipeline->createMissShaderBindingTable(*pipeline);
+
+       de::SharedPtr<BufferWithMemory>                 hitShaderBindingTable;
+       VkStridedDeviceAddressRegionKHR                 hitShaderBindingTableRegion;
+       std::tie(hitShaderBindingTable, hitShaderBindingTableRegion) = rayTracingPipeline->createHitShaderBindingTable(*pipeline);
+
+       const VkStridedDeviceAddressRegionKHR   callableShaderBindingTableRegion = makeStridedDeviceAddressRegionKHR(DE_NULL, 0, 0);
+
+       const Move<VkCommandPool>                               cmdPool = createCommandPool(vkd, device, 0, familyIndex);
+       const Move<VkCommandBuffer>                             cmdBuffer = allocateCommandBuffer(vkd, device, *cmdPool, VK_COMMAND_BUFFER_LEVEL_PRIMARY);
+
+       beginCommandBuffer(vkd, *cmdBuffer);
+
+       BottomLevelASPtrs                                               blasPtrs = createBottomLevelAccelerationStructs(*cmdBuffer);
+       TopLevelASPtr                                                   tlasPtr = createTopLevelAccelerationStruct(*cmdBuffer, blasPtrs);
+
+       VkWriteDescriptorSetAccelerationStructureKHR    accelerationStructureWriteDescriptorSet =
+       {
+               VK_STRUCTURE_TYPE_WRITE_DESCRIPTOR_SET_ACCELERATION_STRUCTURE_KHR,      //  VkStructureType                                             sType;
+               DE_NULL,                                                                                                                        //  const void*                                                 pNext;
+               1u,                                                                                                                                     //  deUint32                                                    accelerationStructureCount;
+               tlasPtr->getPtr()                                                                                                       //  const VkAccelerationStructureKHR*   pAccelerationStructures;
+       };
+
+       DescriptorSetUpdateBuilder()
+               .writeSingle(*descriptorSet, DescriptorSetUpdateBuilder::Location::binding(0u), VK_DESCRIPTOR_TYPE_STORAGE_IMAGE, &descriptorImageInfo)
+               .writeSingle(*descriptorSet, DescriptorSetUpdateBuilder::Location::binding(1u), VK_DESCRIPTOR_TYPE_ACCELERATION_STRUCTURE_KHR, &accelerationStructureWriteDescriptorSet)
+               .update(vkd, device);
+
+       vkd.cmdBindDescriptorSets(*cmdBuffer, VK_PIPELINE_BIND_POINT_RAY_TRACING_KHR, *pipelineLayout, 0, 1, &descriptorSet.get(), 0, DE_NULL);
+
+       vkd.cmdBindPipeline(*cmdBuffer, VK_PIPELINE_BIND_POINT_RAY_TRACING_KHR, *pipeline);
+
+       cmdTraceRays(vkd,
+               *cmdBuffer,
+               &raygenShaderBindingTableRegion,        // rgen
+               &missShaderBindingTableRegion,          // miss
+               &hitShaderBindingTableRegion,           // hit
+               &callableShaderBindingTableRegion,      // call
+               m_params.width, m_params.height, 1);
+
+       const VkMemoryBarrier                           postTraceMemoryBarrier = makeMemoryBarrier(VK_ACCESS_SHADER_WRITE_BIT, VK_ACCESS_TRANSFER_READ_BIT);
+       const VkMemoryBarrier                           postCopyMemoryBarrier = makeMemoryBarrier(VK_ACCESS_TRANSFER_WRITE_BIT, VK_ACCESS_HOST_READ_BIT);
+       cmdPipelineMemoryBarrier(vkd, *cmdBuffer, VK_PIPELINE_STAGE_RAY_TRACING_SHADER_BIT_KHR, VK_PIPELINE_STAGE_TRANSFER_BIT, &postTraceMemoryBarrier);
+
+       vkd.cmdCopyImageToBuffer(*cmdBuffer, **image, VK_IMAGE_LAYOUT_GENERAL, **resultBuffer, 1u, &resultBufferImageRegion);
+
+       cmdPipelineMemoryBarrier(vkd, *cmdBuffer, VK_PIPELINE_STAGE_TRANSFER_BIT, VK_PIPELINE_STAGE_HOST_BIT, &postCopyMemoryBarrier);
+
+       endCommandBuffer(vkd, *cmdBuffer);
+
+       submitCommandsAndWait(vkd, device, queue, *cmdBuffer);
+
+       invalidateMappedMemoryRange(vkd, device, resultBuffer->getAllocation().getMemory(), resultBuffer->getAllocation().getOffset(), resultBufferSize);
+
+       return verifyResult(resultBuffer.get()) ? tcu::TestStatus::pass("") : tcu::TestStatus::fail("");
+}
+
+class NoNullShadersFlagGenerator
+{
+public:
+       using FlagsSet = std::set<VkPipelineCreateFlags>;
+       struct BitAndName {
+               VkPipelineCreateFlagBits        bit;
+               const char* name;
+       };
+       static const BitAndName bits[4];
+       static std::string      name (VkPipelineCreateFlags flags) {
+               int count = 0;
+               std::stringstream ss;
+               for (auto begin = std::begin(bits), end = std::end(bits), i = begin; i != end; ++i) {
+                       if (flags & i->bit) {
+                               if (count++) ss << "_or_";
+                               ss << i->name;
+                       }
+               }
+               return count ? ss.str() : "none";
+       }
+       static VkPipelineCreateFlags mask (const FlagsSet& flags) {
+               VkPipelineCreateFlags result{};
+               for (auto f : flags) result |= f;
+               return result;
+       }
+       NoNullShadersFlagGenerator() : m_next(0) {
+               FlagsSet fs;
+               for (const auto& b : bits) fs.insert(b.bit);
+               combine(m_combs, fs);
+       }
+       void    reset() { m_next = 0; }
+       bool    next(VkPipelineCreateFlags& flags) {
+               if (m_next < m_combs.size()) {
+                       flags = mask(m_combs[m_next++]);
+                       return true;
+               }
+               return false;
+       }
+       void combine(std::vector<FlagsSet>& result, const FlagsSet& v) {
+               if (v.empty() || result.end() != std::find(result.begin(), result.end(), v)) return;
+               result.push_back(v);
+               for (deUint32 i = 0; i < v.size(); ++i) {
+                       FlagsSet w(v);
+                       w.erase(std::next(w.begin(), i));
+                       combine(result, w);
+               }
+       }
+private:
+       size_t                                  m_next;
+       std::vector<FlagsSet>   m_combs;
+};
+const NoNullShadersFlagGenerator::BitAndName   NoNullShadersFlagGenerator::bits[] = {
+       { VK_PIPELINE_CREATE_RAY_TRACING_NO_NULL_ANY_HIT_SHADERS_BIT_KHR,               "any"   },
+       { VK_PIPELINE_CREATE_RAY_TRACING_NO_NULL_CLOSEST_HIT_SHADERS_BIT_KHR,   "chit"  },
+       { VK_PIPELINE_CREATE_RAY_TRACING_NO_NULL_INTERSECTION_SHADERS_BIT_KHR,  "isect" },
+       { VK_PIPELINE_CREATE_RAY_TRACING_NO_NULL_MISS_SHADERS_BIT_KHR,                  "miss"  },
+};
+
+} // unnamed
+
+tcu::TestCaseGroup*    createPipelineFlagsTests (tcu::TestContext& testCtx)
+{
+       const deUint32 strides[] = { 3, 5 };
+       const deUint32 offsets[] = { 7 };
+
+       struct {
+               bool            type;
+               const char*     name;
+       } const processors[] = { { false, "gpu" }, { true, "cpu" } };
+       struct {
+               bool            type;
+               const char* name;
+       } const libs[]{ { true, "use_libs" }, { false, "no_libs" } };
+       struct {
+               GeometryTypes   type;
+               const char*             name;
+       } const geometries[] = { { GeometryTypes::Triangle, "triangles" }, { GeometryTypes::Box, "boxes" }, { GeometryTypes::TriangleAndBox, "tri_and_box" } };
+
+       NoNullShadersFlagGenerator      flagsGenerator;
+
+       TestParams              p;
+#ifdef INTERNAL_DEBUG
+       p.width                 = 30;
+       p.height                = 8;
+       p.accuracy              = 0.80f;
+#else
+       p.width                 = 256;
+       p.height                = 256;
+       p.accuracy              = 0.95f;
+#endif
+       p.onHhost               = false;
+       p.useLibs               = false;
+       p.flags                 = 0;
+       p.geomTypes             = GeometryTypes::None;
+       p.instCount             = 3;
+       p.geomCount             = 2;
+       p.stbRecStride  = 0;
+       p.stbRecOffset  = 0;
+
+       auto group = new tcu::TestCaseGroup(testCtx, "pipeline_no_null_shaders_flag", "Pipeline NO_NULL_*_SHADER flags tests");
+
+       for (auto& processor : processors)
+       {
+               auto processorGroup = new tcu::TestCaseGroup(testCtx, processor.name, "");
+
+               for (auto& geometry : geometries)
+               {
+                       auto geometryGroup = new tcu::TestCaseGroup(testCtx, geometry.name, "");
+
+                       for (auto& stride : strides)
+                       {
+                               auto strideGroup = new tcu::TestCaseGroup(testCtx, ("stride_" + std::to_string(stride)).c_str(), "");
+
+                               for (auto& offset : offsets)
+                               {
+                                       auto offsetGroup = new tcu::TestCaseGroup(testCtx, ("offset_" + std::to_string(offset)).c_str(), "");
+
+                                       for (auto& lib : libs)
+                                       {
+                                               auto libGroup = new tcu::TestCaseGroup(testCtx, lib.name, "");
+
+                                               VkPipelineCreateFlags   flags;
+
+                                               flagsGenerator.reset();
+
+                                               while (flagsGenerator.next(flags))
+                                               {
+                                                       if ((VK_PIPELINE_CREATE_RAY_TRACING_NO_NULL_INTERSECTION_SHADERS_BIT_KHR & flags)
+                                                               && (GeometryTypes::Triangle == geometry.type)) continue;
+
+                                                       p.onHhost               = processor.type;
+                                                       p.geomTypes             = geometry.type;
+                                                       p.stbRecStride  = stride;
+                                                       p.stbRecOffset  = offset;
+                                                       p.flags                 = flags;
+                                                       p.useLibs               = lib.type;
+
+                                                       libGroup->addChild(new PipelineFlagsCase(testCtx, flagsGenerator.name(flags), p));
+                                               }
+                                               offsetGroup->addChild(libGroup);
+                                       }
+                                       strideGroup->addChild(offsetGroup);
+                               }
+                               geometryGroup->addChild(strideGroup);
+                       }
+                       processorGroup->addChild(geometryGroup);
+               }
+               group->addChild(processorGroup);
+       }
+
+       return group;
+}
+
+}      // RayTracing
+}      // vkt
diff --git a/external/vulkancts/modules/vulkan/ray_tracing/vktRayTracingPipelineFlagsTests.hpp b/external/vulkancts/modules/vulkan/ray_tracing/vktRayTracingPipelineFlagsTests.hpp
new file mode 100644 (file)
index 0000000..2498b1f
--- /dev/null
@@ -0,0 +1,39 @@
+#ifndef _VKTRAYTRACINGPIPELINEFLAGSTESTS_HPP
+#define _VKTRAYTRACINGPIPELINEFLAGSTESTS_HPP
+/*-------------------------------------------------------------------------
+ * Vulkan Conformance Tests
+ * ------------------------
+ *
+ * Copyright (c) 2020 The Khronos Group Inc.
+ *
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ *      http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ *
+ *//*!
+ * \file
+ * \brief Ray Tracing Pipeline Flags tests
+ *//*--------------------------------------------------------------------*/
+
+#include "tcuDefs.hpp"
+#include "tcuTestCase.hpp"
+
+namespace vkt
+{
+namespace RayTracing
+{
+
+tcu::TestCaseGroup*    createPipelineFlagsTests (tcu::TestContext& testCtx);
+
+} // RayTracing
+} // vkt
+
+#endif // _VKTRAYTRACINGPIPELINEFLAGSTESTS_HPP
index 7e20fd8..f87d8a3 100644 (file)
@@ -44,6 +44,7 @@
 #include "vktRayTracingDirectionTests.hpp"
 #include "vktRayTracingBarycentricCoordinatesTests.hpp"
 #include "vktRayTracingNonUniformArgsTests.hpp"
+#include "vktRayTracingPipelineFlagsTests.hpp"
 
 #include "deUniquePtr.hpp"
 
@@ -82,6 +83,7 @@ tcu::TestCaseGroup*   createTests (tcu::TestContext& testCtx)
        group->addChild(createInsideAABBsTests(testCtx));
        group->addChild(createBarycentricCoordinatesTests(testCtx));
        group->addChild(createNonUniformArgsTests(testCtx));
+       group->addChild(createPipelineFlagsTests(testCtx));
 
        return group.release();
 }
index 86e5265..70b7769 100644 (file)
@@ -9463,3 +9463,299 @@ dEQP-VK.ray_tracing_pipeline.non_uniform_args.miss_cause_3
 dEQP-VK.ray_tracing_pipeline.non_uniform_args.miss_cause_4
 dEQP-VK.ray_tracing_pipeline.non_uniform_args.miss_cause_5
 dEQP-VK.ray_tracing_pipeline.non_uniform_args.miss_cause_6
+dEQP-VK.ray_tracing_pipeline.pipeline_no_null_shaders_flag.gpu.triangles.stride_3.offset_7.use_libs.miss
+dEQP-VK.ray_tracing_pipeline.pipeline_no_null_shaders_flag.gpu.triangles.stride_3.offset_7.use_libs.chit
+dEQP-VK.ray_tracing_pipeline.pipeline_no_null_shaders_flag.gpu.triangles.stride_3.offset_7.use_libs.chit_or_miss
+dEQP-VK.ray_tracing_pipeline.pipeline_no_null_shaders_flag.gpu.triangles.stride_3.offset_7.use_libs.any
+dEQP-VK.ray_tracing_pipeline.pipeline_no_null_shaders_flag.gpu.triangles.stride_3.offset_7.use_libs.any_or_miss
+dEQP-VK.ray_tracing_pipeline.pipeline_no_null_shaders_flag.gpu.triangles.stride_3.offset_7.use_libs.any_or_chit
+dEQP-VK.ray_tracing_pipeline.pipeline_no_null_shaders_flag.gpu.triangles.stride_3.offset_7.use_libs.any_or_chit_or_miss
+dEQP-VK.ray_tracing_pipeline.pipeline_no_null_shaders_flag.gpu.triangles.stride_3.offset_7.no_libs.miss
+dEQP-VK.ray_tracing_pipeline.pipeline_no_null_shaders_flag.gpu.triangles.stride_3.offset_7.no_libs.chit
+dEQP-VK.ray_tracing_pipeline.pipeline_no_null_shaders_flag.gpu.triangles.stride_3.offset_7.no_libs.chit_or_miss
+dEQP-VK.ray_tracing_pipeline.pipeline_no_null_shaders_flag.gpu.triangles.stride_3.offset_7.no_libs.any
+dEQP-VK.ray_tracing_pipeline.pipeline_no_null_shaders_flag.gpu.triangles.stride_3.offset_7.no_libs.any_or_miss
+dEQP-VK.ray_tracing_pipeline.pipeline_no_null_shaders_flag.gpu.triangles.stride_3.offset_7.no_libs.any_or_chit
+dEQP-VK.ray_tracing_pipeline.pipeline_no_null_shaders_flag.gpu.triangles.stride_3.offset_7.no_libs.any_or_chit_or_miss
+dEQP-VK.ray_tracing_pipeline.pipeline_no_null_shaders_flag.gpu.triangles.stride_5.offset_7.use_libs.miss
+dEQP-VK.ray_tracing_pipeline.pipeline_no_null_shaders_flag.gpu.triangles.stride_5.offset_7.use_libs.chit
+dEQP-VK.ray_tracing_pipeline.pipeline_no_null_shaders_flag.gpu.triangles.stride_5.offset_7.use_libs.chit_or_miss
+dEQP-VK.ray_tracing_pipeline.pipeline_no_null_shaders_flag.gpu.triangles.stride_5.offset_7.use_libs.any
+dEQP-VK.ray_tracing_pipeline.pipeline_no_null_shaders_flag.gpu.triangles.stride_5.offset_7.use_libs.any_or_miss
+dEQP-VK.ray_tracing_pipeline.pipeline_no_null_shaders_flag.gpu.triangles.stride_5.offset_7.use_libs.any_or_chit
+dEQP-VK.ray_tracing_pipeline.pipeline_no_null_shaders_flag.gpu.triangles.stride_5.offset_7.use_libs.any_or_chit_or_miss
+dEQP-VK.ray_tracing_pipeline.pipeline_no_null_shaders_flag.gpu.triangles.stride_5.offset_7.no_libs.miss
+dEQP-VK.ray_tracing_pipeline.pipeline_no_null_shaders_flag.gpu.triangles.stride_5.offset_7.no_libs.chit
+dEQP-VK.ray_tracing_pipeline.pipeline_no_null_shaders_flag.gpu.triangles.stride_5.offset_7.no_libs.chit_or_miss
+dEQP-VK.ray_tracing_pipeline.pipeline_no_null_shaders_flag.gpu.triangles.stride_5.offset_7.no_libs.any
+dEQP-VK.ray_tracing_pipeline.pipeline_no_null_shaders_flag.gpu.triangles.stride_5.offset_7.no_libs.any_or_miss
+dEQP-VK.ray_tracing_pipeline.pipeline_no_null_shaders_flag.gpu.triangles.stride_5.offset_7.no_libs.any_or_chit
+dEQP-VK.ray_tracing_pipeline.pipeline_no_null_shaders_flag.gpu.triangles.stride_5.offset_7.no_libs.any_or_chit_or_miss
+dEQP-VK.ray_tracing_pipeline.pipeline_no_null_shaders_flag.gpu.boxes.stride_3.offset_7.use_libs.any_or_chit_or_isect_or_miss
+dEQP-VK.ray_tracing_pipeline.pipeline_no_null_shaders_flag.gpu.boxes.stride_3.offset_7.use_libs.chit_or_isect_or_miss
+dEQP-VK.ray_tracing_pipeline.pipeline_no_null_shaders_flag.gpu.boxes.stride_3.offset_7.use_libs.isect_or_miss
+dEQP-VK.ray_tracing_pipeline.pipeline_no_null_shaders_flag.gpu.boxes.stride_3.offset_7.use_libs.isect
+dEQP-VK.ray_tracing_pipeline.pipeline_no_null_shaders_flag.gpu.boxes.stride_3.offset_7.use_libs.miss
+dEQP-VK.ray_tracing_pipeline.pipeline_no_null_shaders_flag.gpu.boxes.stride_3.offset_7.use_libs.chit_or_isect
+dEQP-VK.ray_tracing_pipeline.pipeline_no_null_shaders_flag.gpu.boxes.stride_3.offset_7.use_libs.chit
+dEQP-VK.ray_tracing_pipeline.pipeline_no_null_shaders_flag.gpu.boxes.stride_3.offset_7.use_libs.chit_or_miss
+dEQP-VK.ray_tracing_pipeline.pipeline_no_null_shaders_flag.gpu.boxes.stride_3.offset_7.use_libs.any_or_isect_or_miss
+dEQP-VK.ray_tracing_pipeline.pipeline_no_null_shaders_flag.gpu.boxes.stride_3.offset_7.use_libs.any_or_isect
+dEQP-VK.ray_tracing_pipeline.pipeline_no_null_shaders_flag.gpu.boxes.stride_3.offset_7.use_libs.any
+dEQP-VK.ray_tracing_pipeline.pipeline_no_null_shaders_flag.gpu.boxes.stride_3.offset_7.use_libs.any_or_miss
+dEQP-VK.ray_tracing_pipeline.pipeline_no_null_shaders_flag.gpu.boxes.stride_3.offset_7.use_libs.any_or_chit_or_isect
+dEQP-VK.ray_tracing_pipeline.pipeline_no_null_shaders_flag.gpu.boxes.stride_3.offset_7.use_libs.any_or_chit
+dEQP-VK.ray_tracing_pipeline.pipeline_no_null_shaders_flag.gpu.boxes.stride_3.offset_7.use_libs.any_or_chit_or_miss
+dEQP-VK.ray_tracing_pipeline.pipeline_no_null_shaders_flag.gpu.boxes.stride_3.offset_7.no_libs.any_or_chit_or_isect_or_miss
+dEQP-VK.ray_tracing_pipeline.pipeline_no_null_shaders_flag.gpu.boxes.stride_3.offset_7.no_libs.chit_or_isect_or_miss
+dEQP-VK.ray_tracing_pipeline.pipeline_no_null_shaders_flag.gpu.boxes.stride_3.offset_7.no_libs.isect_or_miss
+dEQP-VK.ray_tracing_pipeline.pipeline_no_null_shaders_flag.gpu.boxes.stride_3.offset_7.no_libs.isect
+dEQP-VK.ray_tracing_pipeline.pipeline_no_null_shaders_flag.gpu.boxes.stride_3.offset_7.no_libs.miss
+dEQP-VK.ray_tracing_pipeline.pipeline_no_null_shaders_flag.gpu.boxes.stride_3.offset_7.no_libs.chit_or_isect
+dEQP-VK.ray_tracing_pipeline.pipeline_no_null_shaders_flag.gpu.boxes.stride_3.offset_7.no_libs.chit
+dEQP-VK.ray_tracing_pipeline.pipeline_no_null_shaders_flag.gpu.boxes.stride_3.offset_7.no_libs.chit_or_miss
+dEQP-VK.ray_tracing_pipeline.pipeline_no_null_shaders_flag.gpu.boxes.stride_3.offset_7.no_libs.any_or_isect_or_miss
+dEQP-VK.ray_tracing_pipeline.pipeline_no_null_shaders_flag.gpu.boxes.stride_3.offset_7.no_libs.any_or_isect
+dEQP-VK.ray_tracing_pipeline.pipeline_no_null_shaders_flag.gpu.boxes.stride_3.offset_7.no_libs.any
+dEQP-VK.ray_tracing_pipeline.pipeline_no_null_shaders_flag.gpu.boxes.stride_3.offset_7.no_libs.any_or_miss
+dEQP-VK.ray_tracing_pipeline.pipeline_no_null_shaders_flag.gpu.boxes.stride_3.offset_7.no_libs.any_or_chit_or_isect
+dEQP-VK.ray_tracing_pipeline.pipeline_no_null_shaders_flag.gpu.boxes.stride_3.offset_7.no_libs.any_or_chit
+dEQP-VK.ray_tracing_pipeline.pipeline_no_null_shaders_flag.gpu.boxes.stride_3.offset_7.no_libs.any_or_chit_or_miss
+dEQP-VK.ray_tracing_pipeline.pipeline_no_null_shaders_flag.gpu.boxes.stride_5.offset_7.use_libs.any_or_chit_or_isect_or_miss
+dEQP-VK.ray_tracing_pipeline.pipeline_no_null_shaders_flag.gpu.boxes.stride_5.offset_7.use_libs.chit_or_isect_or_miss
+dEQP-VK.ray_tracing_pipeline.pipeline_no_null_shaders_flag.gpu.boxes.stride_5.offset_7.use_libs.isect_or_miss
+dEQP-VK.ray_tracing_pipeline.pipeline_no_null_shaders_flag.gpu.boxes.stride_5.offset_7.use_libs.isect
+dEQP-VK.ray_tracing_pipeline.pipeline_no_null_shaders_flag.gpu.boxes.stride_5.offset_7.use_libs.miss
+dEQP-VK.ray_tracing_pipeline.pipeline_no_null_shaders_flag.gpu.boxes.stride_5.offset_7.use_libs.chit_or_isect
+dEQP-VK.ray_tracing_pipeline.pipeline_no_null_shaders_flag.gpu.boxes.stride_5.offset_7.use_libs.chit
+dEQP-VK.ray_tracing_pipeline.pipeline_no_null_shaders_flag.gpu.boxes.stride_5.offset_7.use_libs.chit_or_miss
+dEQP-VK.ray_tracing_pipeline.pipeline_no_null_shaders_flag.gpu.boxes.stride_5.offset_7.use_libs.any_or_isect_or_miss
+dEQP-VK.ray_tracing_pipeline.pipeline_no_null_shaders_flag.gpu.boxes.stride_5.offset_7.use_libs.any_or_isect
+dEQP-VK.ray_tracing_pipeline.pipeline_no_null_shaders_flag.gpu.boxes.stride_5.offset_7.use_libs.any
+dEQP-VK.ray_tracing_pipeline.pipeline_no_null_shaders_flag.gpu.boxes.stride_5.offset_7.use_libs.any_or_miss
+dEQP-VK.ray_tracing_pipeline.pipeline_no_null_shaders_flag.gpu.boxes.stride_5.offset_7.use_libs.any_or_chit_or_isect
+dEQP-VK.ray_tracing_pipeline.pipeline_no_null_shaders_flag.gpu.boxes.stride_5.offset_7.use_libs.any_or_chit
+dEQP-VK.ray_tracing_pipeline.pipeline_no_null_shaders_flag.gpu.boxes.stride_5.offset_7.use_libs.any_or_chit_or_miss
+dEQP-VK.ray_tracing_pipeline.pipeline_no_null_shaders_flag.gpu.boxes.stride_5.offset_7.no_libs.any_or_chit_or_isect_or_miss
+dEQP-VK.ray_tracing_pipeline.pipeline_no_null_shaders_flag.gpu.boxes.stride_5.offset_7.no_libs.chit_or_isect_or_miss
+dEQP-VK.ray_tracing_pipeline.pipeline_no_null_shaders_flag.gpu.boxes.stride_5.offset_7.no_libs.isect_or_miss
+dEQP-VK.ray_tracing_pipeline.pipeline_no_null_shaders_flag.gpu.boxes.stride_5.offset_7.no_libs.isect
+dEQP-VK.ray_tracing_pipeline.pipeline_no_null_shaders_flag.gpu.boxes.stride_5.offset_7.no_libs.miss
+dEQP-VK.ray_tracing_pipeline.pipeline_no_null_shaders_flag.gpu.boxes.stride_5.offset_7.no_libs.chit_or_isect
+dEQP-VK.ray_tracing_pipeline.pipeline_no_null_shaders_flag.gpu.boxes.stride_5.offset_7.no_libs.chit
+dEQP-VK.ray_tracing_pipeline.pipeline_no_null_shaders_flag.gpu.boxes.stride_5.offset_7.no_libs.chit_or_miss
+dEQP-VK.ray_tracing_pipeline.pipeline_no_null_shaders_flag.gpu.boxes.stride_5.offset_7.no_libs.any_or_isect_or_miss
+dEQP-VK.ray_tracing_pipeline.pipeline_no_null_shaders_flag.gpu.boxes.stride_5.offset_7.no_libs.any_or_isect
+dEQP-VK.ray_tracing_pipeline.pipeline_no_null_shaders_flag.gpu.boxes.stride_5.offset_7.no_libs.any
+dEQP-VK.ray_tracing_pipeline.pipeline_no_null_shaders_flag.gpu.boxes.stride_5.offset_7.no_libs.any_or_miss
+dEQP-VK.ray_tracing_pipeline.pipeline_no_null_shaders_flag.gpu.boxes.stride_5.offset_7.no_libs.any_or_chit_or_isect
+dEQP-VK.ray_tracing_pipeline.pipeline_no_null_shaders_flag.gpu.boxes.stride_5.offset_7.no_libs.any_or_chit
+dEQP-VK.ray_tracing_pipeline.pipeline_no_null_shaders_flag.gpu.boxes.stride_5.offset_7.no_libs.any_or_chit_or_miss
+dEQP-VK.ray_tracing_pipeline.pipeline_no_null_shaders_flag.gpu.tri_and_box.stride_3.offset_7.use_libs.any_or_chit_or_isect_or_miss
+dEQP-VK.ray_tracing_pipeline.pipeline_no_null_shaders_flag.gpu.tri_and_box.stride_3.offset_7.use_libs.chit_or_isect_or_miss
+dEQP-VK.ray_tracing_pipeline.pipeline_no_null_shaders_flag.gpu.tri_and_box.stride_3.offset_7.use_libs.isect_or_miss
+dEQP-VK.ray_tracing_pipeline.pipeline_no_null_shaders_flag.gpu.tri_and_box.stride_3.offset_7.use_libs.isect
+dEQP-VK.ray_tracing_pipeline.pipeline_no_null_shaders_flag.gpu.tri_and_box.stride_3.offset_7.use_libs.miss
+dEQP-VK.ray_tracing_pipeline.pipeline_no_null_shaders_flag.gpu.tri_and_box.stride_3.offset_7.use_libs.chit_or_isect
+dEQP-VK.ray_tracing_pipeline.pipeline_no_null_shaders_flag.gpu.tri_and_box.stride_3.offset_7.use_libs.chit
+dEQP-VK.ray_tracing_pipeline.pipeline_no_null_shaders_flag.gpu.tri_and_box.stride_3.offset_7.use_libs.chit_or_miss
+dEQP-VK.ray_tracing_pipeline.pipeline_no_null_shaders_flag.gpu.tri_and_box.stride_3.offset_7.use_libs.any_or_isect_or_miss
+dEQP-VK.ray_tracing_pipeline.pipeline_no_null_shaders_flag.gpu.tri_and_box.stride_3.offset_7.use_libs.any_or_isect
+dEQP-VK.ray_tracing_pipeline.pipeline_no_null_shaders_flag.gpu.tri_and_box.stride_3.offset_7.use_libs.any
+dEQP-VK.ray_tracing_pipeline.pipeline_no_null_shaders_flag.gpu.tri_and_box.stride_3.offset_7.use_libs.any_or_miss
+dEQP-VK.ray_tracing_pipeline.pipeline_no_null_shaders_flag.gpu.tri_and_box.stride_3.offset_7.use_libs.any_or_chit_or_isect
+dEQP-VK.ray_tracing_pipeline.pipeline_no_null_shaders_flag.gpu.tri_and_box.stride_3.offset_7.use_libs.any_or_chit
+dEQP-VK.ray_tracing_pipeline.pipeline_no_null_shaders_flag.gpu.tri_and_box.stride_3.offset_7.use_libs.any_or_chit_or_miss
+dEQP-VK.ray_tracing_pipeline.pipeline_no_null_shaders_flag.gpu.tri_and_box.stride_3.offset_7.no_libs.any_or_chit_or_isect_or_miss
+dEQP-VK.ray_tracing_pipeline.pipeline_no_null_shaders_flag.gpu.tri_and_box.stride_3.offset_7.no_libs.chit_or_isect_or_miss
+dEQP-VK.ray_tracing_pipeline.pipeline_no_null_shaders_flag.gpu.tri_and_box.stride_3.offset_7.no_libs.isect_or_miss
+dEQP-VK.ray_tracing_pipeline.pipeline_no_null_shaders_flag.gpu.tri_and_box.stride_3.offset_7.no_libs.isect
+dEQP-VK.ray_tracing_pipeline.pipeline_no_null_shaders_flag.gpu.tri_and_box.stride_3.offset_7.no_libs.miss
+dEQP-VK.ray_tracing_pipeline.pipeline_no_null_shaders_flag.gpu.tri_and_box.stride_3.offset_7.no_libs.chit_or_isect
+dEQP-VK.ray_tracing_pipeline.pipeline_no_null_shaders_flag.gpu.tri_and_box.stride_3.offset_7.no_libs.chit
+dEQP-VK.ray_tracing_pipeline.pipeline_no_null_shaders_flag.gpu.tri_and_box.stride_3.offset_7.no_libs.chit_or_miss
+dEQP-VK.ray_tracing_pipeline.pipeline_no_null_shaders_flag.gpu.tri_and_box.stride_3.offset_7.no_libs.any_or_isect_or_miss
+dEQP-VK.ray_tracing_pipeline.pipeline_no_null_shaders_flag.gpu.tri_and_box.stride_3.offset_7.no_libs.any_or_isect
+dEQP-VK.ray_tracing_pipeline.pipeline_no_null_shaders_flag.gpu.tri_and_box.stride_3.offset_7.no_libs.any
+dEQP-VK.ray_tracing_pipeline.pipeline_no_null_shaders_flag.gpu.tri_and_box.stride_3.offset_7.no_libs.any_or_miss
+dEQP-VK.ray_tracing_pipeline.pipeline_no_null_shaders_flag.gpu.tri_and_box.stride_3.offset_7.no_libs.any_or_chit_or_isect
+dEQP-VK.ray_tracing_pipeline.pipeline_no_null_shaders_flag.gpu.tri_and_box.stride_3.offset_7.no_libs.any_or_chit
+dEQP-VK.ray_tracing_pipeline.pipeline_no_null_shaders_flag.gpu.tri_and_box.stride_3.offset_7.no_libs.any_or_chit_or_miss
+dEQP-VK.ray_tracing_pipeline.pipeline_no_null_shaders_flag.gpu.tri_and_box.stride_5.offset_7.use_libs.any_or_chit_or_isect_or_miss
+dEQP-VK.ray_tracing_pipeline.pipeline_no_null_shaders_flag.gpu.tri_and_box.stride_5.offset_7.use_libs.chit_or_isect_or_miss
+dEQP-VK.ray_tracing_pipeline.pipeline_no_null_shaders_flag.gpu.tri_and_box.stride_5.offset_7.use_libs.isect_or_miss
+dEQP-VK.ray_tracing_pipeline.pipeline_no_null_shaders_flag.gpu.tri_and_box.stride_5.offset_7.use_libs.isect
+dEQP-VK.ray_tracing_pipeline.pipeline_no_null_shaders_flag.gpu.tri_and_box.stride_5.offset_7.use_libs.miss
+dEQP-VK.ray_tracing_pipeline.pipeline_no_null_shaders_flag.gpu.tri_and_box.stride_5.offset_7.use_libs.chit_or_isect
+dEQP-VK.ray_tracing_pipeline.pipeline_no_null_shaders_flag.gpu.tri_and_box.stride_5.offset_7.use_libs.chit
+dEQP-VK.ray_tracing_pipeline.pipeline_no_null_shaders_flag.gpu.tri_and_box.stride_5.offset_7.use_libs.chit_or_miss
+dEQP-VK.ray_tracing_pipeline.pipeline_no_null_shaders_flag.gpu.tri_and_box.stride_5.offset_7.use_libs.any_or_isect_or_miss
+dEQP-VK.ray_tracing_pipeline.pipeline_no_null_shaders_flag.gpu.tri_and_box.stride_5.offset_7.use_libs.any_or_isect
+dEQP-VK.ray_tracing_pipeline.pipeline_no_null_shaders_flag.gpu.tri_and_box.stride_5.offset_7.use_libs.any
+dEQP-VK.ray_tracing_pipeline.pipeline_no_null_shaders_flag.gpu.tri_and_box.stride_5.offset_7.use_libs.any_or_miss
+dEQP-VK.ray_tracing_pipeline.pipeline_no_null_shaders_flag.gpu.tri_and_box.stride_5.offset_7.use_libs.any_or_chit_or_isect
+dEQP-VK.ray_tracing_pipeline.pipeline_no_null_shaders_flag.gpu.tri_and_box.stride_5.offset_7.use_libs.any_or_chit
+dEQP-VK.ray_tracing_pipeline.pipeline_no_null_shaders_flag.gpu.tri_and_box.stride_5.offset_7.use_libs.any_or_chit_or_miss
+dEQP-VK.ray_tracing_pipeline.pipeline_no_null_shaders_flag.gpu.tri_and_box.stride_5.offset_7.no_libs.any_or_chit_or_isect_or_miss
+dEQP-VK.ray_tracing_pipeline.pipeline_no_null_shaders_flag.gpu.tri_and_box.stride_5.offset_7.no_libs.chit_or_isect_or_miss
+dEQP-VK.ray_tracing_pipeline.pipeline_no_null_shaders_flag.gpu.tri_and_box.stride_5.offset_7.no_libs.isect_or_miss
+dEQP-VK.ray_tracing_pipeline.pipeline_no_null_shaders_flag.gpu.tri_and_box.stride_5.offset_7.no_libs.isect
+dEQP-VK.ray_tracing_pipeline.pipeline_no_null_shaders_flag.gpu.tri_and_box.stride_5.offset_7.no_libs.miss
+dEQP-VK.ray_tracing_pipeline.pipeline_no_null_shaders_flag.gpu.tri_and_box.stride_5.offset_7.no_libs.chit_or_isect
+dEQP-VK.ray_tracing_pipeline.pipeline_no_null_shaders_flag.gpu.tri_and_box.stride_5.offset_7.no_libs.chit
+dEQP-VK.ray_tracing_pipeline.pipeline_no_null_shaders_flag.gpu.tri_and_box.stride_5.offset_7.no_libs.chit_or_miss
+dEQP-VK.ray_tracing_pipeline.pipeline_no_null_shaders_flag.gpu.tri_and_box.stride_5.offset_7.no_libs.any_or_isect_or_miss
+dEQP-VK.ray_tracing_pipeline.pipeline_no_null_shaders_flag.gpu.tri_and_box.stride_5.offset_7.no_libs.any_or_isect
+dEQP-VK.ray_tracing_pipeline.pipeline_no_null_shaders_flag.gpu.tri_and_box.stride_5.offset_7.no_libs.any
+dEQP-VK.ray_tracing_pipeline.pipeline_no_null_shaders_flag.gpu.tri_and_box.stride_5.offset_7.no_libs.any_or_miss
+dEQP-VK.ray_tracing_pipeline.pipeline_no_null_shaders_flag.gpu.tri_and_box.stride_5.offset_7.no_libs.any_or_chit_or_isect
+dEQP-VK.ray_tracing_pipeline.pipeline_no_null_shaders_flag.gpu.tri_and_box.stride_5.offset_7.no_libs.any_or_chit
+dEQP-VK.ray_tracing_pipeline.pipeline_no_null_shaders_flag.gpu.tri_and_box.stride_5.offset_7.no_libs.any_or_chit_or_miss
+dEQP-VK.ray_tracing_pipeline.pipeline_no_null_shaders_flag.cpu.triangles.stride_3.offset_7.use_libs.miss
+dEQP-VK.ray_tracing_pipeline.pipeline_no_null_shaders_flag.cpu.triangles.stride_3.offset_7.use_libs.chit
+dEQP-VK.ray_tracing_pipeline.pipeline_no_null_shaders_flag.cpu.triangles.stride_3.offset_7.use_libs.chit_or_miss
+dEQP-VK.ray_tracing_pipeline.pipeline_no_null_shaders_flag.cpu.triangles.stride_3.offset_7.use_libs.any
+dEQP-VK.ray_tracing_pipeline.pipeline_no_null_shaders_flag.cpu.triangles.stride_3.offset_7.use_libs.any_or_miss
+dEQP-VK.ray_tracing_pipeline.pipeline_no_null_shaders_flag.cpu.triangles.stride_3.offset_7.use_libs.any_or_chit
+dEQP-VK.ray_tracing_pipeline.pipeline_no_null_shaders_flag.cpu.triangles.stride_3.offset_7.use_libs.any_or_chit_or_miss
+dEQP-VK.ray_tracing_pipeline.pipeline_no_null_shaders_flag.cpu.triangles.stride_3.offset_7.no_libs.miss
+dEQP-VK.ray_tracing_pipeline.pipeline_no_null_shaders_flag.cpu.triangles.stride_3.offset_7.no_libs.chit
+dEQP-VK.ray_tracing_pipeline.pipeline_no_null_shaders_flag.cpu.triangles.stride_3.offset_7.no_libs.chit_or_miss
+dEQP-VK.ray_tracing_pipeline.pipeline_no_null_shaders_flag.cpu.triangles.stride_3.offset_7.no_libs.any
+dEQP-VK.ray_tracing_pipeline.pipeline_no_null_shaders_flag.cpu.triangles.stride_3.offset_7.no_libs.any_or_miss
+dEQP-VK.ray_tracing_pipeline.pipeline_no_null_shaders_flag.cpu.triangles.stride_3.offset_7.no_libs.any_or_chit
+dEQP-VK.ray_tracing_pipeline.pipeline_no_null_shaders_flag.cpu.triangles.stride_3.offset_7.no_libs.any_or_chit_or_miss
+dEQP-VK.ray_tracing_pipeline.pipeline_no_null_shaders_flag.cpu.triangles.stride_5.offset_7.use_libs.miss
+dEQP-VK.ray_tracing_pipeline.pipeline_no_null_shaders_flag.cpu.triangles.stride_5.offset_7.use_libs.chit
+dEQP-VK.ray_tracing_pipeline.pipeline_no_null_shaders_flag.cpu.triangles.stride_5.offset_7.use_libs.chit_or_miss
+dEQP-VK.ray_tracing_pipeline.pipeline_no_null_shaders_flag.cpu.triangles.stride_5.offset_7.use_libs.any
+dEQP-VK.ray_tracing_pipeline.pipeline_no_null_shaders_flag.cpu.triangles.stride_5.offset_7.use_libs.any_or_miss
+dEQP-VK.ray_tracing_pipeline.pipeline_no_null_shaders_flag.cpu.triangles.stride_5.offset_7.use_libs.any_or_chit
+dEQP-VK.ray_tracing_pipeline.pipeline_no_null_shaders_flag.cpu.triangles.stride_5.offset_7.use_libs.any_or_chit_or_miss
+dEQP-VK.ray_tracing_pipeline.pipeline_no_null_shaders_flag.cpu.triangles.stride_5.offset_7.no_libs.miss
+dEQP-VK.ray_tracing_pipeline.pipeline_no_null_shaders_flag.cpu.triangles.stride_5.offset_7.no_libs.chit
+dEQP-VK.ray_tracing_pipeline.pipeline_no_null_shaders_flag.cpu.triangles.stride_5.offset_7.no_libs.chit_or_miss
+dEQP-VK.ray_tracing_pipeline.pipeline_no_null_shaders_flag.cpu.triangles.stride_5.offset_7.no_libs.any
+dEQP-VK.ray_tracing_pipeline.pipeline_no_null_shaders_flag.cpu.triangles.stride_5.offset_7.no_libs.any_or_miss
+dEQP-VK.ray_tracing_pipeline.pipeline_no_null_shaders_flag.cpu.triangles.stride_5.offset_7.no_libs.any_or_chit
+dEQP-VK.ray_tracing_pipeline.pipeline_no_null_shaders_flag.cpu.triangles.stride_5.offset_7.no_libs.any_or_chit_or_miss
+dEQP-VK.ray_tracing_pipeline.pipeline_no_null_shaders_flag.cpu.boxes.stride_3.offset_7.use_libs.any_or_chit_or_isect_or_miss
+dEQP-VK.ray_tracing_pipeline.pipeline_no_null_shaders_flag.cpu.boxes.stride_3.offset_7.use_libs.chit_or_isect_or_miss
+dEQP-VK.ray_tracing_pipeline.pipeline_no_null_shaders_flag.cpu.boxes.stride_3.offset_7.use_libs.isect_or_miss
+dEQP-VK.ray_tracing_pipeline.pipeline_no_null_shaders_flag.cpu.boxes.stride_3.offset_7.use_libs.isect
+dEQP-VK.ray_tracing_pipeline.pipeline_no_null_shaders_flag.cpu.boxes.stride_3.offset_7.use_libs.miss
+dEQP-VK.ray_tracing_pipeline.pipeline_no_null_shaders_flag.cpu.boxes.stride_3.offset_7.use_libs.chit_or_isect
+dEQP-VK.ray_tracing_pipeline.pipeline_no_null_shaders_flag.cpu.boxes.stride_3.offset_7.use_libs.chit
+dEQP-VK.ray_tracing_pipeline.pipeline_no_null_shaders_flag.cpu.boxes.stride_3.offset_7.use_libs.chit_or_miss
+dEQP-VK.ray_tracing_pipeline.pipeline_no_null_shaders_flag.cpu.boxes.stride_3.offset_7.use_libs.any_or_isect_or_miss
+dEQP-VK.ray_tracing_pipeline.pipeline_no_null_shaders_flag.cpu.boxes.stride_3.offset_7.use_libs.any_or_isect
+dEQP-VK.ray_tracing_pipeline.pipeline_no_null_shaders_flag.cpu.boxes.stride_3.offset_7.use_libs.any
+dEQP-VK.ray_tracing_pipeline.pipeline_no_null_shaders_flag.cpu.boxes.stride_3.offset_7.use_libs.any_or_miss
+dEQP-VK.ray_tracing_pipeline.pipeline_no_null_shaders_flag.cpu.boxes.stride_3.offset_7.use_libs.any_or_chit_or_isect
+dEQP-VK.ray_tracing_pipeline.pipeline_no_null_shaders_flag.cpu.boxes.stride_3.offset_7.use_libs.any_or_chit
+dEQP-VK.ray_tracing_pipeline.pipeline_no_null_shaders_flag.cpu.boxes.stride_3.offset_7.use_libs.any_or_chit_or_miss
+dEQP-VK.ray_tracing_pipeline.pipeline_no_null_shaders_flag.cpu.boxes.stride_3.offset_7.no_libs.any_or_chit_or_isect_or_miss
+dEQP-VK.ray_tracing_pipeline.pipeline_no_null_shaders_flag.cpu.boxes.stride_3.offset_7.no_libs.chit_or_isect_or_miss
+dEQP-VK.ray_tracing_pipeline.pipeline_no_null_shaders_flag.cpu.boxes.stride_3.offset_7.no_libs.isect_or_miss
+dEQP-VK.ray_tracing_pipeline.pipeline_no_null_shaders_flag.cpu.boxes.stride_3.offset_7.no_libs.isect
+dEQP-VK.ray_tracing_pipeline.pipeline_no_null_shaders_flag.cpu.boxes.stride_3.offset_7.no_libs.miss
+dEQP-VK.ray_tracing_pipeline.pipeline_no_null_shaders_flag.cpu.boxes.stride_3.offset_7.no_libs.chit_or_isect
+dEQP-VK.ray_tracing_pipeline.pipeline_no_null_shaders_flag.cpu.boxes.stride_3.offset_7.no_libs.chit
+dEQP-VK.ray_tracing_pipeline.pipeline_no_null_shaders_flag.cpu.boxes.stride_3.offset_7.no_libs.chit_or_miss
+dEQP-VK.ray_tracing_pipeline.pipeline_no_null_shaders_flag.cpu.boxes.stride_3.offset_7.no_libs.any_or_isect_or_miss
+dEQP-VK.ray_tracing_pipeline.pipeline_no_null_shaders_flag.cpu.boxes.stride_3.offset_7.no_libs.any_or_isect
+dEQP-VK.ray_tracing_pipeline.pipeline_no_null_shaders_flag.cpu.boxes.stride_3.offset_7.no_libs.any
+dEQP-VK.ray_tracing_pipeline.pipeline_no_null_shaders_flag.cpu.boxes.stride_3.offset_7.no_libs.any_or_miss
+dEQP-VK.ray_tracing_pipeline.pipeline_no_null_shaders_flag.cpu.boxes.stride_3.offset_7.no_libs.any_or_chit_or_isect
+dEQP-VK.ray_tracing_pipeline.pipeline_no_null_shaders_flag.cpu.boxes.stride_3.offset_7.no_libs.any_or_chit
+dEQP-VK.ray_tracing_pipeline.pipeline_no_null_shaders_flag.cpu.boxes.stride_3.offset_7.no_libs.any_or_chit_or_miss
+dEQP-VK.ray_tracing_pipeline.pipeline_no_null_shaders_flag.cpu.boxes.stride_5.offset_7.use_libs.any_or_chit_or_isect_or_miss
+dEQP-VK.ray_tracing_pipeline.pipeline_no_null_shaders_flag.cpu.boxes.stride_5.offset_7.use_libs.chit_or_isect_or_miss
+dEQP-VK.ray_tracing_pipeline.pipeline_no_null_shaders_flag.cpu.boxes.stride_5.offset_7.use_libs.isect_or_miss
+dEQP-VK.ray_tracing_pipeline.pipeline_no_null_shaders_flag.cpu.boxes.stride_5.offset_7.use_libs.isect
+dEQP-VK.ray_tracing_pipeline.pipeline_no_null_shaders_flag.cpu.boxes.stride_5.offset_7.use_libs.miss
+dEQP-VK.ray_tracing_pipeline.pipeline_no_null_shaders_flag.cpu.boxes.stride_5.offset_7.use_libs.chit_or_isect
+dEQP-VK.ray_tracing_pipeline.pipeline_no_null_shaders_flag.cpu.boxes.stride_5.offset_7.use_libs.chit
+dEQP-VK.ray_tracing_pipeline.pipeline_no_null_shaders_flag.cpu.boxes.stride_5.offset_7.use_libs.chit_or_miss
+dEQP-VK.ray_tracing_pipeline.pipeline_no_null_shaders_flag.cpu.boxes.stride_5.offset_7.use_libs.any_or_isect_or_miss
+dEQP-VK.ray_tracing_pipeline.pipeline_no_null_shaders_flag.cpu.boxes.stride_5.offset_7.use_libs.any_or_isect
+dEQP-VK.ray_tracing_pipeline.pipeline_no_null_shaders_flag.cpu.boxes.stride_5.offset_7.use_libs.any
+dEQP-VK.ray_tracing_pipeline.pipeline_no_null_shaders_flag.cpu.boxes.stride_5.offset_7.use_libs.any_or_miss
+dEQP-VK.ray_tracing_pipeline.pipeline_no_null_shaders_flag.cpu.boxes.stride_5.offset_7.use_libs.any_or_chit_or_isect
+dEQP-VK.ray_tracing_pipeline.pipeline_no_null_shaders_flag.cpu.boxes.stride_5.offset_7.use_libs.any_or_chit
+dEQP-VK.ray_tracing_pipeline.pipeline_no_null_shaders_flag.cpu.boxes.stride_5.offset_7.use_libs.any_or_chit_or_miss
+dEQP-VK.ray_tracing_pipeline.pipeline_no_null_shaders_flag.cpu.boxes.stride_5.offset_7.no_libs.any_or_chit_or_isect_or_miss
+dEQP-VK.ray_tracing_pipeline.pipeline_no_null_shaders_flag.cpu.boxes.stride_5.offset_7.no_libs.chit_or_isect_or_miss
+dEQP-VK.ray_tracing_pipeline.pipeline_no_null_shaders_flag.cpu.boxes.stride_5.offset_7.no_libs.isect_or_miss
+dEQP-VK.ray_tracing_pipeline.pipeline_no_null_shaders_flag.cpu.boxes.stride_5.offset_7.no_libs.isect
+dEQP-VK.ray_tracing_pipeline.pipeline_no_null_shaders_flag.cpu.boxes.stride_5.offset_7.no_libs.miss
+dEQP-VK.ray_tracing_pipeline.pipeline_no_null_shaders_flag.cpu.boxes.stride_5.offset_7.no_libs.chit_or_isect
+dEQP-VK.ray_tracing_pipeline.pipeline_no_null_shaders_flag.cpu.boxes.stride_5.offset_7.no_libs.chit
+dEQP-VK.ray_tracing_pipeline.pipeline_no_null_shaders_flag.cpu.boxes.stride_5.offset_7.no_libs.chit_or_miss
+dEQP-VK.ray_tracing_pipeline.pipeline_no_null_shaders_flag.cpu.boxes.stride_5.offset_7.no_libs.any_or_isect_or_miss
+dEQP-VK.ray_tracing_pipeline.pipeline_no_null_shaders_flag.cpu.boxes.stride_5.offset_7.no_libs.any_or_isect
+dEQP-VK.ray_tracing_pipeline.pipeline_no_null_shaders_flag.cpu.boxes.stride_5.offset_7.no_libs.any
+dEQP-VK.ray_tracing_pipeline.pipeline_no_null_shaders_flag.cpu.boxes.stride_5.offset_7.no_libs.any_or_miss
+dEQP-VK.ray_tracing_pipeline.pipeline_no_null_shaders_flag.cpu.boxes.stride_5.offset_7.no_libs.any_or_chit_or_isect
+dEQP-VK.ray_tracing_pipeline.pipeline_no_null_shaders_flag.cpu.boxes.stride_5.offset_7.no_libs.any_or_chit
+dEQP-VK.ray_tracing_pipeline.pipeline_no_null_shaders_flag.cpu.boxes.stride_5.offset_7.no_libs.any_or_chit_or_miss
+dEQP-VK.ray_tracing_pipeline.pipeline_no_null_shaders_flag.cpu.tri_and_box.stride_3.offset_7.use_libs.any_or_chit_or_isect_or_miss
+dEQP-VK.ray_tracing_pipeline.pipeline_no_null_shaders_flag.cpu.tri_and_box.stride_3.offset_7.use_libs.chit_or_isect_or_miss
+dEQP-VK.ray_tracing_pipeline.pipeline_no_null_shaders_flag.cpu.tri_and_box.stride_3.offset_7.use_libs.isect_or_miss
+dEQP-VK.ray_tracing_pipeline.pipeline_no_null_shaders_flag.cpu.tri_and_box.stride_3.offset_7.use_libs.isect
+dEQP-VK.ray_tracing_pipeline.pipeline_no_null_shaders_flag.cpu.tri_and_box.stride_3.offset_7.use_libs.miss
+dEQP-VK.ray_tracing_pipeline.pipeline_no_null_shaders_flag.cpu.tri_and_box.stride_3.offset_7.use_libs.chit_or_isect
+dEQP-VK.ray_tracing_pipeline.pipeline_no_null_shaders_flag.cpu.tri_and_box.stride_3.offset_7.use_libs.chit
+dEQP-VK.ray_tracing_pipeline.pipeline_no_null_shaders_flag.cpu.tri_and_box.stride_3.offset_7.use_libs.chit_or_miss
+dEQP-VK.ray_tracing_pipeline.pipeline_no_null_shaders_flag.cpu.tri_and_box.stride_3.offset_7.use_libs.any_or_isect_or_miss
+dEQP-VK.ray_tracing_pipeline.pipeline_no_null_shaders_flag.cpu.tri_and_box.stride_3.offset_7.use_libs.any_or_isect
+dEQP-VK.ray_tracing_pipeline.pipeline_no_null_shaders_flag.cpu.tri_and_box.stride_3.offset_7.use_libs.any
+dEQP-VK.ray_tracing_pipeline.pipeline_no_null_shaders_flag.cpu.tri_and_box.stride_3.offset_7.use_libs.any_or_miss
+dEQP-VK.ray_tracing_pipeline.pipeline_no_null_shaders_flag.cpu.tri_and_box.stride_3.offset_7.use_libs.any_or_chit_or_isect
+dEQP-VK.ray_tracing_pipeline.pipeline_no_null_shaders_flag.cpu.tri_and_box.stride_3.offset_7.use_libs.any_or_chit
+dEQP-VK.ray_tracing_pipeline.pipeline_no_null_shaders_flag.cpu.tri_and_box.stride_3.offset_7.use_libs.any_or_chit_or_miss
+dEQP-VK.ray_tracing_pipeline.pipeline_no_null_shaders_flag.cpu.tri_and_box.stride_3.offset_7.no_libs.any_or_chit_or_isect_or_miss
+dEQP-VK.ray_tracing_pipeline.pipeline_no_null_shaders_flag.cpu.tri_and_box.stride_3.offset_7.no_libs.chit_or_isect_or_miss
+dEQP-VK.ray_tracing_pipeline.pipeline_no_null_shaders_flag.cpu.tri_and_box.stride_3.offset_7.no_libs.isect_or_miss
+dEQP-VK.ray_tracing_pipeline.pipeline_no_null_shaders_flag.cpu.tri_and_box.stride_3.offset_7.no_libs.isect
+dEQP-VK.ray_tracing_pipeline.pipeline_no_null_shaders_flag.cpu.tri_and_box.stride_3.offset_7.no_libs.miss
+dEQP-VK.ray_tracing_pipeline.pipeline_no_null_shaders_flag.cpu.tri_and_box.stride_3.offset_7.no_libs.chit_or_isect
+dEQP-VK.ray_tracing_pipeline.pipeline_no_null_shaders_flag.cpu.tri_and_box.stride_3.offset_7.no_libs.chit
+dEQP-VK.ray_tracing_pipeline.pipeline_no_null_shaders_flag.cpu.tri_and_box.stride_3.offset_7.no_libs.chit_or_miss
+dEQP-VK.ray_tracing_pipeline.pipeline_no_null_shaders_flag.cpu.tri_and_box.stride_3.offset_7.no_libs.any_or_isect_or_miss
+dEQP-VK.ray_tracing_pipeline.pipeline_no_null_shaders_flag.cpu.tri_and_box.stride_3.offset_7.no_libs.any_or_isect
+dEQP-VK.ray_tracing_pipeline.pipeline_no_null_shaders_flag.cpu.tri_and_box.stride_3.offset_7.no_libs.any
+dEQP-VK.ray_tracing_pipeline.pipeline_no_null_shaders_flag.cpu.tri_and_box.stride_3.offset_7.no_libs.any_or_miss
+dEQP-VK.ray_tracing_pipeline.pipeline_no_null_shaders_flag.cpu.tri_and_box.stride_3.offset_7.no_libs.any_or_chit_or_isect
+dEQP-VK.ray_tracing_pipeline.pipeline_no_null_shaders_flag.cpu.tri_and_box.stride_3.offset_7.no_libs.any_or_chit
+dEQP-VK.ray_tracing_pipeline.pipeline_no_null_shaders_flag.cpu.tri_and_box.stride_3.offset_7.no_libs.any_or_chit_or_miss
+dEQP-VK.ray_tracing_pipeline.pipeline_no_null_shaders_flag.cpu.tri_and_box.stride_5.offset_7.use_libs.any_or_chit_or_isect_or_miss
+dEQP-VK.ray_tracing_pipeline.pipeline_no_null_shaders_flag.cpu.tri_and_box.stride_5.offset_7.use_libs.chit_or_isect_or_miss
+dEQP-VK.ray_tracing_pipeline.pipeline_no_null_shaders_flag.cpu.tri_and_box.stride_5.offset_7.use_libs.isect_or_miss
+dEQP-VK.ray_tracing_pipeline.pipeline_no_null_shaders_flag.cpu.tri_and_box.stride_5.offset_7.use_libs.isect
+dEQP-VK.ray_tracing_pipeline.pipeline_no_null_shaders_flag.cpu.tri_and_box.stride_5.offset_7.use_libs.miss
+dEQP-VK.ray_tracing_pipeline.pipeline_no_null_shaders_flag.cpu.tri_and_box.stride_5.offset_7.use_libs.chit_or_isect
+dEQP-VK.ray_tracing_pipeline.pipeline_no_null_shaders_flag.cpu.tri_and_box.stride_5.offset_7.use_libs.chit
+dEQP-VK.ray_tracing_pipeline.pipeline_no_null_shaders_flag.cpu.tri_and_box.stride_5.offset_7.use_libs.chit_or_miss
+dEQP-VK.ray_tracing_pipeline.pipeline_no_null_shaders_flag.cpu.tri_and_box.stride_5.offset_7.use_libs.any_or_isect_or_miss
+dEQP-VK.ray_tracing_pipeline.pipeline_no_null_shaders_flag.cpu.tri_and_box.stride_5.offset_7.use_libs.any_or_isect
+dEQP-VK.ray_tracing_pipeline.pipeline_no_null_shaders_flag.cpu.tri_and_box.stride_5.offset_7.use_libs.any
+dEQP-VK.ray_tracing_pipeline.pipeline_no_null_shaders_flag.cpu.tri_and_box.stride_5.offset_7.use_libs.any_or_miss
+dEQP-VK.ray_tracing_pipeline.pipeline_no_null_shaders_flag.cpu.tri_and_box.stride_5.offset_7.use_libs.any_or_chit_or_isect
+dEQP-VK.ray_tracing_pipeline.pipeline_no_null_shaders_flag.cpu.tri_and_box.stride_5.offset_7.use_libs.any_or_chit
+dEQP-VK.ray_tracing_pipeline.pipeline_no_null_shaders_flag.cpu.tri_and_box.stride_5.offset_7.use_libs.any_or_chit_or_miss
+dEQP-VK.ray_tracing_pipeline.pipeline_no_null_shaders_flag.cpu.tri_and_box.stride_5.offset_7.no_libs.any_or_chit_or_isect_or_miss
+dEQP-VK.ray_tracing_pipeline.pipeline_no_null_shaders_flag.cpu.tri_and_box.stride_5.offset_7.no_libs.chit_or_isect_or_miss
+dEQP-VK.ray_tracing_pipeline.pipeline_no_null_shaders_flag.cpu.tri_and_box.stride_5.offset_7.no_libs.isect_or_miss
+dEQP-VK.ray_tracing_pipeline.pipeline_no_null_shaders_flag.cpu.tri_and_box.stride_5.offset_7.no_libs.isect
+dEQP-VK.ray_tracing_pipeline.pipeline_no_null_shaders_flag.cpu.tri_and_box.stride_5.offset_7.no_libs.miss
+dEQP-VK.ray_tracing_pipeline.pipeline_no_null_shaders_flag.cpu.tri_and_box.stride_5.offset_7.no_libs.chit_or_isect
+dEQP-VK.ray_tracing_pipeline.pipeline_no_null_shaders_flag.cpu.tri_and_box.stride_5.offset_7.no_libs.chit
+dEQP-VK.ray_tracing_pipeline.pipeline_no_null_shaders_flag.cpu.tri_and_box.stride_5.offset_7.no_libs.chit_or_miss
+dEQP-VK.ray_tracing_pipeline.pipeline_no_null_shaders_flag.cpu.tri_and_box.stride_5.offset_7.no_libs.any_or_isect_or_miss
+dEQP-VK.ray_tracing_pipeline.pipeline_no_null_shaders_flag.cpu.tri_and_box.stride_5.offset_7.no_libs.any_or_isect
+dEQP-VK.ray_tracing_pipeline.pipeline_no_null_shaders_flag.cpu.tri_and_box.stride_5.offset_7.no_libs.any
+dEQP-VK.ray_tracing_pipeline.pipeline_no_null_shaders_flag.cpu.tri_and_box.stride_5.offset_7.no_libs.any_or_miss
+dEQP-VK.ray_tracing_pipeline.pipeline_no_null_shaders_flag.cpu.tri_and_box.stride_5.offset_7.no_libs.any_or_chit_or_isect
+dEQP-VK.ray_tracing_pipeline.pipeline_no_null_shaders_flag.cpu.tri_and_box.stride_5.offset_7.no_libs.any_or_chit
+dEQP-VK.ray_tracing_pipeline.pipeline_no_null_shaders_flag.cpu.tri_and_box.stride_5.offset_7.no_libs.any_or_chit_or_miss