Add tests for shader reuse with differing layout
authorAri Suonpaa <ari.suonpaa@siru.fi>
Thu, 25 Jun 2020 11:16:48 +0000 (14:16 +0300)
committerAlexander Galazin <Alexander.Galazin@arm.com>
Thu, 27 Aug 2020 13:07:19 +0000 (09:07 -0400)
These new tests run two pipelines with the same
shaders but a different layout and dynamic offsets.
This covers a reported driver bug where the offsets
were not updated when switching layouts.

VK-GL-CTS Issue: 2324

New tests:

dEQP-VK.binding_model.dynamic_offset.*

Components: Vulkan
Change-Id: Ie0f42f6c2fd182b51dba13f3975e07c37c18ab2b

AndroidGen.mk
android/cts/master/vk-master-2020-03-01.txt
android/cts/master/vk-master.txt
external/vulkancts/data/vulkan/amber/binding_model/dynamic_offset/shader_reuse_differing_layout_compute.amber [new file with mode: 0644]
external/vulkancts/data/vulkan/amber/binding_model/dynamic_offset/shader_reuse_differing_layout_graphics.amber [new file with mode: 0644]
external/vulkancts/modules/vulkan/binding_model/CMakeLists.txt
external/vulkancts/modules/vulkan/binding_model/vktBindingDynamicOffsetTests.cpp [new file with mode: 0644]
external/vulkancts/modules/vulkan/binding_model/vktBindingDynamicOffsetTests.hpp [new file with mode: 0644]
external/vulkancts/modules/vulkan/binding_model/vktBindingModelTests.cpp
external/vulkancts/mustpass/master/vk-default.txt

index 54b8528..f2d9462 100644 (file)
@@ -95,6 +95,7 @@ LOCAL_SRC_FILES := \
        external/vulkancts/modules/vulkan/binding_model/vktBindingDescriptorCopyTests.cpp \
        external/vulkancts/modules/vulkan/binding_model/vktBindingDescriptorSetRandomTests.cpp \
        external/vulkancts/modules/vulkan/binding_model/vktBindingDescriptorUpdateTests.cpp \
+       external/vulkancts/modules/vulkan/binding_model/vktBindingDynamicOffsetTests.cpp \
        external/vulkancts/modules/vulkan/binding_model/vktBindingModelTests.cpp \
        external/vulkancts/modules/vulkan/binding_model/vktBindingShaderAccessTests.cpp \
        external/vulkancts/modules/vulkan/clipping/vktClippingTests.cpp \
index a7be481..967a384 100644 (file)
@@ -129260,6 +129260,8 @@ dEQP-VK.binding_model.buffer_device_address.capture_replay_stress.seed_6
 dEQP-VK.binding_model.buffer_device_address.capture_replay_stress.seed_7
 dEQP-VK.binding_model.buffer_device_address.capture_replay_stress.seed_8
 dEQP-VK.binding_model.buffer_device_address.capture_replay_stress.seed_9
+dEQP-VK.binding_model.dynamic_offset.shader_reuse_differing_layout_compute
+dEQP-VK.binding_model.dynamic_offset.shader_reuse_differing_layout_graphics
 dEQP-VK.spirv_assembly.instruction.compute.spirv_version.1_4_compute
 dEQP-VK.spirv_assembly.instruction.compute.spirv_version.1_5_compute
 dEQP-VK.spirv_assembly.instruction.compute.non_semantic_info.basic
index 6feb6db..5c311ca 100644 (file)
@@ -365092,6 +365092,8 @@ dEQP-VK.binding_model.buffer_device_address.capture_replay_stress.seed_6
 dEQP-VK.binding_model.buffer_device_address.capture_replay_stress.seed_7
 dEQP-VK.binding_model.buffer_device_address.capture_replay_stress.seed_8
 dEQP-VK.binding_model.buffer_device_address.capture_replay_stress.seed_9
