Test negative value conversion to b10g11r11 float format.
authorAri Suonpaa <ari.suonpaa@siru.fi>
Sat, 9 May 2020 08:28:09 +0000 (11:28 +0300)
committerAlexander Galazin <Alexander.Galazin@arm.com>
Thu, 21 May 2020 08:34:23 +0000 (04:34 -0400)
Added a test that verifies negative values are converted
correctly to b10g11r11 packed float format. These values
need to be clamped to zero.

Also moved texture subgroup LOD Amber test files to
a common directory shared by the new test.

VK-GL-CTS Issue: 2271

New tests:

dEQP-VK.texture.conversion.b10g11r11-negative-values

Components: Vulkan
Change-Id: Ide52844f1467f1e7c23d7510ba951d398a8814ac

13 files changed:
AndroidGen.mk
android/cts/master/vk-master-2020-03-01.txt
android/cts/master/vk-master.txt
external/vulkancts/data/vulkan/amber/texture/conversion/b10g11r11-ufloat-pack32-negative-values.amber [new file with mode: 0644]
external/vulkancts/data/vulkan/amber/texture/subgroup_lod/texel_fetch.amber [moved from external/vulkancts/data/vulkan/amber/texture_subgroup_lod/texel_fetch.amber with 100% similarity]
external/vulkancts/data/vulkan/amber/texture/subgroup_lod/texture_grad.amber [moved from external/vulkancts/data/vulkan/amber/texture_subgroup_lod/texture_grad.amber with 100% similarity]
external/vulkancts/data/vulkan/amber/texture/subgroup_lod/texture_lod.amber [moved from external/vulkancts/data/vulkan/amber/texture_subgroup_lod/texture_lod.amber with 100% similarity]
external/vulkancts/modules/vulkan/texture/CMakeLists.txt
external/vulkancts/modules/vulkan/texture/vktTextureConversionTests.cpp [new file with mode: 0644]
external/vulkancts/modules/vulkan/texture/vktTextureConversionTests.hpp [new file with mode: 0644]
external/vulkancts/modules/vulkan/texture/vktTextureSubgroupLodTests.cpp
external/vulkancts/modules/vulkan/texture/vktTextureTests.cpp
external/vulkancts/mustpass/master/vk-default.txt

index 1506d2f..3630977 100644 (file)
@@ -405,6 +405,7 @@ LOCAL_SRC_FILES := \
        external/vulkancts/modules/vulkan/texture/vktSampleVerifier.cpp \
        external/vulkancts/modules/vulkan/texture/vktSampleVerifierUtil.cpp \
        external/vulkancts/modules/vulkan/texture/vktTextureCompressedFormatTests.cpp \
+       external/vulkancts/modules/vulkan/texture/vktTextureConversionTests.cpp \
        external/vulkancts/modules/vulkan/texture/vktTextureFilteringAnisotropyTests.cpp \
        external/vulkancts/modules/vulkan/texture/vktTextureFilteringExplicitLodTests.cpp \
        external/vulkancts/modules/vulkan/texture/vktTextureFilteringTests.cpp \
index 8fd53db..40c63a2 100644 (file)
@@ -165096,6 +165096,7 @@ dEQP-VK.texture.swizzle.texture_coordinate.astc_12x12_srgb_block_2d_npot_sparse_
 dEQP-VK.texture.subgroup_lod.texturelod
 dEQP-VK.texture.subgroup_lod.texturegrad
 dEQP-VK.texture.subgroup_lod.texelfetch
+dEQP-VK.texture.conversion.b10g11r11-negative-values
 dEQP-VK.geometry.layered.1d_array.64_1_4.render_to_default_layer
 dEQP-VK.geometry.layered.1d_array.64_1_4.render_to_one
 dEQP-VK.geometry.layered.1d_array.64_1_4.render_to_all
index f3500a8..8a4ff8e 100644 (file)
@@ -523590,6 +523590,7 @@ dEQP-VK.texture.swizzle.texture_coordinate.astc_12x12_srgb_block_2d_npot_sparse_
 dEQP-VK.texture.subgroup_lod.texturelod
 dEQP-VK.texture.subgroup_lod.texturegrad
 dEQP-VK.texture.subgroup_lod.texelfetch
