From 78f6a4a64990947beeec7e6ce3401ba835d1a377 Mon Sep 17 00:00:00 2001 From: Dejan Mircevski Date: Fri, 2 Oct 2015 01:35:19 -0400 Subject: [PATCH] Test operand-table capabilities. --- test/OpcodeRequiresCapabilities.cpp | 43 ++++++++++++++++++++++++++++++++++++- 1 file changed, 42 insertions(+), 1 deletion(-) diff --git a/test/OpcodeRequiresCapabilities.cpp b/test/OpcodeRequiresCapabilities.cpp index 97fe118..ee7c7ce 100644 --- a/test/OpcodeRequiresCapabilities.cpp +++ b/test/OpcodeRequiresCapabilities.cpp @@ -125,6 +125,47 @@ INSTANTIATE_TEST_CASE_P( ExpectedOpCodeCapabilities{spv::OpFunction, 0}, ExpectedOpCodeCapabilities{spv::OpConvertFToS, 0})); -// TODO(deki): test operand-table capabilities. +/// Utility to initialize the operand table and look up capabilities. +class OperandCapabilitiesTest : public ::testing::Test { + protected: + OperandCapabilitiesTest() { + EXPECT_EQ(SPV_SUCCESS, spvOperandTableGet(&operandTable_)); + } + + /// Looks up an operand's capabilities in the operand table. + uint64_t Capabilities(spv_operand_type_t type, uint32_t value) { + spv_operand_desc entry; + EXPECT_EQ(SPV_SUCCESS, + spvOperandTableValueLookup(operandTable_, type, value, &entry)); + return entry->capabilities; + } + + private: + spv_operand_table operandTable_; +}; + +TEST_F(OperandCapabilitiesTest, SpotCheckSomeRows) { + EXPECT_EQ(mask(CapabilityGeometry, CapabilityTessellation), + Capabilities(SPV_OPERAND_TYPE_EXECUTION_MODE, + ExecutionModeInputTriangles)); + EXPECT_EQ(mask(CapabilityGeometry, CapabilityTessellation), + Capabilities(SPV_OPERAND_TYPE_EXECUTION_MODE, + ExecutionModeOutputVertices)); + EXPECT_EQ(mask(CapabilityGeometry, CapabilityTessellation), + Capabilities(SPV_OPERAND_TYPE_BUILT_IN, BuiltInPrimitiveId)); + EXPECT_EQ(mask(CapabilityGeometry, CapabilityTessellation), + Capabilities(SPV_OPERAND_TYPE_BUILT_IN, BuiltInInvocationId)); + EXPECT_EQ(0, Capabilities(SPV_OPERAND_TYPE_FUNCTION_CONTROL, + FunctionControlPureMask)); + EXPECT_EQ(0, Capabilities(SPV_OPERAND_TYPE_KERNEL_PROFILING_INFO, + KernelProfilingInfoMaskNone)); + EXPECT_EQ(mask(CapabilityKernel), + Capabilities(SPV_OPERAND_TYPE_KERNEL_PROFILING_INFO, + KernelProfilingInfoCmdExecTimeMask)); + EXPECT_EQ(mask(CapabilityShader), + Capabilities(SPV_OPERAND_TYPE_STORAGE_CLASS, StorageClassOutput)); + EXPECT_EQ(0, Capabilities(SPV_OPERAND_TYPE_STORAGE_CLASS, + StorageClassWorkgroupGlobal)); +} } // anonymous namespace -- 2.7.4