+dEQP-VK.binding_model.dynamic_offset.shader_reuse_differing_layout_compute
+dEQP-VK.binding_model.dynamic_offset.shader_reuse_differing_layout_graphics
 dEQP-VK.spirv_assembly.instruction.compute.spirv_version.1_0_compute
 dEQP-VK.spirv_assembly.instruction.compute.spirv_version.1_1_compute
 dEQP-VK.spirv_assembly.instruction.compute.spirv_version.1_2_compute
diff --git a/external/vulkancts/data/vulkan/amber/binding_model/dynamic_offset/shader_reuse_differing_layout_compute.amber b/external/vulkancts/data/vulkan/amber/binding_model/dynamic_offset/shader_reuse_differing_layout_compute.amber
new file mode 100644 (file)
index 0000000..6a3d309
--- /dev/null
@@ -0,0 +1,59 @@
+#!amber
+# Copyright 2020 The Amber Authors.
+#
+# 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
+#
+#     https://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.
+
+SHADER compute compute_shader GLSL
+#version 430
+
+layout(set = 0, binding = 1) buffer block0
+{
+    vec4 data;
+};
+
+void main()
+{
+    data = vec4(1, 2, 3, 4);
+}
+END
+
+BUFFER buf_unused DATA_TYPE vec4<float> DATA
+0.0 0.0 0.0 0.0
+1.0 1.0 1.0 1.0
+2.0 2.0 2.0 2.0
+END
+
+# The Vulkan spec lists the maximum value of minStorageBufferOffsetAlignment
+# (i.e. the maximum possible alignment requirement) as 256 bytes.
+# Allocate enough space to hold one vec4 (each 16 bytes)
+# after the alignment (256 / 16 + 1).
+BUFFER buf DATA_TYPE vec4<float> SIZE 17 FILL 0.0
+
+PIPELINE compute pipeline0
+  ATTACH compute_shader
+
+  BIND BUFFER buf_unused AS uniform_dynamic DESCRIPTOR_SET 0 BINDING 0 OFFSET 0
+  BIND BUFFER buf AS storage_dynamic DESCRIPTOR_SET 0 BINDING 1 OFFSET 0
+END
+
+PIPELINE compute pipeline1
+  ATTACH compute_shader
+
+  BIND BUFFER buf AS storage_dynamic DESCRIPTOR_SET 0 BINDING 1 OFFSET 256
+END
+
+RUN pipeline0 1 1 1
+RUN pipeline1 1 1 1
+
+EXPECT buf IDX 0 EQ 1.0 2.0 3.0 4.0
+EXPECT buf IDX 256 EQ 1.0 2.0 3.0 4.0
diff --git a/external/vulkancts/data/vulkan/amber/binding_model/dynamic_offset/shader_reuse_differing_layout_graphics.amber b/external/vulkancts/data/vulkan/amber/binding_model/dynamic_offset/shader_reuse_differing_layout_graphics.amber
new file mode 100644 (file)
index 0000000..ef28bc0
--- /dev/null
@@ -0,0 +1,106 @@
+#!amber
+# Copyright 2020 The Amber Authors.
+#
+# 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
+#
+#     https://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.
+
+SHADER vertex vtex_shader GLSL
+#version 430
+
+layout(location = 0) in vec4 position;
+layout(location = 0) out vec4 frag_color;
+
+layout(set = 0, binding = 1) readonly uniform block0
+{
+    vec4 in_color;
+};
+
+void main()
+{
+    gl_Position = position;
+    frag_color = in_color;
+}
+END
+
+SHADER fragment frag_shader GLSL
+#version 430
+
+layout(location = 0) in vec4 frag_color;
+layout(location = 0) out vec4 final_color;
+
+void main()
+{
+    final_color = frag_color;
+}
+END
+
+BUFFER buf_unused DATA_TYPE vec4<float> DATA
+0.0 0.0 0.0 0.0
+1.0 1.0 1.0 1.0
+2.0 2.0 2.0 2.0
+END
+
+# The Vulkan spec lists the maximum value of minStorageBufferOffsetAlignment
+# (i.e. the maximum possible alignment requirement) as 256 bytes.
+# Meaningful data is placed at this offset.
+BUFFER buf DATA_TYPE vec4<float> DATA
+1.0 0.0 0.0 1.0
+0.0 0.0 0.0 0.0
+0.0 0.0 0.0 0.0
+0.0 0.0 0.0 0.0
+0.0 0.0 0.0 0.0
+0.0 0.0 0.0 0.0
+0.0 0.0 0.0 0.0
+0.0 0.0 0.0 0.0
+0.0 0.0 0.0 0.0
+0.0 0.0 0.0 0.0
+0.0 0.0 0.0 0.0
+0.0 0.0 0.0 0.0
+0.0 0.0 0.0 0.0
+0.0 0.0 0.0 0.0
+0.0 0.0 0.0 0.0
+0.0 0.0 0.0 0.0
+0.0 1.0 0.0 1.0
+END
+
+BUFFER framebuffer FORMAT B8G8R8A8_UNORM
+
+PIPELINE graphics pipeline0
+  ATTACH vtex_shader
+  ATTACH frag_shader
+
+  BIND BUFFER buf_unused AS uniform_dynamic DESCRIPTOR_SET 0 BINDING 0 OFFSET 0
+  BIND BUFFER buf AS uniform_dynamic DESCRIPTOR_SET 0 BINDING 1 OFFSET 0
+  BIND BUFFER framebuffer AS color LOCATION 0
+
+  FRAMEBUFFER_SIZE 256 256
+END
+
+PIPELINE graphics pipeline1
+  ATTACH vtex_shader
+  ATTACH frag_shader
+
+  BIND BUFFER buf AS uniform_dynamic DESCRIPTOR_SET 0 BINDING 1 OFFSET 256
+  BIND BUFFER framebuffer AS color LOCATION 0
+
+  FRAMEBUFFER_SIZE 256 256
+END
+
+CLEAR_COLOR pipeline0 0 0 0 255
+CLEAR pipeline0
+RUN pipeline0 DRAW_RECT POS 0 0 SIZE 128 128
+RUN pipeline1 DRAW_RECT POS 128 128 SIZE 128 128
+
+EXPECT framebuffer IDX 0 0 SIZE 128 128 EQ_RGBA 255 0 0 255
+EXPECT framebuffer IDX 128 0 SIZE 128 128 EQ_RGBA 0 0 0 255
+EXPECT framebuffer IDX 128 128 SIZE 128 128 EQ_RGBA 0 255 0 255
+EXPECT framebuffer IDX 0 128 SIZE 128 128 EQ_RGBA 0 0 0 255
index 2fb9efc..b29825e 100644 (file)
@@ -1,6 +1,9 @@
 # dEQP-VK.binding_model
 
