Robust buffer access through variable pointers
authorMarcin Rogucki <marcin.rogucki@mobica.com>
Tue, 17 Oct 2017 14:56:49 +0000 (16:56 +0200)
committerAlexander Galazin <Alexander.Galazin@arm.com>
Thu, 1 Mar 2018 15:48:04 +0000 (10:48 -0500)
Components: Vulkan

VK-GL-CTS issue: 418

Adds:
dEQP-VK.robustness.buffer_access.through_pointers.graphics.*
dEQP-VK.robustness.buffer_access.through_pointers.compute.*

Change-Id: I79d261a13fd2efc01da4f4d5984631d26d2b5cdd

AndroidGen.mk
android/cts/master/vk-master.txt
external/vulkancts/modules/vulkan/CMakeLists.txt
external/vulkancts/modules/vulkan/robustness/CMakeLists.txt
external/vulkancts/modules/vulkan/robustness/vktRobustBufferAccessWithVariablePointersTests.cpp [new file with mode: 0644]
external/vulkancts/modules/vulkan/robustness/vktRobustBufferAccessWithVariablePointersTests.hpp [new file with mode: 0644]
external/vulkancts/modules/vulkan/robustness/vktRobustnessTests.cpp
external/vulkancts/mustpass/1.1.2/vk-default-no-waivers.txt
external/vulkancts/mustpass/1.1.2/vk-default.txt
framework/delibs/debase/deInt32.h

index 106ddfb..e732328 100644 (file)
@@ -201,6 +201,7 @@ LOCAL_SRC_FILES := \
        external/vulkancts/modules/vulkan/renderpass/vktRenderPassSampleReadTests.cpp \
        external/vulkancts/modules/vulkan/renderpass/vktRenderPassSparseRenderTargetTests.cpp \
        external/vulkancts/modules/vulkan/renderpass/vktRenderPassTests.cpp \
+       external/vulkancts/modules/vulkan/robustness/vktRobustBufferAccessWithVariablePointersTests.cpp \
        external/vulkancts/modules/vulkan/robustness/vktRobustnessBufferAccessTests.cpp \
        external/vulkancts/modules/vulkan/robustness/vktRobustnessTests.cpp \
        external/vulkancts/modules/vulkan/robustness/vktRobustnessUtil.cpp \
index 525ccd2..3376b59 100755 (executable)
@@ -286407,6 +286407,366 @@ dEQP-VK.robustness.buffer_access.compute.texel_copy.a2b10g10r10_unorm_pack32.oob
 dEQP-VK.robustness.buffer_access.compute.texel_copy.out_of_alloc.oob_uniform_read
 dEQP-VK.robustness.buffer_access.compute.texel_copy.out_of_alloc.oob_storage_read
 dEQP-VK.robustness.buffer_access.compute.texel_copy.out_of_alloc.oob_storage_write
+dEQP-VK.robustness.buffer_access.through_pointers.graphics.reads.vertex.1B_in_memory_with_vec4_s32
+dEQP-VK.robustness.buffer_access.through_pointers.graphics.reads.vertex.1B_out_of_memory_with_vec4_s32
+dEQP-VK.robustness.buffer_access.through_pointers.graphics.reads.vertex.3B_in_memory_with_vec4_s32
+dEQP-VK.robustness.buffer_access.through_pointers.graphics.reads.vertex.3B_out_of_memory_with_vec4_s32
+dEQP-VK.robustness.buffer_access.through_pointers.graphics.reads.vertex.4B_in_memory_with_vec4_s32
+dEQP-VK.robustness.buffer_access.through_pointers.graphics.reads.vertex.4B_out_of_memory_with_vec4_s32
+dEQP-VK.robustness.buffer_access.through_pointers.graphics.reads.vertex.16B_in_memory_with_vec4_s32
+dEQP-VK.robustness.buffer_access.through_pointers.graphics.reads.vertex.16B_out_of_memory_with_vec4_s32
+dEQP-VK.robustness.buffer_access.through_pointers.graphics.reads.vertex.32B_in_memory_with_vec4_s32
+dEQP-VK.robustness.buffer_access.through_pointers.graphics.reads.vertex.32B_out_of_memory_with_vec4_s32
+dEQP-VK.robustness.buffer_access.through_pointers.graphics.reads.vertex.1B_in_memory_with_vec4_u32
+dEQP-VK.robustness.buffer_access.through_pointers.graphics.reads.vertex.1B_out_of_memory_with_vec4_u32
+dEQP-VK.robustness.buffer_access.through_pointers.graphics.reads.vertex.3B_in_memory_with_vec4_u32
+dEQP-VK.robustness.buffer_access.through_pointers.graphics.reads.vertex.3B_out_of_memory_with_vec4_u32
+dEQP-VK.robustness.buffer_access.through_pointers.graphics.reads.vertex.4B_in_memory_with_vec4_u32
+dEQP-VK.robustness.buffer_access.through_pointers.graphics.reads.vertex.4B_out_of_memory_with_vec4_u32
+dEQP-VK.robustness.buffer_access.through_pointers.graphics.reads.vertex.16B_in_memory_with_vec4_u32
+dEQP-VK.robustness.buffer_access.through_pointers.graphics.reads.vertex.16B_out_of_memory_with_vec4_u32
+dEQP-VK.robustness.buffer_access.through_pointers.graphics.reads.vertex.32B_in_memory_with_vec4_u32
+dEQP-VK.robustness.buffer_access.through_pointers.graphics.reads.vertex.32B_out_of_memory_with_vec4_u32
+dEQP-VK.robustness.buffer_access.through_pointers.graphics.reads.vertex.1B_in_memory_with_vec4_f32
+dEQP-VK.robustness.buffer_access.through_pointers.graphics.reads.vertex.1B_out_of_memory_with_vec4_f32
+dEQP-VK.robustness.buffer_access.through_pointers.graphics.reads.vertex.3B_in_memory_with_vec4_f32
+dEQP-VK.robustness.buffer_access.through_pointers.graphics.reads.vertex.3B_out_of_memory_with_vec4_f32
+dEQP-VK.robustness.buffer_access.through_pointers.graphics.reads.vertex.4B_in_memory_with_vec4_f32
+dEQP-VK.robustness.buffer_access.through_pointers.graphics.reads.vertex.4B_out_of_memory_with_vec4_f32
+dEQP-VK.robustness.buffer_access.through_pointers.graphics.reads.vertex.16B_in_memory_with_vec4_f32
+dEQP-VK.robustness.buffer_access.through_pointers.graphics.reads.vertex.16B_out_of_memory_with_vec4_f32
+dEQP-VK.robustness.buffer_access.through_pointers.graphics.reads.vertex.32B_in_memory_with_vec4_f32
+dEQP-VK.robustness.buffer_access.through_pointers.graphics.reads.vertex.32B_out_of_memory_with_vec4_f32
+dEQP-VK.robustness.buffer_access.through_pointers.graphics.reads.vertex.1B_in_memory_with_scalar_s32
+dEQP-VK.robustness.buffer_access.through_pointers.graphics.reads.vertex.1B_out_of_memory_with_scalar_s32
+dEQP-VK.robustness.buffer_access.through_pointers.graphics.reads.vertex.3B_in_memory_with_scalar_s32
+dEQP-VK.robustness.buffer_access.through_pointers.graphics.reads.vertex.3B_out_of_memory_with_scalar_s32
+dEQP-VK.robustness.buffer_access.through_pointers.graphics.reads.vertex.4B_in_memory_with_scalar_s32
+dEQP-VK.robustness.buffer_access.through_pointers.graphics.reads.vertex.4B_out_of_memory_with_scalar_s32
+dEQP-VK.robustness.buffer_access.through_pointers.graphics.reads.vertex.16B_in_memory_with_scalar_s32
+dEQP-VK.robustness.buffer_access.through_pointers.graphics.reads.vertex.16B_out_of_memory_with_scalar_s32
+dEQP-VK.robustness.buffer_access.through_pointers.graphics.reads.vertex.32B_in_memory_with_scalar_s32
+dEQP-VK.robustness.buffer_access.through_pointers.graphics.reads.vertex.32B_out_of_memory_with_scalar_s32
+dEQP-VK.robustness.buffer_access.through_pointers.graphics.reads.vertex.1B_in_memory_with_scalar_u32
+dEQP-VK.robustness.buffer_access.through_pointers.graphics.reads.vertex.1B_out_of_memory_with_scalar_u32
+dEQP-VK.robustness.buffer_access.through_pointers.graphics.reads.vertex.3B_in_memory_with_scalar_u32
+dEQP-VK.robustness.buffer_access.through_pointers.graphics.reads.vertex.3B_out_of_memory_with_scalar_u32
+dEQP-VK.robustness.buffer_access.through_pointers.graphics.reads.vertex.4B_in_memory_with_scalar_u32
+dEQP-VK.robustness.buffer_access.through_pointers.graphics.reads.vertex.4B_out_of_memory_with_scalar_u32
+dEQP-VK.robustness.buffer_access.through_pointers.graphics.reads.vertex.16B_in_memory_with_scalar_u32
+dEQP-VK.robustness.buffer_access.through_pointers.graphics.reads.vertex.16B_out_of_memory_with_scalar_u32
+dEQP-VK.robustness.buffer_access.through_pointers.graphics.reads.vertex.32B_in_memory_with_scalar_u32
+dEQP-VK.robustness.buffer_access.through_pointers.graphics.reads.vertex.32B_out_of_memory_with_scalar_u32
+dEQP-VK.robustness.buffer_access.through_pointers.graphics.reads.vertex.1B_in_memory_with_scalar_f32
+dEQP-VK.robustness.buffer_access.through_pointers.graphics.reads.vertex.1B_out_of_memory_with_scalar_f32
+dEQP-VK.robustness.buffer_access.through_pointers.graphics.reads.vertex.3B_in_memory_with_scalar_f32
+dEQP-VK.robustness.buffer_access.through_pointers.graphics.reads.vertex.3B_out_of_memory_with_scalar_f32
+dEQP-VK.robustness.buffer_access.through_pointers.graphics.reads.vertex.4B_in_memory_with_scalar_f32
+dEQP-VK.robustness.buffer_access.through_pointers.graphics.reads.vertex.4B_out_of_memory_with_scalar_f32
+dEQP-VK.robustness.buffer_access.through_pointers.graphics.reads.vertex.16B_in_memory_with_scalar_f32
+dEQP-VK.robustness.buffer_access.through_pointers.graphics.reads.vertex.16B_out_of_memory_with_scalar_f32
+dEQP-VK.robustness.buffer_access.through_pointers.graphics.reads.vertex.32B_in_memory_with_scalar_f32
+dEQP-VK.robustness.buffer_access.through_pointers.graphics.reads.vertex.32B_out_of_memory_with_scalar_f32
+dEQP-VK.robustness.buffer_access.through_pointers.graphics.reads.fragment.1B_in_memory_with_vec4_s32
+dEQP-VK.robustness.buffer_access.through_pointers.graphics.reads.fragment.1B_out_of_memory_with_vec4_s32
+dEQP-VK.robustness.buffer_access.through_pointers.graphics.reads.fragment.3B_in_memory_with_vec4_s32
+dEQP-VK.robustness.buffer_access.through_pointers.graphics.reads.fragment.3B_out_of_memory_with_vec4_s32
+dEQP-VK.robustness.buffer_access.through_pointers.graphics.reads.fragment.4B_in_memory_with_vec4_s32
+dEQP-VK.robustness.buffer_access.through_pointers.graphics.reads.fragment.4B_out_of_memory_with_vec4_s32
+dEQP-VK.robustness.buffer_access.through_pointers.graphics.reads.fragment.16B_in_memory_with_vec4_s32
+dEQP-VK.robustness.buffer_access.through_pointers.graphics.reads.fragment.16B_out_of_memory_with_vec4_s32
+dEQP-VK.robustness.buffer_access.through_pointers.graphics.reads.fragment.32B_in_memory_with_vec4_s32
+dEQP-VK.robustness.buffer_access.through_pointers.graphics.reads.fragment.32B_out_of_memory_with_vec4_s32
+dEQP-VK.robustness.buffer_access.through_pointers.graphics.reads.fragment.1B_in_memory_with_vec4_u32
+dEQP-VK.robustness.buffer_access.through_pointers.graphics.reads.fragment.1B_out_of_memory_with_vec4_u32
+dEQP-VK.robustness.buffer_access.through_pointers.graphics.reads.fragment.3B_in_memory_with_vec4_u32
+dEQP-VK.robustness.buffer_access.through_pointers.graphics.reads.fragment.3B_out_of_memory_with_vec4_u32
+dEQP-VK.robustness.buffer_access.through_pointers.graphics.reads.fragment.4B_in_memory_with_vec4_u32
+dEQP-VK.robustness.buffer_access.through_pointers.graphics.reads.fragment.4B_out_of_memory_with_vec4_u32
+dEQP-VK.robustness.buffer_access.through_pointers.graphics.reads.fragment.16B_in_memory_with_vec4_u32
+dEQP-VK.robustness.buffer_access.through_pointers.graphics.reads.fragment.16B_out_of_memory_with_vec4_u32
+dEQP-VK.robustness.buffer_access.through_pointers.graphics.reads.fragment.32B_in_memory_with_vec4_u32
+dEQP-VK.robustness.buffer_access.through_pointers.graphics.reads.fragment.32B_out_of_memory_with_vec4_u32
+dEQP-VK.robustness.buffer_access.through_pointers.graphics.reads.fragment.1B_in_memory_with_vec4_f32
+dEQP-VK.robustness.buffer_access.through_pointers.graphics.reads.fragment.1B_out_of_memory_with_vec4_f32
+dEQP-VK.robustness.buffer_access.through_pointers.graphics.reads.fragment.3B_in_memory_with_vec4_f32
+dEQP-VK.robustness.buffer_access.through_pointers.graphics.reads.fragment.3B_out_of_memory_with_vec4_f32
+dEQP-VK.robustness.buffer_access.through_pointers.graphics.reads.fragment.4B_in_memory_with_vec4_f32
+dEQP-VK.robustness.buffer_access.through_pointers.graphics.reads.fragment.4B_out_of_memory_with_vec4_f32
+dEQP-VK.robustness.buffer_access.through_pointers.graphics.reads.fragment.16B_in_memory_with_vec4_f32
+dEQP-VK.robustness.buffer_access.through_pointers.graphics.reads.fragment.16B_out_of_memory_with_vec4_f32
+dEQP-VK.robustness.buffer_access.through_pointers.graphics.reads.fragment.32B_in_memory_with_vec4_f32
+dEQP-VK.robustness.buffer_access.through_pointers.graphics.reads.fragment.32B_out_of_memory_with_vec4_f32
+dEQP-VK.robustness.buffer_access.through_pointers.graphics.reads.fragment.1B_in_memory_with_scalar_s32
+dEQP-VK.robustness.buffer_access.through_pointers.graphics.reads.fragment.1B_out_of_memory_with_scalar_s32
+dEQP-VK.robustness.buffer_access.through_pointers.graphics.reads.fragment.3B_in_memory_with_scalar_s32
+dEQP-VK.robustness.buffer_access.through_pointers.graphics.reads.fragment.3B_out_of_memory_with_scalar_s32
+dEQP-VK.robustness.buffer_access.through_pointers.graphics.reads.fragment.4B_in_memory_with_scalar_s32
+dEQP-VK.robustness.buffer_access.through_pointers.graphics.reads.fragment.4B_out_of_memory_with_scalar_s32
+dEQP-VK.robustness.buffer_access.through_pointers.graphics.reads.fragment.16B_in_memory_with_scalar_s32
+dEQP-VK.robustness.buffer_access.through_pointers.graphics.reads.fragment.16B_out_of_memory_with_scalar_s32
+dEQP-VK.robustness.buffer_access.through_pointers.graphics.reads.fragment.32B_in_memory_with_scalar_s32
+dEQP-VK.robustness.buffer_access.through_pointers.graphics.reads.fragment.32B_out_of_memory_with_scalar_s32
+dEQP-VK.robustness.buffer_access.through_pointers.graphics.reads.fragment.1B_in_memory_with_scalar_u32
+dEQP-VK.robustness.buffer_access.through_pointers.graphics.reads.fragment.1B_out_of_memory_with_scalar_u32
+dEQP-VK.robustness.buffer_access.through_pointers.graphics.reads.fragment.3B_in_memory_with_scalar_u32
+dEQP-VK.robustness.buffer_access.through_pointers.graphics.reads.fragment.3B_out_of_memory_with_scalar_u32
+dEQP-VK.robustness.buffer_access.through_pointers.graphics.reads.fragment.4B_in_memory_with_scalar_u32
+dEQP-VK.robustness.buffer_access.through_pointers.graphics.reads.fragment.4B_out_of_memory_with_scalar_u32
+dEQP-VK.robustness.buffer_access.through_pointers.graphics.reads.fragment.16B_in_memory_with_scalar_u32
+dEQP-VK.robustness.buffer_access.through_pointers.graphics.reads.fragment.16B_out_of_memory_with_scalar_u32
+dEQP-VK.robustness.buffer_access.through_pointers.graphics.reads.fragment.32B_in_memory_with_scalar_u32
+dEQP-VK.robustness.buffer_access.through_pointers.graphics.reads.fragment.32B_out_of_memory_with_scalar_u32
+dEQP-VK.robustness.buffer_access.through_pointers.graphics.reads.fragment.1B_in_memory_with_scalar_f32
+dEQP-VK.robustness.buffer_access.through_pointers.graphics.reads.fragment.1B_out_of_memory_with_scalar_f32
+dEQP-VK.robustness.buffer_access.through_pointers.graphics.reads.fragment.3B_in_memory_with_scalar_f32
+dEQP-VK.robustness.buffer_access.through_pointers.graphics.reads.fragment.3B_out_of_memory_with_scalar_f32
+dEQP-VK.robustness.buffer_access.through_pointers.graphics.reads.fragment.4B_in_memory_with_scalar_f32
+dEQP-VK.robustness.buffer_access.through_pointers.graphics.reads.fragment.4B_out_of_memory_with_scalar_f32
+dEQP-VK.robustness.buffer_access.through_pointers.graphics.reads.fragment.16B_in_memory_with_scalar_f32
+dEQP-VK.robustness.buffer_access.through_pointers.graphics.reads.fragment.16B_out_of_memory_with_scalar_f32
+dEQP-VK.robustness.buffer_access.through_pointers.graphics.reads.fragment.32B_in_memory_with_scalar_f32
+dEQP-VK.robustness.buffer_access.through_pointers.graphics.reads.fragment.32B_out_of_memory_with_scalar_f32
+dEQP-VK.robustness.buffer_access.through_pointers.graphics.writes.vertex.1B_in_memory_with_vec4_s32
+dEQP-VK.robustness.buffer_access.through_pointers.graphics.writes.vertex.1B_out_of_memory_with_vec4_s32
+dEQP-VK.robustness.buffer_access.through_pointers.graphics.writes.vertex.3B_in_memory_with_vec4_s32
+dEQP-VK.robustness.buffer_access.through_pointers.graphics.writes.vertex.3B_out_of_memory_with_vec4_s32
+dEQP-VK.robustness.buffer_access.through_pointers.graphics.writes.vertex.4B_in_memory_with_vec4_s32
+dEQP-VK.robustness.buffer_access.through_pointers.graphics.writes.vertex.4B_out_of_memory_with_vec4_s32
+dEQP-VK.robustness.buffer_access.through_pointers.graphics.writes.vertex.16B_in_memory_with_vec4_s32
+dEQP-VK.robustness.buffer_access.through_pointers.graphics.writes.vertex.16B_out_of_memory_with_vec4_s32
+dEQP-VK.robustness.buffer_access.through_pointers.graphics.writes.vertex.32B_in_memory_with_vec4_s32
+dEQP-VK.robustness.buffer_access.through_pointers.graphics.writes.vertex.32B_out_of_memory_with_vec4_s32
+dEQP-VK.robustness.buffer_access.through_pointers.graphics.writes.vertex.1B_in_memory_with_vec4_u32
+dEQP-VK.robustness.buffer_access.through_pointers.graphics.writes.vertex.1B_out_of_memory_with_vec4_u32
+dEQP-VK.robustness.buffer_access.through_pointers.graphics.writes.vertex.3B_in_memory_with_vec4_u32
+dEQP-VK.robustness.buffer_access.through_pointers.graphics.writes.vertex.3B_out_of_memory_with_vec4_u32
+dEQP-VK.robustness.buffer_access.through_pointers.graphics.writes.vertex.4B_in_memory_with_vec4_u32
+dEQP-VK.robustness.buffer_access.through_pointers.graphics.writes.vertex.4B_out_of_memory_with_vec4_u32
+dEQP-VK.robustness.buffer_access.through_pointers.graphics.writes.vertex.16B_in_memory_with_vec4_u32
+dEQP-VK.robustness.buffer_access.through_pointers.graphics.writes.vertex.16B_out_of_memory_with_vec4_u32
+dEQP-VK.robustness.buffer_access.through_pointers.graphics.writes.vertex.32B_in_memory_with_vec4_u32
+dEQP-VK.robustness.buffer_access.through_pointers.graphics.writes.vertex.32B_out_of_memory_with_vec4_u32
+dEQP-VK.robustness.buffer_access.through_pointers.graphics.writes.vertex.1B_in_memory_with_vec4_f32
+dEQP-VK.robustness.buffer_access.through_pointers.graphics.writes.vertex.1B_out_of_memory_with_vec4_f32
+dEQP-VK.robustness.buffer_access.through_pointers.graphics.writes.vertex.3B_in_memory_with_vec4_f32
+dEQP-VK.robustness.buffer_access.through_pointers.graphics.writes.vertex.3B_out_of_memory_with_vec4_f32
+dEQP-VK.robustness.buffer_access.through_pointers.graphics.writes.vertex.4B_in_memory_with_vec4_f32
+dEQP-VK.robustness.buffer_access.through_pointers.graphics.writes.vertex.4B_out_of_memory_with_vec4_f32
+dEQP-VK.robustness.buffer_access.through_pointers.graphics.writes.vertex.16B_in_memory_with_vec4_f32
+dEQP-VK.robustness.buffer_access.through_pointers.graphics.writes.vertex.16B_out_of_memory_with_vec4_f32
+dEQP-VK.robustness.buffer_access.through_pointers.graphics.writes.vertex.32B_in_memory_with_vec4_f32
+dEQP-VK.robustness.buffer_access.through_pointers.graphics.writes.vertex.32B_out_of_memory_with_vec4_f32
+dEQP-VK.robustness.buffer_access.through_pointers.graphics.writes.vertex.1B_in_memory_with_scalar_s32
+dEQP-VK.robustness.buffer_access.through_pointers.graphics.writes.vertex.1B_out_of_memory_with_scalar_s32
+dEQP-VK.robustness.buffer_access.through_pointers.graphics.writes.vertex.3B_in_memory_with_scalar_s32
+dEQP-VK.robustness.buffer_access.through_pointers.graphics.writes.vertex.3B_out_of_memory_with_scalar_s32
+dEQP-VK.robustness.buffer_access.through_pointers.graphics.writes.vertex.4B_in_memory_with_scalar_s32
+dEQP-VK.robustness.buffer_access.through_pointers.graphics.writes.vertex.4B_out_of_memory_with_scalar_s32
+dEQP-VK.robustness.buffer_access.through_pointers.graphics.writes.vertex.16B_in_memory_with_scalar_s32
+dEQP-VK.robustness.buffer_access.through_pointers.graphics.writes.vertex.16B_out_of_memory_with_scalar_s32
+dEQP-VK.robustness.buffer_access.through_pointers.graphics.writes.vertex.32B_in_memory_with_scalar_s32
+dEQP-VK.robustness.buffer_access.through_pointers.graphics.writes.vertex.32B_out_of_memory_with_scalar_s32
+dEQP-VK.robustness.buffer_access.through_pointers.graphics.writes.vertex.1B_in_memory_with_scalar_u32
+dEQP-VK.robustness.buffer_access.through_pointers.graphics.writes.vertex.1B_out_of_memory_with_scalar_u32
+dEQP-VK.robustness.buffer_access.through_pointers.graphics.writes.vertex.3B_in_memory_with_scalar_u32
+dEQP-VK.robustness.buffer_access.through_pointers.graphics.writes.vertex.3B_out_of_memory_with_scalar_u32
+dEQP-VK.robustness.buffer_access.through_pointers.graphics.writes.vertex.4B_in_memory_with_scalar_u32
+dEQP-VK.robustness.buffer_access.through_pointers.graphics.writes.vertex.4B_out_of_memory_with_scalar_u32
+dEQP-VK.robustness.buffer_access.through_pointers.graphics.writes.vertex.16B_in_memory_with_scalar_u32
+dEQP-VK.robustness.buffer_access.through_pointers.graphics.writes.vertex.16B_out_of_memory_with_scalar_u32
+dEQP-VK.robustness.buffer_access.through_pointers.graphics.writes.vertex.32B_in_memory_with_scalar_u32
+dEQP-VK.robustness.buffer_access.through_pointers.graphics.writes.vertex.32B_out_of_memory_with_scalar_u32
+dEQP-VK.robustness.buffer_access.through_pointers.graphics.writes.vertex.1B_in_memory_with_scalar_f32
+dEQP-VK.robustness.buffer_access.through_pointers.graphics.writes.vertex.1B_out_of_memory_with_scalar_f32
+dEQP-VK.robustness.buffer_access.through_pointers.graphics.writes.vertex.3B_in_memory_with_scalar_f32
+dEQP-VK.robustness.buffer_access.through_pointers.graphics.writes.vertex.3B_out_of_memory_with_scalar_f32
+dEQP-VK.robustness.buffer_access.through_pointers.graphics.writes.vertex.4B_in_memory_with_scalar_f32
+dEQP-VK.robustness.buffer_access.through_pointers.graphics.writes.vertex.4B_out_of_memory_with_scalar_f32
+dEQP-VK.robustness.buffer_access.through_pointers.graphics.writes.vertex.16B_in_memory_with_scalar_f32
+dEQP-VK.robustness.buffer_access.through_pointers.graphics.writes.vertex.16B_out_of_memory_with_scalar_f32
+dEQP-VK.robustness.buffer_access.through_pointers.graphics.writes.vertex.32B_in_memory_with_scalar_f32
+dEQP-VK.robustness.buffer_access.through_pointers.graphics.writes.vertex.32B_out_of_memory_with_scalar_f32
+dEQP-VK.robustness.buffer_access.through_pointers.graphics.writes.fragment.1B_in_memory_with_vec4_s32
+dEQP-VK.robustness.buffer_access.through_pointers.graphics.writes.fragment.1B_out_of_memory_with_vec4_s32
+dEQP-VK.robustness.buffer_access.through_pointers.graphics.writes.fragment.3B_in_memory_with_vec4_s32
+dEQP-VK.robustness.buffer_access.through_pointers.graphics.writes.fragment.3B_out_of_memory_with_vec4_s32
+dEQP-VK.robustness.buffer_access.through_pointers.graphics.writes.fragment.4B_in_memory_with_vec4_s32
+dEQP-VK.robustness.buffer_access.through_pointers.graphics.writes.fragment.4B_out_of_memory_with_vec4_s32
+dEQP-VK.robustness.buffer_access.through_pointers.graphics.writes.fragment.16B_in_memory_with_vec4_s32
+dEQP-VK.robustness.buffer_access.through_pointers.graphics.writes.fragment.16B_out_of_memory_with_vec4_s32
+dEQP-VK.robustness.buffer_access.through_pointers.graphics.writes.fragment.32B_in_memory_with_vec4_s32
+dEQP-VK.robustness.buffer_access.through_pointers.graphics.writes.fragment.32B_out_of_memory_with_vec4_s32
+dEQP-VK.robustness.buffer_access.through_pointers.graphics.writes.fragment.1B_in_memory_with_vec4_u32
+dEQP-VK.robustness.buffer_access.through_pointers.graphics.writes.fragment.1B_out_of_memory_with_vec4_u32
+dEQP-VK.robustness.buffer_access.through_pointers.graphics.writes.fragment.3B_in_memory_with_vec4_u32
+dEQP-VK.robustness.buffer_access.through_pointers.graphics.writes.fragment.3B_out_of_memory_with_vec4_u32
+dEQP-VK.robustness.buffer_access.through_pointers.graphics.writes.fragment.4B_in_memory_with_vec4_u32
+dEQP-VK.robustness.buffer_access.through_pointers.graphics.writes.fragment.4B_out_of_memory_with_vec4_u32
+dEQP-VK.robustness.buffer_access.through_pointers.graphics.writes.fragment.16B_in_memory_with_vec4_u32
+dEQP-VK.robustness.buffer_access.through_pointers.graphics.writes.fragment.16B_out_of_memory_with_vec4_u32
+dEQP-VK.robustness.buffer_access.through_pointers.graphics.writes.fragment.32B_in_memory_with_vec4_u32
+dEQP-VK.robustness.buffer_access.through_pointers.graphics.writes.fragment.32B_out_of_memory_with_vec4_u32
+dEQP-VK.robustness.buffer_access.through_pointers.graphics.writes.fragment.1B_in_memory_with_vec4_f32
+dEQP-VK.robustness.buffer_access.through_pointers.graphics.writes.fragment.1B_out_of_memory_with_vec4_f32
+dEQP-VK.robustness.buffer_access.through_pointers.graphics.writes.fragment.3B_in_memory_with_vec4_f32
+dEQP-VK.robustness.buffer_access.through_pointers.graphics.writes.fragment.3B_out_of_memory_with_vec4_f32
+dEQP-VK.robustness.buffer_access.through_pointers.graphics.writes.fragment.4B_in_memory_with_vec4_f32
+dEQP-VK.robustness.buffer_access.through_pointers.graphics.writes.fragment.4B_out_of_memory_with_vec4_f32
+dEQP-VK.robustness.buffer_access.through_pointers.graphics.writes.fragment.16B_in_memory_with_vec4_f32
+dEQP-VK.robustness.buffer_access.through_pointers.graphics.writes.fragment.16B_out_of_memory_with_vec4_f32
+dEQP-VK.robustness.buffer_access.through_pointers.graphics.writes.fragment.32B_in_memory_with_vec4_f32
+dEQP-VK.robustness.buffer_access.through_pointers.graphics.writes.fragment.32B_out_of_memory_with_vec4_f32
+dEQP-VK.robustness.buffer_access.through_pointers.graphics.writes.fragment.1B_in_memory_with_scalar_s32
+dEQP-VK.robustness.buffer_access.through_pointers.graphics.writes.fragment.1B_out_of_memory_with_scalar_s32
+dEQP-VK.robustness.buffer_access.through_pointers.graphics.writes.fragment.3B_in_memory_with_scalar_s32
+dEQP-VK.robustness.buffer_access.through_pointers.graphics.writes.fragment.3B_out_of_memory_with_scalar_s32
+dEQP-VK.robustness.buffer_access.through_pointers.graphics.writes.fragment.4B_in_memory_with_scalar_s32
+dEQP-VK.robustness.buffer_access.through_pointers.graphics.writes.fragment.4B_out_of_memory_with_scalar_s32
+dEQP-VK.robustness.buffer_access.through_pointers.graphics.writes.fragment.16B_in_memory_with_scalar_s32
+dEQP-VK.robustness.buffer_access.through_pointers.graphics.writes.fragment.16B_out_of_memory_with_scalar_s32
+dEQP-VK.robustness.buffer_access.through_pointers.graphics.writes.fragment.32B_in_memory_with_scalar_s32
+dEQP-VK.robustness.buffer_access.through_pointers.graphics.writes.fragment.32B_out_of_memory_with_scalar_s32
+dEQP-VK.robustness.buffer_access.through_pointers.graphics.writes.fragment.1B_in_memory_with_scalar_u32
+dEQP-VK.robustness.buffer_access.through_pointers.graphics.writes.fragment.1B_out_of_memory_with_scalar_u32
+dEQP-VK.robustness.buffer_access.through_pointers.graphics.writes.fragment.3B_in_memory_with_scalar_u32
+dEQP-VK.robustness.buffer_access.through_pointers.graphics.writes.fragment.3B_out_of_memory_with_scalar_u32
+dEQP-VK.robustness.buffer_access.through_pointers.graphics.writes.fragment.4B_in_memory_with_scalar_u32
+dEQP-VK.robustness.buffer_access.through_pointers.graphics.writes.fragment.4B_out_of_memory_with_scalar_u32
+dEQP-VK.robustness.buffer_access.through_pointers.graphics.writes.fragment.16B_in_memory_with_scalar_u32
+dEQP-VK.robustness.buffer_access.through_pointers.graphics.writes.fragment.16B_out_of_memory_with_scalar_u32
+dEQP-VK.robustness.buffer_access.through_pointers.graphics.writes.fragment.32B_in_memory_with_scalar_u32
+dEQP-VK.robustness.buffer_access.through_pointers.graphics.writes.fragment.32B_out_of_memory_with_scalar_u32
+dEQP-VK.robustness.buffer_access.through_pointers.graphics.writes.fragment.1B_in_memory_with_scalar_f32
+dEQP-VK.robustness.buffer_access.through_pointers.graphics.writes.fragment.1B_out_of_memory_with_scalar_f32
+dEQP-VK.robustness.buffer_access.through_pointers.graphics.writes.fragment.3B_in_memory_with_scalar_f32
+dEQP-VK.robustness.buffer_access.through_pointers.graphics.writes.fragment.3B_out_of_memory_with_scalar_f32
+dEQP-VK.robustness.buffer_access.through_pointers.graphics.writes.fragment.4B_in_memory_with_scalar_f32
+dEQP-VK.robustness.buffer_access.through_pointers.graphics.writes.fragment.4B_out_of_memory_with_scalar_f32
+dEQP-VK.robustness.buffer_access.through_pointers.graphics.writes.fragment.16B_in_memory_with_scalar_f32
+dEQP-VK.robustness.buffer_access.through_pointers.graphics.writes.fragment.16B_out_of_memory_with_scalar_f32
+dEQP-VK.robustness.buffer_access.through_pointers.graphics.writes.fragment.32B_in_memory_with_scalar_f32
+dEQP-VK.robustness.buffer_access.through_pointers.graphics.writes.fragment.32B_out_of_memory_with_scalar_f32
+dEQP-VK.robustness.buffer_access.through_pointers.compute.reads.1B_in_memory_with_vec4_s32
+dEQP-VK.robustness.buffer_access.through_pointers.compute.reads.1B_out_of_memory_with_vec4_s32
+dEQP-VK.robustness.buffer_access.through_pointers.compute.reads.3B_in_memory_with_vec4_s32
+dEQP-VK.robustness.buffer_access.through_pointers.compute.reads.3B_out_of_memory_with_vec4_s32
+dEQP-VK.robustness.buffer_access.through_pointers.compute.reads.4B_in_memory_with_vec4_s32
+dEQP-VK.robustness.buffer_access.through_pointers.compute.reads.4B_out_of_memory_with_vec4_s32
+dEQP-VK.robustness.buffer_access.through_pointers.compute.reads.16B_in_memory_with_vec4_s32
+dEQP-VK.robustness.buffer_access.through_pointers.compute.reads.16B_out_of_memory_with_vec4_s32
+dEQP-VK.robustness.buffer_access.through_pointers.compute.reads.32B_in_memory_with_vec4_s32
+dEQP-VK.robustness.buffer_access.through_pointers.compute.reads.32B_out_of_memory_with_vec4_s32
+dEQP-VK.robustness.buffer_access.through_pointers.compute.reads.1B_in_memory_with_vec4_u32
+dEQP-VK.robustness.buffer_access.through_pointers.compute.reads.1B_out_of_memory_with_vec4_u32
+dEQP-VK.robustness.buffer_access.through_pointers.compute.reads.3B_in_memory_with_vec4_u32
+dEQP-VK.robustness.buffer_access.through_pointers.compute.reads.3B_out_of_memory_with_vec4_u32
+dEQP-VK.robustness.buffer_access.through_pointers.compute.reads.4B_in_memory_with_vec4_u32
+dEQP-VK.robustness.buffer_access.through_pointers.compute.reads.4B_out_of_memory_with_vec4_u32
+dEQP-VK.robustness.buffer_access.through_pointers.compute.reads.16B_in_memory_with_vec4_u32
+dEQP-VK.robustness.buffer_access.through_pointers.compute.reads.16B_out_of_memory_with_vec4_u32
+dEQP-VK.robustness.buffer_access.through_pointers.compute.reads.32B_in_memory_with_vec4_u32
+dEQP-VK.robustness.buffer_access.through_pointers.compute.reads.32B_out_of_memory_with_vec4_u32
+dEQP-VK.robustness.buffer_access.through_pointers.compute.reads.1B_in_memory_with_vec4_f32
+dEQP-VK.robustness.buffer_access.through_pointers.compute.reads.1B_out_of_memory_with_vec4_f32
+dEQP-VK.robustness.buffer_access.through_pointers.compute.reads.3B_in_memory_with_vec4_f32
+dEQP-VK.robustness.buffer_access.through_pointers.compute.reads.3B_out_of_memory_with_vec4_f32
+dEQP-VK.robustness.buffer_access.through_pointers.compute.reads.4B_in_memory_with_vec4_f32
+dEQP-VK.robustness.buffer_access.through_pointers.compute.reads.4B_out_of_memory_with_vec4_f32
+dEQP-VK.robustness.buffer_access.through_pointers.compute.reads.16B_in_memory_with_vec4_f32
+dEQP-VK.robustness.buffer_access.through_pointers.compute.reads.16B_out_of_memory_with_vec4_f32
+dEQP-VK.robustness.buffer_access.through_pointers.compute.reads.32B_in_memory_with_vec4_f32
+dEQP-VK.robustness.buffer_access.through_pointers.compute.reads.32B_out_of_memory_with_vec4_f32
+dEQP-VK.robustness.buffer_access.through_pointers.compute.reads.1B_in_memory_with_scalar_s32
+dEQP-VK.robustness.buffer_access.through_pointers.compute.reads.1B_out_of_memory_with_scalar_s32
+dEQP-VK.robustness.buffer_access.through_pointers.compute.reads.3B_in_memory_with_scalar_s32
+dEQP-VK.robustness.buffer_access.through_pointers.compute.reads.3B_out_of_memory_with_scalar_s32
+dEQP-VK.robustness.buffer_access.through_pointers.compute.reads.4B_in_memory_with_scalar_s32
+dEQP-VK.robustness.buffer_access.through_pointers.compute.reads.4B_out_of_memory_with_scalar_s32
+dEQP-VK.robustness.buffer_access.through_pointers.compute.reads.16B_in_memory_with_scalar_s32
+dEQP-VK.robustness.buffer_access.through_pointers.compute.reads.16B_out_of_memory_with_scalar_s32
+dEQP-VK.robustness.buffer_access.through_pointers.compute.reads.32B_in_memory_with_scalar_s32
+dEQP-VK.robustness.buffer_access.through_pointers.compute.reads.32B_out_of_memory_with_scalar_s32
+dEQP-VK.robustness.buffer_access.through_pointers.compute.reads.1B_in_memory_with_scalar_u32
+dEQP-VK.robustness.buffer_access.through_pointers.compute.reads.1B_out_of_memory_with_scalar_u32
+dEQP-VK.robustness.buffer_access.through_pointers.compute.reads.3B_in_memory_with_scalar_u32
+dEQP-VK.robustness.buffer_access.through_pointers.compute.reads.3B_out_of_memory_with_scalar_u32
+dEQP-VK.robustness.buffer_access.through_pointers.compute.reads.4B_in_memory_with_scalar_u32
+dEQP-VK.robustness.buffer_access.through_pointers.compute.reads.4B_out_of_memory_with_scalar_u32
+dEQP-VK.robustness.buffer_access.through_pointers.compute.reads.16B_in_memory_with_scalar_u32
+dEQP-VK.robustness.buffer_access.through_pointers.compute.reads.16B_out_of_memory_with_scalar_u32
+dEQP-VK.robustness.buffer_access.through_pointers.compute.reads.32B_in_memory_with_scalar_u32
+dEQP-VK.robustness.buffer_access.through_pointers.compute.reads.32B_out_of_memory_with_scalar_u32
+dEQP-VK.robustness.buffer_access.through_pointers.compute.reads.1B_in_memory_with_scalar_f32
+dEQP-VK.robustness.buffer_access.through_pointers.compute.reads.1B_out_of_memory_with_scalar_f32
+dEQP-VK.robustness.buffer_access.through_pointers.compute.reads.3B_in_memory_with_scalar_f32
+dEQP-VK.robustness.buffer_access.through_pointers.compute.reads.3B_out_of_memory_with_scalar_f32
+dEQP-VK.robustness.buffer_access.through_pointers.compute.reads.4B_in_memory_with_scalar_f32
+dEQP-VK.robustness.buffer_access.through_pointers.compute.reads.4B_out_of_memory_with_scalar_f32
+dEQP-VK.robustness.buffer_access.through_pointers.compute.reads.16B_in_memory_with_scalar_f32
+dEQP-VK.robustness.buffer_access.through_pointers.compute.reads.16B_out_of_memory_with_scalar_f32
+dEQP-VK.robustness.buffer_access.through_pointers.compute.reads.32B_in_memory_with_scalar_f32
+dEQP-VK.robustness.buffer_access.through_pointers.compute.reads.32B_out_of_memory_with_scalar_f32
+dEQP-VK.robustness.buffer_access.through_pointers.compute.writes.1B_in_memory_with_vec4_s32
+dEQP-VK.robustness.buffer_access.through_pointers.compute.writes.1B_out_of_memory_with_vec4_s32
+dEQP-VK.robustness.buffer_access.through_pointers.compute.writes.3B_in_memory_with_vec4_s32
+dEQP-VK.robustness.buffer_access.through_pointers.compute.writes.3B_out_of_memory_with_vec4_s32
+dEQP-VK.robustness.buffer_access.through_pointers.compute.writes.4B_in_memory_with_vec4_s32
+dEQP-VK.robustness.buffer_access.through_pointers.compute.writes.4B_out_of_memory_with_vec4_s32
+dEQP-VK.robustness.buffer_access.through_pointers.compute.writes.16B_in_memory_with_vec4_s32
+dEQP-VK.robustness.buffer_access.through_pointers.compute.writes.16B_out_of_memory_with_vec4_s32
+dEQP-VK.robustness.buffer_access.through_pointers.compute.writes.32B_in_memory_with_vec4_s32
+dEQP-VK.robustness.buffer_access.through_pointers.compute.writes.32B_out_of_memory_with_vec4_s32
+dEQP-VK.robustness.buffer_access.through_pointers.compute.writes.1B_in_memory_with_vec4_u32
+dEQP-VK.robustness.buffer_access.through_pointers.compute.writes.1B_out_of_memory_with_vec4_u32
+dEQP-VK.robustness.buffer_access.through_pointers.compute.writes.3B_in_memory_with_vec4_u32
+dEQP-VK.robustness.buffer_access.through_pointers.compute.writes.3B_out_of_memory_with_vec4_u32
+dEQP-VK.robustness.buffer_access.through_pointers.compute.writes.4B_in_memory_with_vec4_u32
+dEQP-VK.robustness.buffer_access.through_pointers.compute.writes.4B_out_of_memory_with_vec4_u32
+dEQP-VK.robustness.buffer_access.through_pointers.compute.writes.16B_in_memory_with_vec4_u32
+dEQP-VK.robustness.buffer_access.through_pointers.compute.writes.16B_out_of_memory_with_vec4_u32
+dEQP-VK.robustness.buffer_access.through_pointers.compute.writes.32B_in_memory_with_vec4_u32
+dEQP-VK.robustness.buffer_access.through_pointers.compute.writes.32B_out_of_memory_with_vec4_u32
+dEQP-VK.robustness.buffer_access.through_pointers.compute.writes.1B_in_memory_with_vec4_f32
+dEQP-VK.robustness.buffer_access.through_pointers.compute.writes.1B_out_of_memory_with_vec4_f32
+dEQP-VK.robustness.buffer_access.through_pointers.compute.writes.3B_in_memory_with_vec4_f32
+dEQP-VK.robustness.buffer_access.through_pointers.compute.writes.3B_out_of_memory_with_vec4_f32
+dEQP-VK.robustness.buffer_access.through_pointers.compute.writes.4B_in_memory_with_vec4_f32
+dEQP-VK.robustness.buffer_access.through_pointers.compute.writes.4B_out_of_memory_with_vec4_f32
+dEQP-VK.robustness.buffer_access.through_pointers.compute.writes.16B_in_memory_with_vec4_f32
+dEQP-VK.robustness.buffer_access.through_pointers.compute.writes.16B_out_of_memory_with_vec4_f32
+dEQP-VK.robustness.buffer_access.through_pointers.compute.writes.32B_in_memory_with_vec4_f32
+dEQP-VK.robustness.buffer_access.through_pointers.compute.writes.32B_out_of_memory_with_vec4_f32
+dEQP-VK.robustness.buffer_access.through_pointers.compute.writes.1B_in_memory_with_scalar_s32
+dEQP-VK.robustness.buffer_access.through_pointers.compute.writes.1B_out_of_memory_with_scalar_s32
+dEQP-VK.robustness.buffer_access.through_pointers.compute.writes.3B_in_memory_with_scalar_s32
+dEQP-VK.robustness.buffer_access.through_pointers.compute.writes.3B_out_of_memory_with_scalar_s32
+dEQP-VK.robustness.buffer_access.through_pointers.compute.writes.4B_in_memory_with_scalar_s32
+dEQP-VK.robustness.buffer_access.through_pointers.compute.writes.4B_out_of_memory_with_scalar_s32
+dEQP-VK.robustness.buffer_access.through_pointers.compute.writes.16B_in_memory_with_scalar_s32
+dEQP-VK.robustness.buffer_access.through_pointers.compute.writes.16B_out_of_memory_with_scalar_s32
+dEQP-VK.robustness.buffer_access.through_pointers.compute.writes.32B_in_memory_with_scalar_s32
+dEQP-VK.robustness.buffer_access.through_pointers.compute.writes.32B_out_of_memory_with_scalar_s32
+dEQP-VK.robustness.buffer_access.through_pointers.compute.writes.1B_in_memory_with_scalar_u32
+dEQP-VK.robustness.buffer_access.through_pointers.compute.writes.1B_out_of_memory_with_scalar_u32
+dEQP-VK.robustness.buffer_access.through_pointers.compute.writes.3B_in_memory_with_scalar_u32
+dEQP-VK.robustness.buffer_access.through_pointers.compute.writes.3B_out_of_memory_with_scalar_u32
+dEQP-VK.robustness.buffer_access.through_pointers.compute.writes.4B_in_memory_with_scalar_u32
+dEQP-VK.robustness.buffer_access.through_pointers.compute.writes.4B_out_of_memory_with_scalar_u32
+dEQP-VK.robustness.buffer_access.through_pointers.compute.writes.16B_in_memory_with_scalar_u32
+dEQP-VK.robustness.buffer_access.through_pointers.compute.writes.16B_out_of_memory_with_scalar_u32
+dEQP-VK.robustness.buffer_access.through_pointers.compute.writes.32B_in_memory_with_scalar_u32
+dEQP-VK.robustness.buffer_access.through_pointers.compute.writes.32B_out_of_memory_with_scalar_u32
+dEQP-VK.robustness.buffer_access.through_pointers.compute.writes.1B_in_memory_with_scalar_f32
+dEQP-VK.robustness.buffer_access.through_pointers.compute.writes.1B_out_of_memory_with_scalar_f32
+dEQP-VK.robustness.buffer_access.through_pointers.compute.writes.3B_in_memory_with_scalar_f32
+dEQP-VK.robustness.buffer_access.through_pointers.compute.writes.3B_out_of_memory_with_scalar_f32
+dEQP-VK.robustness.buffer_access.through_pointers.compute.writes.4B_in_memory_with_scalar_f32
+dEQP-VK.robustness.buffer_access.through_pointers.compute.writes.4B_out_of_memory_with_scalar_f32
+dEQP-VK.robustness.buffer_access.through_pointers.compute.writes.16B_in_memory_with_scalar_f32
+dEQP-VK.robustness.buffer_access.through_pointers.compute.writes.16B_out_of_memory_with_scalar_f32
+dEQP-VK.robustness.buffer_access.through_pointers.compute.writes.32B_in_memory_with_scalar_f32
+dEQP-VK.robustness.buffer_access.through_pointers.compute.writes.32B_out_of_memory_with_scalar_f32
 dEQP-VK.robustness.vertex_access.r32_uint.draw.vertex_out_of_bounds
 dEQP-VK.robustness.vertex_access.r32_uint.draw.vertex_incomplete
 dEQP-VK.robustness.vertex_access.r32_uint.draw.instance_out_of_bounds
