| 123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313314315316317318319320321322323324325326327328329330331332333334335336337338339340341342343344345346347348349350351352353354355356357358359360361362363364365366367368369370371372373374375376377378379380381382383384385386387388389390391392393394395396397398399400401402403404405406407408409410411412413414415416417418419420421422423424425426427428429430431432433434435436437438439440441442443444445446447448449450451452453454455456457458459460461462463464465466467468469470471472473474475476477478479480481482483484485486487488489490491492493494495496497498499500501502503504505506507508509510511512513514515516517518519520521522523524525526527528529530531532533534535536537538539540541542543544545546547548549550551552553554555556557558559560561562563564565566567568569570571572573574575576577578579580581582583584585586587588589590591592593594595596597598599600601602603604605606607608609610611612613614615616617618619620621622623624625626627628629630631632633634635636637638639640641642643644645646647648649650651652653654655656657658659660661662663664665666667668669670671672673674675676677678679680681682683684685686687688689690691692693694695696697698699700701702703704705706707708709710711712713714715716717718719720721722723724725726727728729730731732733734735736737738739740741742743744745746747748749750751752753754755756757758759760761762763764765766767768769770771772773774775776777778779780781782783784785786787788789790791792793794795 |
- // Copyright (c) 2015-2016 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.
- // Test capability dependencies for enums.
- #include <tuple>
- #include <vector>
- #include "gmock/gmock.h"
- #include "source/assembly_grammar.h"
- #include "source/enum_set.h"
- #include "source/operand.h"
- #include "source/spirv_target_env.h"
- #include "source/table.h"
- #include "spirv-tools/libspirv.h"
- #include "test/unit_spirv.h"
- namespace spvtools {
- namespace {
- using spvtest::ElementsIn;
- using ::testing::Combine;
- using ::testing::Eq;
- using ::testing::TestWithParam;
- using ::testing::Values;
- using ::testing::ValuesIn;
- // Emits a CapabilitySet to the given ostream, returning the ostream.
- inline std::ostream& operator<<(std::ostream& out, const CapabilitySet& cs) {
- out << "CapabilitySet{";
- auto ctx = spvContextCreate(SPV_ENV_UNIVERSAL_1_0);
- spvtools::AssemblyGrammar grammar(ctx);
- bool first = true;
- for (auto c : cs) {
- if (!first) {
- out << " ";
- first = false;
- }
- out << grammar.lookupOperandName(SPV_OPERAND_TYPE_CAPABILITY, uint32_t(c))
- << "(" << uint32_t(c) << ")";
- }
- spvContextDestroy(ctx);
- out << "}";
- return out;
- }
- // A test case for mapping an enum to a capability mask.
- struct EnumCapabilityCase {
- spv_operand_type_t type;
- uint32_t value;
- CapabilitySet expected_capabilities;
- };
- // Emits an EnumCapabilityCase to the given output stream. This is used
- // to emit failure cases when they occur, which helps debug tests.
- inline std::ostream& operator<<(std::ostream& out, EnumCapabilityCase e) {
- out << "{" << spvOperandTypeStr(e.type) << " " << e.value << " "
- << e.expected_capabilities << " }";
- return out;
- }
- using EnvEnumCapabilityCase = std::tuple<spv_target_env, EnumCapabilityCase>;
- // Test fixture for testing EnumCapabilityCases.
- using EnumCapabilityTest =
- TestWithParam<std::tuple<spv_target_env, EnumCapabilityCase>>;
- TEST_P(EnumCapabilityTest, Sample) {
- const auto env = std::get<0>(GetParam());
- const auto context = spvContextCreate(env);
- const AssemblyGrammar grammar(context);
- spv_operand_desc entry;
- ASSERT_EQ(SPV_SUCCESS,
- grammar.lookupOperand(std::get<1>(GetParam()).type,
- std::get<1>(GetParam()).value, &entry));
- const auto cap_set = grammar.filterCapsAgainstTargetEnv(
- entry->capabilities, entry->numCapabilities);
- EXPECT_THAT(ElementsIn(cap_set),
- Eq(ElementsIn(std::get<1>(GetParam()).expected_capabilities)))
- << " enum value " << std::get<1>(GetParam()).value;
- spvContextDestroy(context);
- }
- #define CASE0(TYPE, VALUE) \
- { \
- SPV_OPERAND_TYPE_##TYPE, uint32_t(spv::VALUE), {} \
- }
- #define CASE1(TYPE, VALUE, CAP) \
- { \
- SPV_OPERAND_TYPE_##TYPE, uint32_t(spv::VALUE), CapabilitySet { \
- spv::Capability::CAP \
- } \
- }
- #define CASE2(TYPE, VALUE, CAP1, CAP2) \
- { \
- SPV_OPERAND_TYPE_##TYPE, uint32_t(spv::VALUE), CapabilitySet { \
- spv::Capability::CAP1, spv::Capability::CAP2 \
- } \
- }
- #define CASE3(TYPE, VALUE, CAP1, CAP2, CAP3) \
- { \
- SPV_OPERAND_TYPE_##TYPE, uint32_t(spv::VALUE), CapabilitySet { \
- spv::Capability::CAP1, spv::Capability::CAP2, spv::Capability::CAP3 \
- } \
- }
- #define CASE4(TYPE, VALUE, CAP1, CAP2, CAP3, CAP4) \
- { \
- SPV_OPERAND_TYPE_##TYPE, uint32_t(spv::VALUE), CapabilitySet { \
- spv::Capability::CAP1, spv::Capability::CAP2, spv::Capability::CAP3, \
- spv::Capability::CAP4 \
- } \
- }
- #define CASE5(TYPE, VALUE, CAP1, CAP2, CAP3, CAP4, CAP5) \
- { \
- SPV_OPERAND_TYPE_##TYPE, uint32_t(spv::VALUE), CapabilitySet { \
- spv::Capability::CAP1, spv::Capability::CAP2, spv::Capability::CAP3, \
- spv::Capability::CAP4, spv::Capability::CAP5 \
- } \
- }
- #define CASE6(TYPE, VALUE, CAP1, CAP2, CAP3, CAP4, CAP5, CAP6) \
- { \
- SPV_OPERAND_TYPE_##TYPE, uint32_t(spv::VALUE), CapabilitySet { \
- spv::Capability::CAP1, spv::Capability::CAP2, spv::Capability::CAP3, \
- spv::Capability::CAP4, spv::Capability::CAP5, spv::Capability::CAP6 \
- } \
- }
- // See SPIR-V Section 3.3 Execution Model
- INSTANTIATE_TEST_SUITE_P(
- ExecutionModel, EnumCapabilityTest,
- Combine(Values(SPV_ENV_UNIVERSAL_1_0, SPV_ENV_UNIVERSAL_1_1),
- ValuesIn(std::vector<EnumCapabilityCase>{
- CASE1(EXECUTION_MODEL, ExecutionModel::Vertex, Shader),
- CASE1(EXECUTION_MODEL, ExecutionModel::TessellationControl,
- Tessellation),
- CASE1(EXECUTION_MODEL, ExecutionModel::TessellationEvaluation,
- Tessellation),
- CASE1(EXECUTION_MODEL, ExecutionModel::Geometry, Geometry),
- CASE1(EXECUTION_MODEL, ExecutionModel::Fragment, Shader),
- CASE1(EXECUTION_MODEL, ExecutionModel::GLCompute, Shader),
- CASE1(EXECUTION_MODEL, ExecutionModel::Kernel, Kernel),
- })));
- // See SPIR-V Section 3.4 Addressing Model
- INSTANTIATE_TEST_SUITE_P(
- AddressingModel, EnumCapabilityTest,
- Combine(Values(SPV_ENV_UNIVERSAL_1_0, SPV_ENV_UNIVERSAL_1_1),
- ValuesIn(std::vector<EnumCapabilityCase>{
- CASE0(ADDRESSING_MODEL, AddressingModel::Logical),
- CASE1(ADDRESSING_MODEL, AddressingModel::Physical32, Addresses),
- CASE1(ADDRESSING_MODEL, AddressingModel::Physical64, Addresses),
- })));
- // See SPIR-V Section 3.5 Memory Model
- INSTANTIATE_TEST_SUITE_P(
- MemoryModel, EnumCapabilityTest,
- Combine(Values(SPV_ENV_UNIVERSAL_1_0, SPV_ENV_UNIVERSAL_1_1),
- ValuesIn(std::vector<EnumCapabilityCase>{
- CASE1(MEMORY_MODEL, MemoryModel::Simple, Shader),
- CASE1(MEMORY_MODEL, MemoryModel::GLSL450, Shader),
- CASE1(MEMORY_MODEL, MemoryModel::OpenCL, Kernel),
- })));
- // See SPIR-V Section 3.6 Execution Mode
- INSTANTIATE_TEST_SUITE_P(
- ExecutionMode, EnumCapabilityTest,
- Combine(
- Values(SPV_ENV_UNIVERSAL_1_0, SPV_ENV_UNIVERSAL_1_1),
- ValuesIn(std::vector<EnumCapabilityCase>{
- CASE1(EXECUTION_MODE, ExecutionMode::Invocations, Geometry),
- CASE1(EXECUTION_MODE, ExecutionMode::SpacingEqual, Tessellation),
- CASE1(EXECUTION_MODE, ExecutionMode::SpacingFractionalEven,
- Tessellation),
- CASE1(EXECUTION_MODE, ExecutionMode::SpacingFractionalOdd,
- Tessellation),
- CASE1(EXECUTION_MODE, ExecutionMode::VertexOrderCw, Tessellation),
- CASE1(EXECUTION_MODE, ExecutionMode::VertexOrderCcw, Tessellation),
- CASE1(EXECUTION_MODE, ExecutionMode::PixelCenterInteger, Shader),
- CASE1(EXECUTION_MODE, ExecutionMode::OriginUpperLeft, Shader),
- CASE1(EXECUTION_MODE, ExecutionMode::OriginLowerLeft, Shader),
- CASE1(EXECUTION_MODE, ExecutionMode::EarlyFragmentTests, Shader),
- CASE1(EXECUTION_MODE, ExecutionMode::PointMode, Tessellation),
- CASE1(EXECUTION_MODE, ExecutionMode::Xfb, TransformFeedback),
- CASE1(EXECUTION_MODE, ExecutionMode::DepthReplacing, Shader),
- CASE1(EXECUTION_MODE, ExecutionMode::DepthGreater, Shader),
- CASE1(EXECUTION_MODE, ExecutionMode::DepthLess, Shader),
- CASE1(EXECUTION_MODE, ExecutionMode::DepthUnchanged, Shader),
- CASE0(EXECUTION_MODE, ExecutionMode::LocalSize),
- CASE1(EXECUTION_MODE, ExecutionMode::LocalSizeHint, Kernel),
- CASE1(EXECUTION_MODE, ExecutionMode::InputPoints, Geometry),
- CASE1(EXECUTION_MODE, ExecutionMode::InputLines, Geometry),
- CASE1(EXECUTION_MODE, ExecutionMode::InputLinesAdjacency, Geometry),
- CASE2(EXECUTION_MODE, ExecutionMode::Triangles, Geometry,
- Tessellation),
- CASE1(EXECUTION_MODE, ExecutionMode::InputTrianglesAdjacency,
- Geometry),
- CASE1(EXECUTION_MODE, ExecutionMode::Quads, Tessellation),
- CASE1(EXECUTION_MODE, ExecutionMode::Isolines, Tessellation),
- CASE4(EXECUTION_MODE, ExecutionMode::OutputVertices, Geometry,
- Tessellation, MeshShadingNV, MeshShadingEXT),
- CASE3(EXECUTION_MODE, ExecutionMode::OutputPoints, Geometry,
- MeshShadingNV, MeshShadingEXT),
- CASE1(EXECUTION_MODE, ExecutionMode::OutputLineStrip, Geometry),
- CASE1(EXECUTION_MODE, ExecutionMode::OutputTriangleStrip, Geometry),
- CASE1(EXECUTION_MODE, ExecutionMode::VecTypeHint, Kernel),
- CASE1(EXECUTION_MODE, ExecutionMode::ContractionOff, Kernel),
- })));
- INSTANTIATE_TEST_SUITE_P(
- ExecutionModeV11, EnumCapabilityTest,
- Combine(Values(SPV_ENV_UNIVERSAL_1_1),
- ValuesIn(std::vector<EnumCapabilityCase>{
- CASE1(EXECUTION_MODE, ExecutionMode::Initializer, Kernel),
- CASE1(EXECUTION_MODE, ExecutionMode::Finalizer, Kernel),
- CASE1(EXECUTION_MODE, ExecutionMode::SubgroupSize,
- SubgroupDispatch),
- CASE1(EXECUTION_MODE, ExecutionMode::SubgroupsPerWorkgroup,
- SubgroupDispatch)})));
- // See SPIR-V Section 3.7 Storage Class
- INSTANTIATE_TEST_SUITE_P(
- StorageClass, EnumCapabilityTest,
- Combine(Values(SPV_ENV_UNIVERSAL_1_0, SPV_ENV_UNIVERSAL_1_1),
- ValuesIn(std::vector<EnumCapabilityCase>{
- CASE0(STORAGE_CLASS, StorageClass::UniformConstant),
- CASE1(STORAGE_CLASS, StorageClass::Uniform, Shader),
- CASE1(STORAGE_CLASS, StorageClass::Output, Shader),
- CASE0(STORAGE_CLASS, StorageClass::Workgroup),
- CASE0(STORAGE_CLASS, StorageClass::CrossWorkgroup),
- CASE2(STORAGE_CLASS, StorageClass::Private, Shader,
- VectorComputeINTEL),
- CASE0(STORAGE_CLASS, StorageClass::Function),
- CASE1(STORAGE_CLASS, StorageClass::Generic,
- GenericPointer), // Bug 14287
- CASE1(STORAGE_CLASS, StorageClass::PushConstant, Shader),
- CASE1(STORAGE_CLASS, StorageClass::AtomicCounter,
- AtomicStorage),
- CASE0(STORAGE_CLASS, StorageClass::Image),
- })));
- // See SPIR-V Section 3.8 Dim
- INSTANTIATE_TEST_SUITE_P(
- Dim, EnumCapabilityTest,
- Combine(Values(SPV_ENV_UNIVERSAL_1_0, SPV_ENV_UNIVERSAL_1_1),
- ValuesIn(std::vector<EnumCapabilityCase>{
- CASE1(DIMENSIONALITY, Dim::Dim1D, Sampled1D),
- CASE0(DIMENSIONALITY, Dim::Dim2D),
- CASE0(DIMENSIONALITY, Dim::Dim3D),
- CASE1(DIMENSIONALITY, Dim::Cube, Shader),
- CASE1(DIMENSIONALITY, Dim::Rect, SampledRect),
- CASE1(DIMENSIONALITY, Dim::Buffer, SampledBuffer),
- CASE1(DIMENSIONALITY, Dim::SubpassData, InputAttachment),
- })));
- // See SPIR-V Section 3.9 Sampler Addressing Mode
- INSTANTIATE_TEST_SUITE_P(
- SamplerAddressingMode, EnumCapabilityTest,
- Combine(Values(SPV_ENV_UNIVERSAL_1_0, SPV_ENV_UNIVERSAL_1_1),
- ValuesIn(std::vector<EnumCapabilityCase>{
- CASE0(SAMPLER_ADDRESSING_MODE, SamplerAddressingMode::None),
- CASE0(SAMPLER_ADDRESSING_MODE,
- SamplerAddressingMode::ClampToEdge),
- CASE0(SAMPLER_ADDRESSING_MODE, SamplerAddressingMode::Clamp),
- CASE0(SAMPLER_ADDRESSING_MODE, SamplerAddressingMode::Repeat),
- CASE0(SAMPLER_ADDRESSING_MODE,
- SamplerAddressingMode::RepeatMirrored)})));
- // See SPIR-V Section 3.10 Sampler Filter Mode
- INSTANTIATE_TEST_SUITE_P(
- SamplerFilterMode, EnumCapabilityTest,
- Combine(Values(SPV_ENV_UNIVERSAL_1_0, SPV_ENV_UNIVERSAL_1_1),
- ValuesIn(std::vector<EnumCapabilityCase>{
- CASE0(SAMPLER_FILTER_MODE, SamplerFilterMode::Nearest),
- CASE0(SAMPLER_FILTER_MODE, SamplerFilterMode::Linear),
- })));
- // See SPIR-V Section 3.11 Image Format
- INSTANTIATE_TEST_SUITE_P(
- ImageFormat, EnumCapabilityTest,
- Combine(Values(SPV_ENV_UNIVERSAL_1_0, SPV_ENV_UNIVERSAL_1_1),
- ValuesIn(std::vector<EnumCapabilityCase>{
- // clang-format off
- CASE0(SAMPLER_IMAGE_FORMAT, ImageFormat::Unknown),
- CASE1(SAMPLER_IMAGE_FORMAT, ImageFormat::Rgba32f, Shader),
- CASE1(SAMPLER_IMAGE_FORMAT, ImageFormat::Rgba16f, Shader),
- CASE1(SAMPLER_IMAGE_FORMAT, ImageFormat::R32f, Shader),
- CASE1(SAMPLER_IMAGE_FORMAT, ImageFormat::Rgba8, Shader),
- CASE1(SAMPLER_IMAGE_FORMAT, ImageFormat::Rgba8Snorm, Shader),
- CASE1(SAMPLER_IMAGE_FORMAT, ImageFormat::Rg32f, StorageImageExtendedFormats),
- CASE1(SAMPLER_IMAGE_FORMAT, ImageFormat::Rg16f, StorageImageExtendedFormats),
- CASE1(SAMPLER_IMAGE_FORMAT, ImageFormat::R11fG11fB10f, StorageImageExtendedFormats),
- CASE1(SAMPLER_IMAGE_FORMAT, ImageFormat::R16f, StorageImageExtendedFormats),
- CASE1(SAMPLER_IMAGE_FORMAT, ImageFormat::Rgba16, StorageImageExtendedFormats),
- CASE1(SAMPLER_IMAGE_FORMAT, ImageFormat::Rgb10A2, StorageImageExtendedFormats),
- CASE1(SAMPLER_IMAGE_FORMAT, ImageFormat::Rg16, StorageImageExtendedFormats),
- CASE1(SAMPLER_IMAGE_FORMAT, ImageFormat::Rg8, StorageImageExtendedFormats),
- CASE1(SAMPLER_IMAGE_FORMAT, ImageFormat::R16, StorageImageExtendedFormats),
- CASE1(SAMPLER_IMAGE_FORMAT, ImageFormat::R8, StorageImageExtendedFormats),
- CASE1(SAMPLER_IMAGE_FORMAT, ImageFormat::Rgba16Snorm, StorageImageExtendedFormats),
- CASE1(SAMPLER_IMAGE_FORMAT, ImageFormat::Rg16Snorm, StorageImageExtendedFormats),
- CASE1(SAMPLER_IMAGE_FORMAT, ImageFormat::Rg8Snorm, StorageImageExtendedFormats),
- CASE1(SAMPLER_IMAGE_FORMAT, ImageFormat::R16Snorm, StorageImageExtendedFormats),
- CASE1(SAMPLER_IMAGE_FORMAT, ImageFormat::R8Snorm, StorageImageExtendedFormats),
- CASE1(SAMPLER_IMAGE_FORMAT, ImageFormat::Rgba32i, Shader),
- CASE1(SAMPLER_IMAGE_FORMAT, ImageFormat::Rgba16i, Shader),
- CASE1(SAMPLER_IMAGE_FORMAT, ImageFormat::Rgba8i, Shader),
- CASE1(SAMPLER_IMAGE_FORMAT, ImageFormat::R32i, Shader),
- CASE1(SAMPLER_IMAGE_FORMAT, ImageFormat::Rg32i, StorageImageExtendedFormats),
- CASE1(SAMPLER_IMAGE_FORMAT, ImageFormat::Rg16i, StorageImageExtendedFormats),
- CASE1(SAMPLER_IMAGE_FORMAT, ImageFormat::Rg8i, StorageImageExtendedFormats),
- CASE1(SAMPLER_IMAGE_FORMAT, ImageFormat::R16i, StorageImageExtendedFormats),
- CASE1(SAMPLER_IMAGE_FORMAT, ImageFormat::R8i, StorageImageExtendedFormats),
- CASE1(SAMPLER_IMAGE_FORMAT, ImageFormat::Rgba32ui, Shader),
- CASE1(SAMPLER_IMAGE_FORMAT, ImageFormat::Rgba16ui, Shader),
- CASE1(SAMPLER_IMAGE_FORMAT, ImageFormat::Rgba8ui, Shader),
- CASE1(SAMPLER_IMAGE_FORMAT, ImageFormat::Rgba8ui, Shader),
- CASE1(SAMPLER_IMAGE_FORMAT, ImageFormat::Rgb10a2ui, StorageImageExtendedFormats),
- CASE1(SAMPLER_IMAGE_FORMAT, ImageFormat::Rg32ui, StorageImageExtendedFormats),
- CASE1(SAMPLER_IMAGE_FORMAT, ImageFormat::Rg16ui, StorageImageExtendedFormats),
- CASE1(SAMPLER_IMAGE_FORMAT, ImageFormat::Rg8ui, StorageImageExtendedFormats),
- CASE1(SAMPLER_IMAGE_FORMAT, ImageFormat::R16ui, StorageImageExtendedFormats),
- CASE1(SAMPLER_IMAGE_FORMAT, ImageFormat::R8ui, StorageImageExtendedFormats),
- // clang-format on
- })));
- // See SPIR-V Section 3.12 Image Channel Order
- INSTANTIATE_TEST_SUITE_P(
- ImageChannelOrder, EnumCapabilityTest,
- Combine(Values(SPV_ENV_UNIVERSAL_1_0, SPV_ENV_UNIVERSAL_1_1),
- ValuesIn(std::vector<EnumCapabilityCase>{
- CASE0(IMAGE_CHANNEL_ORDER, ImageChannelOrder::R),
- CASE0(IMAGE_CHANNEL_ORDER, ImageChannelOrder::A),
- CASE0(IMAGE_CHANNEL_ORDER, ImageChannelOrder::RG),
- CASE0(IMAGE_CHANNEL_ORDER, ImageChannelOrder::RA),
- CASE0(IMAGE_CHANNEL_ORDER, ImageChannelOrder::RGB),
- CASE0(IMAGE_CHANNEL_ORDER, ImageChannelOrder::RGBA),
- CASE0(IMAGE_CHANNEL_ORDER, ImageChannelOrder::BGRA),
- CASE0(IMAGE_CHANNEL_ORDER, ImageChannelOrder::ARGB),
- CASE0(IMAGE_CHANNEL_ORDER, ImageChannelOrder::Intensity),
- CASE0(IMAGE_CHANNEL_ORDER, ImageChannelOrder::Luminance),
- CASE0(IMAGE_CHANNEL_ORDER, ImageChannelOrder::Rx),
- CASE0(IMAGE_CHANNEL_ORDER, ImageChannelOrder::RGx),
- CASE0(IMAGE_CHANNEL_ORDER, ImageChannelOrder::RGBx),
- CASE0(IMAGE_CHANNEL_ORDER, ImageChannelOrder::Depth),
- CASE0(IMAGE_CHANNEL_ORDER, ImageChannelOrder::DepthStencil),
- CASE0(IMAGE_CHANNEL_ORDER, ImageChannelOrder::sRGB),
- CASE0(IMAGE_CHANNEL_ORDER, ImageChannelOrder::sRGBx),
- CASE0(IMAGE_CHANNEL_ORDER, ImageChannelOrder::sRGBA),
- CASE0(IMAGE_CHANNEL_ORDER, ImageChannelOrder::sBGRA),
- CASE0(IMAGE_CHANNEL_ORDER, ImageChannelOrder::ABGR),
- })));
- // See SPIR-V Section 3.13 Image Channel Data Type
- INSTANTIATE_TEST_SUITE_P(
- ImageChannelDataType, EnumCapabilityTest,
- Combine(
- Values(SPV_ENV_UNIVERSAL_1_0, SPV_ENV_UNIVERSAL_1_1),
- ValuesIn(std::vector<EnumCapabilityCase>{
- // clang-format off
- CASE0(IMAGE_CHANNEL_DATA_TYPE, ImageChannelDataType::SnormInt8),
- CASE0(IMAGE_CHANNEL_DATA_TYPE, ImageChannelDataType::SnormInt16),
- CASE0(IMAGE_CHANNEL_DATA_TYPE, ImageChannelDataType::UnormInt8),
- CASE0(IMAGE_CHANNEL_DATA_TYPE, ImageChannelDataType::UnormInt16),
- CASE0(IMAGE_CHANNEL_DATA_TYPE, ImageChannelDataType::UnormShort565),
- CASE0(IMAGE_CHANNEL_DATA_TYPE, ImageChannelDataType::UnormShort555),
- CASE0(IMAGE_CHANNEL_DATA_TYPE, ImageChannelDataType::UnormInt101010),
- CASE0(IMAGE_CHANNEL_DATA_TYPE, ImageChannelDataType::SignedInt8),
- CASE0(IMAGE_CHANNEL_DATA_TYPE, ImageChannelDataType::SignedInt16),
- CASE0(IMAGE_CHANNEL_DATA_TYPE, ImageChannelDataType::SignedInt32),
- CASE0(IMAGE_CHANNEL_DATA_TYPE, ImageChannelDataType::UnsignedInt8),
- CASE0(IMAGE_CHANNEL_DATA_TYPE, ImageChannelDataType::UnsignedInt16),
- CASE0(IMAGE_CHANNEL_DATA_TYPE, ImageChannelDataType::UnsignedInt32),
- CASE0(IMAGE_CHANNEL_DATA_TYPE, ImageChannelDataType::HalfFloat),
- CASE0(IMAGE_CHANNEL_DATA_TYPE, ImageChannelDataType::Float),
- CASE0(IMAGE_CHANNEL_DATA_TYPE, ImageChannelDataType::UnormInt24),
- CASE0(IMAGE_CHANNEL_DATA_TYPE, ImageChannelDataType::UnormInt101010_2),
- // clang-format on
- })));
- // See SPIR-V Section 3.14 Image Operands
- INSTANTIATE_TEST_SUITE_P(
- ImageOperands, EnumCapabilityTest,
- Combine(Values(SPV_ENV_UNIVERSAL_1_0, SPV_ENV_UNIVERSAL_1_1),
- ValuesIn(std::vector<EnumCapabilityCase>{
- // clang-format off
- CASE0(OPTIONAL_IMAGE, ImageOperandsMask::MaskNone),
- CASE1(OPTIONAL_IMAGE, ImageOperandsMask::Bias, Shader),
- CASE0(OPTIONAL_IMAGE, ImageOperandsMask::Lod),
- CASE0(OPTIONAL_IMAGE, ImageOperandsMask::Grad),
- CASE0(OPTIONAL_IMAGE, ImageOperandsMask::ConstOffset),
- CASE1(OPTIONAL_IMAGE, ImageOperandsMask::Offset, ImageGatherExtended),
- CASE1(OPTIONAL_IMAGE, ImageOperandsMask::ConstOffsets, ImageGatherExtended),
- CASE0(OPTIONAL_IMAGE, ImageOperandsMask::Sample),
- CASE1(OPTIONAL_IMAGE, ImageOperandsMask::MinLod, MinLod),
- // clang-format on
- })));
- // See SPIR-V Section 3.17 Linkage Type
- INSTANTIATE_TEST_SUITE_P(
- LinkageType, EnumCapabilityTest,
- Combine(Values(SPV_ENV_UNIVERSAL_1_0, SPV_ENV_UNIVERSAL_1_1),
- ValuesIn(std::vector<EnumCapabilityCase>{
- CASE1(LINKAGE_TYPE, LinkageType::Export, Linkage),
- CASE1(LINKAGE_TYPE, LinkageType::Import, Linkage),
- })));
- // See SPIR-V Section 3.18 Access Qualifier
- INSTANTIATE_TEST_SUITE_P(
- AccessQualifier, EnumCapabilityTest,
- Combine(Values(SPV_ENV_UNIVERSAL_1_0, SPV_ENV_UNIVERSAL_1_1),
- ValuesIn(std::vector<EnumCapabilityCase>{
- CASE1(ACCESS_QUALIFIER, AccessQualifier::ReadOnly, Kernel),
- CASE1(ACCESS_QUALIFIER, AccessQualifier::WriteOnly, Kernel),
- CASE1(ACCESS_QUALIFIER, AccessQualifier::ReadWrite, Kernel),
- })));
- // See SPIR-V Section 3.19 Function Parameter Attribute
- INSTANTIATE_TEST_SUITE_P(
- FunctionParameterAttribute, EnumCapabilityTest,
- Combine(Values(SPV_ENV_UNIVERSAL_1_0, SPV_ENV_UNIVERSAL_1_1),
- ValuesIn(std::vector<EnumCapabilityCase>{
- // clang-format off
- CASE1(FUNCTION_PARAMETER_ATTRIBUTE, FunctionParameterAttribute::Zext, Kernel),
- CASE1(FUNCTION_PARAMETER_ATTRIBUTE, FunctionParameterAttribute::Sext, Kernel),
- CASE1(FUNCTION_PARAMETER_ATTRIBUTE, FunctionParameterAttribute::ByVal, Kernel),
- CASE1(FUNCTION_PARAMETER_ATTRIBUTE, FunctionParameterAttribute::Sret, Kernel),
- CASE1(FUNCTION_PARAMETER_ATTRIBUTE, FunctionParameterAttribute::NoAlias, Kernel),
- CASE1(FUNCTION_PARAMETER_ATTRIBUTE, FunctionParameterAttribute::NoCapture, Kernel),
- CASE1(FUNCTION_PARAMETER_ATTRIBUTE, FunctionParameterAttribute::NoWrite, Kernel),
- CASE1(FUNCTION_PARAMETER_ATTRIBUTE, FunctionParameterAttribute::NoReadWrite, Kernel),
- // clang-format on
- })));
- // See SPIR-V Section 3.20 Decoration
- INSTANTIATE_TEST_SUITE_P(
- Decoration_1_1, EnumCapabilityTest,
- Combine(Values(SPV_ENV_UNIVERSAL_1_0, SPV_ENV_UNIVERSAL_1_1),
- ValuesIn(std::vector<EnumCapabilityCase>{
- CASE1(DECORATION, Decoration::RelaxedPrecision, Shader),
- // DecorationSpecId handled below.
- CASE1(DECORATION, Decoration::Block, Shader),
- CASE1(DECORATION, Decoration::BufferBlock, Shader),
- CASE1(DECORATION, Decoration::RowMajor, Matrix),
- CASE1(DECORATION, Decoration::ColMajor, Matrix),
- CASE1(DECORATION, Decoration::ArrayStride, Shader),
- CASE1(DECORATION, Decoration::MatrixStride,
- Matrix), // Bug 15234
- CASE1(DECORATION, Decoration::GLSLShared, Shader),
- CASE1(DECORATION, Decoration::GLSLPacked, Shader),
- CASE1(DECORATION, Decoration::CPacked, Kernel),
- CASE0(DECORATION, Decoration::BuiltIn), // Bug 15248
- // Value 12 placeholder
- CASE1(DECORATION, Decoration::NoPerspective, Shader),
- CASE1(DECORATION, Decoration::Flat, Shader),
- CASE1(DECORATION, Decoration::Patch, Tessellation),
- CASE1(DECORATION, Decoration::Centroid, Shader),
- CASE1(DECORATION, Decoration::Sample,
- SampleRateShading), // Bug 15234
- CASE1(DECORATION, Decoration::Invariant, Shader),
- CASE0(DECORATION, Decoration::Restrict),
- CASE0(DECORATION, Decoration::Aliased),
- CASE0(DECORATION, Decoration::Volatile),
- CASE1(DECORATION, Decoration::Constant, Kernel),
- CASE0(DECORATION, Decoration::Coherent),
- CASE0(DECORATION, Decoration::NonWritable),
- CASE0(DECORATION, Decoration::NonReadable),
- CASE1(DECORATION, Decoration::Uniform, Shader),
- // Value 27 is an intentional gap in the spec numbering.
- CASE1(DECORATION, Decoration::SaturatedConversion, Kernel),
- CASE1(DECORATION, Decoration::Stream, GeometryStreams),
- CASE1(DECORATION, Decoration::Location, Shader),
- CASE1(DECORATION, Decoration::Component, Shader),
- CASE1(DECORATION, Decoration::Index, Shader),
- CASE1(DECORATION, Decoration::Binding, Shader),
- CASE1(DECORATION, Decoration::DescriptorSet, Shader),
- CASE1(DECORATION, Decoration::Offset, Shader), // Bug 15268
- CASE1(DECORATION, Decoration::XfbBuffer, TransformFeedback),
- CASE1(DECORATION, Decoration::XfbStride, TransformFeedback),
- CASE1(DECORATION, Decoration::FuncParamAttr, Kernel),
- CASE2(DECORATION, Decoration::FPFastMathMode, Kernel,
- FloatControls2),
- CASE1(DECORATION, Decoration::LinkageAttributes, Linkage),
- CASE1(DECORATION, Decoration::NoContraction, Shader),
- CASE1(DECORATION, Decoration::InputAttachmentIndex,
- InputAttachment),
- CASE1(DECORATION, Decoration::Alignment, Kernel),
- })));
- // See SPIR-V Section 3.20 Decoration
- INSTANTIATE_TEST_SUITE_P(Decoration_1_6, EnumCapabilityTest,
- Combine(Values(SPV_ENV_UNIVERSAL_1_6),
- ValuesIn(std::vector<EnumCapabilityCase>{
- CASE2(DECORATION, Decoration::Uniform,
- Shader, UniformDecoration)})));
- #if 0
- // SpecId has different requirements in v1.0 and v1.1:
- INSTANTIATE_TEST_SUITE_P(DecorationSpecIdV10, EnumCapabilityTest,
- Combine(Values(SPV_ENV_UNIVERSAL_1_0),
- ValuesIn(std::vector<EnumCapabilityCase>{CASE1(
- DECORATION, DecorationSpecId, Shader)})));
- #endif
- INSTANTIATE_TEST_SUITE_P(
- DecorationV11, EnumCapabilityTest,
- Combine(Values(SPV_ENV_UNIVERSAL_1_1),
- ValuesIn(std::vector<EnumCapabilityCase>{
- CASE2(DECORATION, Decoration::SpecId, Shader, Kernel),
- CASE1(DECORATION, Decoration::MaxByteOffset, Addresses)})));
- // See SPIR-V Section 3.21 BuiltIn
- INSTANTIATE_TEST_SUITE_P(
- BuiltIn, EnumCapabilityTest,
- Combine(
- Values(SPV_ENV_UNIVERSAL_1_0, SPV_ENV_UNIVERSAL_1_1),
- ValuesIn(std::vector<EnumCapabilityCase>{
- // clang-format off
- CASE1(BUILT_IN, BuiltIn::Position, Shader),
- CASE1(BUILT_IN, BuiltIn::PointSize, Shader),
- // 2 is an intentional gap in the spec numbering.
- CASE1(BUILT_IN, BuiltIn::ClipDistance, ClipDistance), // Bug 1407, 15234
- CASE1(BUILT_IN, BuiltIn::CullDistance, CullDistance), // Bug 1407, 15234
- CASE1(BUILT_IN, BuiltIn::VertexId, Shader),
- CASE1(BUILT_IN, BuiltIn::InstanceId, Shader),
- CASE6(BUILT_IN, BuiltIn::PrimitiveId, Geometry, Tessellation,
- RayTracingNV, RayTracingKHR, MeshShadingNV, MeshShadingEXT),
- CASE2(BUILT_IN, BuiltIn::InvocationId, Geometry, Tessellation),
- CASE4(BUILT_IN, BuiltIn::Layer, Geometry, ShaderViewportIndexLayerEXT, MeshShadingNV, MeshShadingEXT),
- CASE4(BUILT_IN, BuiltIn::ViewportIndex, MultiViewport, ShaderViewportIndexLayerEXT, MeshShadingNV, MeshShadingEXT), // Bug 15234
- CASE1(BUILT_IN, BuiltIn::TessLevelOuter, Tessellation),
- CASE1(BUILT_IN, BuiltIn::TessLevelInner, Tessellation),
- CASE1(BUILT_IN, BuiltIn::TessCoord, Tessellation),
- CASE1(BUILT_IN, BuiltIn::PatchVertices, Tessellation),
- CASE1(BUILT_IN, BuiltIn::FragCoord, Shader),
- CASE1(BUILT_IN, BuiltIn::PointCoord, Shader),
- CASE1(BUILT_IN, BuiltIn::FrontFacing, Shader),
- CASE1(BUILT_IN, BuiltIn::SampleId, SampleRateShading), // Bug 15234
- CASE1(BUILT_IN, BuiltIn::SamplePosition, SampleRateShading), // Bug 15234
- CASE1(BUILT_IN, BuiltIn::SampleMask, Shader), // Bug 15234, Issue 182
- // Value 21 intentionally missing
- CASE1(BUILT_IN, BuiltIn::FragDepth, Shader),
- CASE1(BUILT_IN, BuiltIn::HelperInvocation, Shader),
- CASE0(BUILT_IN, BuiltIn::NumWorkgroups),
- CASE0(BUILT_IN, BuiltIn::WorkgroupSize),
- CASE0(BUILT_IN, BuiltIn::WorkgroupId),
- CASE0(BUILT_IN, BuiltIn::LocalInvocationId),
- CASE0(BUILT_IN, BuiltIn::GlobalInvocationId),
- CASE0(BUILT_IN, BuiltIn::LocalInvocationIndex),
- CASE1(BUILT_IN, BuiltIn::WorkDim, Kernel),
- CASE1(BUILT_IN, BuiltIn::GlobalSize, Kernel),
- CASE1(BUILT_IN, BuiltIn::EnqueuedWorkgroupSize, Kernel),
- CASE1(BUILT_IN, BuiltIn::GlobalOffset, Kernel),
- CASE1(BUILT_IN, BuiltIn::GlobalLinearId, Kernel),
- // Value 35 intentionally missing
- CASE2(BUILT_IN, BuiltIn::SubgroupSize, Kernel, SubgroupBallotKHR),
- CASE1(BUILT_IN, BuiltIn::SubgroupMaxSize, Kernel),
- CASE1(BUILT_IN, BuiltIn::NumSubgroups, Kernel),
- CASE1(BUILT_IN, BuiltIn::NumEnqueuedSubgroups, Kernel),
- CASE1(BUILT_IN, BuiltIn::SubgroupId, Kernel),
- CASE2(BUILT_IN, BuiltIn::SubgroupLocalInvocationId, Kernel, SubgroupBallotKHR),
- CASE1(BUILT_IN, BuiltIn::VertexIndex, Shader),
- CASE1(BUILT_IN, BuiltIn::InstanceIndex, Shader),
- // clang-format on
- })));
- INSTANTIATE_TEST_SUITE_P(
- BuiltInV1_5, EnumCapabilityTest,
- Combine(
- Values(SPV_ENV_UNIVERSAL_1_5),
- ValuesIn(std::vector<EnumCapabilityCase>{
- // SPIR-V 1.5 adds new capabilities to enable these two builtins.
- CASE5(BUILT_IN, BuiltIn::Layer, Geometry, ShaderLayer,
- ShaderViewportIndexLayerEXT, MeshShadingNV, MeshShadingEXT),
- CASE5(BUILT_IN, BuiltIn::ViewportIndex, MultiViewport,
- ShaderViewportIndex, ShaderViewportIndexLayerEXT,
- MeshShadingNV, MeshShadingEXT),
- })));
- // See SPIR-V Section 3.22 Selection Control
- INSTANTIATE_TEST_SUITE_P(
- SelectionControl, EnumCapabilityTest,
- Combine(Values(SPV_ENV_UNIVERSAL_1_0, SPV_ENV_UNIVERSAL_1_1),
- ValuesIn(std::vector<EnumCapabilityCase>{
- CASE0(SELECTION_CONTROL, SelectionControlMask::MaskNone),
- CASE0(SELECTION_CONTROL, SelectionControlMask::Flatten),
- CASE0(SELECTION_CONTROL, SelectionControlMask::DontFlatten),
- })));
- // See SPIR-V Section 3.23 Loop Control
- INSTANTIATE_TEST_SUITE_P(
- LoopControl, EnumCapabilityTest,
- Combine(Values(SPV_ENV_UNIVERSAL_1_0, SPV_ENV_UNIVERSAL_1_1),
- ValuesIn(std::vector<EnumCapabilityCase>{
- CASE0(LOOP_CONTROL, LoopControlMask::MaskNone),
- CASE0(LOOP_CONTROL, LoopControlMask::Unroll),
- CASE0(LOOP_CONTROL, LoopControlMask::DontUnroll),
- })));
- INSTANTIATE_TEST_SUITE_P(
- LoopControlV11, EnumCapabilityTest,
- Combine(Values(SPV_ENV_UNIVERSAL_1_1),
- ValuesIn(std::vector<EnumCapabilityCase>{
- CASE0(LOOP_CONTROL, LoopControlMask::DependencyInfinite),
- CASE0(LOOP_CONTROL, LoopControlMask::DependencyLength),
- })));
- // See SPIR-V Section 3.24 Function Control
- INSTANTIATE_TEST_SUITE_P(
- FunctionControl, EnumCapabilityTest,
- Combine(Values(SPV_ENV_UNIVERSAL_1_0, SPV_ENV_UNIVERSAL_1_1),
- ValuesIn(std::vector<EnumCapabilityCase>{
- CASE0(FUNCTION_CONTROL, FunctionControlMask::MaskNone),
- CASE0(FUNCTION_CONTROL, FunctionControlMask::Inline),
- CASE0(FUNCTION_CONTROL, FunctionControlMask::DontInline),
- CASE0(FUNCTION_CONTROL, FunctionControlMask::Pure),
- CASE0(FUNCTION_CONTROL, FunctionControlMask::Const),
- })));
- // See SPIR-V Section 3.25 Memory Semantics <id>
- INSTANTIATE_TEST_SUITE_P(
- MemorySemantics, EnumCapabilityTest,
- Combine(
- Values(SPV_ENV_UNIVERSAL_1_0, SPV_ENV_UNIVERSAL_1_1),
- ValuesIn(std::vector<EnumCapabilityCase>{
- CASE0(MEMORY_SEMANTICS_ID, MemorySemanticsMask::MaskNone),
- CASE0(MEMORY_SEMANTICS_ID, MemorySemanticsMask::Acquire),
- CASE0(MEMORY_SEMANTICS_ID, MemorySemanticsMask::Release),
- CASE0(MEMORY_SEMANTICS_ID, MemorySemanticsMask::AcquireRelease),
- CASE0(MEMORY_SEMANTICS_ID,
- MemorySemanticsMask::SequentiallyConsistent),
- CASE1(MEMORY_SEMANTICS_ID, MemorySemanticsMask::UniformMemory,
- Shader),
- CASE0(MEMORY_SEMANTICS_ID, MemorySemanticsMask::SubgroupMemory),
- CASE0(MEMORY_SEMANTICS_ID, MemorySemanticsMask::WorkgroupMemory),
- CASE0(MEMORY_SEMANTICS_ID,
- MemorySemanticsMask::CrossWorkgroupMemory),
- CASE1(MEMORY_SEMANTICS_ID, MemorySemanticsMask::AtomicCounterMemory,
- AtomicStorage), // Bug 15234
- CASE0(MEMORY_SEMANTICS_ID, MemorySemanticsMask::ImageMemory),
- })));
- // See SPIR-V Section 3.26 Memory Access
- INSTANTIATE_TEST_SUITE_P(
- MemoryAccess, EnumCapabilityTest,
- Combine(Values(SPV_ENV_UNIVERSAL_1_0, SPV_ENV_UNIVERSAL_1_1),
- ValuesIn(std::vector<EnumCapabilityCase>{
- CASE0(OPTIONAL_MEMORY_ACCESS, MemoryAccessMask::MaskNone),
- CASE0(OPTIONAL_MEMORY_ACCESS, MemoryAccessMask::Volatile),
- CASE0(OPTIONAL_MEMORY_ACCESS, MemoryAccessMask::Aligned),
- CASE0(OPTIONAL_MEMORY_ACCESS, MemoryAccessMask::Nontemporal),
- })));
- // See SPIR-V Section 3.27 Scope <id>
- INSTANTIATE_TEST_SUITE_P(
- Scope, EnumCapabilityTest,
- Combine(Values(SPV_ENV_UNIVERSAL_1_0, SPV_ENV_UNIVERSAL_1_1,
- SPV_ENV_UNIVERSAL_1_2, SPV_ENV_UNIVERSAL_1_3),
- ValuesIn(std::vector<EnumCapabilityCase>{
- CASE0(SCOPE_ID, Scope::CrossDevice),
- CASE0(SCOPE_ID, Scope::Device),
- CASE0(SCOPE_ID, Scope::Workgroup),
- CASE0(SCOPE_ID, Scope::Subgroup),
- CASE0(SCOPE_ID, Scope::Invocation),
- CASE1(SCOPE_ID, Scope::QueueFamilyKHR, VulkanMemoryModelKHR),
- })));
- // See SPIR-V Section 3.28 Group Operation
- INSTANTIATE_TEST_SUITE_P(
- GroupOperation, EnumCapabilityTest,
- Combine(Values(SPV_ENV_UNIVERSAL_1_0, SPV_ENV_UNIVERSAL_1_1),
- ValuesIn(std::vector<EnumCapabilityCase>{
- CASE3(GROUP_OPERATION, GroupOperation::Reduce, Kernel,
- GroupNonUniformArithmetic, GroupNonUniformBallot),
- CASE3(GROUP_OPERATION, GroupOperation::InclusiveScan, Kernel,
- GroupNonUniformArithmetic, GroupNonUniformBallot),
- CASE3(GROUP_OPERATION, GroupOperation::ExclusiveScan, Kernel,
- GroupNonUniformArithmetic, GroupNonUniformBallot),
- })));
- // See SPIR-V Section 3.29 Kernel Enqueue Flags
- INSTANTIATE_TEST_SUITE_P(
- KernelEnqueueFlags, EnumCapabilityTest,
- Combine(Values(SPV_ENV_UNIVERSAL_1_0, SPV_ENV_UNIVERSAL_1_1),
- ValuesIn(std::vector<EnumCapabilityCase>{
- CASE1(KERNEL_ENQ_FLAGS, KernelEnqueueFlags::NoWait, Kernel),
- CASE1(KERNEL_ENQ_FLAGS, KernelEnqueueFlags::WaitKernel, Kernel),
- CASE1(KERNEL_ENQ_FLAGS, KernelEnqueueFlags::WaitWorkGroup,
- Kernel),
- })));
- // See SPIR-V Section 3.30 Kernel Profiling Info
- INSTANTIATE_TEST_SUITE_P(
- KernelProfilingInfo, EnumCapabilityTest,
- Combine(Values(SPV_ENV_UNIVERSAL_1_0, SPV_ENV_UNIVERSAL_1_1),
- ValuesIn(std::vector<EnumCapabilityCase>{
- CASE0(KERNEL_PROFILING_INFO, KernelProfilingInfoMask::MaskNone),
- CASE1(KERNEL_PROFILING_INFO,
- KernelProfilingInfoMask::CmdExecTime, Kernel),
- })));
- // See SPIR-V Section 3.31 Capability
- INSTANTIATE_TEST_SUITE_P(
- CapabilityDependsOn, EnumCapabilityTest,
- Combine(
- Values(SPV_ENV_UNIVERSAL_1_0, SPV_ENV_UNIVERSAL_1_1),
- ValuesIn(std::vector<EnumCapabilityCase>{
- // clang-format off
- CASE0(CAPABILITY, Capability::Matrix),
- CASE1(CAPABILITY, Capability::Shader, Matrix),
- CASE1(CAPABILITY, Capability::Geometry, Shader),
- CASE1(CAPABILITY, Capability::Tessellation, Shader),
- CASE0(CAPABILITY, Capability::Addresses),
- CASE0(CAPABILITY, Capability::Linkage),
- CASE0(CAPABILITY, Capability::Kernel),
- CASE1(CAPABILITY, Capability::Vector16, Kernel),
- CASE1(CAPABILITY, Capability::Float16Buffer, Kernel),
- CASE0(CAPABILITY, Capability::Float16), // Bug 15234
- CASE0(CAPABILITY, Capability::Float64),
- CASE0(CAPABILITY, Capability::Int64),
- CASE1(CAPABILITY, Capability::Int64Atomics, Int64),
- CASE1(CAPABILITY, Capability::ImageBasic, Kernel),
- CASE1(CAPABILITY, Capability::ImageReadWrite, ImageBasic),
- CASE1(CAPABILITY, Capability::ImageMipmap, ImageBasic),
- // Value 16 intentionally missing.
- CASE1(CAPABILITY, Capability::Pipes, Kernel),
- CASE0(CAPABILITY, Capability::Groups),
- CASE1(CAPABILITY, Capability::DeviceEnqueue, Kernel),
- CASE1(CAPABILITY, Capability::LiteralSampler, Kernel),
- CASE1(CAPABILITY, Capability::AtomicStorage, Shader),
- CASE0(CAPABILITY, Capability::Int16),
- CASE1(CAPABILITY, Capability::TessellationPointSize, Tessellation),
- CASE1(CAPABILITY, Capability::GeometryPointSize, Geometry),
- CASE1(CAPABILITY, Capability::ImageGatherExtended, Shader),
- // Value 26 intentionally missing.
- CASE1(CAPABILITY, Capability::StorageImageMultisample, Shader),
- CASE1(CAPABILITY, Capability::UniformBufferArrayDynamicIndexing, Shader),
- CASE1(CAPABILITY, Capability::SampledImageArrayDynamicIndexing, Shader),
- CASE1(CAPABILITY, Capability::StorageBufferArrayDynamicIndexing, Shader),
- CASE1(CAPABILITY, Capability::StorageImageArrayDynamicIndexing, Shader),
- CASE1(CAPABILITY, Capability::ClipDistance, Shader),
- CASE1(CAPABILITY, Capability::CullDistance, Shader),
- CASE1(CAPABILITY, Capability::ImageCubeArray, SampledCubeArray),
- CASE1(CAPABILITY, Capability::SampleRateShading, Shader),
- CASE1(CAPABILITY, Capability::ImageRect, SampledRect),
- CASE1(CAPABILITY, Capability::SampledRect, Shader),
- CASE1(CAPABILITY, Capability::GenericPointer, Addresses),
- CASE0(CAPABILITY, Capability::Int8),
- CASE1(CAPABILITY, Capability::InputAttachment, Shader),
- CASE1(CAPABILITY, Capability::SparseResidency, Shader),
- CASE1(CAPABILITY, Capability::MinLod, Shader),
- CASE1(CAPABILITY, Capability::Image1D, Sampled1D),
- CASE1(CAPABILITY, Capability::SampledCubeArray, Shader),
- CASE1(CAPABILITY, Capability::ImageBuffer, SampledBuffer),
- CASE1(CAPABILITY, Capability::ImageMSArray, Shader),
- CASE1(CAPABILITY, Capability::StorageImageExtendedFormats, Shader),
- CASE1(CAPABILITY, Capability::ImageQuery, Shader),
- CASE1(CAPABILITY, Capability::DerivativeControl, Shader),
- CASE1(CAPABILITY, Capability::InterpolationFunction, Shader),
- CASE1(CAPABILITY, Capability::TransformFeedback, Shader),
- CASE1(CAPABILITY, Capability::GeometryStreams, Geometry),
- CASE1(CAPABILITY, Capability::StorageImageReadWithoutFormat, Shader),
- CASE1(CAPABILITY, Capability::StorageImageWriteWithoutFormat, Shader),
- CASE1(CAPABILITY, Capability::MultiViewport, Geometry),
- // clang-format on
- })));
- INSTANTIATE_TEST_SUITE_P(
- CapabilityDependsOnV11, EnumCapabilityTest,
- Combine(Values(SPV_ENV_UNIVERSAL_1_1),
- ValuesIn(std::vector<EnumCapabilityCase>{
- CASE1(CAPABILITY, Capability::SubgroupDispatch, DeviceEnqueue),
- CASE1(CAPABILITY, Capability::NamedBarrier, Kernel),
- CASE1(CAPABILITY, Capability::PipeStorage, Pipes),
- })));
- #undef CASE0
- #undef CASE1
- #undef CASE2
- } // namespace
- } // namespace spvtools
|