+dEQP-VK.texture.conversion.b10g11r11-negative-values
 dEQP-VK.geometry.input.basic_primitive.points
 dEQP-VK.geometry.input.basic_primitive.lines
 dEQP-VK.geometry.input.basic_primitive.line_strip
diff --git a/external/vulkancts/data/vulkan/amber/texture/conversion/b10g11r11-ufloat-pack32-negative-values.amber b/external/vulkancts/data/vulkan/amber/texture/conversion/b10g11r11-ufloat-pack32-negative-values.amber
new file mode 100644 (file)
index 0000000..0a375d9
--- /dev/null
@@ -0,0 +1,73 @@
+#!amber
+# Copyright 2020 Google LLC
+#
+# 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.
+
+SHADER compute compute_shader GLSL
+#version 430
+layout(local_size_x=10, local_size_y=10) in;
+uniform layout (set=0, binding=0, r11f_g11f_b10f) image2D texture;
+
+void main ()
+{
+    ivec2 uv = ivec2(gl_GlobalInvocationID.xy);
+    vec4 color = vec4(uv.x - uv.y, uv.y, -uv.y, 1);
+    imageStore(texture, uv, color);
+}
+END
+
+SHADER compute compute_shader_verify GLSL
+#version 430
+layout(local_size_x=1, local_size_y=1) in;
+uniform layout (set=0, binding=0, r11f_g11f_b10f) image2D texture;
+layout(binding = 1) buffer Buf1
+{
+    int result;
+};
+
+void main ()
+{
+  result = 1;
+
+  for (int y = 0; y < 50; y++)
+      for (int x = 0; x < 50; x++)
+      {
+          ivec2 uv = ivec2(x, y);
+          vec4 color = imageLoad(texture, uv);
+          // Conversion to tiny float should clamp negative values to zero,
+          // thus the max operation here.
+          vec4 ref = max(vec4(uv.x - uv.y, uv.y, -uv.y, 1), vec4(0));
+
+          if (color != ref)
+              result = 0;
+      }
+}
+END
+
+IMAGE texture FORMAT B10G11R11_UFLOAT_PACK32 DIM_2D WIDTH 50 HEIGHT 50 FILL 0
+BUFFER result DATA_TYPE int32 SIZE 1 FILL 0
+
+PIPELINE compute pipeline
+  ATTACH compute_shader
+  BIND BUFFER texture AS storage_image DESCRIPTOR_SET 0 BINDING 0
+END
+
+PIPELINE compute verify
+  ATTACH compute_shader_verify
+  BIND BUFFER texture AS storage_image DESCRIPTOR_SET 0 BINDING 0
+  BIND BUFFER result AS storage DESCRIPTOR_SET 0 BINDING 1
+END
+
+RUN pipeline 5 5 1
+RUN verify 1 1 1
+EXPECT result IDX 0 EQ 1
index 3ccd307..e2a5f44 100644 (file)
@@ -15,6 +15,8 @@ set(DEQP_VK_TEXTURE_SRCS
        vktTextureTests.hpp
        vktTextureTestUtil.cpp
        vktTextureTestUtil.hpp
+       vktTextureConversionTests.cpp
+       vktTextureConversionTests.hpp
        vktTextureFilteringExplicitLodTests.cpp
        vktTextureFilteringExplicitLodTests.hpp
        vktTextureFilteringTests.cpp
diff --git a/external/vulkancts/modules/vulkan/texture/vktTextureConversionTests.cpp b/external/vulkancts/modules/vulkan/texture/vktTextureConversionTests.cpp
new file mode 100644 (file)
index 0000000..f061d39
--- /dev/null
@@ -0,0 +1,53 @@
+/*------------------------------------------------------------------------
+ * 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 Texture conversion tests.
+ *//*--------------------------------------------------------------------*/
+
+#include "vktTextureConversionTests.hpp"
+#include "vktAmberTestCase.hpp"
+#include "vktTestGroupUtil.hpp"
+
+using namespace vk;
+
+namespace vkt
+{
+namespace texture
+{
+namespace
+{
+
+void populateTextureConversionTests (tcu::TestCaseGroup* group)
+{
+       tcu::TestContext& testCtx = group->getTestContext();
+
+       group->addChild(cts_amber::createAmberTestCase(testCtx, "b10g11r11-negative-values", "", "texture/conversion", "b10g11r11-ufloat-pack32-negative-values.amber"));
+}
+
+} // anonymous
+
+tcu::TestCaseGroup* createTextureConversionTests (tcu::TestContext& testCtx)
+{
+       return createTestGroup(testCtx, "conversion", "Texture conversion tests.", populateTextureConversionTests);
+}
+
+} // texture
+} // vkt
diff --git a/external/vulkancts/modules/vulkan/texture/vktTextureConversionTests.hpp b/external/vulkancts/modules/vulkan/texture/vktTextureConversionTests.hpp
new file mode 100644 (file)
index 0000000..453a162
--- /dev/null
@@ -0,0 +1,41 @@
+#ifndef _VKTTEXTURECONVERSIONTESTS_HPP
+#define _VKTTEXTURECONVERSIONTESTS_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 Texture conversion tests.
+ *//*--------------------------------------------------------------------*/
+
+#include "tcuDefs.hpp"
+#include "tcuTestCase.hpp"
+#include "vktTestCase.hpp"
+
+namespace vkt
+{
+namespace texture
+{
+
+tcu::TestCaseGroup*    createTextureConversionTests    (tcu::TestContext& testCtx);
+
+} // texture
+} // vkt
+
+#endif // _VKTTEXTURECONVERSIONTESTS_HPP
index fb253c9..74575db 100644 (file)
@@ -38,9 +38,9 @@ namespace
 void populateSubgroupLodTests (tcu::TestCaseGroup* group)
 {
        tcu::TestContext&                       testCtx                 = group->getTestContext();
-       cts_amber::AmberTestCase*       testCaseLod             = cts_amber::createAmberTestCase(testCtx, "texturelod", "", "texture_subgroup_lod", "texture_lod.amber");
-       cts_amber::AmberTestCase*       testCaseGrad    = cts_amber::createAmberTestCase(testCtx, "texturegrad", "", "texture_subgroup_lod", "texture_grad.amber");
-       cts_amber::AmberTestCase*       testCaseFetch   = cts_amber::createAmberTestCase(testCtx, "texelfetch", "", "texture_subgroup_lod", "texel_fetch.amber");
+       cts_amber::AmberTestCase*       testCaseLod             = cts_amber::createAmberTestCase(testCtx, "texturelod", "", "texture/subgroup_lod", "texture_lod.amber");
+       cts_amber::AmberTestCase*       testCaseGrad    = cts_amber::createAmberTestCase(testCtx, "texturegrad", "", "texture/subgroup_lod", "texture_grad.amber");
+       cts_amber::AmberTestCase*       testCaseFetch   = cts_amber::createAmberTestCase(testCtx, "texelfetch", "", "texture/subgroup_lod", "texel_fetch.amber");
 
        group->addChild(testCaseLod);
        group->addChild(testCaseGrad);
index 2bcfaa2..ed0d5f5 100644 (file)
@@ -33,6 +33,7 @@
 #include "vktTextureCompressedFormatTests.hpp"
 #include "vktTextureSwizzleTests.hpp"
 #include "vktTextureSubgroupLodTests.hpp"
+#include "vktTextureConversionTests.hpp"
 
 namespace vkt
 {
@@ -53,6 +54,7 @@ void createTextureTests (tcu::TestCaseGroup* textureTests)
        textureTests->addChild(createTextureCompressedFormatTests       (testCtx));
        textureTests->addChild(createTextureSwizzleTests                        (testCtx));
        textureTests->addChild(createTextureSubgroupLodTests            (testCtx));
+       textureTests->addChild(createTextureConversionTests                     (testCtx));
 }
 
 } // anonymous
index a3f05ae..2f9ca3e 100644 (file)
@@ -525746,6 +525746,7 @@ dEQP-VK.texture.swizzle.texture_coordinate.astc_12x12_srgb_block_2d_npot_sparse_
 dEQP-VK.texture.subgroup_lod.texturelod
 dEQP-VK.texture.subgroup_lod.texturegrad
 dEQP-VK.texture.subgroup_lod.texelfetch
+dEQP-VK.texture.conversion.b10g11r11-negative-values
 dEQP-VK.geometry.input.basic_primitive.points
 dEQP-VK.geometry.input.basic_primitive.lines
 dEQP-VK.geometry.input.basic_primitive.line_strip