index 6f8cb86..2c39bb2 100644 (file)
@@ -122,7 +122,7 @@ set(DEQP_VK_LIBS
        )
 
 if (DE_COMPILER_IS_MSC AND (DE_PTR_SIZE EQUAL 4))
-    set(CMAKE_EXE_LINKER_FLAGS "${CMAKE_EXE_LINKER_FLAGS} /LARGEADDRESSAWARE")
+       set(CMAKE_EXE_LINKER_FLAGS "${CMAKE_EXE_LINKER_FLAGS} /LARGEADDRESSAWARE")
 endif ()
 
 add_deqp_module(deqp-vk "${DEQP_VK_SRCS}" "${DEQP_VK_LIBS}" vktTestPackageEntry.cpp)
index 304729c..7b0672b 100644 (file)
@@ -1,13 +1,14 @@
+# Robustness tests
 
-include_directories(
-       ..
-       )
+include_directories(..)
 
 set(DEQP_VK_ROBUSTNESS_SRCS
        vktRobustnessTests.cpp
        vktRobustnessTests.hpp
        vktRobustnessBufferAccessTests.cpp
        vktRobustnessBufferAccessTests.hpp
+       vktRobustBufferAccessWithVariablePointersTests.cpp
+       vktRobustBufferAccessWithVariablePointersTests.hpp
        vktRobustnessUtil.cpp
        vktRobustnessUtil.hpp
        vktRobustnessVertexAccessTests.cpp
diff --git a/external/vulkancts/modules/vulkan/robustness/vktRobustBufferAccessWithVariablePointersTests.cpp b/external/vulkancts/modules/vulkan/robustness/vktRobustBufferAccessWithVariablePointersTests.cpp
new file mode 100644 (file)
index 0000000..55695c4
--- /dev/null
@@ -0,0 +1,1878 @@
+/*------------------------------------------------------------------------
+ * Vulkan Conformance Tests
+ * ------------------------
+ *
+ * Copyright (c) 2018 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 Robust buffer access tests for storage buffers and
+ *        storage texel buffers with variable pointers.
+ *
+ * \note These tests are checking if accessing a memory through a variable
+ *       pointer that points outside of accessible buffer memory is robust.
+ *       To do this the tests are creating proper SPIRV code that creates
+ *       variable pointers. Those pointers are either pointing into a
+ *       memory allocated for a buffer but "not accesible" - meaning
+ *       DescriptorBufferInfo has smaller size than a memory we access in
+ *       shader or entirely outside of allocated memory (i.e. buffer is
+ *       256 bytes big but we are trying to access under offset of 1k from
+ *       buffer start). There is a set of valid behaviours defined when
+ *       robust buffer access extension is enabled described in chapter 32
+ *       section 1 of Vulkan spec.
+ *
+ *//*--------------------------------------------------------------------*/
+
+#include "vktRobustBufferAccessWithVariablePointersTests.hpp"
+#include "vktRobustnessUtil.hpp"
+#include "vktTestCaseUtil.hpp"
+#include "vkBuilderUtil.hpp"
+#include "vkImageUtil.hpp"
+#include "vkPrograms.hpp"
+#include "vkQueryUtil.hpp"
+#include "vkRef.hpp"
+#include "vkRefUtil.hpp"
+#include "vkTypeUtil.hpp"
+#include "tcuTestLog.hpp"
+#include "vkDefs.hpp"
+#include "deRandom.hpp"
+
+#include <limits>
+#include <sstream>
+
+namespace vkt
+{
+namespace robustness
+{
+
+using namespace vk;
+
+// keep local things local
+namespace
+{
+
+// A function for getting information on variable pointer features supported through physical device
+vk::VkPhysicalDeviceVariablePointerFeatures querySupportedVariablePointersFeatures (const deUint32                                     apiVersion,
+                                                                                                                                                                       const InstanceInterface&                vki,
+                                                                                                                                                                       VkPhysicalDevice                                device,
+                                                                                                                                                                       const std::vector<std::string>& instanceExtensions)
+{
+       VkPhysicalDeviceVariablePointerFeatures extensionFeatures =
+       {
+               VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_VARIABLE_POINTER_FEATURES_KHR,        // sType
+               DE_NULL,                                                                                                                        // pNext
+               false,                                                                                                                          // variablePointersStorageBuffer
+               false,                                                                                                                          // variablePointers
+       };
+
+       VkPhysicalDeviceFeatures2       features;
+       deMemset(&features, 0, sizeof(features));
+       features.sType = VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_FEATURES_2;
+       features.pNext = &extensionFeatures;
+
+       // Call the getter only if supported. Otherwise above "zero" defaults are used
+       if (isInstanceExtensionSupported(apiVersion, instanceExtensions, "VK_KHR_get_physical_device_properties2"))
+       {
+               vki.getPhysicalDeviceFeatures2(device, &features);
+       }
+
+       return extensionFeatures;
+}
+
+// A supplementary structures that can hold information about buffer size
+struct AccessRangesData
+{
+       VkDeviceSize    allocSize;
+       VkDeviceSize    accessRange;
+       VkDeviceSize    maxAccessRange;
+};
+
+// Pointer to function that can be used to fill a buffer with some data - it is passed as an parameter to buffer creation utility function
+typedef void(*FillBufferProcPtr)(void*, vk::VkDeviceSize, const void* const);
+
+// An utility function for creating a buffer
+// This function not only allocates memory for the buffer but also fills buffer up with a data
+void createTestBuffer (const vk::DeviceInterface&                              deviceInterface,
+                                          const VkDevice&                                                      device,
+                                          VkDeviceSize                                                         accessRange,
+                                          VkBufferUsageFlags                                           usage,
+                                          SimpleAllocator&                                                     allocator,
+                                          Move<VkBuffer>&                                                      buffer,
+                                          de::MovePtr<Allocation>&                                     bufferAlloc,
+                                          AccessRangesData&                                            data,
+                                          FillBufferProcPtr                                            fillBufferProc,
+                                          const void* const                                            blob)
+{
+       const VkBufferCreateInfo        bufferParams    =
+       {
+               VK_STRUCTURE_TYPE_BUFFER_CREATE_INFO,           // VkStructureType              sType;
+               DE_NULL,                                                                        // const void*                  pNext;
+               0u,                                                                                     // VkBufferCreateFlags  flags;
+               accessRange,                                                            // VkDeviceSize                 size;
+               usage,                                                                          // VkBufferUsageFlags   usage;
+               VK_SHARING_MODE_EXCLUSIVE,                                      // VkSharingMode                sharingMode;
+               VK_QUEUE_FAMILY_IGNORED,                                        // deUint32                             queueFamilyIndexCount;
+               DE_NULL                                                                         // const deUint32*              pQueueFamilyIndices;
+       };
+
+       buffer = createBuffer(deviceInterface, device, &bufferParams);
+
+       VkMemoryRequirements bufferMemoryReqs           = getBufferMemoryRequirements(deviceInterface, device, *buffer);
+       bufferAlloc = allocator.allocate(bufferMemoryReqs, MemoryRequirement::HostVisible);
+
+       data.allocSize = bufferMemoryReqs.size;
+       data.accessRange = accessRange;
+       data.maxAccessRange = deMinu64(data.allocSize, deMinu64(bufferParams.size, accessRange));
+
+       VK_CHECK(deviceInterface.bindBufferMemory(device, *buffer, bufferAlloc->getMemory(), bufferAlloc->getOffset()));
+       fillBufferProc(bufferAlloc->getHostPtr(), bufferMemoryReqs.size, blob);
+       flushMappedMemoryRange(deviceInterface, device, bufferAlloc->getMemory(), bufferAlloc->getOffset(), VK_WHOLE_SIZE);
+}
+
+// An adapter function matching FillBufferProcPtr interface. Fills a buffer with "randomly" generated test data matching desired format.
+void populateBufferWithValues (void*                           buffer,
+                                                          VkDeviceSize                 size,
+                                                          const void* const    blob)
+{
+       populateBufferWithTestValues(buffer, size, *static_cast<const vk::VkFormat* const>(blob));
+}
+
+// An adapter function matching FillBufferProcPtr interface. Fills a buffer with 0xBABABABABABA... pattern. Used to fill up output buffers.
+// Since this pattern cannot show up in generated test data it should not show up in the valid output.
+void populateBufferWithDummy (void*                                    buffer,
+                                                         VkDeviceSize                  size,
+                                                         const void* const             blob)
+{
+       DE_UNREF(blob);
+       deMemset(buffer, 0xBA, static_cast<size_t>(size));
+}
+
+// An adapter function matching FillBufferProcPtr interface. Fills a buffer with a copy of memory contents pointed to by blob.
+void populateBufferWithCopy (void*                                     buffer,
+                                                        VkDeviceSize                   size,
+                                                        const void* const              blob)
+{
+       deMemcpy(buffer, blob, static_cast<size_t>(size));
+}
+
+// A composite types used in test
+// Those composites can be made of unsigned ints, signed ints or floats (except for matrices that work with floats only).
+enum ShaderType
+{
+       SHADER_TYPE_MATRIX_COPY                                 = 0,
+       SHADER_TYPE_VECTOR_COPY,
+       SHADER_TYPE_SCALAR_COPY,
+
+       SHADER_TYPE_COUNT
+};
+
+// We are testing reads or writes
+// In case of testing reads - writes are always
+enum BufferAccessType
+{
+       BUFFER_ACCESS_TYPE_READ_FROM_STORAGE    = 0,
+       BUFFER_ACCESS_TYPE_WRITE_TO_STORAGE,
+};
+
+// Test case for checking robust buffer access with variable pointers
+class RobustAccessWithPointersTest : public vkt::TestCase
+{
+public:
+       static const deUint32           s_testArraySize;
+       static const deUint32           s_numberOfBytesAccessed;
+
+                                                               RobustAccessWithPointersTest    (tcu::TestContext&              testContext,
+                                                                                                                                const std::string&             name,
+                                                                                                                                const std::string&             description,
+                                                                                                                                VkShaderStageFlags             shaderStage,
+                                                                                                                                ShaderType                             shaderType,
+                                                                                                                                VkFormat                               bufferFormat);
+
+       virtual                                         ~RobustAccessWithPointersTest   (void)
+       {
+       }
+
+protected:
+       const VkShaderStageFlags        m_shaderStage;
+       const ShaderType                        m_shaderType;
+       const VkFormat                          m_bufferFormat;
+};
+
+const deUint32 RobustAccessWithPointersTest::s_testArraySize = 1024u;
+const deUint32 RobustAccessWithPointersTest::s_numberOfBytesAccessed = static_cast<deUint32>(16ull * sizeof(float));
+
+RobustAccessWithPointersTest::RobustAccessWithPointersTest(tcu::TestContext&           testContext,
+       const std::string&              name,
+       const std::string&              description,
+       VkShaderStageFlags              shaderStage,
+       ShaderType                              shaderType,
+       VkFormat                                bufferFormat)
+       : vkt::TestCase(testContext, name, description)
+       , m_shaderStage(shaderStage)
+       , m_shaderType(shaderType)
+       , m_bufferFormat(bufferFormat)
+{
+       DE_ASSERT(m_shaderStage == VK_SHADER_STAGE_VERTEX_BIT || m_shaderStage == VK_SHADER_STAGE_FRAGMENT_BIT || m_shaderStage == VK_SHADER_STAGE_COMPUTE_BIT);
+}
+
+// A subclass for testing reading with variable pointers
+class RobustReadTest : public RobustAccessWithPointersTest
+{
+public:
+                                                               RobustReadTest                                  (tcu::TestContext&              testContext,
+                                                                                                                                const std::string&             name,
+                                                                                                                                const std::string&             description,
+                                                                                                                                VkShaderStageFlags             shaderStage,
+                                                                                                                                ShaderType                             shaderType,
+                                                                                                                                VkFormat                               bufferFormat,
+                                                                                                                                VkDeviceSize                   readAccessRange,
+                                                                                                                                bool                                   accessOutOfBackingMemory);
+
+       virtual                                         ~RobustReadTest                                 (void)
+       {}
+       virtual TestInstance*           createInstance                                  (Context&                               context) const;
+private:
+       virtual void                            initPrograms                                    (SourceCollections&             programCollection) const;
+       const VkDeviceSize                      m_readAccessRange;
+       const bool                                      m_accessOutOfBackingMemory;
+};
+
+// A subclass for testing writing with variable pointers
+class RobustWriteTest : public RobustAccessWithPointersTest
+{
+public:
+                                                               RobustWriteTest                         (tcu::TestContext&              testContext,
+                                                                                                                        const std::string&             name,
+                                                                                                                        const std::string&             description,
+                                                                                                                        VkShaderStageFlags             shaderStage,
+                                                                                                                        ShaderType                             shaderType,
+                                                                                                                        VkFormat                               bufferFormat,
+                                                                                                                        VkDeviceSize                   writeAccessRange,
+                                                                                                                        bool                                   accessOutOfBackingMemory);
+
+       virtual                                         ~RobustWriteTest                        (void) {}
+       virtual TestInstance*           createInstance                          (Context& context) const;
+private:
+       virtual void                            initPrograms                            (SourceCollections&             programCollection) const;
+       const VkDeviceSize                      m_writeAccessRange;
+       const bool                                      m_accessOutOfBackingMemory;
+};
+
+// In case I detect that some prerequisites are not fullfilled I am creating this lightweight dummy test instance instead of AccessInstance. Should be bit faster that way.
+class NotSupportedInstance : public vkt::TestInstance
+{
+public:
+                                                               NotSupportedInstance            (Context&                       context,
+                                                                                                                        const std::string&     message)
+               : TestInstance(context)
+               , m_notSupportedMessage(message)
+       {}
+
+       virtual                                         ~NotSupportedInstance           (void)
+       {
+       }
+
+       virtual tcu::TestStatus         iterate                                         (void)
+       {
+               TCU_THROW(NotSupportedError, m_notSupportedMessage.c_str());
+       }
+
+private:
+       std::string                                     m_notSupportedMessage;
+};
+
+// A superclass for instances testing reading and writing
+// holds all necessary object members
+class AccessInstance : public vkt::TestInstance
+{
+public:
+                                                               AccessInstance                          (Context&                       context,
+                                                                                                                        Move<VkDevice>         device,
+                                                                                                                        ShaderType                     shaderType,
+                                                                                                                        VkShaderStageFlags     shaderStage,
+                                                                                                                        VkFormat                       bufferFormat,
+                                                                                                                        BufferAccessType       bufferAccessType,
+                                                                                                                        VkDeviceSize           inBufferAccessRange,
+                                                                                                                        VkDeviceSize           outBufferAccessRange,
+                                                                                                                        bool                           accessOutOfBackingMemory);
+
+       virtual                                         ~AccessInstance                         (void) {}
+
+       virtual tcu::TestStatus         iterate                                         (void);
+
+       virtual bool                            verifyResult                            (void);
+
+private:
+       bool                                            isExpectedValueFromInBuffer     (VkDeviceSize           offsetInBytes,
+                                                                                                                        const void*            valuePtr,
+                                                                                                                        VkDeviceSize           valueSize);
+       bool                                            isOutBufferValueUnchanged       (VkDeviceSize           offsetInBytes,
+                                                                                                                        VkDeviceSize           valueSize);
+
+protected:
+       Move<VkDevice>                          m_device;
+       de::MovePtr<TestEnvironment>m_testEnvironment;
+
+       const ShaderType                        m_shaderType;
+       const VkShaderStageFlags        m_shaderStage;
+
+       const VkFormat                          m_bufferFormat;
+       const BufferAccessType          m_bufferAccessType;
+
+       AccessRangesData                        m_inBufferAccess;
+       Move<VkBuffer>                          m_inBuffer;
+       de::MovePtr<Allocation>         m_inBufferAlloc;
+
+       AccessRangesData                        m_outBufferAccess;
+       Move<VkBuffer>                          m_outBuffer;
+       de::MovePtr<Allocation>         m_outBufferAlloc;
+
+       Move<VkBuffer>                          m_indicesBuffer;
+       de::MovePtr<Allocation>         m_indicesBufferAlloc;
+
+       Move<VkDescriptorPool>          m_descriptorPool;
+       Move<VkDescriptorSetLayout>     m_descriptorSetLayout;
+       Move<VkDescriptorSet>           m_descriptorSet;
+
+       Move<VkFence>                           m_fence;
+       VkQueue                                         m_queue;
+
+       // Used when m_shaderStage == VK_SHADER_STAGE_VERTEX_BIT
+       Move<VkBuffer>                          m_vertexBuffer;
+       de::MovePtr<Allocation>         m_vertexBufferAlloc;
+
+       const bool                                      m_accessOutOfBackingMemory;
+};
+
+// A subclass for read tests
+class ReadInstance: public AccessInstance
+{
+public:
+                                                               ReadInstance                    (Context&                               context,
+                                                                                                                Move<VkDevice>                 device,
+                                                                                                                ShaderType                             shaderType,
+                                                                                                                VkShaderStageFlags             shaderStage,
+                                                                                                                VkFormat                               bufferFormat,
+                                                                                                                VkDeviceSize                   inBufferAccessRange,
+                                                                                                                bool                                   accessOutOfBackingMemory);
+
+       virtual                                         ~ReadInstance                   (void) {}
+};
+
+// A subclass for write tests
+class WriteInstance: public AccessInstance
+{
+public:
+                                                               WriteInstance                   (Context&                               context,
+                                                                                                                Move<VkDevice>                 device,
+                                                                                                                ShaderType                             shaderType,
+                                                                                                                VkShaderStageFlags             shaderStage,
+                                                                                                                VkFormat                               bufferFormat,
+                                                                                                                VkDeviceSize                   writeBufferAccessRange,
+                                                                                                                bool                                   accessOutOfBackingMemory);
+
+       virtual                                         ~WriteInstance                  (void) {}
+};
+
+// Automatically incremented counter.
+// Each read of value bumps counter up.
+class Autocounter
+{
+public:
+                                                               Autocounter()
+               :value(0u)
+       {}
+       deUint32                                        incrementAndGetValue()
+       {
+               return ++value;
+       }
+private:
+       deUint32                                        value;
+};
+
+// A class representing SPIRV variable.
+// This class internally has an unique identificator.
+// When such variable is used in shader composition routine it is mapped on a in-SPIRV-code variable name.
+class Variable
+{
+       friend bool                                     operator < (const Variable& a, const Variable& b);
+public:
+                                                               Variable(Autocounter& autoincrement)
+               : value(autoincrement.incrementAndGetValue())
+       {}
+private:
+       deUint32                                        value;
+};
+
+bool operator < (const Variable& a, const Variable& b)
+{
+       return a.value < b.value;
+}
+
+// A class representing SPIRV operation.
+// Since those are not copyable they don't need internal id. Memory address is used instead.
+class Operation
+{
+       friend bool                                     operator==(const Operation& a, const Operation& b);
+public:
+                                                               Operation(const char* text)
+               : value(text)
+       {
+       }
+       const std::string&                      getValue() const
+       {
+               return value;
+       }
+
+private:
+                                                               Operation(const Operation& other);
+       const std::string                       value;
+};
+
+bool operator == (const Operation& a, const Operation& b)
+{
+       return &a == &b; // a fast & simple address comparison - making copies was disabled
+}
+
+// A namespace containing all SPIRV operations used in those tests.
+namespace op {
+#define OP(name) const Operation name("Op"#name)
+       OP(Capability);
+       OP(Extension);
+       OP(ExtInstImport);
+       OP(EntryPoint);
+       OP(MemoryModel);
+       OP(ExecutionMode);
+
+       OP(Decorate);
+       OP(MemberDecorate);
+       OP(Name);
+       OP(MemberName);
+
+       OP(TypeVoid);
+       OP(TypeBool);
+       OP(TypeInt);
+       OP(TypeFloat);
+       OP(TypeVector);
+       OP(TypeMatrix);
+       OP(TypeArray);
+       OP(TypeStruct);
+       OP(TypeFunction);
+       OP(TypePointer);
+       OP(TypeImage);
+       OP(TypeSampledImage);
+
+       OP(Constant);
+       OP(ConstantComposite);
+       OP(Variable);
+
+       OP(Function);
+       OP(FunctionEnd);
+       OP(Label);
+       OP(Return);
+
+       OP(LogicalEqual);
+       OP(IEqual);
+       OP(Select);
+
+       OP(AccessChain);
+       OP(Load);
+       OP(Store);
+#undef OP
+}
+
+// A class that allows to easily compose SPIRV code.
+// This class automatically keeps correct order of most of operations
+// i.e. capabilities to the top,
+class ShaderStream
+{
+public:
+                                                               ShaderStream ()
+       {}
+       // composes shader string out of shader substreams.
+       std::string                                     str () const
+       {
+               std::stringstream stream;
+               stream << capabilities.str()
+                       << "; ----------------- PREAMBLE -----------------\n"
+                       << preamble.str()
+                       << "; ----------------- DEBUG --------------------\n"
+                       << names.str()
+                       << "; ----------------- DECORATIONS --------------\n"
+                       << decorations.str()
+                       << "; ----------------- TYPES --------------------\n"
+                       << basictypes.str()
+                       << "; ----------------- CONSTANTS ----------------\n"
+                       << constants.str()
+                       << "; ----------------- ADVANCED TYPES -----------\n"
+                       << compositetypes.str()
+                       << ((compositeconstants.str().length() > 0) ? "; ----------------- CONSTANTS ----------------\n" : "")
+                       << compositeconstants.str()
+                       << "; ----------------- VARIABLES & FUNCTIONS ----\n"
+                       << shaderstream.str();
+               return stream.str();
+       }
+       // Functions below are used to push Operations, Variables and other strings, numbers and characters to the shader.
+       // Each function uses selectStream and map subroutines.
+       // selectStream is used to choose a proper substream of shader.
+       // E.g. if an operation is OpConstant it should be put into constants definitions stream - so selectStream will return that stream.
+       // map on the other hand is used to replace Variables and Operations to their in-SPIRV-code representations.
+       // for types like ints or floats map simply calls << operator to produce its string representation
+       // for Operations a proper operation string is returned
+       // for Variables there is a special mapping between in-C++ variable and in-SPIRV-code variable name.
+       // following sequence of functions could be squashed to just two using variadic templates once we move to C++11 or higher
+       // each method returns *this to allow chaining calls to these methods.
+       template <typename T>
+       ShaderStream&                           operator () (const T& a)
+       {
+               selectStream(a, 0) << map(a) << '\n';
+               return *this;
+       }
+       template <typename T1, typename T2>
+       ShaderStream&                           operator () (const T1& a, const T2& b)
+       {
+               selectStream(a, 0) << map(a) << '\t' << map(b) << '\n';
+               return *this;
+       }
+       template <typename T1, typename T2, typename T3>
+       ShaderStream&                           operator () (const T1& a, const T2& b, const T3& c)
+       {
+               selectStream(a, c) << map(a) << '\t' << map(b) << '\t' << map(c) << '\n';
+               return *this;
+       }
+       template <typename T1, typename T2, typename T3, typename T4>
+       ShaderStream&                           operator () (const T1& a, const T2& b, const T3& c, const T4& d)
+       {
+               selectStream(a, c) << map(a) << '\t' << map(b) << '\t' << map(c) << '\t' << map(d) << '\n';
+               return *this;
+       }
+       template <typename T1, typename T2, typename T3, typename T4, typename T5>
+       ShaderStream&                           operator () (const T1& a, const T2& b, const T3& c, const T4& d, const T5& e)
+       {
+               selectStream(a, c) << map(a) << '\t' << map(b) << '\t' << map(c) << '\t' << map(d) << '\t' << map(e) << '\n';
+               return *this;
+       }
+       template <typename T1, typename T2, typename T3, typename T4, typename T5, typename T6>
+       ShaderStream&                           operator () (const T1& a, const T2& b, const T3& c, const T4& d, const T5& e, const T6& f)
+       {
+               selectStream(a, c) << map(a) << '\t' << map(b) << '\t' << map(c) << '\t' << map(d) << '\t' << map(e) << '\t' << map(f) << '\n';
+               return *this;
+       }
+       template <typename T1, typename T2, typename T3, typename T4, typename T5, typename T6, typename T7>
+       ShaderStream&                           operator () (const T1& a, const T2& b, const  T3& c, const T4& d, const T5& e, const T6& f, const T7& g)
+       {
+               selectStream(a, c) << map(a) << '\t' << map(b) << '\t' << map(c) << '\t' << map(d) << '\t' << map(e) << '\t' << map(f) << '\t' << map(g) << '\n';
+               return *this;
+       }
+       template <typename T1, typename T2, typename T3, typename T4, typename T5, typename T6, typename T7, typename T8>
+       ShaderStream&                           operator () (const T1& a, const T2& b, const  T3& c, const T4& d, const T5& e, const T6& f, const T7& g, const T8& h)
+       {
+               selectStream(a, c) << map(a) << '\t' << map(b) << '\t' << map(c) << '\t' << map(d) << '\t' << map(e) << '\t' << map(f) << '\t' << map(g) << '\t' << map(h) << '\n';
+               return *this;
+       }
+       template <typename T1, typename T2, typename T3, typename T4, typename T5, typename T6, typename T7, typename T8, typename T9>
+       ShaderStream&                           operator () (const T1& a, const T2& b, const  T3& c, const T4& d, const T5& e, const T6& f, const T7& g, const T8& h, const T9& i)
+       {
+               selectStream(a, c) << map(a) << '\t' << map(b) << '\t' << map(c) << '\t' << map(d) << '\t' << map(e) << '\t' << map(f) << '\t' << map(g) << '\t' << map(h) << '\t' << map(i) << '\n';
+               return *this;
+       }
+       template <typename T1, typename T2, typename T3, typename T4, typename T5, typename T6, typename T7, typename T8, typename T9, typename T10>
+       ShaderStream&                           operator () (const T1& a, const T2& b, const  T3& c, const T4& d, const T5& e, const T6& f, const T7& g, const T8& h, const T9& i, const T10& k)
+       {
+               selectStream(a, c) << map(a) << '\t' << map(b) << '\t' << map(c) << '\t' << map(d) << '\t' << map(e) << '\t' << map(f) << '\t' << map(g) << '\t' << map(h) << '\t' << map(i) << '\t' << map(k) << '\n';
+               return *this;
+       }
+
+       // returns true if two variables has the same in-SPIRV-code names
+       bool                                            areSame (const Variable a, const Variable b)
+       {
+               VariableIt varA = vars.find(a);
+               VariableIt varB = vars.find(b);
+               return varA != vars.end() && varB != vars.end() && varA->second == varB->second;
+       }
+
+       // makes variable 'a' in-SPIRV-code name to be the same as variable 'b' in-SPIRV-code name
+       void                                            makeSame (const Variable a, const Variable b)
+       {
+               VariableIt varB = vars.find(b);
+               if (varB != vars.end())
+               {
+                       std::pair<VariableIt, bool> inserted = vars.insert(std::make_pair(a, varB->second));
+                       if (!inserted.second)
+                               inserted.first->second = varB->second;
+               }
+       }
+private:
+       // generic version of map (tries to push whatever came to stringstream to get its string representation)
+       template <typename T>
+       std::string                                     map (const T& a)
+       {
+               std::stringstream temp;
+               temp << a;
+               return temp.str();
+       }
+
+       // looks for mapping of c++ Variable object onto in-SPIRV-code name.
+       // if there was not yet such mapping generated a new mapping is created based on incremented local counter.
+       std::string                                     map (const Variable& a)
+       {
+               VariableIt var = vars.find(a);
+               if (var != vars.end())
+                       return var->second;
+               std::stringstream temp;
+               temp << '%';
+               temp.width(4);
+               temp.fill('0');
+               temp << std::hex << varCounter.incrementAndGetValue();
+               vars.insert(std::make_pair(a, temp.str()));
+               return temp.str();
+       }
+
+       // a simple specification for Operation
+       std::string                                     map (const Operation& a)
+       {
+               return a.getValue();
+       }
+
+       // a specification for char* - faster than going through stringstream << operator
+       std::string                                     map (const char*& a)
+       {
+               return std::string(a);
+       }
+
+       // a specification for char - faster than going through stringstream << operator
+       std::string                                     map (const char& a)
+       {
+               return std::string(1, a);
+       }
+
+       // a generic version of selectStream - used when neither 1st nor 3rd SPIRV line token is Operation.
+       // In general should never happen.
+       // All SPIRV lines are constructed in a one of two forms:
+       // Variable = Operation operands...
+       // or
+       // Operation operands...
+       // So operation is either 1st or 3rd token.
+       template <typename T0, typename T1>
+       std::stringstream&                      selectStream (const T0& op0, const T1& op1)
+       {
+               DE_UNREF(op0);
+               DE_UNREF(op1);
+               return shaderstream;
+       }
+
+       // Specialisation for Operation being 1st parameter
+       // Certain operations make the SPIRV code line to be pushed to different substreams.
+       template <typename T1>
+       std::stringstream&                      selectStream (const Operation& op, const T1& op1)
+       {
+               DE_UNREF(op1);
+               if (op == op::Decorate || op == op::MemberDecorate)
+                       return decorations;
+               if (op == op::Name || op == op::MemberName)
+                       return names;
+               if (op == op::Capability || op == op::Extension)
+                       return capabilities;
+               if (op == op::MemoryModel || op == op::ExecutionMode || op == op::EntryPoint)
+                       return preamble;
+               return shaderstream;
+       }
+
+       // Specialisation for Operation being 3rd parameter
+       // Certain operations make the SPIRV code line to be pushed to different substreams.
+       // If we would like to use this way of generating SPIRV we could use this method as SPIRV line validation point
+       // e.g. here instead of heving partial specialisation I could specialise for T0 being Variable since this has to match Variable = Operation operands...
+       template <typename T0>
+       std::stringstream&                      selectStream (const T0& op0, const Operation& op)
+       {
+               DE_UNREF(op0);
+               if (op == op::ExtInstImport)
+                       return preamble;
+               if (op == op::TypeVoid || op == op::TypeBool || op == op::TypeInt || op == op::TypeFloat || op == op::TypeVector || op == op::TypeMatrix)
+                       return basictypes;
+               if (op == op::TypeArray || op == op::TypeStruct || op == op::TypeFunction || op == op::TypePointer || op == op::TypeImage || op == op::TypeSampledImage)
+                       return compositetypes;
+               if (op == op::Constant)
+                       return constants;
+               if (op == op::ConstantComposite)
+                       return compositeconstants;
+               return shaderstream;
+       }
+
+       typedef std::map<Variable, std::string> VariablesPack;
+       typedef VariablesPack::iterator                 VariableIt;
+
+       // local mappings between c++ Variable objects and in-SPIRV-code names
+       VariablesPack                           vars;
+
+       // shader substreams
+       std::stringstream                       capabilities;
+       std::stringstream                       preamble;
+       std::stringstream                       names;
+       std::stringstream                       decorations;
+       std::stringstream                       basictypes;
+       std::stringstream                       constants;
+       std::stringstream                       compositetypes;
+       std::stringstream                       compositeconstants;
+       std::stringstream                       shaderstream;
+
+       // local incremented counter
+       Autocounter                                     varCounter;
+};
+
+// A suppliementary class to group frequently used Variables together
+class Variables
+{
+public:
+                                                               Variables (Autocounter &autoincrement)
+               : version(autoincrement)
+               , mainFunc(autoincrement)
+               , mainFuncLabel(autoincrement)
+               , voidFuncVoid(autoincrement)
+               , copy_type(autoincrement)
+               , copy_type_vec(autoincrement)
+               , buffer_type_vec(autoincrement)
+               , copy_type_ptr(autoincrement)
+               , buffer_type(autoincrement)
+               , voidId(autoincrement)
+               , v4f32(autoincrement)
+               , v4s32(autoincrement)
+               , v4u32(autoincrement)
+               , s32(autoincrement)
+               , f32(autoincrement)
+               , u32(autoincrement)
+               , boolean(autoincrement)
+               , array_content_type(autoincrement)
+               , s32_type_ptr(autoincrement)
+               , dataSelectorStructPtrType(autoincrement)
+               , dataSelectorStructPtr(autoincrement)
+               , dataArrayType(autoincrement)
+               , dataInput(autoincrement)
+               , dataInputPtrType(autoincrement)
+               , dataInputType(autoincrement)
+               , dataInputSampledType(autoincrement)
+               , dataOutput(autoincrement)
+               , dataOutputPtrType(autoincrement)
+               , dataOutputType(autoincrement)
+               , dataSelectorStructType(autoincrement)
+               , input(autoincrement)
+               , inputPtr(autoincrement)
+               , output(autoincrement)
+               , outputPtr(autoincrement)
+       {
+               for (deUint32 i = 0; i < 32; ++i)
+                       constants.push_back(Variable(autoincrement));
+       }
+       const Variable                          version;
+       const Variable                          mainFunc;
+       const Variable                          mainFuncLabel;
+       const Variable                          voidFuncVoid;
+       std::vector<Variable>           constants;
+       const Variable                          copy_type;
+       const Variable                          copy_type_vec;
+       const Variable                          buffer_type_vec;
+       const Variable                          copy_type_ptr;
+       const Variable                          buffer_type;
+       const Variable                          voidId;
+       const Variable                          v4f32;
+       const Variable                          v4s32;
+       const Variable                          v4u32;
+       const Variable                          s32;
+       const Variable                          f32;
+       const Variable                          u32;
+       const Variable                          boolean;
+       const Variable                          array_content_type;
+       const Variable                          s32_type_ptr;
+       const Variable                          dataSelectorStructPtrType;
+       const Variable                          dataSelectorStructPtr;
+       const Variable                          dataArrayType;
+       const Variable                          dataInput;
+       const Variable                          dataInputPtrType;
+       const Variable                          dataInputType;
+       const Variable                          dataInputSampledType;
+       const Variable                          dataOutput;
+       const Variable                          dataOutputPtrType;
+       const Variable                          dataOutputType;
+       const Variable                          dataSelectorStructType;
+       const Variable                          input;
+       const Variable                          inputPtr;
+       const Variable                          output;
+       const Variable                          outputPtr;
+};
+
+// A routing generating SPIRV code for all test cases in this group
+std::string MakeShader(VkShaderStageFlags shaderStage, ShaderType shaderType, VkFormat bufferFormat, bool reads, bool dummy)
+{
+       // faster to write
+       const char                                      is                                      = '=';
+
+       // variables require such counter to generate their unique ids. Since there is possibility that in the future this code will
+       // run parallel this counter is made local to this function body to be safe.
+       Autocounter                                     localcounter;
+
+       // A frequently used Variables (gathered into this single object for readability)
+       Variables                                       var                                     (localcounter);
+
+       // A SPIRV code builder
+       ShaderStream                            shaderSource;
+
+       // A basic preamble of SPIRV shader. Turns on required capabilities and extensions.
+       shaderSource
+       (op::Capability, "Shader")
+       (op::Capability, "VariablePointersStorageBuffer")
+       (op::Extension, "\"SPV_KHR_storage_buffer_storage_class\"")
+       (op::Extension, "\"SPV_KHR_variable_pointers\"")
+       (var.version, is, op::ExtInstImport, "\"GLSL.std.450\"")
+       (op::MemoryModel, "Logical", "GLSL450");
+
+       // Use correct entry point definition depending on shader stage
+       if (shaderStage == VK_SHADER_STAGE_COMPUTE_BIT)
+       {
+               shaderSource
+               (op::EntryPoint, "GLCompute", var.mainFunc, "\"main\"")
+               (op::ExecutionMode, var.mainFunc, "LocalSize", 1, 1, 1);
+       }
+       else if (shaderStage == VK_SHADER_STAGE_VERTEX_BIT)
+       {
+               shaderSource
+               (op::EntryPoint, "Vertex", var.mainFunc, "\"main\"", var.input, var.output)
+               (op::Decorate, var.output, "BuiltIn", "Position")
+               (op::Decorate, var.input, "Location", 0);
+       }
+       else if (shaderStage == VK_SHADER_STAGE_FRAGMENT_BIT)
+       {
+               shaderSource
+               (op::EntryPoint, "Fragment", var.mainFunc, "\"main\"", var.output)
+               (op::ExecutionMode, var.mainFunc, "OriginUpperLeft")
+               (op::Decorate, var.output, "Location", 0);
+       }
+
+       // If we are testing vertex shader or fragment shader we need to provide the other one for the pipeline too.
+       // So the not tested one is 'dummy'. It is then a minimal/simplest possible pass-through shader.
+       // If we are testing compute shader we dont need dummy shader at all.
+       if (dummy)
+       {
+               if (shaderStage == VK_SHADER_STAGE_FRAGMENT_BIT)
+               {
+                       shaderSource
+                       (var.voidId, is, op::TypeVoid)
+                       (var.voidFuncVoid, is, op::TypeFunction, var.voidId)
+                       (var.f32, is, op::TypeFloat, 32)
+                       (var.v4f32, is, op::TypeVector, var.f32, 4)
+                       (var.outputPtr, is, op::TypePointer, "Output", var.v4f32)
+                       (var.output, is, op::Variable, var.outputPtr, "Output")
+                       (var.constants[6], is, op::Constant, var.f32, 1)
+                       (var.constants[7], is, op::ConstantComposite, var.v4f32, var.constants[6], var.constants[6], var.constants[6], var.constants[6])
+                       (var.mainFunc, is, op::Function, var.voidId, "None", var.voidFuncVoid)
+                       (var.mainFuncLabel, is, op::Label);
+               }
+               else if (shaderStage == VK_SHADER_STAGE_VERTEX_BIT)
+               {
+                       shaderSource
+                       (var.voidId, is, op::TypeVoid)
+                       (var.voidFuncVoid, is, op::TypeFunction , var.voidId)
+                       (var.f32, is, op::TypeFloat, 32)
+                       (var.v4f32, is, op::TypeVector , var.f32, 4)
+                       (var.outputPtr, is, op::TypePointer, "Output" , var.v4f32)
+                       (var.output, is, op::Variable , var.outputPtr, "Output")
+                       (var.inputPtr, is, op::TypePointer, "Input" , var.v4f32)
+                       (var.input, is, op::Variable , var.inputPtr, "Input")
+                       (var.mainFunc, is, op::Function , var.voidId, "None", var.voidFuncVoid)
+                       (var.mainFuncLabel, is, op::Label);
+               }
+       }
+       else // this is a start of actual shader that tests variable pointers
+       {
+               shaderSource
+               (op::Decorate, var.dataInput, "DescriptorSet", 0)
+               (op::Decorate, var.dataInput, "Binding", 0)
+
+               (op::Decorate, var.dataOutput, "DescriptorSet", 0)
+               (op::Decorate, var.dataOutput, "Binding", 1);
+
+               // for scalar types and vector types we use 1024 element array of 4 elements arrays of 4-component vectors
+               // so the stride of internal array is size of 4-component vector
+               if (shaderType == SHADER_TYPE_SCALAR_COPY || shaderType == SHADER_TYPE_VECTOR_COPY)
+               {
+                       shaderSource
+                       (op::Decorate, var.array_content_type, "ArrayStride", 16);
+               }
+               // for matrices we use array of 4x4-component matrices
+               // stride of outer array is then 64 in every case
+               shaderSource
+               (op::Decorate, var.dataArrayType, "ArrayStride", 64)
+
+               // an output block
+               (op::MemberDecorate, var.dataOutputType, 0, "Offset", 0)
+               (op::Decorate, var.dataOutputType, "Block")
+
+               // an input block. Marked readonly.
+               (op::MemberDecorate, var.dataInputType, 0, "NonWritable")
+               (op::MemberDecorate, var.dataInputType, 0, "Offset", 0)
+               (op::Decorate, var.dataInputType, "Block")
+
+               //a special structure matching data in one of our buffers.
+               // member at 0 is an index to read position
+               // member at 1 is an index to write position
+               // member at 2 is always zero. It is used to perform OpSelect. I used value coming from buffer to avoid incidental optimisations that could prune OpSelect if the value was compile time known.
+               (op::MemberDecorate, var.dataSelectorStructType, 0, "Offset", 0)
+               (op::MemberDecorate, var.dataSelectorStructType, 1, "Offset", 4)
+               (op::MemberDecorate, var.dataSelectorStructType, 2, "Offset", 8)
+               (op::Decorate, var.dataSelectorStructType, "Block")
+
+               // binding to matching buffer
+               (op::Decorate, var.dataSelectorStructPtr, "DescriptorSet", 0)
+               (op::Decorate, var.dataSelectorStructPtr, "Binding", 2)
+
+               // making composite types used in shader
+               (var.voidId, is, op::TypeVoid)
+               (var.voidFuncVoid, is, op::TypeFunction, var.voidId)
+
+               (var.boolean, is, op::TypeBool)
+
+               (var.f32, is, op::TypeFloat, 32)
+               (var.s32, is, op::TypeInt, 32, 1)
+               (var.u32, is, op::TypeInt, 32, 0)
+
+               (var.v4f32, is, op::TypeVector, var.f32, 4)
+               (var.v4s32, is, op::TypeVector, var.s32, 4)
+               (var.v4u32, is, op::TypeVector, var.u32, 4);
+
+               // since the shared tests scalars, vectors, matrices of ints, uints and floats I am generating alternative names for some of the types so I can use those and not need to use "if" everywhere.
+               // A Variable mappings will make sure the proper variable name is used
+               // below is a first part of aliasing types based on int, uint, float
+               switch (bufferFormat)
+               {
+               case vk::VK_FORMAT_R32_SINT:
+                       shaderSource.makeSame(var.buffer_type, var.s32);
+                       shaderSource.makeSame(var.buffer_type_vec, var.v4s32);
+                       break;
+               case vk::VK_FORMAT_R32_UINT:
+                       shaderSource.makeSame(var.buffer_type, var.u32);
+                       shaderSource.makeSame(var.buffer_type_vec, var.v4u32);
+                       break;
+               case vk::VK_FORMAT_R32_SFLOAT:
+                       shaderSource.makeSame(var.buffer_type, var.f32);
+                       shaderSource.makeSame(var.buffer_type_vec, var.v4f32);
+                       break;
+               default:
+                       // to prevent compiler from complaining not all cases are handled (but we should not get here).
+                       deAssertFail("This point should be not reachable with correct program flow.", __FILE__, __LINE__);
+                       break;
+               }
+
+               // below is a second part that aliases based on scalar, vector, matrix
+               switch (shaderType)
+               {
+               case SHADER_TYPE_SCALAR_COPY:
+                       shaderSource.makeSame(var.copy_type, var.buffer_type);
+                       break;
+               case SHADER_TYPE_VECTOR_COPY:
+                       shaderSource.makeSame(var.copy_type, var.buffer_type_vec);
+                       break;
+               case SHADER_TYPE_MATRIX_COPY:
+                       if (bufferFormat != VK_FORMAT_R32_SFLOAT)
+                               TCU_THROW(NotSupportedError, "Matrices can be used only with floating point types.");
+                       shaderSource
+                       (var.copy_type, is, op::TypeMatrix, var.buffer_type_vec, 4);
+                       break;
+               default:
+                       // to prevent compiler from complaining not all cases are handled (but we should not get here).
+                       deAssertFail("This point should be not reachable with correct program flow.", __FILE__, __LINE__);
+                       break;
+               }
+
+               // I will need some constants so lets add them to shader source
+               shaderSource
+               (var.constants[0], is, op::Constant, var.s32, 0)
+               (var.constants[1], is, op::Constant, var.s32, 1)
+               (var.constants[2], is, op::Constant, var.s32, 2)
+               (var.constants[3], is, op::Constant, var.s32, 3)
+               (var.constants[4], is, op::Constant, var.u32, 4)
+               (var.constants[5], is, op::Constant, var.u32, 1024);
+
+               // for fragment shaders I need additionally a constant vector (output "colour") so lets make it
+               if (shaderStage == VK_SHADER_STAGE_FRAGMENT_BIT)
+               {
+                       shaderSource
+                       (var.constants[6], is, op::Constant, var.f32, 1)
+                       (var.constants[7], is, op::ConstantComposite, var.v4f32, var.constants[6], var.constants[6], var.constants[6], var.constants[6]);
+               }
+
+               // additional alias for the type of content of this 1024-element outer array.
+               if (shaderType == SHADER_TYPE_SCALAR_COPY || shaderType == SHADER_TYPE_VECTOR_COPY)
+               {
+                       shaderSource
+                       (var.array_content_type, is, op::TypeArray, var.buffer_type_vec, var.constants[4]);
+               }
+               else
+               {
+                       shaderSource.makeSame(var.array_content_type, var.copy_type);
+               }
+
+               // Lets create pointer types to the input data type, output data type and a struct
+               // This must be distinct types due to different type decorations
+               // Lets make also actual poiters to the data
+               shaderSource
+               (var.dataArrayType, is, op::TypeArray, var.array_content_type, var.constants[5])
+               (var.dataInputType, is, op::TypeStruct, var.dataArrayType)
+               (var.dataOutputType, is, op::TypeStruct, var.dataArrayType)
+               (var.dataInputPtrType, is, op::TypePointer, "StorageBuffer", var.dataInputType)
+               (var.dataOutputPtrType, is, op::TypePointer, "StorageBuffer", var.dataOutputType)
+               (var.dataInput, is, op::Variable, var.dataInputPtrType, "StorageBuffer")
+               (var.dataOutput, is, op::Variable, var.dataOutputPtrType, "StorageBuffer")
+               (var.dataSelectorStructType, is, op::TypeStruct, var.s32, var.s32, var.s32)
+               (var.dataSelectorStructPtrType, is, op::TypePointer, "Uniform", var.dataSelectorStructType)
+               (var.dataSelectorStructPtr, is, op::Variable, var.dataSelectorStructPtrType, "Uniform");
+
+               // we need also additional pointers to fullfil stage requirements on shaders inputs and outputs
+               if (shaderStage == VK_SHADER_STAGE_VERTEX_BIT)
+               {
+                       shaderSource
+                       (var.inputPtr, is, op::TypePointer, "Input", var.v4f32)
+                       (var.input, is, op::Variable, var.inputPtr, "Input")
+                       (var.outputPtr, is, op::TypePointer, "Output", var.v4f32)
+                       (var.output, is, op::Variable, var.outputPtr, "Output");
+               }
+               else if (shaderStage == VK_SHADER_STAGE_FRAGMENT_BIT)
+               {
+                       shaderSource
+                       (var.outputPtr, is, op::TypePointer, "Output", var.v4f32)
+                       (var.output, is, op::Variable, var.outputPtr, "Output");
+               }
+
+               shaderSource
+               (var.copy_type_ptr, is, op::TypePointer, "StorageBuffer", var.copy_type)
+               (var.s32_type_ptr, is, op::TypePointer, "Uniform", var.s32);
+
+               // Make a shader main function
+               shaderSource
+               (var.mainFunc, is, op::Function, var.voidId, "None", var.voidFuncVoid)
+               (var.mainFuncLabel, is, op::Label);
+
+               Variable copyFromPtr(localcounter), copyToPtr(localcounter), zeroPtr(localcounter);
+               Variable copyFrom(localcounter), copyTo(localcounter), zero(localcounter);
+
+               // Lets load data from our auxiliary buffer with reading index, writing index and zero.
+               shaderSource
+               (copyToPtr, is, op::AccessChain, var.s32_type_ptr, var.dataSelectorStructPtr, var.constants[1])
+               (copyTo, is, op::Load, var.s32, copyToPtr)
+               (copyFromPtr, is, op::AccessChain, var.s32_type_ptr, var.dataSelectorStructPtr, var.constants[0])
+               (copyFrom, is, op::Load, var.s32, copyFromPtr)
+               (zeroPtr, is, op::AccessChain, var.s32_type_ptr, var.dataSelectorStructPtr, var.constants[2])
+               (zero, is, op::Load, var.s32, zeroPtr);
+
+               // let start copying data using variable pointers
+               switch (shaderType)
+               {
+               case SHADER_TYPE_SCALAR_COPY:
+                       for (int i = 0; i < 4; ++i)
+                       {
+                               for (int j = 0; j < 4; ++j)
+                               {
+                                       Variable actualLoadChain(localcounter), actualStoreChain(localcounter), loadResult(localcounter);
+                                       Variable selection(localcounter);
+                                       Variable lcA(localcounter), lcB(localcounter), scA(localcounter), scB(localcounter);
+
+                                       shaderSource
+                                       (selection, is, op::IEqual, var.boolean, zero, var.constants[0]);
+
+                                       if (reads)
+                                       {
+                                               // if we check reads we use variable pointers only for reading part
+                                               shaderSource
+                                               (lcA, is, op::AccessChain, var.copy_type_ptr, var.dataInput, var.constants[0], copyFrom, var.constants[i], var.constants[j])
+                                               (lcB, is, op::AccessChain, var.copy_type_ptr, var.dataInput, var.constants[0], copyFrom, var.constants[i], var.constants[j])
+                                               // actualLoadChain will be a variable pointer as it was created through OpSelect
+                                               (actualLoadChain, is, op::Select, var.copy_type_ptr, selection, lcA, lcB)
+                                               // actualStoreChain will be a regular pointer
+                                               (actualStoreChain, is, op::AccessChain, var.copy_type_ptr, var.dataOutput, var.constants[0], copyTo, var.constants[i], var.constants[j]);
+                                       }
+                                       else
+                                       {
+                                               // if we check writes we use variable pointers only for writing part only
+                                               shaderSource
+                                               // actualLoadChain will be regular regualar pointer
+                                               (actualLoadChain, is, op::AccessChain, var.copy_type_ptr, var.dataInput, var.constants[0], copyFrom, var.constants[i], var.constants[j])
+                                               (scA, is, op::AccessChain, var.copy_type_ptr, var.dataOutput, var.constants[0], copyTo, var.constants[i], var.constants[j])
+                                               (scB, is, op::AccessChain, var.copy_type_ptr, var.dataOutput, var.constants[0], copyTo, var.constants[i], var.constants[j])
+                                               // actualStoreChain will be a variable pointer as it was created through OpSelect
+                                               (actualStoreChain, is, op::Select, var.copy_type_ptr, selection, scA, scB);
+                                       }
+                                       // do actual copying
+                                       shaderSource
+                                       (loadResult, is, op::Load, var.copy_type, actualLoadChain)
+                                       (op::Store, actualStoreChain, loadResult);
+                               }
+                       }
+                       break;
+               // cases below have the same logic as the one above - just we are copying bigger chunks of data with every load/store pair
+               case SHADER_TYPE_VECTOR_COPY:
+                       for (int i = 0; i < 4; ++i)
+                       {
+                               Variable actualLoadChain(localcounter), actualStoreChain(localcounter), loadResult(localcounter);
+                               Variable selection(localcounter);
+                               Variable lcA(localcounter), lcB(localcounter), scA(localcounter), scB(localcounter);
+
+                               shaderSource
+                               (selection, is, op::IEqual, var.boolean, zero, var.constants[0]);
+
+                               if (reads)
+                               {
+                                       shaderSource
+                                       (lcA, is, op::AccessChain, var.copy_type_ptr, var.dataInput, var.constants[0], copyFrom, var.constants[i])
+                                       (lcB, is, op::AccessChain, var.copy_type_ptr, var.dataInput, var.constants[0], copyFrom, var.constants[i])
+                                       (actualLoadChain, is, op::Select, var.copy_type_ptr, selection, lcA, lcB)
+                                       (actualStoreChain, is, op::AccessChain, var.copy_type_ptr, var.dataOutput, var.constants[0], copyTo, var.constants[i]);
+                               }
+                               else
+                               {
+                                       shaderSource
+                                       (actualLoadChain, is, op::AccessChain, var.copy_type_ptr, var.dataInput, var.constants[0], copyFrom, var.constants[i])
+                                       (scA, is, op::AccessChain, var.copy_type_ptr, var.dataOutput, var.constants[0], copyTo, var.constants[i])
+                                       (scB, is, op::AccessChain, var.copy_type_ptr, var.dataOutput, var.constants[0], copyTo, var.constants[i])
+                                       (actualStoreChain, is, op::Select, var.copy_type_ptr, selection, scA, scB);
+                               }
+
+                               shaderSource
+                               (loadResult, is, op::Load, var.copy_type, actualLoadChain)
+                               (op::Store, actualStoreChain, loadResult);
+                       }
+                       break;
+               case SHADER_TYPE_MATRIX_COPY:
+                       {
+                               Variable actualLoadChain(localcounter), actualStoreChain(localcounter), loadResult(localcounter);
+                               Variable selection(localcounter);
+                               Variable lcA(localcounter), lcB(localcounter), scA(localcounter), scB(localcounter);
+
+                               shaderSource
+                               (selection, is, op::IEqual, var.boolean, zero, var.constants[0]);
+
+                               if (reads)
+                               {
+                                       shaderSource
+                                       (lcA, is, op::AccessChain, var.copy_type_ptr, var.dataInput, var.constants[0], copyFrom)
+                                       (lcB, is, op::AccessChain, var.copy_type_ptr, var.dataInput, var.constants[0], copyFrom)
+                                       (actualLoadChain, is, op::Select, var.copy_type_ptr, selection, lcA, lcB)
+                                       (actualStoreChain, is, op::AccessChain, var.copy_type_ptr, var.dataOutput, var.constants[0], copyTo);
+                               }
+                               else
+                               {
+                                       shaderSource
+                                       (actualLoadChain, is, op::AccessChain, var.copy_type_ptr, var.dataInput, var.constants[0], copyFrom)
+                                       (scA, is, op::AccessChain, var.copy_type_ptr, var.dataOutput, var.constants[0], copyTo)
+                                       (scB, is, op::AccessChain, var.copy_type_ptr, var.dataOutput, var.constants[0], copyTo)
+                                       (actualStoreChain, is, op::Select, var.copy_type_ptr, selection, scA, scB);
+                               }
+
+                               shaderSource
+                               (loadResult, is, op::Load, var.copy_type, actualLoadChain)
+                               (op::Store, actualStoreChain, loadResult);
+                       }
+                       break;
+               default:
+                       // to prevent compiler from complaining not all cases are handled (but we should not get here).
+                       deAssertFail("This point should be not reachable with correct program flow.", __FILE__, __LINE__);
+                       break;
+               }
+       }
+
+       // This is common for test shaders and dummy ones
+       // We need to fill stage ouput from shader properly
+       // output vertices positions in vertex shader
+       if (shaderStage == VK_SHADER_STAGE_VERTEX_BIT)
+       {
+               Variable inputValue(localcounter), outputLocation(localcounter);
+               shaderSource
+               (inputValue, is, op::Load, var.v4f32, var.input)
+               (outputLocation, is, op::AccessChain, var.outputPtr, var.output)
+               (op::Store, outputLocation, inputValue);
+       }
+       // output colour in fragment shader
+       else if (shaderStage == VK_SHADER_STAGE_FRAGMENT_BIT)
+       {
+               shaderSource
+               (op::Store, var.output, var.constants[7]);
+       }
+
+       // We are done. Lets close main function body
+       shaderSource
+       (op::Return)
+       (op::FunctionEnd);
+
+       return shaderSource.str();
+}
+
+RobustReadTest::RobustReadTest (tcu::TestContext&              testContext,
+                                                               const std::string&              name,
+                                                               const std::string&              description,
+                                                               VkShaderStageFlags              shaderStage,
+                                                               ShaderType                              shaderType,
+                                                               VkFormat                                bufferFormat,
+                                                               VkDeviceSize                    readAccessRange,
+                                                               bool                                    accessOutOfBackingMemory)
+       : RobustAccessWithPointersTest  (testContext, name, description, shaderStage, shaderType, bufferFormat)
+       , m_readAccessRange                             (readAccessRange)
+       , m_accessOutOfBackingMemory    (accessOutOfBackingMemory)
+{
+}
+
+TestInstance* RobustReadTest::createInstance (Context& context) const
+{
+       VkPhysicalDeviceVariablePointerFeatures pointerFeatures = querySupportedVariablePointersFeatures(context.getUsedApiVersion(), context.getInstanceInterface(), context.getPhysicalDevice(), context.getInstanceExtensions());
+
+       if (pointerFeatures.variablePointersStorageBuffer != DE_TRUE)
+               return new NotSupportedInstance(context, std::string("VariablePointersStorageBuffer support is required for this test."));
+
+       // We need a device with enabled robust buffer access feature (it is disabled in default device)
+       Move<VkDevice>  device = createRobustBufferAccessDevice(context);
+       return new ReadInstance(context, device, m_shaderType, m_shaderStage, m_bufferFormat, m_readAccessRange, m_accessOutOfBackingMemory);
+}
+
+void RobustReadTest::initPrograms(SourceCollections&   programCollection) const
+{
+       if (m_shaderStage == VK_SHADER_STAGE_COMPUTE_BIT)
+       {
+               programCollection.spirvAsmSources.add("compute") << MakeShader(VK_SHADER_STAGE_COMPUTE_BIT, m_shaderType, m_bufferFormat, true, false);
+       }
+       else
+       {
+               programCollection.spirvAsmSources.add("vertex") << MakeShader(VK_SHADER_STAGE_VERTEX_BIT, m_shaderType, m_bufferFormat, true, m_shaderStage != VK_SHADER_STAGE_VERTEX_BIT);
+               programCollection.spirvAsmSources.add("fragment") << MakeShader(VK_SHADER_STAGE_FRAGMENT_BIT, m_shaderType, m_bufferFormat, true, m_shaderStage != VK_SHADER_STAGE_FRAGMENT_BIT);
+       }
+}
+
+RobustWriteTest::RobustWriteTest (tcu::TestContext&            testContext,
+                                                                 const std::string&    name,
+                                                                 const std::string&    description,
+                                                                 VkShaderStageFlags    shaderStage,
+                                                                 ShaderType                    shaderType,
+                                                                 VkFormat                              bufferFormat,
+                                                                 VkDeviceSize                  writeAccessRange,
+                                                                 bool                                  accessOutOfBackingMemory)
+
+       : RobustAccessWithPointersTest  (testContext, name, description, shaderStage, shaderType, bufferFormat)
+       , m_writeAccessRange                    (writeAccessRange)
+       , m_accessOutOfBackingMemory    (accessOutOfBackingMemory)
+{
+}
+
+TestInstance* RobustWriteTest::createInstance (Context& context) const
+{
+       VkPhysicalDeviceVariablePointerFeatures pointerFeatures = querySupportedVariablePointersFeatures(context.getUsedApiVersion(), context.getInstanceInterface(), context.getPhysicalDevice(), context.getInstanceExtensions());
+       if (pointerFeatures.variablePointersStorageBuffer != DE_TRUE)
+               return new NotSupportedInstance(context, std::string("VariablePointersStorageBuffer support is required for this test."));
+
+       // We need a device with enabled robust buffer access feature (it is disabled in default device)
+       Move<VkDevice>  device = createRobustBufferAccessDevice(context);
+       return new WriteInstance(context, device, m_shaderType, m_shaderStage, m_bufferFormat, m_writeAccessRange, m_accessOutOfBackingMemory);
+}
+
+void RobustWriteTest::initPrograms(SourceCollections&  programCollection) const
+{
+       if (m_shaderStage == VK_SHADER_STAGE_COMPUTE_BIT)
+       {
+               programCollection.spirvAsmSources.add("compute") << MakeShader(VK_SHADER_STAGE_COMPUTE_BIT, m_shaderType, m_bufferFormat, false, false);
+       }
+       else
+       {
+               programCollection.spirvAsmSources.add("vertex") << MakeShader(VK_SHADER_STAGE_VERTEX_BIT, m_shaderType, m_bufferFormat, false, m_shaderStage != VK_SHADER_STAGE_VERTEX_BIT);
+               programCollection.spirvAsmSources.add("fragment") << MakeShader(VK_SHADER_STAGE_FRAGMENT_BIT, m_shaderType, m_bufferFormat, false, m_shaderStage != VK_SHADER_STAGE_FRAGMENT_BIT);
+       }
+}
+
+AccessInstance::AccessInstance (Context&                       context,
+                                                               Move<VkDevice>          device,
+                                                               ShaderType                      shaderType,
+                                                               VkShaderStageFlags      shaderStage,
+                                                               VkFormat                        bufferFormat,
+                                                               BufferAccessType        bufferAccessType,
+                                                               VkDeviceSize            inBufferAccessRange,
+                                                               VkDeviceSize            outBufferAccessRange,
+                                                               bool                            accessOutOfBackingMemory)
+       : vkt::TestInstance                             (context)
+       , m_device                                              (device)
+       , m_shaderType                                  (shaderType)
+       , m_shaderStage                                 (shaderStage)
+       , m_bufferFormat                                (bufferFormat)
+       , m_bufferAccessType                    (bufferAccessType)
+       , m_accessOutOfBackingMemory    (accessOutOfBackingMemory)
+{
+       tcu::TestLog&                                                                   log                                             = context.getTestContext().getLog();
+       const DeviceInterface&                                                  vk                                              = context.getDeviceInterface();
+       const deUint32                                                                  queueFamilyIndex                = context.getUniversalQueueFamilyIndex();
+       SimpleAllocator                                                                 memAlloc                                (vk, *m_device, getPhysicalDeviceMemoryProperties(m_context.getInstanceInterface(), m_context.getPhysicalDevice()));
+
+       DE_ASSERT(RobustAccessWithPointersTest::s_numberOfBytesAccessed % sizeof(deUint32) == 0);
+       DE_ASSERT(inBufferAccessRange <= RobustAccessWithPointersTest::s_numberOfBytesAccessed);
+       DE_ASSERT(outBufferAccessRange <= RobustAccessWithPointersTest::s_numberOfBytesAccessed);
+
+       // Check storage support
+       if (shaderStage == VK_SHADER_STAGE_VERTEX_BIT)
+       {
+               if (!context.getDeviceFeatures().vertexPipelineStoresAndAtomics)
+               {
+                       TCU_THROW(NotSupportedError, "Stores not supported in vertex stage");
+               }
+       }
+       else if (shaderStage == VK_SHADER_STAGE_FRAGMENT_BIT)
+       {
+               if (!context.getDeviceFeatures().fragmentStoresAndAtomics)
+               {
+                       TCU_THROW(NotSupportedError, "Stores not supported in fragment stage");
+               }
+       }
+
+       createTestBuffer(vk, *m_device, inBufferAccessRange, VK_BUFFER_USAGE_STORAGE_BUFFER_BIT, memAlloc, m_inBuffer, m_inBufferAlloc, m_inBufferAccess, &populateBufferWithValues, &m_bufferFormat);
+       createTestBuffer(vk, *m_device, outBufferAccessRange, VK_BUFFER_USAGE_STORAGE_BUFFER_BIT, memAlloc, m_outBuffer, m_outBufferAlloc, m_outBufferAccess, &populateBufferWithDummy, DE_NULL);
+
+       deInt32 indices[] = {
+               (m_accessOutOfBackingMemory && (m_bufferAccessType == BUFFER_ACCESS_TYPE_READ_FROM_STORAGE)) ? static_cast<deInt32>(RobustAccessWithPointersTest::s_testArraySize) - 1 : 0,
+               (m_accessOutOfBackingMemory && (m_bufferAccessType == BUFFER_ACCESS_TYPE_WRITE_TO_STORAGE)) ? static_cast<deInt32>(RobustAccessWithPointersTest::s_testArraySize) - 1 : 0,
+               0
+       };
+       AccessRangesData indicesAccess;
+       createTestBuffer(vk, *m_device, 3 * sizeof(deInt32), VK_BUFFER_USAGE_UNIFORM_BUFFER_BIT, memAlloc, m_indicesBuffer, m_indicesBufferAlloc, indicesAccess, &populateBufferWithCopy, &indices);
+
+       log << tcu::TestLog::Message << "input  buffer - alloc size: " << m_inBufferAccess.allocSize << tcu::TestLog::EndMessage;
+       log << tcu::TestLog::Message << "input  buffer - max access range: " << m_inBufferAccess.maxAccessRange << tcu::TestLog::EndMessage;
+       log << tcu::TestLog::Message << "output buffer - alloc size: " << m_outBufferAccess.allocSize << tcu::TestLog::EndMessage;
+       log << tcu::TestLog::Message << "output buffer - max access range: " << m_outBufferAccess.maxAccessRange << tcu::TestLog::EndMessage;
+       log << tcu::TestLog::Message << "indices - input offset: " << indices[0] << tcu::TestLog::EndMessage;
+       log << tcu::TestLog::Message << "indices - output offset: " << indices[1] << tcu::TestLog::EndMessage;
+       log << tcu::TestLog::Message << "indices - additional: " << indices[2] << tcu::TestLog::EndMessage;
+
+       // Create descriptor data
+       {
+               DescriptorPoolBuilder                                           descriptorPoolBuilder;
+               descriptorPoolBuilder.addType(VK_DESCRIPTOR_TYPE_STORAGE_BUFFER, 1u);
+               descriptorPoolBuilder.addType(VK_DESCRIPTOR_TYPE_STORAGE_BUFFER, 1u);
+               descriptorPoolBuilder.addType(VK_DESCRIPTOR_TYPE_UNIFORM_BUFFER, 1u);
+               m_descriptorPool = descriptorPoolBuilder.build(vk, *m_device, VK_DESCRIPTOR_POOL_CREATE_FREE_DESCRIPTOR_SET_BIT, 1u);
+
+               DescriptorSetLayoutBuilder                                      setLayoutBuilder;
+               setLayoutBuilder.addSingleBinding(VK_DESCRIPTOR_TYPE_STORAGE_BUFFER, VK_SHADER_STAGE_ALL);
+               setLayoutBuilder.addSingleBinding(VK_DESCRIPTOR_TYPE_STORAGE_BUFFER, VK_SHADER_STAGE_ALL);
+               setLayoutBuilder.addSingleBinding(VK_DESCRIPTOR_TYPE_UNIFORM_BUFFER, VK_SHADER_STAGE_ALL);
+               m_descriptorSetLayout = setLayoutBuilder.build(vk, *m_device);
+
+               const VkDescriptorSetAllocateInfo                       descriptorSetAllocateInfo =
+               {
+                       VK_STRUCTURE_TYPE_DESCRIPTOR_SET_ALLOCATE_INFO,         // VkStructureType      sType;
+                       DE_NULL,                                                                // const void*                                  pNext;
+                       *m_descriptorPool,                                              // VkDescriptorPool                             descriptorPool;
+                       1u,                                                                             // deUint32                                             setLayoutCount;
+                       &m_descriptorSetLayout.get()                    // const VkDescriptorSetLayout* pSetLayouts;
+               };
+
+               m_descriptorSet = allocateDescriptorSet(vk, *m_device, &descriptorSetAllocateInfo);
+
+               const VkDescriptorBufferInfo                            inBufferDescriptorInfo                  = makeDescriptorBufferInfo(*m_inBuffer, 0ull, m_inBufferAccess.accessRange);
+               const VkDescriptorBufferInfo                            outBufferDescriptorInfo                 = makeDescriptorBufferInfo(*m_outBuffer, 0ull, m_outBufferAccess.accessRange);
+               const VkDescriptorBufferInfo                            indicesBufferDescriptorInfo             = makeDescriptorBufferInfo(*m_indicesBuffer, 0ull, 12ull);
+
+               DescriptorSetUpdateBuilder                                      setUpdateBuilder;
+               setUpdateBuilder.writeSingle(*m_descriptorSet, DescriptorSetUpdateBuilder::Location::binding(0), VK_DESCRIPTOR_TYPE_STORAGE_BUFFER, &inBufferDescriptorInfo);
+               setUpdateBuilder.writeSingle(*m_descriptorSet, DescriptorSetUpdateBuilder::Location::binding(1), VK_DESCRIPTOR_TYPE_STORAGE_BUFFER, &outBufferDescriptorInfo);
+               setUpdateBuilder.writeSingle(*m_descriptorSet, DescriptorSetUpdateBuilder::Location::binding(2), VK_DESCRIPTOR_TYPE_UNIFORM_BUFFER, &indicesBufferDescriptorInfo);
+               setUpdateBuilder.update(vk, *m_device);
+       }
+
+       // Create fence
+       {
+               const VkFenceCreateInfo fenceParams =
+               {
+                       VK_STRUCTURE_TYPE_FENCE_CREATE_INFO,    // VkStructureType                      sType;
+                       DE_NULL,                                                                // const void*                          pNext;
+                       0u                                                                              // VkFenceCreateFlags           flags;
+               };
+
+               m_fence = createFence(vk, *m_device, &fenceParams);
+       }
+
+       // Get queue
+       vk.getDeviceQueue(*m_device, queueFamilyIndex, 0, &m_queue);
+
+       if (m_shaderStage == VK_SHADER_STAGE_COMPUTE_BIT)
+       {
+               m_testEnvironment = de::MovePtr<TestEnvironment>(new ComputeEnvironment(m_context, *m_device, *m_descriptorSetLayout, *m_descriptorSet));
+       }
+       else
+       {
+               using tcu::Vec4;
+
+               const VkVertexInputBindingDescription           vertexInputBindingDescription =
+               {
+                       0u,                                                                             // deUint32                                     binding;
+                       sizeof(tcu::Vec4),                                              // deUint32                                     strideInBytes;
+                       VK_VERTEX_INPUT_RATE_VERTEX                             // VkVertexInputStepRate        inputRate;
+               };
+
+               const VkVertexInputAttributeDescription         vertexInputAttributeDescription =
+               {
+                       0u,                                                                             // deUint32     location;
+                       0u,                                                                             // deUint32     binding;
+                       VK_FORMAT_R32G32B32A32_SFLOAT,                  // VkFormat     format;
+                       0u                                                                              // deUint32     offset;
+               };
+
+               AccessRangesData                                                        vertexAccess;
+               const Vec4                                                                      vertices[] =
+               {
+                       Vec4(-1.0f, -1.0f, 0.0f, 1.0f),
+                       Vec4(-1.0f,  1.0f, 0.0f, 1.0f),
+                       Vec4( 1.0f, -1.0f, 0.0f, 1.0f),
+               };
+               const VkDeviceSize                                                      vertexBufferSize = static_cast<VkDeviceSize>(sizeof(vertices));
+               createTestBuffer(vk, *m_device, vertexBufferSize, VK_BUFFER_USAGE_VERTEX_BUFFER_BIT, memAlloc, m_vertexBuffer, m_vertexBufferAlloc, vertexAccess, &populateBufferWithCopy, &vertices);
+
+               const GraphicsEnvironment::DrawConfig           drawWithOneVertexBuffer =
+               {
+                       std::vector<VkBuffer>(1, *m_vertexBuffer), // std::vector<VkBuffer>     vertexBuffers;
+                       DE_LENGTH_OF_ARRAY(vertices),                   // deUint32                                     vertexCount;
+                       1,                                                                              // deUint32                                     instanceCount;
+                       DE_NULL,                                                                // VkBuffer                                     indexBuffer;
+                       0u,                                                                             // deUint32                                     indexCount;
+               };
+
+               m_testEnvironment = de::MovePtr<TestEnvironment>(new GraphicsEnvironment(m_context,
+                                                                                                                                                                *m_device,
+                                                                                                                                                                *m_descriptorSetLayout,
+                                                                                                                                                                *m_descriptorSet,
+                                                                                                                                                                GraphicsEnvironment::VertexBindings(1, vertexInputBindingDescription),
+                                                                                                                                                                GraphicsEnvironment::VertexAttributes(1, vertexInputAttributeDescription),
+                                                                                                                                                                drawWithOneVertexBuffer));
+       }
+}
+
+// Verifies if the buffer has the value initialized by BufferAccessInstance::populateReadBuffer at a given offset.
+bool AccessInstance::isExpectedValueFromInBuffer (VkDeviceSize offsetInBytes,
+                                                                                                 const void*           valuePtr,
+                                                                                                 VkDeviceSize  valueSize)
+{
+       DE_ASSERT(offsetInBytes % 4 == 0);
+       DE_ASSERT(offsetInBytes < m_inBufferAccess.allocSize);
+
+       const deUint32 valueIndex = deUint32(offsetInBytes / 4) + 2;
+
+       if (isUintFormat(m_bufferFormat))
+       {
+               return !deMemCmp(valuePtr, &valueIndex, (size_t)valueSize);
+       }
+       else if (isIntFormat(m_bufferFormat))
+       {
+               const deInt32 value = -deInt32(valueIndex);
+               return !deMemCmp(valuePtr, &value, (size_t)valueSize);
+       }
+       else if (isFloatFormat(m_bufferFormat))
+       {
+               const float value = float(valueIndex);
+               return !deMemCmp(valuePtr, &value, (size_t)valueSize);
+       }
+       else
+       {
+               DE_ASSERT(false);
+               return false;
+       }
+}
+
+bool AccessInstance::isOutBufferValueUnchanged (VkDeviceSize offsetInBytes, VkDeviceSize valueSize)
+{
+       DE_ASSERT(valueSize <= 4);
+       const deUint8 *const    outValuePtr             = (deUint8*)m_outBufferAlloc->getHostPtr() + offsetInBytes;
+       const deUint32                  defaultValue    = 0xBABABABAu;
+
+       return !deMemCmp(outValuePtr, &defaultValue, (size_t)valueSize);
+}
+
+tcu::TestStatus AccessInstance::iterate (void)
+{
+       const DeviceInterface&          vk                      = m_context.getDeviceInterface();
+       const vk::VkCommandBuffer       cmdBuffer       = m_testEnvironment->getCommandBuffer();
+
+       // Submit command buffer
+       {
+               const VkSubmitInfo      submitInfo      =
+               {
+                       VK_STRUCTURE_TYPE_SUBMIT_INFO,  // VkStructureType                              sType;
+                       DE_NULL,                                                // const void*                                  pNext;
+                       0u,                                                             // deUint32                                             waitSemaphoreCount;
+                       DE_NULL,                                                // const VkSemaphore*                   pWaitSemaphores;
+                       DE_NULL,                                                // const VkPIpelineStageFlags*  pWaitDstStageMask;
+                       1u,                                                             // deUint32                                             commandBufferCount;
+                       &cmdBuffer,                                             // const VkCommandBuffer*               pCommandBuffers;
+                       0u,                                                             // deUint32                                             signalSemaphoreCount;
+                       DE_NULL                                                 // const VkSemaphore*                   pSignalSemaphores;
+               };
+
+               VK_CHECK(vk.resetFences(*m_device, 1, &m_fence.get()));
+               VK_CHECK(vk.queueSubmit(m_queue, 1, &submitInfo, *m_fence));
+               VK_CHECK(vk.waitForFences(*m_device, 1, &m_fence.get(), true, ~(0ull) /* infinity */));
+       }
+
+       // Prepare result buffer for read
+       {
+               const VkMappedMemoryRange       outBufferRange  =
+               {
+                       VK_STRUCTURE_TYPE_MAPPED_MEMORY_RANGE,  //  VkStructureType     sType;
+                       DE_NULL,                                                                //  const void*         pNext;
+                       m_outBufferAlloc->getMemory(),                  //  VkDeviceMemory      mem;
+                       0ull,                                                                   //  VkDeviceSize        offset;
+                       m_outBufferAccess.allocSize,                    //  VkDeviceSize        size;
+               };
+
+               VK_CHECK(vk.invalidateMappedMemoryRanges(*m_device, 1u, &outBufferRange));
+       }
+
+       if (verifyResult())
+               return tcu::TestStatus::pass("All values OK");
+       else
+               return tcu::TestStatus::fail("Invalid value(s) found");
+}
+
+bool AccessInstance::verifyResult (void)
+{
+       std::ostringstream      logMsg;
+       tcu::TestLog&           log                                     = m_context.getTestContext().getLog();
+       const bool                      isReadAccess            = (m_bufferAccessType == BUFFER_ACCESS_TYPE_READ_FROM_STORAGE);
+       const void*                     inDataPtr                       = m_inBufferAlloc->getHostPtr();
+       const void*                     outDataPtr                      = m_outBufferAlloc->getHostPtr();
+       bool                            allOk                           = true;
+       deUint32                        valueNdx                        = 0;
+       const VkDeviceSize      maxAccessRange          = isReadAccess ? m_inBufferAccess.maxAccessRange : m_outBufferAccess.maxAccessRange;
+
+       for (VkDeviceSize offsetInBytes = 0; offsetInBytes < m_outBufferAccess.allocSize; offsetInBytes += 4)
+       {
+               const deUint8*          outValuePtr             = static_cast<const deUint8*>(outDataPtr) + offsetInBytes;
+               const size_t            outValueSize    = static_cast<size_t>(deMinu64(4, (m_outBufferAccess.allocSize - offsetInBytes)));
+
+               if (offsetInBytes >= RobustAccessWithPointersTest::s_numberOfBytesAccessed)
+               {
+                       // The shader will only write 16 values into the result buffer. The rest of the values
+                       // should remain unchanged or may be modified if we are writing out of bounds.
+                       if (!isOutBufferValueUnchanged(offsetInBytes, outValueSize)
+                               && (isReadAccess || !isValueWithinBufferOrZero(inDataPtr, m_inBufferAccess.allocSize, outValuePtr, 4)))
+                       {
+                               logMsg << "\nValue " << valueNdx++ << " has been modified with an unknown value: " << *(static_cast<const deUint32*>(static_cast<const void*>(outValuePtr)));
+                               allOk = false;
+                       }
+               }
+               else
+               {
+                       const deInt32   distanceToOutOfBounds   = static_cast<deInt32>(maxAccessRange) - static_cast<deInt32>(offsetInBytes);
+                       bool                    isOutOfBoundsAccess             = false;
+
+                       logMsg << "\n" << valueNdx++ << ": ";
+
+                       logValue(logMsg, outValuePtr, m_bufferFormat, outValueSize);
+
+                       if (m_accessOutOfBackingMemory)
+                               isOutOfBoundsAccess = true;
+
+                       // Check if the shader operation accessed an operand located less than 16 bytes away
+                       // from the out of bounds address.
+                       if (!isOutOfBoundsAccess && distanceToOutOfBounds < 16)
+                       {
+                               deUint32 operandSize = 0;
+
+                               switch (m_shaderType)
+                               {
+                                       case SHADER_TYPE_SCALAR_COPY:
+                                               operandSize             = 4; // Size of scalar
+                                               break;
+
+                                       case SHADER_TYPE_VECTOR_COPY:
+                                               operandSize             = 4 * 4; // Size of vec4
+                                               break;
+
+                                       case SHADER_TYPE_MATRIX_COPY:
+                                               operandSize             = 4 * 16; // Size of mat4
+                                               break;
+
+                                       default:
+                                               DE_ASSERT(false);
+                               }
+
+                               isOutOfBoundsAccess = (((offsetInBytes / operandSize) + 1) * operandSize > maxAccessRange);
+                       }
+
+                       if (isOutOfBoundsAccess)
+                       {
+                               logMsg << " (out of bounds " << (isReadAccess ? "read": "write") << ")";
+
+                               const bool      isValuePartiallyOutOfBounds = ((distanceToOutOfBounds > 0) && ((deUint32)distanceToOutOfBounds < 4));
+                               bool            isValidValue                            = false;
+
+                               if (isValuePartiallyOutOfBounds && !m_accessOutOfBackingMemory)
+                               {
+                                       // The value is partially out of bounds
+
+                                       bool    isOutOfBoundsPartOk  = true;
+                                       bool    isWithinBoundsPartOk = true;
+
+                                       if (isReadAccess)
+                                       {
+                                               isWithinBoundsPartOk    = isValueWithinBufferOrZero(inDataPtr, m_inBufferAccess.allocSize, outValuePtr, distanceToOutOfBounds);
+                                               isOutOfBoundsPartOk             = isValueWithinBufferOrZero(inDataPtr, m_inBufferAccess.allocSize, (deUint8*)outValuePtr + distanceToOutOfBounds , outValueSize - distanceToOutOfBounds);
+                                       }
+                                       else
+                                       {
+                                               isWithinBoundsPartOk    = isValueWithinBufferOrZero(inDataPtr, m_inBufferAccess.allocSize, outValuePtr, distanceToOutOfBounds)
+                                                                                                 || isOutBufferValueUnchanged(offsetInBytes, distanceToOutOfBounds);
+
+                                               isOutOfBoundsPartOk             = isValueWithinBufferOrZero(inDataPtr, m_inBufferAccess.allocSize, (deUint8*)outValuePtr + distanceToOutOfBounds, outValueSize - distanceToOutOfBounds)
+                                                                                                 || isOutBufferValueUnchanged(offsetInBytes + distanceToOutOfBounds, outValueSize - distanceToOutOfBounds);
+                                       }
+
+                                       logMsg << ", first " << distanceToOutOfBounds << " byte(s) " << (isWithinBoundsPartOk ? "OK": "wrong");
+                                       logMsg << ", last " << outValueSize - distanceToOutOfBounds << " byte(s) " << (isOutOfBoundsPartOk ? "OK": "wrong");
+
+                                       isValidValue    = isWithinBoundsPartOk && isOutOfBoundsPartOk;
+                               }
+                               else
+                               {
+                                       if (isReadAccess)
+                                       {
+                                               isValidValue    = isValueWithinBufferOrZero(inDataPtr, m_inBufferAccess.allocSize, outValuePtr, outValueSize);
+                                       }
+                                       else
+                                       {
+                                               isValidValue    = isOutBufferValueUnchanged(offsetInBytes, outValueSize);
+
+                                               if (!isValidValue)
+                                               {
+                                                       // Out of bounds writes may modify values withing the memory ranges bound to the buffer
+                                                       isValidValue    = isValueWithinBufferOrZero(inDataPtr, m_inBufferAccess.allocSize, outValuePtr, outValueSize);
+
+                                                       if (isValidValue)
+                                                               logMsg << ", OK, written within the memory range bound to the buffer";
+                                               }
+                                       }
+                               }
+
+                               if (!isValidValue)
+                               {
+                                       // Check if we are satisfying the [0, 0, 0, x] pattern, where x may be either 0 or 1,
+                                       // or the maximum representable positive integer value (if the format is integer-based).
+
+                                       const bool      canMatchVec4Pattern     = (isReadAccess
+                                                                                                       && !isValuePartiallyOutOfBounds
+                                                                                                       && (m_shaderType == SHADER_TYPE_VECTOR_COPY)
+                                                                                                       && (offsetInBytes / 4 + 1) % 4 == 0);
+                                       bool            matchesVec4Pattern      = false;
+
+                                       if (canMatchVec4Pattern)
+                                       {
+                                               matchesVec4Pattern      = verifyOutOfBoundsVec4(static_cast<const deUint32*>(static_cast<const void*>(outValuePtr)) - 3, m_bufferFormat);
+                                       }
+
+                                       if (!canMatchVec4Pattern || !matchesVec4Pattern)
+                                       {
+                                               logMsg << ". Failed: ";
+
+                                               if (isReadAccess)
+                                               {
+                                                       logMsg << "expected value within the buffer range or 0";
+
+                                                       if (canMatchVec4Pattern)
+                                                               logMsg << ", or the [0, 0, 0, x] pattern";
+                                               }
+                                               else
+                                               {
+                                                       logMsg << "written out of the range";
+                                               }
+
+                                               allOk = false;
+                                       }
+                               }
+                       }
+                       else // We are within bounds
+                       {
+                               if (isReadAccess)
+                               {
+                                       if (!isExpectedValueFromInBuffer(offsetInBytes, outValuePtr, 4))
+                                       {
+                                               logMsg << ", Failed: unexpected value";
+                                               allOk = false;
+                                       }
+                               }
+                               else
+                               {
+                                       // Out of bounds writes may change values within the bounds.
+                                       if (!isValueWithinBufferOrZero(inDataPtr, m_inBufferAccess.accessRange, outValuePtr, 4))
+                                       {
+                                               logMsg << ", Failed: unexpected value";
+                                               allOk = false;
+                                       }
+                               }
+                       }
+               }
+       }
+
+       log << tcu::TestLog::Message << logMsg.str() << tcu::TestLog::EndMessage;
+
+       return allOk;
+}
+
+// BufferReadInstance
+
+ReadInstance::ReadInstance (Context&                           context,
+                                                       Move<VkDevice>                  device,
+                                                       ShaderType                              shaderType,
+                                                       VkShaderStageFlags              shaderStage,
+                                                       VkFormat                                bufferFormat,
+                                                       //bool                                  readFromStorage,
+                                                       VkDeviceSize                    inBufferAccessRange,
+                                                       bool                                    accessOutOfBackingMemory)
+
+       : AccessInstance        (context, device, shaderType, shaderStage, bufferFormat,
+                                                BUFFER_ACCESS_TYPE_READ_FROM_STORAGE,
+                                                inBufferAccessRange, RobustAccessWithPointersTest::s_numberOfBytesAccessed,
+                                                accessOutOfBackingMemory)
+{
+}
+
+// BufferWriteInstance
+
+WriteInstance::WriteInstance (Context&                         context,
+                                                         Move<VkDevice>                device,
+                                                         ShaderType                    shaderType,
+                                                         VkShaderStageFlags    shaderStage,
+                                                         VkFormat                              bufferFormat,
+                                                         VkDeviceSize                  writeBufferAccessRange,
+                                                         bool                                  accessOutOfBackingMemory)
+
+       : AccessInstance        (context, device, shaderType, shaderStage, bufferFormat,
+                                                BUFFER_ACCESS_TYPE_WRITE_TO_STORAGE,
+                                                RobustAccessWithPointersTest::s_numberOfBytesAccessed, writeBufferAccessRange,
+                                                accessOutOfBackingMemory)
+{
+}
+
+} // unnamed namespace
+
+tcu::TestCaseGroup* createBufferAccessWithVariablePointersTests(tcu::TestContext& testCtx)
+{
+       // Lets make group for the tests
+       de::MovePtr<tcu::TestCaseGroup> bufferAccessWithVariablePointersTests   (new tcu::TestCaseGroup(testCtx, "through_pointers", ""));
+
+       // Lets add subgroups to better organise tests
+       de::MovePtr<tcu::TestCaseGroup> computeWithVariablePointersTests                (new tcu::TestCaseGroup(testCtx, "compute", ""));
+       de::MovePtr<tcu::TestCaseGroup> computeReads                                                    (new tcu::TestCaseGroup(testCtx, "reads", ""));
+       de::MovePtr<tcu::TestCaseGroup> computeWrites                                                   (new tcu::TestCaseGroup(testCtx, "writes", ""));
+
+       de::MovePtr<tcu::TestCaseGroup> graphicsWithVariablePointersTests               (new tcu::TestCaseGroup(testCtx, "graphics", ""));
+       de::MovePtr<tcu::TestCaseGroup> graphicsReads                                                   (new tcu::TestCaseGroup(testCtx, "reads", ""));
+       de::MovePtr<tcu::TestCaseGroup> graphicsReadsVertex                                             (new tcu::TestCaseGroup(testCtx, "vertex", ""));
+       de::MovePtr<tcu::TestCaseGroup> graphicsReadsFragment                                   (new tcu::TestCaseGroup(testCtx, "fragment", ""));
+       de::MovePtr<tcu::TestCaseGroup> graphicsWrites                                                  (new tcu::TestCaseGroup(testCtx, "writes", ""));
+       de::MovePtr<tcu::TestCaseGroup> graphicsWritesVertex                                    (new tcu::TestCaseGroup(testCtx, "vertex", ""));
+       de::MovePtr<tcu::TestCaseGroup> graphicsWritesFragment                                  (new tcu::TestCaseGroup(testCtx, "fragment", ""));
+
+       // A struct for describing formats
+       struct Formats
+       {
+               const VkFormat          value;
+               const char * const      name;
+       };
+
+       const Formats                   bufferFormats[]                 =
+       {
+               { VK_FORMAT_R32_SINT,           "s32" },
+               { VK_FORMAT_R32_UINT,           "u32" },
+               { VK_FORMAT_R32_SFLOAT,         "f32" }
+       };
+       const deUint8                   bufferFormatsCount              = static_cast<deUint8>(DE_LENGTH_OF_ARRAY(bufferFormats));
+
+       // Amounts of data to copy
+       const VkDeviceSize              rangeSizes[]                    =
+       {
+               1ull, 3ull, 4ull, 16ull, 32ull
+       };
+       const deUint8                   rangeSizesCount                 = static_cast<deUint8>(DE_LENGTH_OF_ARRAY(rangeSizes));
+
+       // gather above data into one array
+       const struct ShaderTypes
+       {
+               const ShaderType                        value;
+               const char * const                      name;
+               const Formats* const            formats;
+               const deUint8                           formatsCount;
+               const VkDeviceSize* const       sizes;
+               const deUint8                           sizesCount;
+       }                                               types[]                                 =
+       {
+               { SHADER_TYPE_VECTOR_COPY,      "vec4",         bufferFormats,                  bufferFormatsCount,                     rangeSizes,                     rangeSizesCount },
+               { SHADER_TYPE_SCALAR_COPY,      "scalar",       bufferFormats,                  bufferFormatsCount,                     rangeSizes,                     rangeSizesCount }
+       };
+
+       // Specify to which subgroups put various tests
+       const struct ShaderStages
+       {
+               VkShaderStageFlags                                      stage;
+               de::MovePtr<tcu::TestCaseGroup>&        reads;
+               de::MovePtr<tcu::TestCaseGroup>&        writes;
+       }                                               stages[]                                =
+       {
+               { VK_SHADER_STAGE_VERTEX_BIT,           graphicsReadsVertex,    graphicsWritesVertex },
+               { VK_SHADER_STAGE_FRAGMENT_BIT,         graphicsReadsFragment,  graphicsWritesFragment },
+               { VK_SHADER_STAGE_COMPUTE_BIT,          computeReads,                   computeWrites }
+       };
+
+       // Eventually specify if memory used should be in the "inaccesible" portion of buffer or entirely outside of buffer
+       const char* const               backingMemory[]                 = { "in_memory", "out_of_memory" };
+
+       for (deInt32 stageId = 0; stageId < DE_LENGTH_OF_ARRAY(stages); ++stageId)
+               for (int i = 0; i < DE_LENGTH_OF_ARRAY(types); ++i)
+                       for (int j = 0; j < types[i].formatsCount; ++j)
+                               for (int k = 0; k < types[i].sizesCount; ++k)
+                                       for (int s = 0; s < DE_LENGTH_OF_ARRAY(backingMemory); ++s)
+                                       {
+                                               std::ostringstream      name;
+                                               name << types[i].sizes[k] << "B_" << backingMemory[s] << "_with_" << types[i].name << '_' << types[i].formats[j].name;
+                                               stages[stageId].reads->addChild(new RobustReadTest(testCtx, name.str().c_str(), "", stages[stageId].stage, types[i].value, types[i].formats[j].value, types[i].sizes[k], s != 0));
+                                       }
+
+       for (deInt32 stageId = 0; stageId < DE_LENGTH_OF_ARRAY(stages); ++stageId)
+               for (int i=0; i<DE_LENGTH_OF_ARRAY(types); ++i)
+                       for (int j=0; j<types[i].formatsCount; ++j)
+                               for (int k = 0; k<types[i].sizesCount; ++k)
+                                       for (int s = 0; s < DE_LENGTH_OF_ARRAY(backingMemory); ++s)
+                                       {
+                                               std::ostringstream      name;
+                                               name << types[i].sizes[k] << "B_" << backingMemory[s] << "_with_" << types[i].name << '_' << types[i].formats[j].name;
+                                               stages[stageId].writes->addChild(new RobustWriteTest(testCtx, name.str().c_str(), "", stages[stageId].stage, types[i].value, types[i].formats[j].value, types[i].sizes[k], s != 0));
+                                       }
+
+       graphicsReads->addChild(graphicsReadsVertex.release());
+       graphicsReads->addChild(graphicsReadsFragment.release());
+
+       graphicsWrites->addChild(graphicsWritesVertex.release());
+       graphicsWrites->addChild(graphicsWritesFragment.release());
+
+       graphicsWithVariablePointersTests->addChild(graphicsReads.release());
+       graphicsWithVariablePointersTests->addChild(graphicsWrites.release());
+
+       computeWithVariablePointersTests->addChild(computeReads.release());
+       computeWithVariablePointersTests->addChild(computeWrites.release());
+
+       bufferAccessWithVariablePointersTests->addChild(graphicsWithVariablePointersTests.release());
+       bufferAccessWithVariablePointersTests->addChild(computeWithVariablePointersTests.release());
+
+       return bufferAccessWithVariablePointersTests.release();
+}
+
+} // robustness
+} // vkt
diff --git a/external/vulkancts/modules/vulkan/robustness/vktRobustBufferAccessWithVariablePointersTests.hpp b/external/vulkancts/modules/vulkan/robustness/vktRobustBufferAccessWithVariablePointersTests.hpp
new file mode 100644 (file)
index 0000000..96407c8
--- /dev/null
@@ -0,0 +1,39 @@
+#ifndef _VKTROBUSTBUFFERACCESSWITHVARIABLEPOINTERSTESTS_HPP
+#define _VKTROBUSTBUFFERACCESSWITHVARIABLEPOINTERSTESTS_HPP
+/*------------------------------------------------------------------------
+ * Vulkan Conformance Tests
+ * ------------------------
+ *
+ * Copyright (c) 2018 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 Robust buffer access tests for uniform/storage buffers and
+ *        uniform/storage texel buffers with variable pointers.
+ *//*--------------------------------------------------------------------*/
+
+#include "vktTestCase.hpp"
+
+namespace vkt
+{
+namespace robustness
+{
+
+tcu::TestCaseGroup* createBufferAccessWithVariablePointersTests (tcu::TestContext& testCtx);
+
+} // robustness
+} // vkt
+
+#endif // _VKTROBUSTBUFFERACCESSWITHVARIABLEPOINTERSTESTS_HPP
index ad54544..318b214 100644 (file)
@@ -25,6 +25,7 @@
 #include "vktRobustnessTests.hpp"
 #include "vktRobustnessBufferAccessTests.hpp"
 #include "vktRobustnessVertexAccessTests.hpp"
+#include "vktRobustBufferAccessWithVariablePointersTests.hpp"
 #include "vktTestGroupUtil.hpp"
 
 namespace vkt
@@ -32,6 +33,25 @@ namespace vkt
 namespace robustness
 {
 
+namespace
+{
+
+class IsNodeNamed
+{
+public:
+       IsNodeNamed(const std::string& name)
+               : checkName(name)
+       {}
+       bool operator()(tcu::TestNode* node)
+       {
+               return checkName == std::string(node->getName());
+       }
+private:
+       const std::string checkName;
+};
+
+}
+
 tcu::TestCaseGroup* createTests (tcu::TestContext& testCtx)
 {
        de::MovePtr<tcu::TestCaseGroup> robustnessTests(new tcu::TestCaseGroup(testCtx, "robustness", ""));
@@ -39,6 +59,20 @@ tcu::TestCaseGroup* createTests (tcu::TestContext& testCtx)
        robustnessTests->addChild(createBufferAccessTests(testCtx));
        robustnessTests->addChild(createVertexAccessTests(testCtx));
 
+       std::vector<tcu::TestNode*> children;
+       robustnessTests->getChildren(children);
+       std::vector<tcu::TestNode*>::iterator buffer_access = std::find_if(children.begin(), children.end(), IsNodeNamed("buffer_access"));
+       if (buffer_access != children.end())
+       {
+               (*buffer_access)->addChild(createBufferAccessWithVariablePointersTests(testCtx));
+       }
+       else
+       {
+               de::MovePtr<tcu::TestCaseGroup> bufferAccess(new tcu::TestCaseGroup(testCtx, "buffer_access", ""));
+               bufferAccess->addChild(createBufferAccessWithVariablePointersTests(testCtx));
+               robustnessTests->addChild(bufferAccess.release());
+       }
+
        return robustnessTests.release();
 }
 
index 94868bf..cc68dc8 100644 (file)
@@ -286730,6 +286730,366 @@ dEQP-VK.robustness.buffer_access.compute.texel_copy.a2b10g10r10_unorm_pack32.oob
 dEQP-VK.robustness.buffer_access.compute.texel_copy.out_of_alloc.oob_uniform_read
 dEQP-VK.robustness.buffer_access.compute.texel_copy.out_of_alloc.oob_storage_read
 dEQP-VK.robustness.buffer_access.compute.texel_copy.out_of_alloc.oob_storage_write
+dEQP-VK.robustness.buffer_access.through_pointers.graphics.reads.vertex.1B_in_memory_with_vec4_s32
+dEQP-VK.robustness.buffer_access.through_pointers.graphics.reads.vertex.1B_out_of_memory_with_vec4_s32
+dEQP-VK.robustness.buffer_access.through_pointers.graphics.reads.vertex.3B_in_memory_with_vec4_s32
+dEQP-VK.robustness.buffer_access.through_pointers.graphics.reads.vertex.3B_out_of_memory_with_vec4_s32
+dEQP-VK.robustness.buffer_access.through_pointers.graphics.reads.vertex.4B_in_memory_with_vec4_s32
+dEQP-VK.robustness.buffer_access.through_pointers.graphics.reads.vertex.4B_out_of_memory_with_vec4_s32
+dEQP-VK.robustness.buffer_access.through_pointers.graphics.reads.vertex.16B_in_memory_with_vec4_s32
+dEQP-VK.robustness.buffer_access.through_pointers.graphics.reads.vertex.16B_out_of_memory_with_vec4_s32
+dEQP-VK.robustness.buffer_access.through_pointers.graphics.reads.vertex.32B_in_memory_with_vec4_s32
+dEQP-VK.robustness.buffer_access.through_pointers.graphics.reads.vertex.32B_out_of_memory_with_vec4_s32
+dEQP-VK.robustness.buffer_access.through_pointers.graphics.reads.vertex.1B_in_memory_with_vec4_u32
+dEQP-VK.robustness.buffer_access.through_pointers.graphics.reads.vertex.1B_out_of_memory_with_vec4_u32
+dEQP-VK.robustness.buffer_access.through_pointers.graphics.reads.vertex.3B_in_memory_with_vec4_u32
+dEQP-VK.robustness.buffer_access.through_pointers.graphics.reads.vertex.3B_out_of_memory_with_vec4_u32
+dEQP-VK.robustness.buffer_access.through_pointers.graphics.reads.vertex.4B_in_memory_with_vec4_u32
+dEQP-VK.robustness.buffer_access.through_pointers.graphics.reads.vertex.4B_out_of_memory_with_vec4_u32
+dEQP-VK.robustness.buffer_access.through_pointers.graphics.reads.vertex.16B_in_memory_with_vec4_u32
+dEQP-VK.robustness.buffer_access.through_pointers.graphics.reads.vertex.16B_out_of_memory_with_vec4_u32
+dEQP-VK.robustness.buffer_access.through_pointers.graphics.reads.vertex.32B_in_memory_with_vec4_u32
+dEQP-VK.robustness.buffer_access.through_pointers.graphics.reads.vertex.32B_out_of_memory_with_vec4_u32
+dEQP-VK.robustness.buffer_access.through_pointers.graphics.reads.vertex.1B_in_memory_with_vec4_f32
+dEQP-VK.robustness.buffer_access.through_pointers.graphics.reads.vertex.1B_out_of_memory_with_vec4_f32
+dEQP-VK.robustness.buffer_access.through_pointers.graphics.reads.vertex.3B_in_memory_with_vec4_f32
+dEQP-VK.robustness.buffer_access.through_pointers.graphics.reads.vertex.3B_out_of_memory_with_vec4_f32
+dEQP-VK.robustness.buffer_access.through_pointers.graphics.reads.vertex.4B_in_memory_with_vec4_f32
+dEQP-VK.robustness.buffer_access.through_pointers.graphics.reads.vertex.4B_out_of_memory_with_vec4_f32
+dEQP-VK.robustness.buffer_access.through_pointers.graphics.reads.vertex.16B_in_memory_with_vec4_f32
+dEQP-VK.robustness.buffer_access.through_pointers.graphics.reads.vertex.16B_out_of_memory_with_vec4_f32
+dEQP-VK.robustness.buffer_access.through_pointers.graphics.reads.vertex.32B_in_memory_with_vec4_f32
+dEQP-VK.robustness.buffer_access.through_pointers.graphics.reads.vertex.32B_out_of_memory_with_vec4_f32
+dEQP-VK.robustness.buffer_access.through_pointers.graphics.reads.vertex.1B_in_memory_with_scalar_s32
+dEQP-VK.robustness.buffer_access.through_pointers.graphics.reads.vertex.1B_out_of_memory_with_scalar_s32
+dEQP-VK.robustness.buffer_access.through_pointers.graphics.reads.vertex.3B_in_memory_with_scalar_s32
+dEQP-VK.robustness.buffer_access.through_pointers.graphics.reads.vertex.3B_out_of_memory_with_scalar_s32
+dEQP-VK.robustness.buffer_access.through_pointers.graphics.reads.vertex.4B_in_memory_with_scalar_s32
+dEQP-VK.robustness.buffer_access.through_pointers.graphics.reads.vertex.4B_out_of_memory_with_scalar_s32
+dEQP-VK.robustness.buffer_access.through_pointers.graphics.reads.vertex.16B_in_memory_with_scalar_s32
+dEQP-VK.robustness.buffer_access.through_pointers.graphics.reads.vertex.16B_out_of_memory_with_scalar_s32
+dEQP-VK.robustness.buffer_access.through_pointers.graphics.reads.vertex.32B_in_memory_with_scalar_s32
+dEQP-VK.robustness.buffer_access.through_pointers.graphics.reads.vertex.32B_out_of_memory_with_scalar_s32
+dEQP-VK.robustness.buffer_access.through_pointers.graphics.reads.vertex.1B_in_memory_with_scalar_u32
+dEQP-VK.robustness.buffer_access.through_pointers.graphics.reads.vertex.1B_out_of_memory_with_scalar_u32
+dEQP-VK.robustness.buffer_access.through_pointers.graphics.reads.vertex.3B_in_memory_with_scalar_u32
+dEQP-VK.robustness.buffer_access.through_pointers.graphics.reads.vertex.3B_out_of_memory_with_scalar_u32
+dEQP-VK.robustness.buffer_access.through_pointers.graphics.reads.vertex.4B_in_memory_with_scalar_u32
+dEQP-VK.robustness.buffer_access.through_pointers.graphics.reads.vertex.4B_out_of_memory_with_scalar_u32
+dEQP-VK.robustness.buffer_access.through_pointers.graphics.reads.vertex.16B_in_memory_with_scalar_u32
+dEQP-VK.robustness.buffer_access.through_pointers.graphics.reads.vertex.16B_out_of_memory_with_scalar_u32
+dEQP-VK.robustness.buffer_access.through_pointers.graphics.reads.vertex.32B_in_memory_with_scalar_u32
+dEQP-VK.robustness.buffer_access.through_pointers.graphics.reads.vertex.32B_out_of_memory_with_scalar_u32
+dEQP-VK.robustness.buffer_access.through_pointers.graphics.reads.vertex.1B_in_memory_with_scalar_f32
+dEQP-VK.robustness.buffer_access.through_pointers.graphics.reads.vertex.1B_out_of_memory_with_scalar_f32
+dEQP-VK.robustness.buffer_access.through_pointers.graphics.reads.vertex.3B_in_memory_with_scalar_f32
+dEQP-VK.robustness.buffer_access.through_pointers.graphics.reads.vertex.3B_out_of_memory_with_scalar_f32
+dEQP-VK.robustness.buffer_access.through_pointers.graphics.reads.vertex.4B_in_memory_with_scalar_f32
+dEQP-VK.robustness.buffer_access.through_pointers.graphics.reads.vertex.4B_out_of_memory_with_scalar_f32
+dEQP-VK.robustness.buffer_access.through_pointers.graphics.reads.vertex.16B_in_memory_with_scalar_f32
+dEQP-VK.robustness.buffer_access.through_pointers.graphics.reads.vertex.16B_out_of_memory_with_scalar_f32
+dEQP-VK.robustness.buffer_access.through_pointers.graphics.reads.vertex.32B_in_memory_with_scalar_f32
+dEQP-VK.robustness.buffer_access.through_pointers.graphics.reads.vertex.32B_out_of_memory_with_scalar_f32
+dEQP-VK.robustness.buffer_access.through_pointers.graphics.reads.fragment.1B_in_memory_with_vec4_s32
+dEQP-VK.robustness.buffer_access.through_pointers.graphics.reads.fragment.1B_out_of_memory_with_vec4_s32
+dEQP-VK.robustness.buffer_access.through_pointers.graphics.reads.fragment.3B_in_memory_with_vec4_s32
+dEQP-VK.robustness.buffer_access.through_pointers.graphics.reads.fragment.3B_out_of_memory_with_vec4_s32
+dEQP-VK.robustness.buffer_access.through_pointers.graphics.reads.fragment.4B_in_memory_with_vec4_s32
+dEQP-VK.robustness.buffer_access.through_pointers.graphics.reads.fragment.4B_out_of_memory_with_vec4_s32
+dEQP-VK.robustness.buffer_access.through_pointers.graphics.reads.fragment.16B_in_memory_with_vec4_s32
+dEQP-VK.robustness.buffer_access.through_pointers.graphics.reads.fragment.16B_out_of_memory_with_vec4_s32
+dEQP-VK.robustness.buffer_access.through_pointers.graphics.reads.fragment.32B_in_memory_with_vec4_s32
+dEQP-VK.robustness.buffer_access.through_pointers.graphics.reads.fragment.32B_out_of_memory_with_vec4_s32
+dEQP-VK.robustness.buffer_access.through_pointers.graphics.reads.fragment.1B_in_memory_with_vec4_u32
+dEQP-VK.robustness.buffer_access.through_pointers.graphics.reads.fragment.1B_out_of_memory_with_vec4_u32
+dEQP-VK.robustness.buffer_access.through_pointers.graphics.reads.fragment.3B_in_memory_with_vec4_u32
+dEQP-VK.robustness.buffer_access.through_pointers.graphics.reads.fragment.3B_out_of_memory_with_vec4_u32
+dEQP-VK.robustness.buffer_access.through_pointers.graphics.reads.fragment.4B_in_memory_with_vec4_u32
+dEQP-VK.robustness.buffer_access.through_pointers.graphics.reads.fragment.4B_out_of_memory_with_vec4_u32
+dEQP-VK.robustness.buffer_access.through_pointers.graphics.reads.fragment.16B_in_memory_with_vec4_u32
+dEQP-VK.robustness.buffer_access.through_pointers.graphics.reads.fragment.16B_out_of_memory_with_vec4_u32
+dEQP-VK.robustness.buffer_access.through_pointers.graphics.reads.fragment.32B_in_memory_with_vec4_u32
+dEQP-VK.robustness.buffer_access.through_pointers.graphics.reads.fragment.32B_out_of_memory_with_vec4_u32
+dEQP-VK.robustness.buffer_access.through_pointers.graphics.reads.fragment.1B_in_memory_with_vec4_f32
+dEQP-VK.robustness.buffer_access.through_pointers.graphics.reads.fragment.1B_out_of_memory_with_vec4_f32
+dEQP-VK.robustness.buffer_access.through_pointers.graphics.reads.fragment.3B_in_memory_with_vec4_f32
+dEQP-VK.robustness.buffer_access.through_pointers.graphics.reads.fragment.3B_out_of_memory_with_vec4_f32
+dEQP-VK.robustness.buffer_access.through_pointers.graphics.reads.fragment.4B_in_memory_with_vec4_f32
+dEQP-VK.robustness.buffer_access.through_pointers.graphics.reads.fragment.4B_out_of_memory_with_vec4_f32
+dEQP-VK.robustness.buffer_access.through_pointers.graphics.reads.fragment.16B_in_memory_with_vec4_f32
+dEQP-VK.robustness.buffer_access.through_pointers.graphics.reads.fragment.16B_out_of_memory_with_vec4_f32
+dEQP-VK.robustness.buffer_access.through_pointers.graphics.reads.fragment.32B_in_memory_with_vec4_f32
+dEQP-VK.robustness.buffer_access.through_pointers.graphics.reads.fragment.32B_out_of_memory_with_vec4_f32
+dEQP-VK.robustness.buffer_access.through_pointers.graphics.reads.fragment.1B_in_memory_with_scalar_s32
+dEQP-VK.robustness.buffer_access.through_pointers.graphics.reads.fragment.1B_out_of_memory_with_scalar_s32
+dEQP-VK.robustness.buffer_access.through_pointers.graphics.reads.fragment.3B_in_memory_with_scalar_s32
+dEQP-VK.robustness.buffer_access.through_pointers.graphics.reads.fragment.3B_out_of_memory_with_scalar_s32
+dEQP-VK.robustness.buffer_access.through_pointers.graphics.reads.fragment.4B_in_memory_with_scalar_s32
+dEQP-VK.robustness.buffer_access.through_pointers.graphics.reads.fragment.4B_out_of_memory_with_scalar_s32
+dEQP-VK.robustness.buffer_access.through_pointers.graphics.reads.fragment.16B_in_memory_with_scalar_s32
+dEQP-VK.robustness.buffer_access.through_pointers.graphics.reads.fragment.16B_out_of_memory_with_scalar_s32
+dEQP-VK.robustness.buffer_access.through_pointers.graphics.reads.fragment.32B_in_memory_with_scalar_s32
+dEQP-VK.robustness.buffer_access.through_pointers.graphics.reads.fragment.32B_out_of_memory_with_scalar_s32
+dEQP-VK.robustness.buffer_access.through_pointers.graphics.reads.fragment.1B_in_memory_with_scalar_u32
+dEQP-VK.robustness.buffer_access.through_pointers.graphics.reads.fragment.1B_out_of_memory_with_scalar_u32
+dEQP-VK.robustness.buffer_access.through_pointers.graphics.reads.fragment.3B_in_memory_with_scalar_u32
+dEQP-VK.robustness.buffer_access.through_pointers.graphics.reads.fragment.3B_out_of_memory_with_scalar_u32
+dEQP-VK.robustness.buffer_access.through_pointers.graphics.reads.fragment.4B_in_memory_with_scalar_u32
+dEQP-VK.robustness.buffer_access.through_pointers.graphics.reads.fragment.4B_out_of_memory_with_scalar_u32
+dEQP-VK.robustness.buffer_access.through_pointers.graphics.reads.fragment.16B_in_memory_with_scalar_u32
+dEQP-VK.robustness.buffer_access.through_pointers.graphics.reads.fragment.16B_out_of_memory_with_scalar_u32
+dEQP-VK.robustness.buffer_access.through_pointers.graphics.reads.fragment.32B_in_memory_with_scalar_u32
+dEQP-VK.robustness.buffer_access.through_pointers.graphics.reads.fragment.32B_out_of_memory_with_scalar_u32
+dEQP-VK.robustness.buffer_access.through_pointers.graphics.reads.fragment.1B_in_memory_with_scalar_f32
+dEQP-VK.robustness.buffer_access.through_pointers.graphics.reads.fragment.1B_out_of_memory_with_scalar_f32
+dEQP-VK.robustness.buffer_access.through_pointers.graphics.reads.fragment.3B_in_memory_with_scalar_f32
+dEQP-VK.robustness.buffer_access.through_pointers.graphics.reads.fragment.3B_out_of_memory_with_scalar_f32
+dEQP-VK.robustness.buffer_access.through_pointers.graphics.reads.fragment.4B_in_memory_with_scalar_f32
+dEQP-VK.robustness.buffer_access.through_pointers.graphics.reads.fragment.4B_out_of_memory_with_scalar_f32
+dEQP-VK.robustness.buffer_access.through_pointers.graphics.reads.fragment.16B_in_memory_with_scalar_f32
+dEQP-VK.robustness.buffer_access.through_pointers.graphics.reads.fragment.16B_out_of_memory_with_scalar_f32
+dEQP-VK.robustness.buffer_access.through_pointers.graphics.reads.fragment.32B_in_memory_with_scalar_f32
+dEQP-VK.robustness.buffer_access.through_pointers.graphics.reads.fragment.32B_out_of_memory_with_scalar_f32
+dEQP-VK.robustness.buffer_access.through_pointers.graphics.writes.vertex.1B_in_memory_with_vec4_s32
+dEQP-VK.robustness.buffer_access.through_pointers.graphics.writes.vertex.1B_out_of_memory_with_vec4_s32
+dEQP-VK.robustness.buffer_access.through_pointers.graphics.writes.vertex.3B_in_memory_with_vec4_s32
+dEQP-VK.robustness.buffer_access.through_pointers.graphics.writes.vertex.3B_out_of_memory_with_vec4_s32
+dEQP-VK.robustness.buffer_access.through_pointers.graphics.writes.vertex.4B_in_memory_with_vec4_s32
+dEQP-VK.robustness.buffer_access.through_pointers.graphics.writes.vertex.4B_out_of_memory_with_vec4_s32
+dEQP-VK.robustness.buffer_access.through_pointers.graphics.writes.vertex.16B_in_memory_with_vec4_s32
+dEQP-VK.robustness.buffer_access.through_pointers.graphics.writes.vertex.16B_out_of_memory_with_vec4_s32
+dEQP-VK.robustness.buffer_access.through_pointers.graphics.writes.vertex.32B_in_memory_with_vec4_s32
+dEQP-VK.robustness.buffer_access.through_pointers.graphics.writes.vertex.32B_out_of_memory_with_vec4_s32
+dEQP-VK.robustness.buffer_access.through_pointers.graphics.writes.vertex.1B_in_memory_with_vec4_u32
+dEQP-VK.robustness.buffer_access.through_pointers.graphics.writes.vertex.1B_out_of_memory_with_vec4_u32
+dEQP-VK.robustness.buffer_access.through_pointers.graphics.writes.vertex.3B_in_memory_with_vec4_u32
+dEQP-VK.robustness.buffer_access.through_pointers.graphics.writes.vertex.3B_out_of_memory_with_vec4_u32
+dEQP-VK.robustness.buffer_access.through_pointers.graphics.writes.vertex.4B_in_memory_with_vec4_u32
+dEQP-VK.robustness.buffer_access.through_pointers.graphics.writes.vertex.4B_out_of_memory_with_vec4_u32
+dEQP-VK.robustness.buffer_access.through_pointers.graphics.writes.vertex.16B_in_memory_with_vec4_u32
+dEQP-VK.robustness.buffer_access.through_pointers.graphics.writes.vertex.16B_out_of_memory_with_vec4_u32
+dEQP-VK.robustness.buffer_access.through_pointers.graphics.writes.vertex.32B_in_memory_with_vec4_u32
+dEQP-VK.robustness.buffer_access.through_pointers.graphics.writes.vertex.32B_out_of_memory_with_vec4_u32
+dEQP-VK.robustness.buffer_access.through_pointers.graphics.writes.vertex.1B_in_memory_with_vec4_f32
+dEQP-VK.robustness.buffer_access.through_pointers.graphics.writes.vertex.1B_out_of_memory_with_vec4_f32
+dEQP-VK.robustness.buffer_access.through_pointers.graphics.writes.vertex.3B_in_memory_with_vec4_f32
+dEQP-VK.robustness.buffer_access.through_pointers.graphics.writes.vertex.3B_out_of_memory_with_vec4_f32
+dEQP-VK.robustness.buffer_access.through_pointers.graphics.writes.vertex.4B_in_memory_with_vec4_f32
+dEQP-VK.robustness.buffer_access.through_pointers.graphics.writes.vertex.4B_out_of_memory_with_vec4_f32
+dEQP-VK.robustness.buffer_access.through_pointers.graphics.writes.vertex.16B_in_memory_with_vec4_f32
+dEQP-VK.robustness.buffer_access.through_pointers.graphics.writes.vertex.16B_out_of_memory_with_vec4_f32
+dEQP-VK.robustness.buffer_access.through_pointers.graphics.writes.vertex.32B_in_memory_with_vec4_f32
+dEQP-VK.robustness.buffer_access.through_pointers.graphics.writes.vertex.32B_out_of_memory_with_vec4_f32
+dEQP-VK.robustness.buffer_access.through_pointers.graphics.writes.vertex.1B_in_memory_with_scalar_s32
+dEQP-VK.robustness.buffer_access.through_pointers.graphics.writes.vertex.1B_out_of_memory_with_scalar_s32
+dEQP-VK.robustness.buffer_access.through_pointers.graphics.writes.vertex.3B_in_memory_with_scalar_s32
+dEQP-VK.robustness.buffer_access.through_pointers.graphics.writes.vertex.3B_out_of_memory_with_scalar_s32
+dEQP-VK.robustness.buffer_access.through_pointers.graphics.writes.vertex.4B_in_memory_with_scalar_s32
+dEQP-VK.robustness.buffer_access.through_pointers.graphics.writes.vertex.4B_out_of_memory_with_scalar_s32
+dEQP-VK.robustness.buffer_access.through_pointers.graphics.writes.vertex.16B_in_memory_with_scalar_s32
+dEQP-VK.robustness.buffer_access.through_pointers.graphics.writes.vertex.16B_out_of_memory_with_scalar_s32
+dEQP-VK.robustness.buffer_access.through_pointers.graphics.writes.vertex.32B_in_memory_with_scalar_s32
+dEQP-VK.robustness.buffer_access.through_pointers.graphics.writes.vertex.32B_out_of_memory_with_scalar_s32
+dEQP-VK.robustness.buffer_access.through_pointers.graphics.writes.vertex.1B_in_memory_with_scalar_u32
+dEQP-VK.robustness.buffer_access.through_pointers.graphics.writes.vertex.1B_out_of_memory_with_scalar_u32
+dEQP-VK.robustness.buffer_access.through_pointers.graphics.writes.vertex.3B_in_memory_with_scalar_u32
+dEQP-VK.robustness.buffer_access.through_pointers.graphics.writes.vertex.3B_out_of_memory_with_scalar_u32
+dEQP-VK.robustness.buffer_access.through_pointers.graphics.writes.vertex.4B_in_memory_with_scalar_u32
+dEQP-VK.robustness.buffer_access.through_pointers.graphics.writes.vertex.4B_out_of_memory_with_scalar_u32
+dEQP-VK.robustness.buffer_access.through_pointers.graphics.writes.vertex.16B_in_memory_with_scalar_u32
+dEQP-VK.robustness.buffer_access.through_pointers.graphics.writes.vertex.16B_out_of_memory_with_scalar_u32
+dEQP-VK.robustness.buffer_access.through_pointers.graphics.writes.vertex.32B_in_memory_with_scalar_u32
+dEQP-VK.robustness.buffer_access.through_pointers.graphics.writes.vertex.32B_out_of_memory_with_scalar_u32
+dEQP-VK.robustness.buffer_access.through_pointers.graphics.writes.vertex.1B_in_memory_with_scalar_f32
+dEQP-VK.robustness.buffer_access.through_pointers.graphics.writes.vertex.1B_out_of_memory_with_scalar_f32
+dEQP-VK.robustness.buffer_access.through_pointers.graphics.writes.vertex.3B_in_memory_with_scalar_f32
+dEQP-VK.robustness.buffer_access.through_pointers.graphics.writes.vertex.3B_out_of_memory_with_scalar_f32
+dEQP-VK.robustness.buffer_access.through_pointers.graphics.writes.vertex.4B_in_memory_with_scalar_f32
+dEQP-VK.robustness.buffer_access.through_pointers.graphics.writes.vertex.4B_out_of_memory_with_scalar_f32
+dEQP-VK.robustness.buffer_access.through_pointers.graphics.writes.vertex.16B_in_memory_with_scalar_f32
+dEQP-VK.robustness.buffer_access.through_pointers.graphics.writes.vertex.16B_out_of_memory_with_scalar_f32
+dEQP-VK.robustness.buffer_access.through_pointers.graphics.writes.vertex.32B_in_memory_with_scalar_f32
+dEQP-VK.robustness.buffer_access.through_pointers.graphics.writes.vertex.32B_out_of_memory_with_scalar_f32
+dEQP-VK.robustness.buffer_access.through_pointers.graphics.writes.fragment.1B_in_memory_with_vec4_s32
+dEQP-VK.robustness.buffer_access.through_pointers.graphics.writes.fragment.1B_out_of_memory_with_vec4_s32
+dEQP-VK.robustness.buffer_access.through_pointers.graphics.writes.fragment.3B_in_memory_with_vec4_s32
+dEQP-VK.robustness.buffer_access.through_pointers.graphics.writes.fragment.3B_out_of_memory_with_vec4_s32
+dEQP-VK.robustness.buffer_access.through_pointers.graphics.writes.fragment.4B_in_memory_with_vec4_s32
+dEQP-VK.robustness.buffer_access.through_pointers.graphics.writes.fragment.4B_out_of_memory_with_vec4_s32
+dEQP-VK.robustness.buffer_access.through_pointers.graphics.writes.fragment.16B_in_memory_with_vec4_s32
+dEQP-VK.robustness.buffer_access.through_pointers.graphics.writes.fragment.16B_out_of_memory_with_vec4_s32
+dEQP-VK.robustness.buffer_access.through_pointers.graphics.writes.fragment.32B_in_memory_with_vec4_s32
+dEQP-VK.robustness.buffer_access.through_pointers.graphics.writes.fragment.32B_out_of_memory_with_vec4_s32
+dEQP-VK.robustness.buffer_access.through_pointers.graphics.writes.fragment.1B_in_memory_with_vec4_u32
+dEQP-VK.robustness.buffer_access.through_pointers.graphics.writes.fragment.1B_out_of_memory_with_vec4_u32
+dEQP-VK.robustness.buffer_access.through_pointers.graphics.writes.fragment.3B_in_memory_with_vec4_u32
+dEQP-VK.robustness.buffer_access.through_pointers.graphics.writes.fragment.3B_out_of_memory_with_vec4_u32
+dEQP-VK.robustness.buffer_access.through_pointers.graphics.writes.fragment.4B_in_memory_with_vec4_u32
+dEQP-VK.robustness.buffer_access.through_pointers.graphics.writes.fragment.4B_out_of_memory_with_vec4_u32
+dEQP-VK.robustness.buffer_access.through_pointers.graphics.writes.fragment.16B_in_memory_with_vec4_u32
+dEQP-VK.robustness.buffer_access.through_pointers.graphics.writes.fragment.16B_out_of_memory_with_vec4_u32
+dEQP-VK.robustness.buffer_access.through_pointers.graphics.writes.fragment.32B_in_memory_with_vec4_u32
+dEQP-VK.robustness.buffer_access.through_pointers.graphics.writes.fragment.32B_out_of_memory_with_vec4_u32
+dEQP-VK.robustness.buffer_access.through_pointers.graphics.writes.fragment.1B_in_memory_with_vec4_f32
+dEQP-VK.robustness.buffer_access.through_pointers.graphics.writes.fragment.1B_out_of_memory_with_vec4_f32
+dEQP-VK.robustness.buffer_access.through_pointers.graphics.writes.fragment.3B_in_memory_with_vec4_f32
+dEQP-VK.robustness.buffer_access.through_pointers.graphics.writes.fragment.3B_out_of_memory_with_vec4_f32
+dEQP-VK.robustness.buffer_access.through_pointers.graphics.writes.fragment.4B_in_memory_with_vec4_f32
+dEQP-VK.robustness.buffer_access.through_pointers.graphics.writes.fragment.4B_out_of_memory_with_vec4_f32
+dEQP-VK.robustness.buffer_access.through_pointers.graphics.writes.fragment.16B_in_memory_with_vec4_f32
+dEQP-VK.robustness.buffer_access.through_pointers.graphics.writes.fragment.16B_out_of_memory_with_vec4_f32
+dEQP-VK.robustness.buffer_access.through_pointers.graphics.writes.fragment.32B_in_memory_with_vec4_f32
+dEQP-VK.robustness.buffer_access.through_pointers.graphics.writes.fragment.32B_out_of_memory_with_vec4_f32
+dEQP-VK.robustness.buffer_access.through_pointers.graphics.writes.fragment.1B_in_memory_with_scalar_s32
+dEQP-VK.robustness.buffer_access.through_pointers.graphics.writes.fragment.1B_out_of_memory_with_scalar_s32
+dEQP-VK.robustness.buffer_access.through_pointers.graphics.writes.fragment.3B_in_memory_with_scalar_s32
+dEQP-VK.robustness.buffer_access.through_pointers.graphics.writes.fragment.3B_out_of_memory_with_scalar_s32
+dEQP-VK.robustness.buffer_access.through_pointers.graphics.writes.fragment.4B_in_memory_with_scalar_s32
+dEQP-VK.robustness.buffer_access.through_pointers.graphics.writes.fragment.4B_out_of_memory_with_scalar_s32
+dEQP-VK.robustness.buffer_access.through_pointers.graphics.writes.fragment.16B_in_memory_with_scalar_s32
+dEQP-VK.robustness.buffer_access.through_pointers.graphics.writes.fragment.16B_out_of_memory_with_scalar_s32
+dEQP-VK.robustness.buffer_access.through_pointers.graphics.writes.fragment.32B_in_memory_with_scalar_s32
+dEQP-VK.robustness.buffer_access.through_pointers.graphics.writes.fragment.32B_out_of_memory_with_scalar_s32
+dEQP-VK.robustness.buffer_access.through_pointers.graphics.writes.fragment.1B_in_memory_with_scalar_u32
+dEQP-VK.robustness.buffer_access.through_pointers.graphics.writes.fragment.1B_out_of_memory_with_scalar_u32
+dEQP-VK.robustness.buffer_access.through_pointers.graphics.writes.fragment.3B_in_memory_with_scalar_u32
+dEQP-VK.robustness.buffer_access.through_pointers.graphics.writes.fragment.3B_out_of_memory_with_scalar_u32
+dEQP-VK.robustness.buffer_access.through_pointers.graphics.writes.fragment.4B_in_memory_with_scalar_u32
+dEQP-VK.robustness.buffer_access.through_pointers.graphics.writes.fragment.4B_out_of_memory_with_scalar_u32
+dEQP-VK.robustness.buffer_access.through_pointers.graphics.writes.fragment.16B_in_memory_with_scalar_u32
+dEQP-VK.robustness.buffer_access.through_pointers.graphics.writes.fragment.16B_out_of_memory_with_scalar_u32
+dEQP-VK.robustness.buffer_access.through_pointers.graphics.writes.fragment.32B_in_memory_with_scalar_u32
+dEQP-VK.robustness.buffer_access.through_pointers.graphics.writes.fragment.32B_out_of_memory_with_scalar_u32
+dEQP-VK.robustness.buffer_access.through_pointers.graphics.writes.fragment.1B_in_memory_with_scalar_f32
+dEQP-VK.robustness.buffer_access.through_pointers.graphics.writes.fragment.1B_out_of_memory_with_scalar_f32
+dEQP-VK.robustness.buffer_access.through_pointers.graphics.writes.fragment.3B_in_memory_with_scalar_f32
+dEQP-VK.robustness.buffer_access.through_pointers.graphics.writes.fragment.3B_out_of_memory_with_scalar_f32
+dEQP-VK.robustness.buffer_access.through_pointers.graphics.writes.fragment.4B_in_memory_with_scalar_f32
+dEQP-VK.robustness.buffer_access.through_pointers.graphics.writes.fragment.4B_out_of_memory_with_scalar_f32
+dEQP-VK.robustness.buffer_access.through_pointers.graphics.writes.fragment.16B_in_memory_with_scalar_f32
+dEQP-VK.robustness.buffer_access.through_pointers.graphics.writes.fragment.16B_out_of_memory_with_scalar_f32
+dEQP-VK.robustness.buffer_access.through_pointers.graphics.writes.fragment.32B_in_memory_with_scalar_f32
+dEQP-VK.robustness.buffer_access.through_pointers.graphics.writes.fragment.32B_out_of_memory_with_scalar_f32
+dEQP-VK.robustness.buffer_access.through_pointers.compute.reads.1B_in_memory_with_vec4_s32
+dEQP-VK.robustness.buffer_access.through_pointers.compute.reads.1B_out_of_memory_with_vec4_s32
+dEQP-VK.robustness.buffer_access.through_pointers.compute.reads.3B_in_memory_with_vec4_s32
+dEQP-VK.robustness.buffer_access.through_pointers.compute.reads.3B_out_of_memory_with_vec4_s32
+dEQP-VK.robustness.buffer_access.through_pointers.compute.reads.4B_in_memory_with_vec4_s32
+dEQP-VK.robustness.buffer_access.through_pointers.compute.reads.4B_out_of_memory_with_vec4_s32
+dEQP-VK.robustness.buffer_access.through_pointers.compute.reads.16B_in_memory_with_vec4_s32
+dEQP-VK.robustness.buffer_access.through_pointers.compute.reads.16B_out_of_memory_with_vec4_s32
+dEQP-VK.robustness.buffer_access.through_pointers.compute.reads.32B_in_memory_with_vec4_s32
+dEQP-VK.robustness.buffer_access.through_pointers.compute.reads.32B_out_of_memory_with_vec4_s32
+dEQP-VK.robustness.buffer_access.through_pointers.compute.reads.1B_in_memory_with_vec4_u32
+dEQP-VK.robustness.buffer_access.through_pointers.compute.reads.1B_out_of_memory_with_vec4_u32
+dEQP-VK.robustness.buffer_access.through_pointers.compute.reads.3B_in_memory_with_vec4_u32
+dEQP-VK.robustness.buffer_access.through_pointers.compute.reads.3B_out_of_memory_with_vec4_u32
+dEQP-VK.robustness.buffer_access.through_pointers.compute.reads.4B_in_memory_with_vec4_u32
+dEQP-VK.robustness.buffer_access.through_pointers.compute.reads.4B_out_of_memory_with_vec4_u32
+dEQP-VK.robustness.buffer_access.through_pointers.compute.reads.16B_in_memory_with_vec4_u32
+dEQP-VK.robustness.buffer_access.through_pointers.compute.reads.16B_out_of_memory_with_vec4_u32
+dEQP-VK.robustness.buffer_access.through_pointers.compute.reads.32B_in_memory_with_vec4_u32
+dEQP-VK.robustness.buffer_access.through_pointers.compute.reads.32B_out_of_memory_with_vec4_u32
+dEQP-VK.robustness.buffer_access.through_pointers.compute.reads.1B_in_memory_with_vec4_f32
+dEQP-VK.robustness.buffer_access.through_pointers.compute.reads.1B_out_of_memory_with_vec4_f32
+dEQP-VK.robustness.buffer_access.through_pointers.compute.reads.3B_in_memory_with_vec4_f32
+dEQP-VK.robustness.buffer_access.through_pointers.compute.reads.3B_out_of_memory_with_vec4_f32
+dEQP-VK.robustness.buffer_access.through_pointers.compute.reads.4B_in_memory_with_vec4_f32
+dEQP-VK.robustness.buffer_access.through_pointers.compute.reads.4B_out_of_memory_with_vec4_f32
+dEQP-VK.robustness.buffer_access.through_pointers.compute.reads.16B_in_memory_with_vec4_f32
+dEQP-VK.robustness.buffer_access.through_pointers.compute.reads.16B_out_of_memory_with_vec4_f32
+dEQP-VK.robustness.buffer_access.through_pointers.compute.reads.32B_in_memory_with_vec4_f32
+dEQP-VK.robustness.buffer_access.through_pointers.compute.reads.32B_out_of_memory_with_vec4_f32
+dEQP-VK.robustness.buffer_access.through_pointers.compute.reads.1B_in_memory_with_scalar_s32
+dEQP-VK.robustness.buffer_access.through_pointers.compute.reads.1B_out_of_memory_with_scalar_s32
+dEQP-VK.robustness.buffer_access.through_pointers.compute.reads.3B_in_memory_with_scalar_s32
+dEQP-VK.robustness.buffer_access.through_pointers.compute.reads.3B_out_of_memory_with_scalar_s32
+dEQP-VK.robustness.buffer_access.through_pointers.compute.reads.4B_in_memory_with_scalar_s32
+dEQP-VK.robustness.buffer_access.through_pointers.compute.reads.4B_out_of_memory_with_scalar_s32
+dEQP-VK.robustness.buffer_access.through_pointers.compute.reads.16B_in_memory_with_scalar_s32
+dEQP-VK.robustness.buffer_access.through_pointers.compute.reads.16B_out_of_memory_with_scalar_s32
+dEQP-VK.robustness.buffer_access.through_pointers.compute.reads.32B_in_memory_with_scalar_s32
+dEQP-VK.robustness.buffer_access.through_pointers.compute.reads.32B_out_of_memory_with_scalar_s32
+dEQP-VK.robustness.buffer_access.through_pointers.compute.reads.1B_in_memory_with_scalar_u32
+dEQP-VK.robustness.buffer_access.through_pointers.compute.reads.1B_out_of_memory_with_scalar_u32
+dEQP-VK.robustness.buffer_access.through_pointers.compute.reads.3B_in_memory_with_scalar_u32
+dEQP-VK.robustness.buffer_access.through_pointers.compute.reads.3B_out_of_memory_with_scalar_u32
+dEQP-VK.robustness.buffer_access.through_pointers.compute.reads.4B_in_memory_with_scalar_u32
+dEQP-VK.robustness.buffer_access.through_pointers.compute.reads.4B_out_of_memory_with_scalar_u32
+dEQP-VK.robustness.buffer_access.through_pointers.compute.reads.16B_in_memory_with_scalar_u32
+dEQP-VK.robustness.buffer_access.through_pointers.compute.reads.16B_out_of_memory_with_scalar_u32
+dEQP-VK.robustness.buffer_access.through_pointers.compute.reads.32B_in_memory_with_scalar_u32
+dEQP-VK.robustness.buffer_access.through_pointers.compute.reads.32B_out_of_memory_with_scalar_u32
+dEQP-VK.robustness.buffer_access.through_pointers.compute.reads.1B_in_memory_with_scalar_f32
+dEQP-VK.robustness.buffer_access.through_pointers.compute.reads.1B_out_of_memory_with_scalar_f32
+dEQP-VK.robustness.buffer_access.through_pointers.compute.reads.3B_in_memory_with_scalar_f32
+dEQP-VK.robustness.buffer_access.through_pointers.compute.reads.3B_out_of_memory_with_scalar_f32
+dEQP-VK.robustness.buffer_access.through_pointers.compute.reads.4B_in_memory_with_scalar_f32
+dEQP-VK.robustness.buffer_access.through_pointers.compute.reads.4B_out_of_memory_with_scalar_f32
+dEQP-VK.robustness.buffer_access.through_pointers.compute.reads.16B_in_memory_with_scalar_f32
+dEQP-VK.robustness.buffer_access.through_pointers.compute.reads.16B_out_of_memory_with_scalar_f32
+dEQP-VK.robustness.buffer_access.through_pointers.compute.reads.32B_in_memory_with_scalar_f32
+dEQP-VK.robustness.buffer_access.through_pointers.compute.reads.32B_out_of_memory_with_scalar_f32
+dEQP-VK.robustness.buffer_access.through_pointers.compute.writes.1B_in_memory_with_vec4_s32
+dEQP-VK.robustness.buffer_access.through_pointers.compute.writes.1B_out_of_memory_with_vec4_s32
+dEQP-VK.robustness.buffer_access.through_pointers.compute.writes.3B_in_memory_with_vec4_s32
+dEQP-VK.robustness.buffer_access.through_pointers.compute.writes.3B_out_of_memory_with_vec4_s32
+dEQP-VK.robustness.buffer_access.through_pointers.compute.writes.4B_in_memory_with_vec4_s32
+dEQP-VK.robustness.buffer_access.through_pointers.compute.writes.4B_out_of_memory_with_vec4_s32
+dEQP-VK.robustness.buffer_access.through_pointers.compute.writes.16B_in_memory_with_vec4_s32
+dEQP-VK.robustness.buffer_access.through_pointers.compute.writes.16B_out_of_memory_with_vec4_s32
+dEQP-VK.robustness.buffer_access.through_pointers.compute.writes.32B_in_memory_with_vec4_s32
+dEQP-VK.robustness.buffer_access.through_pointers.compute.writes.32B_out_of_memory_with_vec4_s32
+dEQP-VK.robustness.buffer_access.through_pointers.compute.writes.1B_in_memory_with_vec4_u32
+dEQP-VK.robustness.buffer_access.through_pointers.compute.writes.1B_out_of_memory_with_vec4_u32
+dEQP-VK.robustness.buffer_access.through_pointers.compute.writes.3B_in_memory_with_vec4_u32
+dEQP-VK.robustness.buffer_access.through_pointers.compute.writes.3B_out_of_memory_with_vec4_u32
+dEQP-VK.robustness.buffer_access.through_pointers.compute.writes.4B_in_memory_with_vec4_u32
+dEQP-VK.robustness.buffer_access.through_pointers.compute.writes.4B_out_of_memory_with_vec4_u32
+dEQP-VK.robustness.buffer_access.through_pointers.compute.writes.16B_in_memory_with_vec4_u32
+dEQP-VK.robustness.buffer_access.through_pointers.compute.writes.16B_out_of_memory_with_vec4_u32
+dEQP-VK.robustness.buffer_access.through_pointers.compute.writes.32B_in_memory_with_vec4_u32
+dEQP-VK.robustness.buffer_access.through_pointers.compute.writes.32B_out_of_memory_with_vec4_u32
+dEQP-VK.robustness.buffer_access.through_pointers.compute.writes.1B_in_memory_with_vec4_f32
+dEQP-VK.robustness.buffer_access.through_pointers.compute.writes.1B_out_of_memory_with_vec4_f32
+dEQP-VK.robustness.buffer_access.through_pointers.compute.writes.3B_in_memory_with_vec4_f32
+dEQP-VK.robustness.buffer_access.through_pointers.compute.writes.3B_out_of_memory_with_vec4_f32
+dEQP-VK.robustness.buffer_access.through_pointers.compute.writes.4B_in_memory_with_vec4_f32
+dEQP-VK.robustness.buffer_access.through_pointers.compute.writes.4B_out_of_memory_with_vec4_f32
+dEQP-VK.robustness.buffer_access.through_pointers.compute.writes.16B_in_memory_with_vec4_f32
+dEQP-VK.robustness.buffer_access.through_pointers.compute.writes.16B_out_of_memory_with_vec4_f32
+dEQP-VK.robustness.buffer_access.through_pointers.compute.writes.32B_in_memory_with_vec4_f32
+dEQP-VK.robustness.buffer_access.through_pointers.compute.writes.32B_out_of_memory_with_vec4_f32
+dEQP-VK.robustness.buffer_access.through_pointers.compute.writes.1B_in_memory_with_scalar_s32
+dEQP-VK.robustness.buffer_access.through_pointers.compute.writes.1B_out_of_memory_with_scalar_s32
+dEQP-VK.robustness.buffer_access.through_pointers.compute.writes.3B_in_memory_with_scalar_s32
+dEQP-VK.robustness.buffer_access.through_pointers.compute.writes.3B_out_of_memory_with_scalar_s32
+dEQP-VK.robustness.buffer_access.through_pointers.compute.writes.4B_in_memory_with_scalar_s32
+dEQP-VK.robustness.buffer_access.through_pointers.compute.writes.4B_out_of_memory_with_scalar_s32
+dEQP-VK.robustness.buffer_access.through_pointers.compute.writes.16B_in_memory_with_scalar_s32
+dEQP-VK.robustness.buffer_access.through_pointers.compute.writes.16B_out_of_memory_with_scalar_s32
+dEQP-VK.robustness.buffer_access.through_pointers.compute.writes.32B_in_memory_with_scalar_s32
+dEQP-VK.robustness.buffer_access.through_pointers.compute.writes.32B_out_of_memory_with_scalar_s32
+dEQP-VK.robustness.buffer_access.through_pointers.compute.writes.1B_in_memory_with_scalar_u32
+dEQP-VK.robustness.buffer_access.through_pointers.compute.writes.1B_out_of_memory_with_scalar_u32
+dEQP-VK.robustness.buffer_access.through_pointers.compute.writes.3B_in_memory_with_scalar_u32
+dEQP-VK.robustness.buffer_access.through_pointers.compute.writes.3B_out_of_memory_with_scalar_u32
+dEQP-VK.robustness.buffer_access.through_pointers.compute.writes.4B_in_memory_with_scalar_u32
+dEQP-VK.robustness.buffer_access.through_pointers.compute.writes.4B_out_of_memory_with_scalar_u32
+dEQP-VK.robustness.buffer_access.through_pointers.compute.writes.16B_in_memory_with_scalar_u32
+dEQP-VK.robustness.buffer_access.through_pointers.compute.writes.16B_out_of_memory_with_scalar_u32
+dEQP-VK.robustness.buffer_access.through_pointers.compute.writes.32B_in_memory_with_scalar_u32
+dEQP-VK.robustness.buffer_access.through_pointers.compute.writes.32B_out_of_memory_with_scalar_u32
+dEQP-VK.robustness.buffer_access.through_pointers.compute.writes.1B_in_memory_with_scalar_f32
+dEQP-VK.robustness.buffer_access.through_pointers.compute.writes.1B_out_of_memory_with_scalar_f32
+dEQP-VK.robustness.buffer_access.through_pointers.compute.writes.3B_in_memory_with_scalar_f32
+dEQP-VK.robustness.buffer_access.through_pointers.compute.writes.3B_out_of_memory_with_scalar_f32
+dEQP-VK.robustness.buffer_access.through_pointers.compute.writes.4B_in_memory_with_scalar_f32
+dEQP-VK.robustness.buffer_access.through_pointers.compute.writes.4B_out_of_memory_with_scalar_f32
+dEQP-VK.robustness.buffer_access.through_pointers.compute.writes.16B_in_memory_with_scalar_f32
+dEQP-VK.robustness.buffer_access.through_pointers.compute.writes.16B_out_of_memory_with_scalar_f32
+dEQP-VK.robustness.buffer_access.through_pointers.compute.writes.32B_in_memory_with_scalar_f32
+dEQP-VK.robustness.buffer_access.through_pointers.compute.writes.32B_out_of_memory_with_scalar_f32
 dEQP-VK.robustness.vertex_access.r32_uint.draw.vertex_out_of_bounds
 dEQP-VK.robustness.vertex_access.r32_uint.draw.vertex_incomplete
 dEQP-VK.robustness.vertex_access.r32_uint.draw.instance_out_of_bounds
index 523ad1b..f73c1f9 100644 (file)
@@ -286691,6 +286691,366 @@ dEQP-VK.robustness.buffer_access.compute.texel_copy.a2b10g10r10_unorm_pack32.oob
 dEQP-VK.robustness.buffer_access.compute.texel_copy.out_of_alloc.oob_uniform_read
 dEQP-VK.robustness.buffer_access.compute.texel_copy.out_of_alloc.oob_storage_read
 dEQP-VK.robustness.buffer_access.compute.texel_copy.out_of_alloc.oob_storage_write
+dEQP-VK.robustness.buffer_access.through_pointers.graphics.reads.vertex.1B_in_memory_with_vec4_s32
+dEQP-VK.robustness.buffer_access.through_pointers.graphics.reads.vertex.1B_out_of_memory_with_vec4_s32
+dEQP-VK.robustness.buffer_access.through_pointers.graphics.reads.vertex.3B_in_memory_with_vec4_s32
+dEQP-VK.robustness.buffer_access.through_pointers.graphics.reads.vertex.3B_out_of_memory_with_vec4_s32
+dEQP-VK.robustness.buffer_access.through_pointers.graphics.reads.vertex.4B_in_memory_with_vec4_s32
+dEQP-VK.robustness.buffer_access.through_pointers.graphics.reads.vertex.4B_out_of_memory_with_vec4_s32
+dEQP-VK.robustness.buffer_access.through_pointers.graphics.reads.vertex.16B_in_memory_with_vec4_s32
+dEQP-VK.robustness.buffer_access.through_pointers.graphics.reads.vertex.16B_out_of_memory_with_vec4_s32
+dEQP-VK.robustness.buffer_access.through_pointers.graphics.reads.vertex.32B_in_memory_with_vec4_s32
+dEQP-VK.robustness.buffer_access.through_pointers.graphics.reads.vertex.32B_out_of_memory_with_vec4_s32
+dEQP-VK.robustness.buffer_access.through_pointers.graphics.reads.vertex.1B_in_memory_with_vec4_u32
+dEQP-VK.robustness.buffer_access.through_pointers.graphics.reads.vertex.1B_out_of_memory_with_vec4_u32
+dEQP-VK.robustness.buffer_access.through_pointers.graphics.reads.vertex.3B_in_memory_with_vec4_u32
+dEQP-VK.robustness.buffer_access.through_pointers.graphics.reads.vertex.3B_out_of_memory_with_vec4_u32
+dEQP-VK.robustness.buffer_access.through_pointers.graphics.reads.vertex.4B_in_memory_with_vec4_u32
+dEQP-VK.robustness.buffer_access.through_pointers.graphics.reads.vertex.4B_out_of_memory_with_vec4_u32
+dEQP-VK.robustness.buffer_access.through_pointers.graphics.reads.vertex.16B_in_memory_with_vec4_u32
+dEQP-VK.robustness.buffer_access.through_pointers.graphics.reads.vertex.16B_out_of_memory_with_vec4_u32
+dEQP-VK.robustness.buffer_access.through_pointers.graphics.reads.vertex.32B_in_memory_with_vec4_u32
+dEQP-VK.robustness.buffer_access.through_pointers.graphics.reads.vertex.32B_out_of_memory_with_vec4_u32
+dEQP-VK.robustness.buffer_access.through_pointers.graphics.reads.vertex.1B_in_memory_with_vec4_f32
+dEQP-VK.robustness.buffer_access.through_pointers.graphics.reads.vertex.1B_out_of_memory_with_vec4_f32
+dEQP-VK.robustness.buffer_access.through_pointers.graphics.reads.vertex.3B_in_memory_with_vec4_f32
+dEQP-VK.robustness.buffer_access.through_pointers.graphics.reads.vertex.3B_out_of_memory_with_vec4_f32
+dEQP-VK.robustness.buffer_access.through_pointers.graphics.reads.vertex.4B_in_memory_with_vec4_f32
+dEQP-VK.robustness.buffer_access.through_pointers.graphics.reads.vertex.4B_out_of_memory_with_vec4_f32
+dEQP-VK.robustness.buffer_access.through_pointers.graphics.reads.vertex.16B_in_memory_with_vec4_f32
+dEQP-VK.robustness.buffer_access.through_pointers.graphics.reads.vertex.16B_out_of_memory_with_vec4_f32
+dEQP-VK.robustness.buffer_access.through_pointers.graphics.reads.vertex.32B_in_memory_with_vec4_f32
+dEQP-VK.robustness.buffer_access.through_pointers.graphics.reads.vertex.32B_out_of_memory_with_vec4_f32
+dEQP-VK.robustness.buffer_access.through_pointers.graphics.reads.vertex.1B_in_memory_with_scalar_s32
+dEQP-VK.robustness.buffer_access.through_pointers.graphics.reads.vertex.1B_out_of_memory_with_scalar_s32
+dEQP-VK.robustness.buffer_access.through_pointers.graphics.reads.vertex.3B_in_memory_with_scalar_s32
+dEQP-VK.robustness.buffer_access.through_pointers.graphics.reads.vertex.3B_out_of_memory_with_scalar_s32
+dEQP-VK.robustness.buffer_access.through_pointers.graphics.reads.vertex.4B_in_memory_with_scalar_s32
+dEQP-VK.robustness.buffer_access.through_pointers.graphics.reads.vertex.4B_out_of_memory_with_scalar_s32
+dEQP-VK.robustness.buffer_access.through_pointers.graphics.reads.vertex.16B_in_memory_with_scalar_s32
+dEQP-VK.robustness.buffer_access.through_pointers.graphics.reads.vertex.16B_out_of_memory_with_scalar_s32
+dEQP-VK.robustness.buffer_access.through_pointers.graphics.reads.vertex.32B_in_memory_with_scalar_s32
+dEQP-VK.robustness.buffer_access.through_pointers.graphics.reads.vertex.32B_out_of_memory_with_scalar_s32
+dEQP-VK.robustness.buffer_access.through_pointers.graphics.reads.vertex.1B_in_memory_with_scalar_u32
+dEQP-VK.robustness.buffer_access.through_pointers.graphics.reads.vertex.1B_out_of_memory_with_scalar_u32
+dEQP-VK.robustness.buffer_access.through_pointers.graphics.reads.vertex.3B_in_memory_with_scalar_u32
+dEQP-VK.robustness.buffer_access.through_pointers.graphics.reads.vertex.3B_out_of_memory_with_scalar_u32
+dEQP-VK.robustness.buffer_access.through_pointers.graphics.reads.vertex.4B_in_memory_with_scalar_u32
+dEQP-VK.robustness.buffer_access.through_pointers.graphics.reads.vertex.4B_out_of_memory_with_scalar_u32
+dEQP-VK.robustness.buffer_access.through_pointers.graphics.reads.vertex.16B_in_memory_with_scalar_u32
+dEQP-VK.robustness.buffer_access.through_pointers.graphics.reads.vertex.16B_out_of_memory_with_scalar_u32
+dEQP-VK.robustness.buffer_access.through_pointers.graphics.reads.vertex.32B_in_memory_with_scalar_u32
+dEQP-VK.robustness.buffer_access.through_pointers.graphics.reads.vertex.32B_out_of_memory_with_scalar_u32
+dEQP-VK.robustness.buffer_access.through_pointers.graphics.reads.vertex.1B_in_memory_with_scalar_f32
+dEQP-VK.robustness.buffer_access.through_pointers.graphics.reads.vertex.1B_out_of_memory_with_scalar_f32
+dEQP-VK.robustness.buffer_access.through_pointers.graphics.reads.vertex.3B_in_memory_with_scalar_f32
+dEQP-VK.robustness.buffer_access.through_pointers.graphics.reads.vertex.3B_out_of_memory_with_scalar_f32
+dEQP-VK.robustness.buffer_access.through_pointers.graphics.reads.vertex.4B_in_memory_with_scalar_f32
+dEQP-VK.robustness.buffer_access.through_pointers.graphics.reads.vertex.4B_out_of_memory_with_scalar_f32
+dEQP-VK.robustness.buffer_access.through_pointers.graphics.reads.vertex.16B_in_memory_with_scalar_f32
+dEQP-VK.robustness.buffer_access.through_pointers.graphics.reads.vertex.16B_out_of_memory_with_scalar_f32
+dEQP-VK.robustness.buffer_access.through_pointers.graphics.reads.vertex.32B_in_memory_with_scalar_f32
+dEQP-VK.robustness.buffer_access.through_pointers.graphics.reads.vertex.32B_out_of_memory_with_scalar_f32
+dEQP-VK.robustness.buffer_access.through_pointers.graphics.reads.fragment.1B_in_memory_with_vec4_s32
+dEQP-VK.robustness.buffer_access.through_pointers.graphics.reads.fragment.1B_out_of_memory_with_vec4_s32
+dEQP-VK.robustness.buffer_access.through_pointers.graphics.reads.fragment.3B_in_memory_with_vec4_s32
+dEQP-VK.robustness.buffer_access.through_pointers.graphics.reads.fragment.3B_out_of_memory_with_vec4_s32
+dEQP-VK.robustness.buffer_access.through_pointers.graphics.reads.fragment.4B_in_memory_with_vec4_s32
+dEQP-VK.robustness.buffer_access.through_pointers.graphics.reads.fragment.4B_out_of_memory_with_vec4_s32
+dEQP-VK.robustness.buffer_access.through_pointers.graphics.reads.fragment.16B_in_memory_with_vec4_s32
+dEQP-VK.robustness.buffer_access.through_pointers.graphics.reads.fragment.16B_out_of_memory_with_vec4_s32
+dEQP-VK.robustness.buffer_access.through_pointers.graphics.reads.fragment.32B_in_memory_with_vec4_s32
+dEQP-VK.robustness.buffer_access.through_pointers.graphics.reads.fragment.32B_out_of_memory_with_vec4_s32
+dEQP-VK.robustness.buffer_access.through_pointers.graphics.reads.fragment.1B_in_memory_with_vec4_u32
+dEQP-VK.robustness.buffer_access.through_pointers.graphics.reads.fragment.1B_out_of_memory_with_vec4_u32
+dEQP-VK.robustness.buffer_access.through_pointers.graphics.reads.fragment.3B_in_memory_with_vec4_u32
+dEQP-VK.robustness.buffer_access.through_pointers.graphics.reads.fragment.3B_out_of_memory_with_vec4_u32
+dEQP-VK.robustness.buffer_access.through_pointers.graphics.reads.fragment.4B_in_memory_with_vec4_u32
+dEQP-VK.robustness.buffer_access.through_pointers.graphics.reads.fragment.4B_out_of_memory_with_vec4_u32
+dEQP-VK.robustness.buffer_access.through_pointers.graphics.reads.fragment.16B_in_memory_with_vec4_u32
+dEQP-VK.robustness.buffer_access.through_pointers.graphics.reads.fragment.16B_out_of_memory_with_vec4_u32
+dEQP-VK.robustness.buffer_access.through_pointers.graphics.reads.fragment.32B_in_memory_with_vec4_u32
+dEQP-VK.robustness.buffer_access.through_pointers.graphics.reads.fragment.32B_out_of_memory_with_vec4_u32
+dEQP-VK.robustness.buffer_access.through_pointers.graphics.reads.fragment.1B_in_memory_with_vec4_f32
+dEQP-VK.robustness.buffer_access.through_pointers.graphics.reads.fragment.1B_out_of_memory_with_vec4_f32
+dEQP-VK.robustness.buffer_access.through_pointers.graphics.reads.fragment.3B_in_memory_with_vec4_f32
+dEQP-VK.robustness.buffer_access.through_pointers.graphics.reads.fragment.3B_out_of_memory_with_vec4_f32
+dEQP-VK.robustness.buffer_access.through_pointers.graphics.reads.fragment.4B_in_memory_with_vec4_f32
+dEQP-VK.robustness.buffer_access.through_pointers.graphics.reads.fragment.4B_out_of_memory_with_vec4_f32
+dEQP-VK.robustness.buffer_access.through_pointers.graphics.reads.fragment.16B_in_memory_with_vec4_f32
+dEQP-VK.robustness.buffer_access.through_pointers.graphics.reads.fragment.16B_out_of_memory_with_vec4_f32
+dEQP-VK.robustness.buffer_access.through_pointers.graphics.reads.fragment.32B_in_memory_with_vec4_f32
+dEQP-VK.robustness.buffer_access.through_pointers.graphics.reads.fragment.32B_out_of_memory_with_vec4_f32
+dEQP-VK.robustness.buffer_access.through_pointers.graphics.reads.fragment.1B_in_memory_with_scalar_s32
+dEQP-VK.robustness.buffer_access.through_pointers.graphics.reads.fragment.1B_out_of_memory_with_scalar_s32
+dEQP-VK.robustness.buffer_access.through_pointers.graphics.reads.fragment.3B_in_memory_with_scalar_s32
+dEQP-VK.robustness.buffer_access.through_pointers.graphics.reads.fragment.3B_out_of_memory_with_scalar_s32
+dEQP-VK.robustness.buffer_access.through_pointers.graphics.reads.fragment.4B_in_memory_with_scalar_s32
+dEQP-VK.robustness.buffer_access.through_pointers.graphics.reads.fragment.4B_out_of_memory_with_scalar_s32
+dEQP-VK.robustness.buffer_access.through_pointers.graphics.reads.fragment.16B_in_memory_with_scalar_s32
+dEQP-VK.robustness.buffer_access.through_pointers.graphics.reads.fragment.16B_out_of_memory_with_scalar_s32
+dEQP-VK.robustness.buffer_access.through_pointers.graphics.reads.fragment.32B_in_memory_with_scalar_s32
+dEQP-VK.robustness.buffer_access.through_pointers.graphics.reads.fragment.32B_out_of_memory_with_scalar_s32
+dEQP-VK.robustness.buffer_access.through_pointers.graphics.reads.fragment.1B_in_memory_with_scalar_u32
+dEQP-VK.robustness.buffer_access.through_pointers.graphics.reads.fragment.1B_out_of_memory_with_scalar_u32
+dEQP-VK.robustness.buffer_access.through_pointers.graphics.reads.fragment.3B_in_memory_with_scalar_u32
+dEQP-VK.robustness.buffer_access.through_pointers.graphics.reads.fragment.3B_out_of_memory_with_scalar_u32
+dEQP-VK.robustness.buffer_access.through_pointers.graphics.reads.fragment.4B_in_memory_with_scalar_u32
+dEQP-VK.robustness.buffer_access.through_pointers.graphics.reads.fragment.4B_out_of_memory_with_scalar_u32
+dEQP-VK.robustness.buffer_access.through_pointers.graphics.reads.fragment.16B_in_memory_with_scalar_u32
+dEQP-VK.robustness.buffer_access.through_pointers.graphics.reads.fragment.16B_out_of_memory_with_scalar_u32
+dEQP-VK.robustness.buffer_access.through_pointers.graphics.reads.fragment.32B_in_memory_with_scalar_u32
+dEQP-VK.robustness.buffer_access.through_pointers.graphics.reads.fragment.32B_out_of_memory_with_scalar_u32
+dEQP-VK.robustness.buffer_access.through_pointers.graphics.reads.fragment.1B_in_memory_with_scalar_f32
+dEQP-VK.robustness.buffer_access.through_pointers.graphics.reads.fragment.1B_out_of_memory_with_scalar_f32
+dEQP-VK.robustness.buffer_access.through_pointers.graphics.reads.fragment.3B_in_memory_with_scalar_f32
+dEQP-VK.robustness.buffer_access.through_pointers.graphics.reads.fragment.3B_out_of_memory_with_scalar_f32
+dEQP-VK.robustness.buffer_access.through_pointers.graphics.reads.fragment.4B_in_memory_with_scalar_f32
+dEQP-VK.robustness.buffer_access.through_pointers.graphics.reads.fragment.4B_out_of_memory_with_scalar_f32
+dEQP-VK.robustness.buffer_access.through_pointers.graphics.reads.fragment.16B_in_memory_with_scalar_f32
+dEQP-VK.robustness.buffer_access.through_pointers.graphics.reads.fragment.16B_out_of_memory_with_scalar_f32
+dEQP-VK.robustness.buffer_access.through_pointers.graphics.reads.fragment.32B_in_memory_with_scalar_f32
+dEQP-VK.robustness.buffer_access.through_pointers.graphics.reads.fragment.32B_out_of_memory_with_scalar_f32
+dEQP-VK.robustness.buffer_access.through_pointers.graphics.writes.vertex.1B_in_memory_with_vec4_s32
+dEQP-VK.robustness.buffer_access.through_pointers.graphics.writes.vertex.1B_out_of_memory_with_vec4_s32
+dEQP-VK.robustness.buffer_access.through_pointers.graphics.writes.vertex.3B_in_memory_with_vec4_s32
+dEQP-VK.robustness.buffer_access.through_pointers.graphics.writes.vertex.3B_out_of_memory_with_vec4_s32
+dEQP-VK.robustness.buffer_access.through_pointers.graphics.writes.vertex.4B_in_memory_with_vec4_s32
+dEQP-VK.robustness.buffer_access.through_pointers.graphics.writes.vertex.4B_out_of_memory_with_vec4_s32
+dEQP-VK.robustness.buffer_access.through_pointers.graphics.writes.vertex.16B_in_memory_with_vec4_s32
+dEQP-VK.robustness.buffer_access.through_pointers.graphics.writes.vertex.16B_out_of_memory_with_vec4_s32
+dEQP-VK.robustness.buffer_access.through_pointers.graphics.writes.vertex.32B_in_memory_with_vec4_s32
+dEQP-VK.robustness.buffer_access.through_pointers.graphics.writes.vertex.32B_out_of_memory_with_vec4_s32
+dEQP-VK.robustness.buffer_access.through_pointers.graphics.writes.vertex.1B_in_memory_with_vec4_u32
+dEQP-VK.robustness.buffer_access.through_pointers.graphics.writes.vertex.1B_out_of_memory_with_vec4_u32
+dEQP-VK.robustness.buffer_access.through_pointers.graphics.writes.vertex.3B_in_memory_with_vec4_u32
+dEQP-VK.robustness.buffer_access.through_pointers.graphics.writes.vertex.3B_out_of_memory_with_vec4_u32
+dEQP-VK.robustness.buffer_access.through_pointers.graphics.writes.vertex.4B_in_memory_with_vec4_u32
+dEQP-VK.robustness.buffer_access.through_pointers.graphics.writes.vertex.4B_out_of_memory_with_vec4_u32
+dEQP-VK.robustness.buffer_access.through_pointers.graphics.writes.vertex.16B_in_memory_with_vec4_u32
+dEQP-VK.robustness.buffer_access.through_pointers.graphics.writes.vertex.16B_out_of_memory_with_vec4_u32
+dEQP-VK.robustness.buffer_access.through_pointers.graphics.writes.vertex.32B_in_memory_with_vec4_u32
+dEQP-VK.robustness.buffer_access.through_pointers.graphics.writes.vertex.32B_out_of_memory_with_vec4_u32
+dEQP-VK.robustness.buffer_access.through_pointers.graphics.writes.vertex.1B_in_memory_with_vec4_f32
+dEQP-VK.robustness.buffer_access.through_pointers.graphics.writes.vertex.1B_out_of_memory_with_vec4_f32
+dEQP-VK.robustness.buffer_access.through_pointers.graphics.writes.vertex.3B_in_memory_with_vec4_f32
+dEQP-VK.robustness.buffer_access.through_pointers.graphics.writes.vertex.3B_out_of_memory_with_vec4_f32
+dEQP-VK.robustness.buffer_access.through_pointers.graphics.writes.vertex.4B_in_memory_with_vec4_f32
+dEQP-VK.robustness.buffer_access.through_pointers.graphics.writes.vertex.4B_out_of_memory_with_vec4_f32
+dEQP-VK.robustness.buffer_access.through_pointers.graphics.writes.vertex.16B_in_memory_with_vec4_f32
+dEQP-VK.robustness.buffer_access.through_pointers.graphics.writes.vertex.16B_out_of_memory_with_vec4_f32
+dEQP-VK.robustness.buffer_access.through_pointers.graphics.writes.vertex.32B_in_memory_with_vec4_f32
+dEQP-VK.robustness.buffer_access.through_pointers.graphics.writes.vertex.32B_out_of_memory_with_vec4_f32
+dEQP-VK.robustness.buffer_access.through_pointers.graphics.writes.vertex.1B_in_memory_with_scalar_s32
+dEQP-VK.robustness.buffer_access.through_pointers.graphics.writes.vertex.1B_out_of_memory_with_scalar_s32
+dEQP-VK.robustness.buffer_access.through_pointers.graphics.writes.vertex.3B_in_memory_with_scalar_s32
+dEQP-VK.robustness.buffer_access.through_pointers.graphics.writes.vertex.3B_out_of_memory_with_scalar_s32
+dEQP-VK.robustness.buffer_access.through_pointers.graphics.writes.vertex.4B_in_memory_with_scalar_s32
+dEQP-VK.robustness.buffer_access.through_pointers.graphics.writes.vertex.4B_out_of_memory_with_scalar_s32
+dEQP-VK.robustness.buffer_access.through_pointers.graphics.writes.vertex.16B_in_memory_with_scalar_s32
+dEQP-VK.robustness.buffer_access.through_pointers.graphics.writes.vertex.16B_out_of_memory_with_scalar_s32
+dEQP-VK.robustness.buffer_access.through_pointers.graphics.writes.vertex.32B_in_memory_with_scalar_s32
+dEQP-VK.robustness.buffer_access.through_pointers.graphics.writes.vertex.32B_out_of_memory_with_scalar_s32
+dEQP-VK.robustness.buffer_access.through_pointers.graphics.writes.vertex.1B_in_memory_with_scalar_u32
+dEQP-VK.robustness.buffer_access.through_pointers.graphics.writes.vertex.1B_out_of_memory_with_scalar_u32
+dEQP-VK.robustness.buffer_access.through_pointers.graphics.writes.vertex.3B_in_memory_with_scalar_u32
+dEQP-VK.robustness.buffer_access.through_pointers.graphics.writes.vertex.3B_out_of_memory_with_scalar_u32
+dEQP-VK.robustness.buffer_access.through_pointers.graphics.writes.vertex.4B_in_memory_with_scalar_u32
+dEQP-VK.robustness.buffer_access.through_pointers.graphics.writes.vertex.4B_out_of_memory_with_scalar_u32
+dEQP-VK.robustness.buffer_access.through_pointers.graphics.writes.vertex.16B_in_memory_with_scalar_u32
+dEQP-VK.robustness.buffer_access.through_pointers.graphics.writes.vertex.16B_out_of_memory_with_scalar_u32
+dEQP-VK.robustness.buffer_access.through_pointers.graphics.writes.vertex.32B_in_memory_with_scalar_u32
+dEQP-VK.robustness.buffer_access.through_pointers.graphics.writes.vertex.32B_out_of_memory_with_scalar_u32
+dEQP-VK.robustness.buffer_access.through_pointers.graphics.writes.vertex.1B_in_memory_with_scalar_f32
+dEQP-VK.robustness.buffer_access.through_pointers.graphics.writes.vertex.1B_out_of_memory_with_scalar_f32
+dEQP-VK.robustness.buffer_access.through_pointers.graphics.writes.vertex.3B_in_memory_with_scalar_f32
+dEQP-VK.robustness.buffer_access.through_pointers.graphics.writes.vertex.3B_out_of_memory_with_scalar_f32
+dEQP-VK.robustness.buffer_access.through_pointers.graphics.writes.vertex.4B_in_memory_with_scalar_f32
+dEQP-VK.robustness.buffer_access.through_pointers.graphics.writes.vertex.4B_out_of_memory_with_scalar_f32
+dEQP-VK.robustness.buffer_access.through_pointers.graphics.writes.vertex.16B_in_memory_with_scalar_f32
+dEQP-VK.robustness.buffer_access.through_pointers.graphics.writes.vertex.16B_out_of_memory_with_scalar_f32
+dEQP-VK.robustness.buffer_access.through_pointers.graphics.writes.vertex.32B_in_memory_with_scalar_f32
+dEQP-VK.robustness.buffer_access.through_pointers.graphics.writes.vertex.32B_out_of_memory_with_scalar_f32
+dEQP-VK.robustness.buffer_access.through_pointers.graphics.writes.fragment.1B_in_memory_with_vec4_s32
+dEQP-VK.robustness.buffer_access.through_pointers.graphics.writes.fragment.1B_out_of_memory_with_vec4_s32
+dEQP-VK.robustness.buffer_access.through_pointers.graphics.writes.fragment.3B_in_memory_with_vec4_s32
+dEQP-VK.robustness.buffer_access.through_pointers.graphics.writes.fragment.3B_out_of_memory_with_vec4_s32
+dEQP-VK.robustness.buffer_access.through_pointers.graphics.writes.fragment.4B_in_memory_with_vec4_s32
+dEQP-VK.robustness.buffer_access.through_pointers.graphics.writes.fragment.4B_out_of_memory_with_vec4_s32
+dEQP-VK.robustness.buffer_access.through_pointers.graphics.writes.fragment.16B_in_memory_with_vec4_s32
+dEQP-VK.robustness.buffer_access.through_pointers.graphics.writes.fragment.16B_out_of_memory_with_vec4_s32
+dEQP-VK.robustness.buffer_access.through_pointers.graphics.writes.fragment.32B_in_memory_with_vec4_s32
+dEQP-VK.robustness.buffer_access.through_pointers.graphics.writes.fragment.32B_out_of_memory_with_vec4_s32
+dEQP-VK.robustness.buffer_access.through_pointers.graphics.writes.fragment.1B_in_memory_with_vec4_u32
+dEQP-VK.robustness.buffer_access.through_pointers.graphics.writes.fragment.1B_out_of_memory_with_vec4_u32
+dEQP-VK.robustness.buffer_access.through_pointers.graphics.writes.fragment.3B_in_memory_with_vec4_u32
+dEQP-VK.robustness.buffer_access.through_pointers.graphics.writes.fragment.3B_out_of_memory_with_vec4_u32
+dEQP-VK.robustness.buffer_access.through_pointers.graphics.writes.fragment.4B_in_memory_with_vec4_u32
+dEQP-VK.robustness.buffer_access.through_pointers.graphics.writes.fragment.4B_out_of_memory_with_vec4_u32
+dEQP-VK.robustness.buffer_access.through_pointers.graphics.writes.fragment.16B_in_memory_with_vec4_u32
+dEQP-VK.robustness.buffer_access.through_pointers.graphics.writes.fragment.16B_out_of_memory_with_vec4_u32
+dEQP-VK.robustness.buffer_access.through_pointers.graphics.writes.fragment.32B_in_memory_with_vec4_u32
+dEQP-VK.robustness.buffer_access.through_pointers.graphics.writes.fragment.32B_out_of_memory_with_vec4_u32
+dEQP-VK.robustness.buffer_access.through_pointers.graphics.writes.fragment.1B_in_memory_with_vec4_f32
+dEQP-VK.robustness.buffer_access.through_pointers.graphics.writes.fragment.1B_out_of_memory_with_vec4_f32
+dEQP-VK.robustness.buffer_access.through_pointers.graphics.writes.fragment.3B_in_memory_with_vec4_f32
+dEQP-VK.robustness.buffer_access.through_pointers.graphics.writes.fragment.3B_out_of_memory_with_vec4_f32
+dEQP-VK.robustness.buffer_access.through_pointers.graphics.writes.fragment.4B_in_memory_with_vec4_f32
+dEQP-VK.robustness.buffer_access.through_pointers.graphics.writes.fragment.4B_out_of_memory_with_vec4_f32
+dEQP-VK.robustness.buffer_access.through_pointers.graphics.writes.fragment.16B_in_memory_with_vec4_f32
+dEQP-VK.robustness.buffer_access.through_pointers.graphics.writes.fragment.16B_out_of_memory_with_vec4_f32
+dEQP-VK.robustness.buffer_access.through_pointers.graphics.writes.fragment.32B_in_memory_with_vec4_f32
+dEQP-VK.robustness.buffer_access.through_pointers.graphics.writes.fragment.32B_out_of_memory_with_vec4_f32
+dEQP-VK.robustness.buffer_access.through_pointers.graphics.writes.fragment.1B_in_memory_with_scalar_s32
+dEQP-VK.robustness.buffer_access.through_pointers.graphics.writes.fragment.1B_out_of_memory_with_scalar_s32
+dEQP-VK.robustness.buffer_access.through_pointers.graphics.writes.fragment.3B_in_memory_with_scalar_s32
+dEQP-VK.robustness.buffer_access.through_pointers.graphics.writes.fragment.3B_out_of_memory_with_scalar_s32
+dEQP-VK.robustness.buffer_access.through_pointers.graphics.writes.fragment.4B_in_memory_with_scalar_s32
+dEQP-VK.robustness.buffer_access.through_pointers.graphics.writes.fragment.4B_out_of_memory_with_scalar_s32
+dEQP-VK.robustness.buffer_access.through_pointers.graphics.writes.fragment.16B_in_memory_with_scalar_s32
+dEQP-VK.robustness.buffer_access.through_pointers.graphics.writes.fragment.16B_out_of_memory_with_scalar_s32
+dEQP-VK.robustness.buffer_access.through_pointers.graphics.writes.fragment.32B_in_memory_with_scalar_s32
+dEQP-VK.robustness.buffer_access.through_pointers.graphics.writes.fragment.32B_out_of_memory_with_scalar_s32
+dEQP-VK.robustness.buffer_access.through_pointers.graphics.writes.fragment.1B_in_memory_with_scalar_u32
+dEQP-VK.robustness.buffer_access.through_pointers.graphics.writes.fragment.1B_out_of_memory_with_scalar_u32
+dEQP-VK.robustness.buffer_access.through_pointers.graphics.writes.fragment.3B_in_memory_with_scalar_u32
+dEQP-VK.robustness.buffer_access.through_pointers.graphics.writes.fragment.3B_out_of_memory_with_scalar_u32
+dEQP-VK.robustness.buffer_access.through_pointers.graphics.writes.fragment.4B_in_memory_with_scalar_u32
+dEQP-VK.robustness.buffer_access.through_pointers.graphics.writes.fragment.4B_out_of_memory_with_scalar_u32
+dEQP-VK.robustness.buffer_access.through_pointers.graphics.writes.fragment.16B_in_memory_with_scalar_u32
+dEQP-VK.robustness.buffer_access.through_pointers.graphics.writes.fragment.16B_out_of_memory_with_scalar_u32
+dEQP-VK.robustness.buffer_access.through_pointers.graphics.writes.fragment.32B_in_memory_with_scalar_u32
+dEQP-VK.robustness.buffer_access.through_pointers.graphics.writes.fragment.32B_out_of_memory_with_scalar_u32
+dEQP-VK.robustness.buffer_access.through_pointers.graphics.writes.fragment.1B_in_memory_with_scalar_f32
+dEQP-VK.robustness.buffer_access.through_pointers.graphics.writes.fragment.1B_out_of_memory_with_scalar_f32
+dEQP-VK.robustness.buffer_access.through_pointers.graphics.writes.fragment.3B_in_memory_with_scalar_f32
+dEQP-VK.robustness.buffer_access.through_pointers.graphics.writes.fragment.3B_out_of_memory_with_scalar_f32
+dEQP-VK.robustness.buffer_access.through_pointers.graphics.writes.fragment.4B_in_memory_with_scalar_f32
+dEQP-VK.robustness.buffer_access.through_pointers.graphics.writes.fragment.4B_out_of_memory_with_scalar_f32
+dEQP-VK.robustness.buffer_access.through_pointers.graphics.writes.fragment.16B_in_memory_with_scalar_f32
+dEQP-VK.robustness.buffer_access.through_pointers.graphics.writes.fragment.16B_out_of_memory_with_scalar_f32
+dEQP-VK.robustness.buffer_access.through_pointers.graphics.writes.fragment.32B_in_memory_with_scalar_f32
+dEQP-VK.robustness.buffer_access.through_pointers.graphics.writes.fragment.32B_out_of_memory_with_scalar_f32
+dEQP-VK.robustness.buffer_access.through_pointers.compute.reads.1B_in_memory_with_vec4_s32
+dEQP-VK.robustness.buffer_access.through_pointers.compute.reads.1B_out_of_memory_with_vec4_s32
+dEQP-VK.robustness.buffer_access.through_pointers.compute.reads.3B_in_memory_with_vec4_s32
+dEQP-VK.robustness.buffer_access.through_pointers.compute.reads.3B_out_of_memory_with_vec4_s32
+dEQP-VK.robustness.buffer_access.through_pointers.compute.reads.4B_in_memory_with_vec4_s32
+dEQP-VK.robustness.buffer_access.through_pointers.compute.reads.4B_out_of_memory_with_vec4_s32
+dEQP-VK.robustness.buffer_access.through_pointers.compute.reads.16B_in_memory_with_vec4_s32
+dEQP-VK.robustness.buffer_access.through_pointers.compute.reads.16B_out_of_memory_with_vec4_s32
+dEQP-VK.robustness.buffer_access.through_pointers.compute.reads.32B_in_memory_with_vec4_s32
+dEQP-VK.robustness.buffer_access.through_pointers.compute.reads.32B_out_of_memory_with_vec4_s32
+dEQP-VK.robustness.buffer_access.through_pointers.compute.reads.1B_in_memory_with_vec4_u32
+dEQP-VK.robustness.buffer_access.through_pointers.compute.reads.1B_out_of_memory_with_vec4_u32
+dEQP-VK.robustness.buffer_access.through_pointers.compute.reads.3B_in_memory_with_vec4_u32
+dEQP-VK.robustness.buffer_access.through_pointers.compute.reads.3B_out_of_memory_with_vec4_u32
+dEQP-VK.robustness.buffer_access.through_pointers.compute.reads.4B_in_memory_with_vec4_u32
+dEQP-VK.robustness.buffer_access.through_pointers.compute.reads.4B_out_of_memory_with_vec4_u32
+dEQP-VK.robustness.buffer_access.through_pointers.compute.reads.16B_in_memory_with_vec4_u32
+dEQP-VK.robustness.buffer_access.through_pointers.compute.reads.16B_out_of_memory_with_vec4_u32
+dEQP-VK.robustness.buffer_access.through_pointers.compute.reads.32B_in_memory_with_vec4_u32
+dEQP-VK.robustness.buffer_access.through_pointers.compute.reads.32B_out_of_memory_with_vec4_u32
+dEQP-VK.robustness.buffer_access.through_pointers.compute.reads.1B_in_memory_with_vec4_f32
+dEQP-VK.robustness.buffer_access.through_pointers.compute.reads.1B_out_of_memory_with_vec4_f32
+dEQP-VK.robustness.buffer_access.through_pointers.compute.reads.3B_in_memory_with_vec4_f32
+dEQP-VK.robustness.buffer_access.through_pointers.compute.reads.3B_out_of_memory_with_vec4_f32
+dEQP-VK.robustness.buffer_access.through_pointers.compute.reads.4B_in_memory_with_vec4_f32
+dEQP-VK.robustness.buffer_access.through_pointers.compute.reads.4B_out_of_memory_with_vec4_f32
+dEQP-VK.robustness.buffer_access.through_pointers.compute.reads.16B_in_memory_with_vec4_f32
+dEQP-VK.robustness.buffer_access.through_pointers.compute.reads.16B_out_of_memory_with_vec4_f32
+dEQP-VK.robustness.buffer_access.through_pointers.compute.reads.32B_in_memory_with_vec4_f32
+dEQP-VK.robustness.buffer_access.through_pointers.compute.reads.32B_out_of_memory_with_vec4_f32
+dEQP-VK.robustness.buffer_access.through_pointers.compute.reads.1B_in_memory_with_scalar_s32
+dEQP-VK.robustness.buffer_access.through_pointers.compute.reads.1B_out_of_memory_with_scalar_s32
+dEQP-VK.robustness.buffer_access.through_pointers.compute.reads.3B_in_memory_with_scalar_s32
+dEQP-VK.robustness.buffer_access.through_pointers.compute.reads.3B_out_of_memory_with_scalar_s32
+dEQP-VK.robustness.buffer_access.through_pointers.compute.reads.4B_in_memory_with_scalar_s32
+dEQP-VK.robustness.buffer_access.through_pointers.compute.reads.4B_out_of_memory_with_scalar_s32
+dEQP-VK.robustness.buffer_access.through_pointers.compute.reads.16B_in_memory_with_scalar_s32
+dEQP-VK.robustness.buffer_access.through_pointers.compute.reads.16B_out_of_memory_with_scalar_s32
+dEQP-VK.robustness.buffer_access.through_pointers.compute.reads.32B_in_memory_with_scalar_s32
+dEQP-VK.robustness.buffer_access.through_pointers.compute.reads.32B_out_of_memory_with_scalar_s32
+dEQP-VK.robustness.buffer_access.through_pointers.compute.reads.1B_in_memory_with_scalar_u32
+dEQP-VK.robustness.buffer_access.through_pointers.compute.reads.1B_out_of_memory_with_scalar_u32
+dEQP-VK.robustness.buffer_access.through_pointers.compute.reads.3B_in_memory_with_scalar_u32
+dEQP-VK.robustness.buffer_access.through_pointers.compute.reads.3B_out_of_memory_with_scalar_u32
+dEQP-VK.robustness.buffer_access.through_pointers.compute.reads.4B_in_memory_with_scalar_u32
+dEQP-VK.robustness.buffer_access.through_pointers.compute.reads.4B_out_of_memory_with_scalar_u32
+dEQP-VK.robustness.buffer_access.through_pointers.compute.reads.16B_in_memory_with_scalar_u32
+dEQP-VK.robustness.buffer_access.through_pointers.compute.reads.16B_out_of_memory_with_scalar_u32
+dEQP-VK.robustness.buffer_access.through_pointers.compute.reads.32B_in_memory_with_scalar_u32
+dEQP-VK.robustness.buffer_access.through_pointers.compute.reads.32B_out_of_memory_with_scalar_u32
+dEQP-VK.robustness.buffer_access.through_pointers.compute.reads.1B_in_memory_with_scalar_f32
+dEQP-VK.robustness.buffer_access.through_pointers.compute.reads.1B_out_of_memory_with_scalar_f32
+dEQP-VK.robustness.buffer_access.through_pointers.compute.reads.3B_in_memory_with_scalar_f32
+dEQP-VK.robustness.buffer_access.through_pointers.compute.reads.3B_out_of_memory_with_scalar_f32
+dEQP-VK.robustness.buffer_access.through_pointers.compute.reads.4B_in_memory_with_scalar_f32
+dEQP-VK.robustness.buffer_access.through_pointers.compute.reads.4B_out_of_memory_with_scalar_f32
+dEQP-VK.robustness.buffer_access.through_pointers.compute.reads.16B_in_memory_with_scalar_f32
+dEQP-VK.robustness.buffer_access.through_pointers.compute.reads.16B_out_of_memory_with_scalar_f32
+dEQP-VK.robustness.buffer_access.through_pointers.compute.reads.32B_in_memory_with_scalar_f32
+dEQP-VK.robustness.buffer_access.through_pointers.compute.reads.32B_out_of_memory_with_scalar_f32
+dEQP-VK.robustness.buffer_access.through_pointers.compute.writes.1B_in_memory_with_vec4_s32
+dEQP-VK.robustness.buffer_access.through_pointers.compute.writes.1B_out_of_memory_with_vec4_s32
+dEQP-VK.robustness.buffer_access.through_pointers.compute.writes.3B_in_memory_with_vec4_s32
+dEQP-VK.robustness.buffer_access.through_pointers.compute.writes.3B_out_of_memory_with_vec4_s32
+dEQP-VK.robustness.buffer_access.through_pointers.compute.writes.4B_in_memory_with_vec4_s32
+dEQP-VK.robustness.buffer_access.through_pointers.compute.writes.4B_out_of_memory_with_vec4_s32
+dEQP-VK.robustness.buffer_access.through_pointers.compute.writes.16B_in_memory_with_vec4_s32
+dEQP-VK.robustness.buffer_access.through_pointers.compute.writes.16B_out_of_memory_with_vec4_s32
+dEQP-VK.robustness.buffer_access.through_pointers.compute.writes.32B_in_memory_with_vec4_s32
+dEQP-VK.robustness.buffer_access.through_pointers.compute.writes.32B_out_of_memory_with_vec4_s32
+dEQP-VK.robustness.buffer_access.through_pointers.compute.writes.1B_in_memory_with_vec4_u32
+dEQP-VK.robustness.buffer_access.through_pointers.compute.writes.1B_out_of_memory_with_vec4_u32
+dEQP-VK.robustness.buffer_access.through_pointers.compute.writes.3B_in_memory_with_vec4_u32
+dEQP-VK.robustness.buffer_access.through_pointers.compute.writes.3B_out_of_memory_with_vec4_u32
+dEQP-VK.robustness.buffer_access.through_pointers.compute.writes.4B_in_memory_with_vec4_u32
+dEQP-VK.robustness.buffer_access.through_pointers.compute.writes.4B_out_of_memory_with_vec4_u32
+dEQP-VK.robustness.buffer_access.through_pointers.compute.writes.16B_in_memory_with_vec4_u32
+dEQP-VK.robustness.buffer_access.through_pointers.compute.writes.16B_out_of_memory_with_vec4_u32
+dEQP-VK.robustness.buffer_access.through_pointers.compute.writes.32B_in_memory_with_vec4_u32
+dEQP-VK.robustness.buffer_access.through_pointers.compute.writes.32B_out_of_memory_with_vec4_u32
+dEQP-VK.robustness.buffer_access.through_pointers.compute.writes.1B_in_memory_with_vec4_f32
+dEQP-VK.robustness.buffer_access.through_pointers.compute.writes.1B_out_of_memory_with_vec4_f32
+dEQP-VK.robustness.buffer_access.through_pointers.compute.writes.3B_in_memory_with_vec4_f32
+dEQP-VK.robustness.buffer_access.through_pointers.compute.writes.3B_out_of_memory_with_vec4_f32
+dEQP-VK.robustness.buffer_access.through_pointers.compute.writes.4B_in_memory_with_vec4_f32
+dEQP-VK.robustness.buffer_access.through_pointers.compute.writes.4B_out_of_memory_with_vec4_f32
+dEQP-VK.robustness.buffer_access.through_pointers.compute.writes.16B_in_memory_with_vec4_f32
+dEQP-VK.robustness.buffer_access.through_pointers.compute.writes.16B_out_of_memory_with_vec4_f32
+dEQP-VK.robustness.buffer_access.through_pointers.compute.writes.32B_in_memory_with_vec4_f32
+dEQP-VK.robustness.buffer_access.through_pointers.compute.writes.32B_out_of_memory_with_vec4_f32
+dEQP-VK.robustness.buffer_access.through_pointers.compute.writes.1B_in_memory_with_scalar_s32
+dEQP-VK.robustness.buffer_access.through_pointers.compute.writes.1B_out_of_memory_with_scalar_s32
+dEQP-VK.robustness.buffer_access.through_pointers.compute.writes.3B_in_memory_with_scalar_s32
+dEQP-VK.robustness.buffer_access.through_pointers.compute.writes.3B_out_of_memory_with_scalar_s32
+dEQP-VK.robustness.buffer_access.through_pointers.compute.writes.4B_in_memory_with_scalar_s32
+dEQP-VK.robustness.buffer_access.through_pointers.compute.writes.4B_out_of_memory_with_scalar_s32
+dEQP-VK.robustness.buffer_access.through_pointers.compute.writes.16B_in_memory_with_scalar_s32
+dEQP-VK.robustness.buffer_access.through_pointers.compute.writes.16B_out_of_memory_with_scalar_s32
+dEQP-VK.robustness.buffer_access.through_pointers.compute.writes.32B_in_memory_with_scalar_s32
+dEQP-VK.robustness.buffer_access.through_pointers.compute.writes.32B_out_of_memory_with_scalar_s32
+dEQP-VK.robustness.buffer_access.through_pointers.compute.writes.1B_in_memory_with_scalar_u32
+dEQP-VK.robustness.buffer_access.through_pointers.compute.writes.1B_out_of_memory_with_scalar_u32
+dEQP-VK.robustness.buffer_access.through_pointers.compute.writes.3B_in_memory_with_scalar_u32
+dEQP-VK.robustness.buffer_access.through_pointers.compute.writes.3B_out_of_memory_with_scalar_u32
+dEQP-VK.robustness.buffer_access.through_pointers.compute.writes.4B_in_memory_with_scalar_u32
+dEQP-VK.robustness.buffer_access.through_pointers.compute.writes.4B_out_of_memory_with_scalar_u32
+dEQP-VK.robustness.buffer_access.through_pointers.compute.writes.16B_in_memory_with_scalar_u32
+dEQP-VK.robustness.buffer_access.through_pointers.compute.writes.16B_out_of_memory_with_scalar_u32
+dEQP-VK.robustness.buffer_access.through_pointers.compute.writes.32B_in_memory_with_scalar_u32
+dEQP-VK.robustness.buffer_access.through_pointers.compute.writes.32B_out_of_memory_with_scalar_u32
+dEQP-VK.robustness.buffer_access.through_pointers.compute.writes.1B_in_memory_with_scalar_f32
+dEQP-VK.robustness.buffer_access.through_pointers.compute.writes.1B_out_of_memory_with_scalar_f32
+dEQP-VK.robustness.buffer_access.through_pointers.compute.writes.3B_in_memory_with_scalar_f32
+dEQP-VK.robustness.buffer_access.through_pointers.compute.writes.3B_out_of_memory_with_scalar_f32
+dEQP-VK.robustness.buffer_access.through_pointers.compute.writes.4B_in_memory_with_scalar_f32
+dEQP-VK.robustness.buffer_access.through_pointers.compute.writes.4B_out_of_memory_with_scalar_f32
+dEQP-VK.robustness.buffer_access.through_pointers.compute.writes.16B_in_memory_with_scalar_f32
+dEQP-VK.robustness.buffer_access.through_pointers.compute.writes.16B_out_of_memory_with_scalar_f32
+dEQP-VK.robustness.buffer_access.through_pointers.compute.writes.32B_in_memory_with_scalar_f32
+dEQP-VK.robustness.buffer_access.through_pointers.compute.writes.32B_out_of_memory_with_scalar_f32
 dEQP-VK.robustness.vertex_access.r32_uint.draw.vertex_out_of_bounds
 dEQP-VK.robustness.vertex_access.r32_uint.draw.vertex_incomplete
 dEQP-VK.robustness.vertex_access.r32_uint.draw.instance_out_of_bounds
index f9a7fe3..ccbefa4 100644 (file)
@@ -88,6 +88,17 @@ DE_INLINE deUint32 deMinu32 (deUint32 a, deUint32 b)
 }
 
 /*--------------------------------------------------------------------*//*!
+ * \brief Compute the unsigned minimum of two values.
+ * \param a    First input value.
+ * \param b Second input value.
+ * \return The smallest of the two input values.
+ *//*--------------------------------------------------------------------*/
+DE_INLINE deUint64 deMinu64 (deUint64 a, deUint64 b)
+{
+       return (a <= b) ? a : b;
+}
+
+/*--------------------------------------------------------------------*//*!
  * \brief Compute the unsigned maximum of two values.
  * \param a    First input value.
  * \param b Second input value.