Add scalar uint with signed int compares as Amber cases
Logs an error and throws an exception if the script fails to parse.
Components: Vulkan
Affects:
dEQP-VK.spirv_assembly.instruction.compute.signed_int_compare.uint_sgreaterthan
dEQP-VK.spirv_assembly.instruction.compute.signed_int_compare.uint_sgreaterthanequal
dEQP-VK.spirv_assembly.instruction.compute.signed_int_compare.uint_slessthan
dEQP-VK.spirv_assembly.instruction.compute.signed_int_compare.uint_slessthanequal
VK-GL-CTS issue: 1147
Change-Id: Ic8ce35bff0e05360dc9e674cce313d441e2f4953
diff --git a/AndroidGen.mk b/AndroidGen.mk
index 319a65d..60ee1ae 100644
--- a/AndroidGen.mk
+++ b/AndroidGen.mk
@@ -297,6 +297,7 @@
external/vulkancts/modules/vulkan/spirv_assembly/vktSpvAsmLoopDepInfTests.cpp \
external/vulkancts/modules/vulkan/spirv_assembly/vktSpvAsmLoopDepLenTests.cpp \
external/vulkancts/modules/vulkan/spirv_assembly/vktSpvAsmPointerParameterTests.cpp \
+ external/vulkancts/modules/vulkan/spirv_assembly/vktSpvAsmSignedIntCompareTests.cpp \
external/vulkancts/modules/vulkan/spirv_assembly/vktSpvAsmSpirvVersionTests.cpp \
external/vulkancts/modules/vulkan/spirv_assembly/vktSpvAsmTests.cpp \
external/vulkancts/modules/vulkan/spirv_assembly/vktSpvAsmTypeTests.cpp \
diff --git a/android/cts/master/vk-master.txt b/android/cts/master/vk-master.txt
index 8757d60..8b02480 100755
--- a/android/cts/master/vk-master.txt
+++ b/android/cts/master/vk-master.txt
@@ -228095,6 +228095,10 @@
dEQP-VK.spirv_assembly.instruction.compute.workgroup_memory.uint8
dEQP-VK.spirv_assembly.instruction.compute.spirv_ids_abuse.sparse_ids
dEQP-VK.spirv_assembly.instruction.compute.spirv_ids_abuse.lots_ids
+dEQP-VK.spirv_assembly.instruction.compute.signed_int_compare.uint_sgreaterthanequal
+dEQP-VK.spirv_assembly.instruction.compute.signed_int_compare.uint_sgreaterthan
+dEQP-VK.spirv_assembly.instruction.compute.signed_int_compare.uint_slessthan
+dEQP-VK.spirv_assembly.instruction.compute.signed_int_compare.uint_slessthanequal
dEQP-VK.spirv_assembly.instruction.graphics.cross_stage.basic_type.flat
dEQP-VK.spirv_assembly.instruction.graphics.cross_stage.basic_type.no_perspective
dEQP-VK.spirv_assembly.instruction.graphics.cross_stage.basic_type.relaxedprecision
diff --git a/external/vulkancts/data/vulkan/amber/spirv_assembly/instruction/compute/signed_int_compare/uint_sgreaterthan.amber b/external/vulkancts/data/vulkan/amber/spirv_assembly/instruction/compute/signed_int_compare/uint_sgreaterthan.amber
new file mode 100644
index 0000000..3c3d788
--- /dev/null
+++ b/external/vulkancts/data/vulkan/amber/spirv_assembly/instruction/compute/signed_int_compare/uint_sgreaterthan.amber
@@ -0,0 +1,69 @@
+# Test SGreaterThan with unsigned int params
+# Google bug b/73133282
+#
+# Derived from the following OpenCL C, but cleaned up to be more generic.
+#
+# kernel void foo(global int *A, global int*B, global int*C) __attribute__((reqd_work_group_size(1,1,1))) {
+# uint i = get_global_id(0);
+# C[i] = A[i] > B[i];
+# }
+
+[compute shader spirv]
+ OpCapability Shader
+ OpMemoryModel Logical GLSL450
+ OpEntryPoint GLCompute %18 "main" %gl_GlobalInvocationID
+ OpExecutionMode %18 LocalSize 1 1 1
+ OpSource OpenCL_C 120
+ OpDecorate %_runtimearr_uint ArrayStride 4
+ OpMemberDecorate %_struct_3 0 Offset 0
+ OpDecorate %_struct_3 BufferBlock
+ OpDecorate %gl_GlobalInvocationID BuiltIn GlobalInvocationId
+ OpDecorate %15 DescriptorSet 0
+ OpDecorate %15 Binding 0
+ OpDecorate %16 DescriptorSet 0
+ OpDecorate %16 Binding 1
+ OpDecorate %17 DescriptorSet 0
+ OpDecorate %17 Binding 2
+ %uint = OpTypeInt 32 0
+%_runtimearr_uint = OpTypeRuntimeArray %uint
+ %_struct_3 = OpTypeStruct %_runtimearr_uint
+%_ptr_Uniform__struct_3 = OpTypePointer Uniform %_struct_3
+ %void = OpTypeVoid
+ %6 = OpTypeFunction %void
+ %v3uint = OpTypeVector %uint 3
+%_ptr_Input_v3uint = OpTypePointer Input %v3uint
+%_ptr_Input_uint = OpTypePointer Input %uint
+%_ptr_Uniform_uint = OpTypePointer Uniform %uint
+ %bool = OpTypeBool
+ %uint_0 = OpConstant %uint 0
+ %uint_1 = OpConstant %uint 1
+%gl_GlobalInvocationID = OpVariable %_ptr_Input_v3uint Input
+ %15 = OpVariable %_ptr_Uniform__struct_3 Uniform
+ %16 = OpVariable %_ptr_Uniform__struct_3 Uniform
+ %17 = OpVariable %_ptr_Uniform__struct_3 Uniform
+ %18 = OpFunction %void None %6
+ %19 = OpLabel
+ %20 = OpAccessChain %_ptr_Input_uint %gl_GlobalInvocationID %uint_0
+ %21 = OpLoad %uint %20
+ %22 = OpAccessChain %_ptr_Uniform_uint %15 %uint_0 %21
+ %23 = OpLoad %uint %22
+ %24 = OpAccessChain %_ptr_Uniform_uint %16 %uint_0 %21
+ %25 = OpLoad %uint %24
+ %26 = OpSGreaterThan %bool %23 %25
+ %27 = OpSelect %uint %26 %uint_1 %uint_0
+ %28 = OpAccessChain %_ptr_Uniform_uint %17 %uint_0 %21
+ OpStore %28 %27
+ OpReturn
+ OpFunctionEnd
+
+[test]
+# A[]
+ssbo 0:0 subdata int 0 -8 -7 -6 -5 -4 -3 -2 0 0 1 2 3 4 5 6 7
+# B[]
+ssbo 0:1 subdata int 0 -9 -7 -5 2 -1 1 0 0 1 0 2 -2 4 8 4 -4
+# The answer array C[]
+ssbo 0:2 subdata int 0 8 8 8 8 8 8 8 8 8 8 8 8 8 8 8 8
+
+compute 16 1 1
+
+probe ssbo int 0:2 0 == 1 0 0 0 0 0 0 0 0 1 0 1 0 0 1 1
diff --git a/external/vulkancts/data/vulkan/amber/spirv_assembly/instruction/compute/signed_int_compare/uint_sgreaterthanequal.amber b/external/vulkancts/data/vulkan/amber/spirv_assembly/instruction/compute/signed_int_compare/uint_sgreaterthanequal.amber
new file mode 100644
index 0000000..607a53b
--- /dev/null
+++ b/external/vulkancts/data/vulkan/amber/spirv_assembly/instruction/compute/signed_int_compare/uint_sgreaterthanequal.amber
@@ -0,0 +1,69 @@
+# Test SGreaterThanEqual with unsigned int params
+# Google bug b/73133282
+#
+# Derived from the following OpenCL C, but cleaned up to be more generic.
+#
+# kernel void foo(global int *A, global int*B, global int*C) __attribute__((reqd_work_group_size(1,1,1))) {
+# uint i = get_global_id(0);
+# C[i] = A[i] >= B[i];
+# }
+
+[compute shader spirv]
+ OpCapability Shader
+ OpMemoryModel Logical GLSL450
+ OpEntryPoint GLCompute %18 "main" %gl_GlobalInvocationID
+ OpExecutionMode %18 LocalSize 1 1 1
+ OpSource OpenCL_C 120
+ OpDecorate %_runtimearr_uint ArrayStride 4
+ OpMemberDecorate %_struct_3 0 Offset 0
+ OpDecorate %_struct_3 BufferBlock
+ OpDecorate %gl_GlobalInvocationID BuiltIn GlobalInvocationId
+ OpDecorate %15 DescriptorSet 0
+ OpDecorate %15 Binding 0
+ OpDecorate %16 DescriptorSet 0
+ OpDecorate %16 Binding 1
+ OpDecorate %17 DescriptorSet 0
+ OpDecorate %17 Binding 2
+ %uint = OpTypeInt 32 0
+%_runtimearr_uint = OpTypeRuntimeArray %uint
+ %_struct_3 = OpTypeStruct %_runtimearr_uint
+%_ptr_Uniform__struct_3 = OpTypePointer Uniform %_struct_3
+ %void = OpTypeVoid
+ %6 = OpTypeFunction %void
+ %v3uint = OpTypeVector %uint 3
+%_ptr_Input_v3uint = OpTypePointer Input %v3uint
+%_ptr_Input_uint = OpTypePointer Input %uint
+%_ptr_Uniform_uint = OpTypePointer Uniform %uint
+ %bool = OpTypeBool
+ %uint_0 = OpConstant %uint 0
+ %uint_1 = OpConstant %uint 1
+%gl_GlobalInvocationID = OpVariable %_ptr_Input_v3uint Input
+ %15 = OpVariable %_ptr_Uniform__struct_3 Uniform
+ %16 = OpVariable %_ptr_Uniform__struct_3 Uniform
+ %17 = OpVariable %_ptr_Uniform__struct_3 Uniform
+ %18 = OpFunction %void None %6
+ %19 = OpLabel
+ %20 = OpAccessChain %_ptr_Input_uint %gl_GlobalInvocationID %uint_0
+ %21 = OpLoad %uint %20
+ %22 = OpAccessChain %_ptr_Uniform_uint %15 %uint_0 %21
+ %23 = OpLoad %uint %22
+ %24 = OpAccessChain %_ptr_Uniform_uint %16 %uint_0 %21
+ %25 = OpLoad %uint %24
+ %26 = OpSGreaterThanEqual %bool %23 %25
+ %27 = OpSelect %uint %26 %uint_1 %uint_0
+ %28 = OpAccessChain %_ptr_Uniform_uint %17 %uint_0 %21
+ OpStore %28 %27
+ OpReturn
+ OpFunctionEnd
+
+[test]
+# A[]
+ssbo 0:0 subdata int 0 -8 -7 -6 -5 -4 -3 -2 0 0 1 2 3 4 5 6 7
+# B[]
+ssbo 0:1 subdata int 0 -9 -7 -5 2 -1 1 0 0 1 0 2 -2 4 8 4 -4
+# The answer array C[]
+ssbo 0:2 subdata int 0 8 8 8 8 8 8 8 8 8 8 8 8 8 8 8 8
+
+compute 16 1 1
+
+probe ssbo int 0:2 0 == 1 1 0 0 0 0 0 1 0 1 1 1 1 0 1 1
diff --git a/external/vulkancts/data/vulkan/amber/spirv_assembly/instruction/compute/signed_int_compare/uint_slessthan.amber b/external/vulkancts/data/vulkan/amber/spirv_assembly/instruction/compute/signed_int_compare/uint_slessthan.amber
new file mode 100644
index 0000000..2a75eed
--- /dev/null
+++ b/external/vulkancts/data/vulkan/amber/spirv_assembly/instruction/compute/signed_int_compare/uint_slessthan.amber
@@ -0,0 +1,69 @@
+# Test SLessThan with unsigned int params
+# Google bug b/73133282
+#
+# Derived from the following OpenCL C, but cleaned up to be more generic.
+#
+# kernel void foo(global int *A, global int*B, global int*C) __attribute__((reqd_work_group_size(1,1,1))) {
+# uint i = get_global_id(0);
+# C[i] = A[i] < B[i];
+# }
+
+[compute shader spirv]
+ OpCapability Shader
+ OpMemoryModel Logical GLSL450
+ OpEntryPoint GLCompute %18 "main" %gl_GlobalInvocationID
+ OpExecutionMode %18 LocalSize 1 1 1
+ OpSource OpenCL_C 120
+ OpDecorate %_runtimearr_uint ArrayStride 4
+ OpMemberDecorate %_struct_3 0 Offset 0
+ OpDecorate %_struct_3 BufferBlock
+ OpDecorate %gl_GlobalInvocationID BuiltIn GlobalInvocationId
+ OpDecorate %15 DescriptorSet 0
+ OpDecorate %15 Binding 0
+ OpDecorate %16 DescriptorSet 0
+ OpDecorate %16 Binding 1
+ OpDecorate %17 DescriptorSet 0
+ OpDecorate %17 Binding 2
+ %uint = OpTypeInt 32 0
+%_runtimearr_uint = OpTypeRuntimeArray %uint
+ %_struct_3 = OpTypeStruct %_runtimearr_uint
+%_ptr_Uniform__struct_3 = OpTypePointer Uniform %_struct_3
+ %void = OpTypeVoid
+ %6 = OpTypeFunction %void
+ %v3uint = OpTypeVector %uint 3
+%_ptr_Input_v3uint = OpTypePointer Input %v3uint
+%_ptr_Input_uint = OpTypePointer Input %uint
+%_ptr_Uniform_uint = OpTypePointer Uniform %uint
+ %bool = OpTypeBool
+ %uint_0 = OpConstant %uint 0
+ %uint_1 = OpConstant %uint 1
+%gl_GlobalInvocationID = OpVariable %_ptr_Input_v3uint Input
+ %15 = OpVariable %_ptr_Uniform__struct_3 Uniform
+ %16 = OpVariable %_ptr_Uniform__struct_3 Uniform
+ %17 = OpVariable %_ptr_Uniform__struct_3 Uniform
+ %18 = OpFunction %void None %6
+ %19 = OpLabel
+ %20 = OpAccessChain %_ptr_Input_uint %gl_GlobalInvocationID %uint_0
+ %21 = OpLoad %uint %20
+ %22 = OpAccessChain %_ptr_Uniform_uint %15 %uint_0 %21
+ %23 = OpLoad %uint %22
+ %24 = OpAccessChain %_ptr_Uniform_uint %16 %uint_0 %21
+ %25 = OpLoad %uint %24
+ %26 = OpSLessThan %bool %23 %25
+ %27 = OpSelect %uint %26 %uint_1 %uint_0
+ %28 = OpAccessChain %_ptr_Uniform_uint %17 %uint_0 %21
+ OpStore %28 %27
+ OpReturn
+ OpFunctionEnd
+
+[test]
+# A[]
+ssbo 0:0 subdata int 0 -8 -7 -6 -5 -4 -3 -2 0 0 1 2 3 4 5 6 7
+# B[]
+ssbo 0:1 subdata int 0 -9 -7 -5 2 -1 1 0 0 1 0 2 -2 4 8 4 -4
+# The answer array C[]
+ssbo 0:2 subdata int 0 8 8 8 8 8 8 8 8 8 8 8 8 8 8 8 8
+
+compute 16 1 1
+
+probe ssbo int 0:2 0 == 0 0 1 1 1 1 1 0 1 0 0 0 0 1 0 0
diff --git a/external/vulkancts/data/vulkan/amber/spirv_assembly/instruction/compute/signed_int_compare/uint_slessthanequal.amber b/external/vulkancts/data/vulkan/amber/spirv_assembly/instruction/compute/signed_int_compare/uint_slessthanequal.amber
new file mode 100644
index 0000000..736d42c
--- /dev/null
+++ b/external/vulkancts/data/vulkan/amber/spirv_assembly/instruction/compute/signed_int_compare/uint_slessthanequal.amber
@@ -0,0 +1,69 @@
+# Test SLessThanEqual with unsigned int params
+# Google bug b/73133282
+#
+# Derived from the following OpenCL C, but cleaned up to be more generic.
+#
+# kernel void foo(global int *A, global int*B, global int*C) __attribute__((reqd_work_group_size(1,1,1))) {
+# uint i = get_global_id(0);
+# C[i] = A[i] < B[i];
+# }
+
+[compute shader spirv]
+ OpCapability Shader
+ OpMemoryModel Logical GLSL450
+ OpEntryPoint GLCompute %18 "main" %gl_GlobalInvocationID
+ OpExecutionMode %18 LocalSize 1 1 1
+ OpSource OpenCL_C 120
+ OpDecorate %_runtimearr_uint ArrayStride 4
+ OpMemberDecorate %_struct_3 0 Offset 0
+ OpDecorate %_struct_3 BufferBlock
+ OpDecorate %gl_GlobalInvocationID BuiltIn GlobalInvocationId
+ OpDecorate %15 DescriptorSet 0
+ OpDecorate %15 Binding 0
+ OpDecorate %16 DescriptorSet 0
+ OpDecorate %16 Binding 1
+ OpDecorate %17 DescriptorSet 0
+ OpDecorate %17 Binding 2
+ %uint = OpTypeInt 32 0
+%_runtimearr_uint = OpTypeRuntimeArray %uint
+ %_struct_3 = OpTypeStruct %_runtimearr_uint
+%_ptr_Uniform__struct_3 = OpTypePointer Uniform %_struct_3
+ %void = OpTypeVoid
+ %6 = OpTypeFunction %void
+ %v3uint = OpTypeVector %uint 3
+%_ptr_Input_v3uint = OpTypePointer Input %v3uint
+%_ptr_Input_uint = OpTypePointer Input %uint
+%_ptr_Uniform_uint = OpTypePointer Uniform %uint
+ %bool = OpTypeBool
+ %uint_0 = OpConstant %uint 0
+ %uint_1 = OpConstant %uint 1
+%gl_GlobalInvocationID = OpVariable %_ptr_Input_v3uint Input
+ %15 = OpVariable %_ptr_Uniform__struct_3 Uniform
+ %16 = OpVariable %_ptr_Uniform__struct_3 Uniform
+ %17 = OpVariable %_ptr_Uniform__struct_3 Uniform
+ %18 = OpFunction %void None %6
+ %19 = OpLabel
+ %20 = OpAccessChain %_ptr_Input_uint %gl_GlobalInvocationID %uint_0
+ %21 = OpLoad %uint %20
+ %22 = OpAccessChain %_ptr_Uniform_uint %15 %uint_0 %21
+ %23 = OpLoad %uint %22
+ %24 = OpAccessChain %_ptr_Uniform_uint %16 %uint_0 %21
+ %25 = OpLoad %uint %24
+ %26 = OpSLessThanEqual %bool %23 %25
+ %27 = OpSelect %uint %26 %uint_1 %uint_0
+ %28 = OpAccessChain %_ptr_Uniform_uint %17 %uint_0 %21
+ OpStore %28 %27
+ OpReturn
+ OpFunctionEnd
+
+[test]
+# A[]
+ssbo 0:0 subdata int 0 -8 -7 -6 -5 -4 -3 -2 0 0 1 2 3 4 5 6 7
+# B[]
+ssbo 0:1 subdata int 0 -9 -7 -5 2 -1 1 0 0 1 0 2 -2 4 8 4 -4
+# The answer array C[]
+ssbo 0:2 subdata int 0 8 8 8 8 8 8 8 8 8 8 8 8 8 8 8 8
+
+compute 16 1 1
+
+probe ssbo int 0:2 0 == 0 1 1 1 1 1 1 1 1 0 1 0 1 1 0 0
diff --git a/external/vulkancts/modules/vulkan/amber/vktAmberTestCase.cpp b/external/vulkancts/modules/vulkan/amber/vktAmberTestCase.cpp
index d2c7497..d0710e8 100644
--- a/external/vulkancts/modules/vulkan/amber/vktAmberTestCase.cpp
+++ b/external/vulkancts/modules/vulkan/amber/vktAmberTestCase.cpp
@@ -76,9 +76,14 @@
{
getTestContext().getLog()
<< tcu::TestLog::Message
+ << "Failed to parse Amber test "
+ << readFilename
+ << ": "
<< r.Error()
<< "\n"
<< tcu::TestLog::EndMessage;
+ // TODO(dneto): Enhance Amber to not require this.
+ m_recipe->SetImpl(DE_NULL);
return false;
}
return true;
diff --git a/external/vulkancts/modules/vulkan/spirv_assembly/CMakeLists.txt b/external/vulkancts/modules/vulkan/spirv_assembly/CMakeLists.txt
index f092099..4c6f9ea 100644
--- a/external/vulkancts/modules/vulkan/spirv_assembly/CMakeLists.txt
+++ b/external/vulkancts/modules/vulkan/spirv_assembly/CMakeLists.txt
@@ -31,6 +31,8 @@
vktSpvAsmInstructionTests.hpp
vktSpvAsmPointerParameterTests.cpp
vktSpvAsmPointerParameterTests.hpp
+ vktSpvAsmSignedIntCompareTests.cpp
+ vktSpvAsmSignedIntCompareTests.hpp
vktSpvAsmTypeTests.cpp
vktSpvAsmTypeTests.hpp
vktSpvAsmTests.cpp
@@ -54,11 +56,21 @@
)
set(DEQP_VK_SPIRV_ASSEMBLY_LIBS
+ libamber
tcutil
vkutil
+ deqp-vk-amber
)
PCH(DEQP_VK_SPIRV_ASSEMBLY_SRCS ../pch.cpp)
+if (DE_COMPILER_IS_GCC OR DE_COMPILER_IS_CLANG)
+ set(CMAKE_CXX_FLAGS "${CMAKE_CXX_FLAGS} -Wno-unknown-pragmas")
+elseif (DE_COMPILER_IS_MSC)
+ set(CMAKE_CXX_FLAGS "${CMAKE_CXX_FLAGS} /wd4068")
+endif()
+include_directories("../../../../amber/src/include")
+include_directories("../amber")
+
add_library(deqp-vk-spirv-assembly STATIC ${DEQP_VK_SPIRV_ASSEMBLY_SRCS})
target_link_libraries(deqp-vk-spirv-assembly ${DEQP_VK_SPIRV_ASSEMBLY_LIBS})
diff --git a/external/vulkancts/modules/vulkan/spirv_assembly/vktSpvAsmInstructionTests.cpp b/external/vulkancts/modules/vulkan/spirv_assembly/vktSpvAsmInstructionTests.cpp
index 3023827..096243b 100644
--- a/external/vulkancts/modules/vulkan/spirv_assembly/vktSpvAsmInstructionTests.cpp
+++ b/external/vulkancts/modules/vulkan/spirv_assembly/vktSpvAsmInstructionTests.cpp
@@ -71,6 +71,7 @@
#include "vktSpvAsmCompositeInsertTests.hpp"
#include "vktSpvAsmVaryingNameTests.hpp"
#include "vktSpvAsmWorkgroupMemoryTests.hpp"
+#include "vktSpvAsmSignedIntCompareTests.hpp"
#include <cmath>
#include <limits>
@@ -18412,6 +18413,7 @@
computeTests->addChild(createBoolGroup(testCtx));
computeTests->addChild(createWorkgroupMemoryComputeGroup(testCtx));
computeTests->addChild(createSpirvIdsAbuseGroup(testCtx));
+ computeTests->addChild(createSignedIntCompareGroup(testCtx));
graphicsTests->addChild(createCrossStageInterfaceTests(testCtx));
graphicsTests->addChild(createSpivVersionCheckTests(testCtx, !testComputePipeline));
diff --git a/external/vulkancts/modules/vulkan/spirv_assembly/vktSpvAsmSignedIntCompareTests.cpp b/external/vulkancts/modules/vulkan/spirv_assembly/vktSpvAsmSignedIntCompareTests.cpp
new file mode 100644
index 0000000..3a0509b
--- /dev/null
+++ b/external/vulkancts/modules/vulkan/spirv_assembly/vktSpvAsmSignedIntCompareTests.cpp
@@ -0,0 +1,89 @@
+/*------------------------------------------------------------------------
+ * Vulkan Conformance Tests
+ * ------------------------
+ *
+ * Copyright (c) 2019 Google LLC
+ * Copyright (c) 2019 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 SPIR-V signed int compare on unsigned scalars values. Google bug b/73133282
+ *//*--------------------------------------------------------------------*/
+
+#include <string>
+#include <amber/amber.h>
+
+#include "tcuDefs.hpp"
+
+#include "vktAmberTestCase.hpp"
+#include "vktSpvAsmSignedIntCompareTests.hpp"
+#include "vktTestGroupUtil.hpp"
+
+namespace vkt
+{
+namespace SpirVAssembly
+{
+namespace
+{
+
+void createSignedIntCompareTests (tcu::TestCaseGroup* tests, const char* data_dir)
+{
+ tcu::TestContext& testCtx = tests->getTestContext();
+
+ // Shader test files are saved in <path>/external/vulkancts/data/vulkan/amber/<data_dir>/<basename>.amber
+ struct Case {
+ const char *basename;
+ const char *description;
+ };
+ const Case cases[] =
+ {
+ { "uint_sgreaterthanequal", "32bit unsigned int with OpSGreaterThanEqual" },
+ { "uint_sgreaterthan", "32bit unsigned int with OpSGreaterThan" },
+ { "uint_slessthan", "32bit unsigned int with OpSLessThan" },
+ { "uint_slessthanequal", "32bit unsigned int with OpSLessThanEqual" }
+ // For testing fail-to-parse case:
+ //, { "foo", "Amber syntax error" }
+ };
+
+ for (unsigned i = 0; i < sizeof(cases)/sizeof(cases[0]) ; ++i)
+ {
+
+ cts_amber::AmberTestCase *testCase = new cts_amber::AmberTestCase(testCtx, cases[i].basename, cases[i].description);
+ // Make sure the input can be parsed before we use it.
+ std::string file = std::string(cases[i].basename) + ".amber";
+ if (testCase->parse(data_dir, file.c_str()))
+ {
+ tests->addChild(testCase);
+ }
+ else
+ {
+ delete testCase;
+ std::string message = "Failed to parse Amber test " + file + ". Check log for details";
+ TCU_THROW(Exception, message.c_str());
+ }
+ }
+}
+
+} // anonymous
+
+tcu::TestCaseGroup* createSignedIntCompareGroup (tcu::TestContext& testCtx)
+{
+ // Location of the Amber script files under the data/vulkan/amber source tree.
+ const char* data_dir = "spirv_assembly/instruction/compute/signed_int_compare";
+ return createTestGroup(testCtx, "signed_int_compare", "Signed int compare over uint values", createSignedIntCompareTests, data_dir);
+}
+
+} // SpirVAssembly
+} // vkt
diff --git a/external/vulkancts/modules/vulkan/spirv_assembly/vktSpvAsmSignedIntCompareTests.hpp b/external/vulkancts/modules/vulkan/spirv_assembly/vktSpvAsmSignedIntCompareTests.hpp
new file mode 100644
index 0000000..e78d41e
--- /dev/null
+++ b/external/vulkancts/modules/vulkan/spirv_assembly/vktSpvAsmSignedIntCompareTests.hpp
@@ -0,0 +1,40 @@
+#ifndef _VKTSPVASMSIGNEDINTCOMPARETESTS_HPP
+#define _VKTSPVASMSIGNEDINTCOMPARETESTS_HPP
+/*------------------------------------------------------------------------
+ * Vulkan Conformance Tests
+ * ------------------------
+ *
+ * Copyright (c) 2019 Google LLC
+ * Copyright (c) 2019 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 Functional signed integer compare tests using Amber
+ *//*--------------------------------------------------------------------*/
+
+#include "tcuDefs.hpp"
+#include "tcuTestCase.hpp"
+
+namespace vkt
+{
+namespace SpirVAssembly
+{
+
+tcu::TestCaseGroup* createSignedIntCompareGroup (tcu::TestContext& testCtx);
+
+} // SpirVAssembly
+} // vkt
+
+#endif // _VKTSPVASMSIGNEDINTCOMPARETESTS_HPP
diff --git a/external/vulkancts/mustpass/1.1.4/vk-default-no-waivers.txt b/external/vulkancts/mustpass/1.1.4/vk-default-no-waivers.txt
index 7d07bb8..e018d8a 100644
--- a/external/vulkancts/mustpass/1.1.4/vk-default-no-waivers.txt
+++ b/external/vulkancts/mustpass/1.1.4/vk-default-no-waivers.txt
@@ -228109,6 +228109,10 @@
dEQP-VK.spirv_assembly.instruction.compute.workgroup_memory.uint8
dEQP-VK.spirv_assembly.instruction.compute.spirv_ids_abuse.sparse_ids
dEQP-VK.spirv_assembly.instruction.compute.spirv_ids_abuse.lots_ids
+dEQP-VK.spirv_assembly.instruction.compute.signed_int_compare.uint_sgreaterthanequal
+dEQP-VK.spirv_assembly.instruction.compute.signed_int_compare.uint_sgreaterthan
+dEQP-VK.spirv_assembly.instruction.compute.signed_int_compare.uint_slessthan
+dEQP-VK.spirv_assembly.instruction.compute.signed_int_compare.uint_slessthanequal
dEQP-VK.spirv_assembly.instruction.graphics.cross_stage.basic_type.flat
dEQP-VK.spirv_assembly.instruction.graphics.cross_stage.basic_type.no_perspective
dEQP-VK.spirv_assembly.instruction.graphics.cross_stage.basic_type.relaxedprecision
diff --git a/external/vulkancts/mustpass/1.1.4/vk-default.txt b/external/vulkancts/mustpass/1.1.4/vk-default.txt
index 2686c7e..5553b51 100644
--- a/external/vulkancts/mustpass/1.1.4/vk-default.txt
+++ b/external/vulkancts/mustpass/1.1.4/vk-default.txt
@@ -228109,6 +228109,10 @@
dEQP-VK.spirv_assembly.instruction.compute.workgroup_memory.uint8
dEQP-VK.spirv_assembly.instruction.compute.spirv_ids_abuse.sparse_ids
dEQP-VK.spirv_assembly.instruction.compute.spirv_ids_abuse.lots_ids
+dEQP-VK.spirv_assembly.instruction.compute.signed_int_compare.uint_sgreaterthanequal
+dEQP-VK.spirv_assembly.instruction.compute.signed_int_compare.uint_sgreaterthan
+dEQP-VK.spirv_assembly.instruction.compute.signed_int_compare.uint_slessthan
+dEQP-VK.spirv_assembly.instruction.compute.signed_int_compare.uint_slessthanequal
dEQP-VK.spirv_assembly.instruction.graphics.cross_stage.basic_type.flat
dEQP-VK.spirv_assembly.instruction.graphics.cross_stage.basic_type.no_perspective
dEQP-VK.spirv_assembly.instruction.graphics.cross_stage.basic_type.relaxedprecision