-include_directories(..)
+include_directories(
+        ..
+        ../amber
+        )
 
 set(DEQP_VK_BINDING_MODEL_SRCS
        vktBindingModelTests.cpp
@@ -13,6 +16,8 @@ set(DEQP_VK_BINDING_MODEL_SRCS
        vktBindingDescriptorSetRandomTests.hpp
        vktBindingDescriptorCopyTests.cpp
        vktBindingDescriptorCopyTests.hpp
+       vktBindingDynamicOffsetTests.cpp
+       vktBindingDynamicOffsetTests.hpp
        vktBindingBufferDeviceAddressTests.cpp
        vktBindingBufferDeviceAddressTests.hpp
        )
diff --git a/external/vulkancts/modules/vulkan/binding_model/vktBindingDynamicOffsetTests.cpp b/external/vulkancts/modules/vulkan/binding_model/vktBindingDynamicOffsetTests.cpp
new file mode 100644 (file)
index 0000000..f90ea1d
--- /dev/null
@@ -0,0 +1,54 @@
+/*------------------------------------------------------------------------
+ * Vulkan Conformance Tests
+ * ------------------------
+ *
+ * Copyright (c) 2020 The Khronos Group Inc.
+ * Copyright (c) 2020 Google 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 Dynamic offset tests.
+ *//*--------------------------------------------------------------------*/
+
+#include "vktBindingDynamicOffsetTests.hpp"
+#include "vktAmberTestCase.hpp"
+#include "vktTestGroupUtil.hpp"
+
+using namespace vk;
+
+namespace vkt
+{
+namespace BindingModel
+{
+namespace
+{
+
+void populateDynamicOffsetTests (tcu::TestCaseGroup* group)
+{
+       tcu::TestContext& testCtx = group->getTestContext();
+
+       group->addChild(cts_amber::createAmberTestCase(testCtx, "shader_reuse_differing_layout_compute", "", "binding_model/dynamic_offset", "shader_reuse_differing_layout_compute.amber"));
+       group->addChild(cts_amber::createAmberTestCase(testCtx, "shader_reuse_differing_layout_graphics", "", "binding_model/dynamic_offset", "shader_reuse_differing_layout_graphics.amber"));
+}
+
+} // anonymous
+
+tcu::TestCaseGroup* createDynamicOffsetTests (tcu::TestContext& testCtx)
+{
+       return createTestGroup(testCtx, "dynamic_offset", "Dynamic offset tests.", populateDynamicOffsetTests);
+}
+
+} // BindingModel
+} // vkt
diff --git a/external/vulkancts/modules/vulkan/binding_model/vktBindingDynamicOffsetTests.hpp b/external/vulkancts/modules/vulkan/binding_model/vktBindingDynamicOffsetTests.hpp
new file mode 100644 (file)
index 0000000..ac4e77e
--- /dev/null
@@ -0,0 +1,41 @@
+#ifndef _VKTBINDINGDYNAMICOFFSETTESTS_HPP
+#define _VKTBINDINGDYNAMICOFFSETTESTS_HPP
+/*------------------------------------------------------------------------
+ * Vulkan Conformance Tests
+ * ------------------------
+ *
+ * Copyright (c) 2020 The Khronos Group Inc.
+ * Copyright (c) 2020 Google 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 Dynamic offset tests.
+ *//*--------------------------------------------------------------------*/
+
+#include "tcuDefs.hpp"
+#include "tcuTestCase.hpp"
+#include "vktTestCase.hpp"
+
+namespace vkt
+{
+namespace BindingModel
+{
+
+tcu::TestCaseGroup*    createDynamicOffsetTests        (tcu::TestContext& testCtx);
+
+} // BindingModel
+} // vkt
+
+#endif // _VKTBINDINGDYNAMICOFFSETTESTS_HPP
index b26e149..c1741b3 100644 (file)
@@ -28,6 +28,7 @@
 #include "vktBindingDescriptorSetRandomTests.hpp"
 #include "vktBindingDescriptorCopyTests.hpp"
 #include "vktBindingBufferDeviceAddressTests.hpp"
+#include "vktBindingDynamicOffsetTests.hpp"
 #include "vktTestGroupUtil.hpp"
 
 namespace vkt
@@ -47,6 +48,7 @@ void createChildren (tcu::TestCaseGroup* group)
        group->addChild(createDescriptorSetRandomTests(testCtx));
        group->addChild(createDescriptorCopyTests(testCtx));
        group->addChild(createBufferDeviceAddressTests(testCtx));
+       group->addChild(createDynamicOffsetTests(testCtx));
 
        // \todo [2015-07-30 jarkko] .change_binding.{between_renderpasses, within_pass}
        // \todo [2015-07-30 jarkko] .descriptor_set_chain
index 6b93b78..4eb4471 100644 (file)
@@ -364981,6 +364981,8 @@ dEQP-VK.binding_model.buffer_device_address.capture_replay_stress.seed_6
 dEQP-VK.binding_model.buffer_device_address.capture_replay_stress.seed_7
 dEQP-VK.binding_model.buffer_device_address.capture_replay_stress.seed_8
 dEQP-VK.binding_model.buffer_device_address.capture_replay_stress.seed_9
+dEQP-VK.binding_model.dynamic_offset.shader_reuse_differing_layout_compute
+dEQP-VK.binding_model.dynamic_offset.shader_reuse_differing_layout_graphics
 dEQP-VK.spirv_assembly.instruction.compute.spirv_version.1_0_compute
 dEQP-VK.spirv_assembly.instruction.compute.spirv_version.1_1_compute
 dEQP-VK.spirv_assembly.instruction.compute.spirv_version.1_2_compute