10e839d7e9d7e5a096949e39a4c6e00670c8dee64I-Jui (Ray) Sung//===- SPIRVEnum.h - SPIR-V enums -------------------------------*- C++ -*-===// 20e839d7e9d7e5a096949e39a4c6e00670c8dee64I-Jui (Ray) Sung// 30e839d7e9d7e5a096949e39a4c6e00670c8dee64I-Jui (Ray) Sung// The LLVM/SPIRV Translator 40e839d7e9d7e5a096949e39a4c6e00670c8dee64I-Jui (Ray) Sung// 50e839d7e9d7e5a096949e39a4c6e00670c8dee64I-Jui (Ray) Sung// This file is distributed under the University of Illinois Open Source 60e839d7e9d7e5a096949e39a4c6e00670c8dee64I-Jui (Ray) Sung// License. See LICENSE.TXT for details. 70e839d7e9d7e5a096949e39a4c6e00670c8dee64I-Jui (Ray) Sung// 80e839d7e9d7e5a096949e39a4c6e00670c8dee64I-Jui (Ray) Sung// Copyright (c) 2014 Advanced Micro Devices, Inc. All rights reserved. 90e839d7e9d7e5a096949e39a4c6e00670c8dee64I-Jui (Ray) Sung// 100e839d7e9d7e5a096949e39a4c6e00670c8dee64I-Jui (Ray) Sung// Permission is hereby granted, free of charge, to any person obtaining a 110e839d7e9d7e5a096949e39a4c6e00670c8dee64I-Jui (Ray) Sung// copy of this software and associated documentation files (the "Software"), 120e839d7e9d7e5a096949e39a4c6e00670c8dee64I-Jui (Ray) Sung// to deal with the Software without restriction, including without limitation 130e839d7e9d7e5a096949e39a4c6e00670c8dee64I-Jui (Ray) Sung// the rights to use, copy, modify, merge, publish, distribute, sublicense, 140e839d7e9d7e5a096949e39a4c6e00670c8dee64I-Jui (Ray) Sung// and/or sell copies of the Software, and to permit persons to whom the 150e839d7e9d7e5a096949e39a4c6e00670c8dee64I-Jui (Ray) Sung// Software is furnished to do so, subject to the following conditions: 160e839d7e9d7e5a096949e39a4c6e00670c8dee64I-Jui (Ray) Sung// 170e839d7e9d7e5a096949e39a4c6e00670c8dee64I-Jui (Ray) Sung// Redistributions of source code must retain the above copyright notice, 180e839d7e9d7e5a096949e39a4c6e00670c8dee64I-Jui (Ray) Sung// this list of conditions and the following disclaimers. 190e839d7e9d7e5a096949e39a4c6e00670c8dee64I-Jui (Ray) Sung// Redistributions in binary form must reproduce the above copyright notice, 200e839d7e9d7e5a096949e39a4c6e00670c8dee64I-Jui (Ray) Sung// this list of conditions and the following disclaimers in the documentation 210e839d7e9d7e5a096949e39a4c6e00670c8dee64I-Jui (Ray) Sung// and/or other materials provided with the distribution. 220e839d7e9d7e5a096949e39a4c6e00670c8dee64I-Jui (Ray) Sung// Neither the names of Advanced Micro Devices, Inc., nor the names of its 230e839d7e9d7e5a096949e39a4c6e00670c8dee64I-Jui (Ray) Sung// contributors may be used to endorse or promote products derived from this 240e839d7e9d7e5a096949e39a4c6e00670c8dee64I-Jui (Ray) Sung// Software without specific prior written permission. 250e839d7e9d7e5a096949e39a4c6e00670c8dee64I-Jui (Ray) Sung// THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR 260e839d7e9d7e5a096949e39a4c6e00670c8dee64I-Jui (Ray) Sung// IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, 270e839d7e9d7e5a096949e39a4c6e00670c8dee64I-Jui (Ray) Sung// FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE 280e839d7e9d7e5a096949e39a4c6e00670c8dee64I-Jui (Ray) Sung// CONTRIBUTORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER 290e839d7e9d7e5a096949e39a4c6e00670c8dee64I-Jui (Ray) Sung// LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, 300e839d7e9d7e5a096949e39a4c6e00670c8dee64I-Jui (Ray) Sung// OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS WITH 310e839d7e9d7e5a096949e39a4c6e00670c8dee64I-Jui (Ray) Sung// THE SOFTWARE. 320e839d7e9d7e5a096949e39a4c6e00670c8dee64I-Jui (Ray) Sung// 330e839d7e9d7e5a096949e39a4c6e00670c8dee64I-Jui (Ray) Sung//===----------------------------------------------------------------------===// 340e839d7e9d7e5a096949e39a4c6e00670c8dee64I-Jui (Ray) Sung/// \file 350e839d7e9d7e5a096949e39a4c6e00670c8dee64I-Jui (Ray) Sung/// 360e839d7e9d7e5a096949e39a4c6e00670c8dee64I-Jui (Ray) Sung/// This file defines SPIR-V enums. 370e839d7e9d7e5a096949e39a4c6e00670c8dee64I-Jui (Ray) Sung/// 380e839d7e9d7e5a096949e39a4c6e00670c8dee64I-Jui (Ray) Sung//===----------------------------------------------------------------------===// 390e839d7e9d7e5a096949e39a4c6e00670c8dee64I-Jui (Ray) Sung 400e839d7e9d7e5a096949e39a4c6e00670c8dee64I-Jui (Ray) Sung#ifndef SPIRVENUM_HPP_ 410e839d7e9d7e5a096949e39a4c6e00670c8dee64I-Jui (Ray) Sung#define SPIRVENUM_HPP_ 420e839d7e9d7e5a096949e39a4c6e00670c8dee64I-Jui (Ray) Sung 430e839d7e9d7e5a096949e39a4c6e00670c8dee64I-Jui (Ray) Sung#include "spirv.hpp" 440e839d7e9d7e5a096949e39a4c6e00670c8dee64I-Jui (Ray) Sung#include "SPIRVOpCode.h" 450e839d7e9d7e5a096949e39a4c6e00670c8dee64I-Jui (Ray) Sung#include <cstdint> 460e839d7e9d7e5a096949e39a4c6e00670c8dee64I-Jui (Ray) Sungusing namespace spv; 470e839d7e9d7e5a096949e39a4c6e00670c8dee64I-Jui (Ray) Sung 480e839d7e9d7e5a096949e39a4c6e00670c8dee64I-Jui (Ray) Sungnamespace SPIRV{ 490e839d7e9d7e5a096949e39a4c6e00670c8dee64I-Jui (Ray) Sung 500e839d7e9d7e5a096949e39a4c6e00670c8dee64I-Jui (Ray) Sungtypedef uint32_t SPIRVWord; 510e839d7e9d7e5a096949e39a4c6e00670c8dee64I-Jui (Ray) Sungtypedef uint32_t SPIRVId; 520e839d7e9d7e5a096949e39a4c6e00670c8dee64I-Jui (Ray) Sung#define SPIRVID_MAX ~0U 530e839d7e9d7e5a096949e39a4c6e00670c8dee64I-Jui (Ray) Sung#define SPIRVID_INVALID ~0U 540e839d7e9d7e5a096949e39a4c6e00670c8dee64I-Jui (Ray) Sung#define SPIRVWORD_MAX ~0U 550e839d7e9d7e5a096949e39a4c6e00670c8dee64I-Jui (Ray) Sung 560e839d7e9d7e5a096949e39a4c6e00670c8dee64I-Jui (Ray) Sunginline bool 570e839d7e9d7e5a096949e39a4c6e00670c8dee64I-Jui (Ray) SungisValidId(SPIRVId Id) { return Id != SPIRVID_INVALID && Id != 0;} 580e839d7e9d7e5a096949e39a4c6e00670c8dee64I-Jui (Ray) Sung 590e839d7e9d7e5a096949e39a4c6e00670c8dee64I-Jui (Ray) Sunginline SPIRVWord 600e839d7e9d7e5a096949e39a4c6e00670c8dee64I-Jui (Ray) SungmkWord(unsigned WordCount, Op OpCode) { 610e839d7e9d7e5a096949e39a4c6e00670c8dee64I-Jui (Ray) Sung return (WordCount << 16) | OpCode; 620e839d7e9d7e5a096949e39a4c6e00670c8dee64I-Jui (Ray) Sung} 630e839d7e9d7e5a096949e39a4c6e00670c8dee64I-Jui (Ray) Sung 640e839d7e9d7e5a096949e39a4c6e00670c8dee64I-Jui (Ray) Sungconst static unsigned kSPIRVMemOrderSemanticMask = 0x1F; 650e839d7e9d7e5a096949e39a4c6e00670c8dee64I-Jui (Ray) Sung 660e839d7e9d7e5a096949e39a4c6e00670c8dee64I-Jui (Ray) Sungenum SPIRVVersion : SPIRVWord { 670e839d7e9d7e5a096949e39a4c6e00670c8dee64I-Jui (Ray) Sung SPIRV_1_0 = 0x00010000, 680e839d7e9d7e5a096949e39a4c6e00670c8dee64I-Jui (Ray) Sung SPIRV_1_1 = 0x00010100 690e839d7e9d7e5a096949e39a4c6e00670c8dee64I-Jui (Ray) Sung}; 700e839d7e9d7e5a096949e39a4c6e00670c8dee64I-Jui (Ray) Sung 710e839d7e9d7e5a096949e39a4c6e00670c8dee64I-Jui (Ray) Sungenum SPIRVGeneratorKind { 720e839d7e9d7e5a096949e39a4c6e00670c8dee64I-Jui (Ray) Sung SPIRVGEN_KhronosLLVMSPIRVTranslator = 6, 730e839d7e9d7e5a096949e39a4c6e00670c8dee64I-Jui (Ray) Sung SPIRVGEN_KhronosSPIRVAssembler = 7, 740e839d7e9d7e5a096949e39a4c6e00670c8dee64I-Jui (Ray) Sung}; 750e839d7e9d7e5a096949e39a4c6e00670c8dee64I-Jui (Ray) Sung 760e839d7e9d7e5a096949e39a4c6e00670c8dee64I-Jui (Ray) Sungenum SPIRVInstructionSchemaKind { 770e839d7e9d7e5a096949e39a4c6e00670c8dee64I-Jui (Ray) Sung SPIRVISCH_Default, 780e839d7e9d7e5a096949e39a4c6e00670c8dee64I-Jui (Ray) Sung}; 790e839d7e9d7e5a096949e39a4c6e00670c8dee64I-Jui (Ray) Sung 800e839d7e9d7e5a096949e39a4c6e00670c8dee64I-Jui (Ray) Sungenum SPIRVExtInstSetKind { 810e839d7e9d7e5a096949e39a4c6e00670c8dee64I-Jui (Ray) Sung SPIRVEIS_OpenCL, 820e839d7e9d7e5a096949e39a4c6e00670c8dee64I-Jui (Ray) Sung SPIRVEIS_Count, 830e839d7e9d7e5a096949e39a4c6e00670c8dee64I-Jui (Ray) Sung}; 840e839d7e9d7e5a096949e39a4c6e00670c8dee64I-Jui (Ray) Sung 850e839d7e9d7e5a096949e39a4c6e00670c8dee64I-Jui (Ray) Sungenum SPIRVSamplerAddressingModeKind { 860e839d7e9d7e5a096949e39a4c6e00670c8dee64I-Jui (Ray) Sung SPIRVSAM_None = 0, 870e839d7e9d7e5a096949e39a4c6e00670c8dee64I-Jui (Ray) Sung SPIRVSAM_ClampEdge = 2, 880e839d7e9d7e5a096949e39a4c6e00670c8dee64I-Jui (Ray) Sung SPIRVSAM_Clamp = 4, 890e839d7e9d7e5a096949e39a4c6e00670c8dee64I-Jui (Ray) Sung SPIRVSAM_Repeat = 6, 900e839d7e9d7e5a096949e39a4c6e00670c8dee64I-Jui (Ray) Sung SPIRVSAM_RepeatMirrored = 8, 910e839d7e9d7e5a096949e39a4c6e00670c8dee64I-Jui (Ray) Sung SPIRVSAM_Invalid = 255, 920e839d7e9d7e5a096949e39a4c6e00670c8dee64I-Jui (Ray) Sung}; 930e839d7e9d7e5a096949e39a4c6e00670c8dee64I-Jui (Ray) Sung 940e839d7e9d7e5a096949e39a4c6e00670c8dee64I-Jui (Ray) Sungenum SPIRVSamplerFilterModeKind { 950e839d7e9d7e5a096949e39a4c6e00670c8dee64I-Jui (Ray) Sung SPIRVSFM_Nearest = 16, 960e839d7e9d7e5a096949e39a4c6e00670c8dee64I-Jui (Ray) Sung SPIRVSFM_Linear = 32, 970e839d7e9d7e5a096949e39a4c6e00670c8dee64I-Jui (Ray) Sung SPIRVSFM_Invalid = 255, 980e839d7e9d7e5a096949e39a4c6e00670c8dee64I-Jui (Ray) Sung}; 990e839d7e9d7e5a096949e39a4c6e00670c8dee64I-Jui (Ray) Sung 1000e839d7e9d7e5a096949e39a4c6e00670c8dee64I-Jui (Ray) Sungtypedef spv::Capability SPIRVCapabilityKind; 1010e839d7e9d7e5a096949e39a4c6e00670c8dee64I-Jui (Ray) Sungtypedef spv::ExecutionModel SPIRVExecutionModelKind; 1020e839d7e9d7e5a096949e39a4c6e00670c8dee64I-Jui (Ray) Sungtypedef spv::ExecutionMode SPIRVExecutionModeKind; 1030e839d7e9d7e5a096949e39a4c6e00670c8dee64I-Jui (Ray) Sungtypedef spv::AccessQualifier SPIRVAccessQualifierKind; 1040e839d7e9d7e5a096949e39a4c6e00670c8dee64I-Jui (Ray) Sungtypedef spv::AddressingModel SPIRVAddressingModelKind; 1050e839d7e9d7e5a096949e39a4c6e00670c8dee64I-Jui (Ray) Sungtypedef spv::LinkageType SPIRVLinkageTypeKind; 1060e839d7e9d7e5a096949e39a4c6e00670c8dee64I-Jui (Ray) Sungtypedef spv::MemoryModel SPIRVMemoryModelKind; 1070e839d7e9d7e5a096949e39a4c6e00670c8dee64I-Jui (Ray) Sungtypedef spv::StorageClass SPIRVStorageClassKind; 1080e839d7e9d7e5a096949e39a4c6e00670c8dee64I-Jui (Ray) Sungtypedef spv::FunctionControlMask SPIRVFunctionControlMaskKind; 1090e839d7e9d7e5a096949e39a4c6e00670c8dee64I-Jui (Ray) Sungtypedef spv::FPRoundingMode SPIRVFPRoundingModeKind; 1100e839d7e9d7e5a096949e39a4c6e00670c8dee64I-Jui (Ray) Sungtypedef spv::FunctionParameterAttribute SPIRVFuncParamAttrKind; 1110e839d7e9d7e5a096949e39a4c6e00670c8dee64I-Jui (Ray) Sungtypedef spv::BuiltIn SPIRVBuiltinVariableKind; 1120e839d7e9d7e5a096949e39a4c6e00670c8dee64I-Jui (Ray) Sungtypedef spv::MemoryAccessMask SPIRVMemoryAccessKind; 1130e839d7e9d7e5a096949e39a4c6e00670c8dee64I-Jui (Ray) Sungtypedef spv::GroupOperation SPIRVGroupOperationKind; 1140e839d7e9d7e5a096949e39a4c6e00670c8dee64I-Jui (Ray) Sungtypedef spv::Dim SPIRVImageDimKind; 1150e839d7e9d7e5a096949e39a4c6e00670c8dee64I-Jui (Ray) Sungtypedef std::vector<SPIRVCapabilityKind> SPIRVCapVec; 1160e839d7e9d7e5a096949e39a4c6e00670c8dee64I-Jui (Ray) Sung 1170e839d7e9d7e5a096949e39a4c6e00670c8dee64I-Jui (Ray) Sungtemplate<> inline void 1180e839d7e9d7e5a096949e39a4c6e00670c8dee64I-Jui (Ray) SungSPIRVMap<SPIRVExtInstSetKind, std::string>::init() { 1190e839d7e9d7e5a096949e39a4c6e00670c8dee64I-Jui (Ray) Sung add(SPIRVEIS_OpenCL, "OpenCL.std"); 1200e839d7e9d7e5a096949e39a4c6e00670c8dee64I-Jui (Ray) Sung} 1210e839d7e9d7e5a096949e39a4c6e00670c8dee64I-Jui (Ray) Sungtypedef SPIRVMap<SPIRVExtInstSetKind, std::string> SPIRVBuiltinSetNameMap; 1220e839d7e9d7e5a096949e39a4c6e00670c8dee64I-Jui (Ray) Sung 1230e839d7e9d7e5a096949e39a4c6e00670c8dee64I-Jui (Ray) Sungtemplate<typename K> 1240e839d7e9d7e5a096949e39a4c6e00670c8dee64I-Jui (Ray) SungSPIRVCapVec 1250e839d7e9d7e5a096949e39a4c6e00670c8dee64I-Jui (Ray) SunggetCapability(K Key) { 1260e839d7e9d7e5a096949e39a4c6e00670c8dee64I-Jui (Ray) Sung SPIRVCapVec V; 1270e839d7e9d7e5a096949e39a4c6e00670c8dee64I-Jui (Ray) Sung SPIRVMap<K, SPIRVCapVec>::find(Key, &V); 1280e839d7e9d7e5a096949e39a4c6e00670c8dee64I-Jui (Ray) Sung return V; 1290e839d7e9d7e5a096949e39a4c6e00670c8dee64I-Jui (Ray) Sung} 1300e839d7e9d7e5a096949e39a4c6e00670c8dee64I-Jui (Ray) Sung 1310e839d7e9d7e5a096949e39a4c6e00670c8dee64I-Jui (Ray) Sung#define ADD_VEC_INIT(Cap, ...) \ 1320e839d7e9d7e5a096949e39a4c6e00670c8dee64I-Jui (Ray) Sung{ \ 1330e839d7e9d7e5a096949e39a4c6e00670c8dee64I-Jui (Ray) Sung SPIRVCapabilityKind C[] = __VA_ARGS__; \ 1340e839d7e9d7e5a096949e39a4c6e00670c8dee64I-Jui (Ray) Sung SPIRVCapVec V(C, C + sizeof(C) / sizeof(C[0])); \ 1350e839d7e9d7e5a096949e39a4c6e00670c8dee64I-Jui (Ray) Sung add(Cap, V); \ 1360e839d7e9d7e5a096949e39a4c6e00670c8dee64I-Jui (Ray) Sung} 1370e839d7e9d7e5a096949e39a4c6e00670c8dee64I-Jui (Ray) Sung 1380e839d7e9d7e5a096949e39a4c6e00670c8dee64I-Jui (Ray) Sungtemplate<> inline void 1390e839d7e9d7e5a096949e39a4c6e00670c8dee64I-Jui (Ray) SungSPIRVMap<SPIRVCapabilityKind, SPIRVCapVec>::init() { 1400e839d7e9d7e5a096949e39a4c6e00670c8dee64I-Jui (Ray) Sung ADD_VEC_INIT(CapabilityShader, { CapabilityMatrix }); 1410e839d7e9d7e5a096949e39a4c6e00670c8dee64I-Jui (Ray) Sung ADD_VEC_INIT(CapabilityGeometry, { CapabilityShader }); 1420e839d7e9d7e5a096949e39a4c6e00670c8dee64I-Jui (Ray) Sung ADD_VEC_INIT(CapabilityTessellation, { CapabilityShader }); 1430e839d7e9d7e5a096949e39a4c6e00670c8dee64I-Jui (Ray) Sung ADD_VEC_INIT(CapabilityVector16, { CapabilityKernel }); 1440e839d7e9d7e5a096949e39a4c6e00670c8dee64I-Jui (Ray) Sung ADD_VEC_INIT(CapabilityFloat16Buffer, { CapabilityKernel }); 1450e839d7e9d7e5a096949e39a4c6e00670c8dee64I-Jui (Ray) Sung ADD_VEC_INIT(CapabilityInt64Atomics, { CapabilityInt64 }); 1460e839d7e9d7e5a096949e39a4c6e00670c8dee64I-Jui (Ray) Sung ADD_VEC_INIT(CapabilityImageBasic, { CapabilityKernel }); 1470e839d7e9d7e5a096949e39a4c6e00670c8dee64I-Jui (Ray) Sung ADD_VEC_INIT(CapabilityImageReadWrite, { CapabilityImageBasic }); 1480e839d7e9d7e5a096949e39a4c6e00670c8dee64I-Jui (Ray) Sung ADD_VEC_INIT(CapabilityImageMipmap, { CapabilityImageBasic }); 1490e839d7e9d7e5a096949e39a4c6e00670c8dee64I-Jui (Ray) Sung ADD_VEC_INIT(CapabilityPipes, { CapabilityKernel }); 1500e839d7e9d7e5a096949e39a4c6e00670c8dee64I-Jui (Ray) Sung ADD_VEC_INIT(CapabilityDeviceEnqueue, { CapabilityKernel }); 1510e839d7e9d7e5a096949e39a4c6e00670c8dee64I-Jui (Ray) Sung ADD_VEC_INIT(CapabilityLiteralSampler, { CapabilityKernel }); 1520e839d7e9d7e5a096949e39a4c6e00670c8dee64I-Jui (Ray) Sung ADD_VEC_INIT(CapabilityAtomicStorage, { CapabilityShader }); 1530e839d7e9d7e5a096949e39a4c6e00670c8dee64I-Jui (Ray) Sung ADD_VEC_INIT(CapabilityTessellationPointSize, { CapabilityTessellation }); 1540e839d7e9d7e5a096949e39a4c6e00670c8dee64I-Jui (Ray) Sung ADD_VEC_INIT(CapabilityGeometryPointSize, { CapabilityGeometry }); 1550e839d7e9d7e5a096949e39a4c6e00670c8dee64I-Jui (Ray) Sung ADD_VEC_INIT(CapabilityImageGatherExtended, { CapabilityShader }); 1560e839d7e9d7e5a096949e39a4c6e00670c8dee64I-Jui (Ray) Sung ADD_VEC_INIT(CapabilityStorageImageMultisample, { CapabilityShader }); 1570e839d7e9d7e5a096949e39a4c6e00670c8dee64I-Jui (Ray) Sung ADD_VEC_INIT(CapabilityUniformBufferArrayDynamicIndexing, { CapabilityShader }); 1580e839d7e9d7e5a096949e39a4c6e00670c8dee64I-Jui (Ray) Sung ADD_VEC_INIT(CapabilitySampledImageArrayDynamicIndexing, { CapabilityShader }); 1590e839d7e9d7e5a096949e39a4c6e00670c8dee64I-Jui (Ray) Sung ADD_VEC_INIT(CapabilityStorageBufferArrayDynamicIndexing, { CapabilityShader }); 1600e839d7e9d7e5a096949e39a4c6e00670c8dee64I-Jui (Ray) Sung ADD_VEC_INIT(CapabilityStorageImageArrayDynamicIndexing, { CapabilityShader }); 1610e839d7e9d7e5a096949e39a4c6e00670c8dee64I-Jui (Ray) Sung ADD_VEC_INIT(CapabilityClipDistance, { CapabilityShader }); 1620e839d7e9d7e5a096949e39a4c6e00670c8dee64I-Jui (Ray) Sung ADD_VEC_INIT(CapabilityCullDistance, { CapabilityShader }); 1630e839d7e9d7e5a096949e39a4c6e00670c8dee64I-Jui (Ray) Sung ADD_VEC_INIT(CapabilityImageCubeArray, { CapabilitySampledCubeArray }); 1640e839d7e9d7e5a096949e39a4c6e00670c8dee64I-Jui (Ray) Sung ADD_VEC_INIT(CapabilitySampleRateShading, { CapabilityShader }); 1650e839d7e9d7e5a096949e39a4c6e00670c8dee64I-Jui (Ray) Sung ADD_VEC_INIT(CapabilityImageRect, { CapabilitySampledRect }); 1660e839d7e9d7e5a096949e39a4c6e00670c8dee64I-Jui (Ray) Sung ADD_VEC_INIT(CapabilitySampledRect, { CapabilityShader }); 1670e839d7e9d7e5a096949e39a4c6e00670c8dee64I-Jui (Ray) Sung ADD_VEC_INIT(CapabilityGenericPointer, { CapabilityAddresses }); 1680e839d7e9d7e5a096949e39a4c6e00670c8dee64I-Jui (Ray) Sung ADD_VEC_INIT(CapabilityInt8, { CapabilityKernel }); 1690e839d7e9d7e5a096949e39a4c6e00670c8dee64I-Jui (Ray) Sung ADD_VEC_INIT(CapabilityInputAttachment, { CapabilityShader }); 1700e839d7e9d7e5a096949e39a4c6e00670c8dee64I-Jui (Ray) Sung ADD_VEC_INIT(CapabilitySparseResidency, { CapabilityShader }); 1710e839d7e9d7e5a096949e39a4c6e00670c8dee64I-Jui (Ray) Sung ADD_VEC_INIT(CapabilityMinLod, { CapabilityShader }); 1720e839d7e9d7e5a096949e39a4c6e00670c8dee64I-Jui (Ray) Sung ADD_VEC_INIT(CapabilitySampled1D, { CapabilityShader }); 1730e839d7e9d7e5a096949e39a4c6e00670c8dee64I-Jui (Ray) Sung ADD_VEC_INIT(CapabilityImage1D, { CapabilitySampled1D }); 1740e839d7e9d7e5a096949e39a4c6e00670c8dee64I-Jui (Ray) Sung ADD_VEC_INIT(CapabilitySampledCubeArray, { CapabilityShader }); 1750e839d7e9d7e5a096949e39a4c6e00670c8dee64I-Jui (Ray) Sung ADD_VEC_INIT(CapabilitySampledBuffer, { CapabilityShader }); 1760e839d7e9d7e5a096949e39a4c6e00670c8dee64I-Jui (Ray) Sung ADD_VEC_INIT(CapabilityImageBuffer, { CapabilitySampledBuffer }); 1770e839d7e9d7e5a096949e39a4c6e00670c8dee64I-Jui (Ray) Sung ADD_VEC_INIT(CapabilityImageMSArray, { CapabilityShader }); 1780e839d7e9d7e5a096949e39a4c6e00670c8dee64I-Jui (Ray) Sung ADD_VEC_INIT(CapabilityStorageImageExtendedFormats, { CapabilityShader }); 1790e839d7e9d7e5a096949e39a4c6e00670c8dee64I-Jui (Ray) Sung ADD_VEC_INIT(CapabilityImageQuery, { CapabilityShader }); 1800e839d7e9d7e5a096949e39a4c6e00670c8dee64I-Jui (Ray) Sung ADD_VEC_INIT(CapabilityDerivativeControl, { CapabilityShader }); 1810e839d7e9d7e5a096949e39a4c6e00670c8dee64I-Jui (Ray) Sung ADD_VEC_INIT(CapabilityInterpolationFunction, { CapabilityShader }); 1820e839d7e9d7e5a096949e39a4c6e00670c8dee64I-Jui (Ray) Sung ADD_VEC_INIT(CapabilityTransformFeedback, { CapabilityShader }); 1830e839d7e9d7e5a096949e39a4c6e00670c8dee64I-Jui (Ray) Sung ADD_VEC_INIT(CapabilityGeometryStreams, { CapabilityGeometry }); 1840e839d7e9d7e5a096949e39a4c6e00670c8dee64I-Jui (Ray) Sung ADD_VEC_INIT(CapabilityStorageImageReadWithoutFormat, { CapabilityShader }); 1850e839d7e9d7e5a096949e39a4c6e00670c8dee64I-Jui (Ray) Sung ADD_VEC_INIT(CapabilityStorageImageWriteWithoutFormat, { CapabilityShader }); 1860e839d7e9d7e5a096949e39a4c6e00670c8dee64I-Jui (Ray) Sung ADD_VEC_INIT(CapabilityMultiViewport, { CapabilityGeometry }); 1870e839d7e9d7e5a096949e39a4c6e00670c8dee64I-Jui (Ray) Sung} 1880e839d7e9d7e5a096949e39a4c6e00670c8dee64I-Jui (Ray) Sung 1890e839d7e9d7e5a096949e39a4c6e00670c8dee64I-Jui (Ray) Sungtemplate<> inline void 1900e839d7e9d7e5a096949e39a4c6e00670c8dee64I-Jui (Ray) SungSPIRVMap<SPIRVExecutionModelKind, SPIRVCapVec>::init() { 1910e839d7e9d7e5a096949e39a4c6e00670c8dee64I-Jui (Ray) Sung ADD_VEC_INIT(ExecutionModelVertex, { CapabilityShader }); 1920e839d7e9d7e5a096949e39a4c6e00670c8dee64I-Jui (Ray) Sung ADD_VEC_INIT(ExecutionModelTessellationControl, { CapabilityTessellation }); 1930e839d7e9d7e5a096949e39a4c6e00670c8dee64I-Jui (Ray) Sung ADD_VEC_INIT(ExecutionModelTessellationEvaluation, { CapabilityTessellation }); 1940e839d7e9d7e5a096949e39a4c6e00670c8dee64I-Jui (Ray) Sung ADD_VEC_INIT(ExecutionModelGeometry, { CapabilityGeometry }); 1950e839d7e9d7e5a096949e39a4c6e00670c8dee64I-Jui (Ray) Sung ADD_VEC_INIT(ExecutionModelFragment, { CapabilityShader }); 1960e839d7e9d7e5a096949e39a4c6e00670c8dee64I-Jui (Ray) Sung ADD_VEC_INIT(ExecutionModelGLCompute, { CapabilityShader }); 1970e839d7e9d7e5a096949e39a4c6e00670c8dee64I-Jui (Ray) Sung ADD_VEC_INIT(ExecutionModelKernel, { CapabilityKernel }); 1980e839d7e9d7e5a096949e39a4c6e00670c8dee64I-Jui (Ray) Sung} 1990e839d7e9d7e5a096949e39a4c6e00670c8dee64I-Jui (Ray) Sung 2000e839d7e9d7e5a096949e39a4c6e00670c8dee64I-Jui (Ray) Sungtemplate<> inline void 2010e839d7e9d7e5a096949e39a4c6e00670c8dee64I-Jui (Ray) SungSPIRVMap<SPIRVExecutionModeKind, SPIRVCapVec>::init() { 2020e839d7e9d7e5a096949e39a4c6e00670c8dee64I-Jui (Ray) Sung ADD_VEC_INIT(ExecutionModeInvocations, { CapabilityGeometry }); 2030e839d7e9d7e5a096949e39a4c6e00670c8dee64I-Jui (Ray) Sung ADD_VEC_INIT(ExecutionModeSpacingEqual, { CapabilityTessellation }); 2040e839d7e9d7e5a096949e39a4c6e00670c8dee64I-Jui (Ray) Sung ADD_VEC_INIT(ExecutionModeSpacingFractionalEven, { CapabilityTessellation }); 2050e839d7e9d7e5a096949e39a4c6e00670c8dee64I-Jui (Ray) Sung ADD_VEC_INIT(ExecutionModeSpacingFractionalOdd, { CapabilityTessellation }); 2060e839d7e9d7e5a096949e39a4c6e00670c8dee64I-Jui (Ray) Sung ADD_VEC_INIT(ExecutionModeVertexOrderCw, { CapabilityTessellation }); 2070e839d7e9d7e5a096949e39a4c6e00670c8dee64I-Jui (Ray) Sung ADD_VEC_INIT(ExecutionModeVertexOrderCcw, { CapabilityTessellation }); 2080e839d7e9d7e5a096949e39a4c6e00670c8dee64I-Jui (Ray) Sung ADD_VEC_INIT(ExecutionModePixelCenterInteger, { CapabilityShader }); 2090e839d7e9d7e5a096949e39a4c6e00670c8dee64I-Jui (Ray) Sung ADD_VEC_INIT(ExecutionModeOriginUpperLeft, { CapabilityShader }); 2100e839d7e9d7e5a096949e39a4c6e00670c8dee64I-Jui (Ray) Sung ADD_VEC_INIT(ExecutionModeOriginLowerLeft, { CapabilityShader }); 2110e839d7e9d7e5a096949e39a4c6e00670c8dee64I-Jui (Ray) Sung ADD_VEC_INIT(ExecutionModeEarlyFragmentTests, { CapabilityShader }); 2120e839d7e9d7e5a096949e39a4c6e00670c8dee64I-Jui (Ray) Sung ADD_VEC_INIT(ExecutionModePointMode, { CapabilityTessellation }); 2130e839d7e9d7e5a096949e39a4c6e00670c8dee64I-Jui (Ray) Sung ADD_VEC_INIT(ExecutionModeXfb, { CapabilityTransformFeedback }); 2140e839d7e9d7e5a096949e39a4c6e00670c8dee64I-Jui (Ray) Sung ADD_VEC_INIT(ExecutionModeDepthReplacing, { CapabilityShader }); 2150e839d7e9d7e5a096949e39a4c6e00670c8dee64I-Jui (Ray) Sung ADD_VEC_INIT(ExecutionModeDepthGreater, { CapabilityShader }); 2160e839d7e9d7e5a096949e39a4c6e00670c8dee64I-Jui (Ray) Sung ADD_VEC_INIT(ExecutionModeDepthLess, { CapabilityShader }); 2170e839d7e9d7e5a096949e39a4c6e00670c8dee64I-Jui (Ray) Sung ADD_VEC_INIT(ExecutionModeDepthUnchanged, { CapabilityShader }); 2180e839d7e9d7e5a096949e39a4c6e00670c8dee64I-Jui (Ray) Sung ADD_VEC_INIT(ExecutionModeLocalSizeHint, { CapabilityKernel }); 2190e839d7e9d7e5a096949e39a4c6e00670c8dee64I-Jui (Ray) Sung ADD_VEC_INIT(ExecutionModeInputPoints, { CapabilityGeometry }); 2200e839d7e9d7e5a096949e39a4c6e00670c8dee64I-Jui (Ray) Sung ADD_VEC_INIT(ExecutionModeInputLines, { CapabilityGeometry }); 2210e839d7e9d7e5a096949e39a4c6e00670c8dee64I-Jui (Ray) Sung ADD_VEC_INIT(ExecutionModeInputLinesAdjacency, { CapabilityGeometry }); 2220e839d7e9d7e5a096949e39a4c6e00670c8dee64I-Jui (Ray) Sung ADD_VEC_INIT(ExecutionModeTriangles, { CapabilityGeometry, CapabilityTessellation }); 2230e839d7e9d7e5a096949e39a4c6e00670c8dee64I-Jui (Ray) Sung ADD_VEC_INIT(ExecutionModeInputTrianglesAdjacency, { CapabilityGeometry }); 2240e839d7e9d7e5a096949e39a4c6e00670c8dee64I-Jui (Ray) Sung ADD_VEC_INIT(ExecutionModeQuads, { CapabilityTessellation }); 2250e839d7e9d7e5a096949e39a4c6e00670c8dee64I-Jui (Ray) Sung ADD_VEC_INIT(ExecutionModeIsolines, { CapabilityTessellation }); 2260e839d7e9d7e5a096949e39a4c6e00670c8dee64I-Jui (Ray) Sung ADD_VEC_INIT(ExecutionModeOutputVertices, { CapabilityGeometry, CapabilityTessellation }); 2270e839d7e9d7e5a096949e39a4c6e00670c8dee64I-Jui (Ray) Sung ADD_VEC_INIT(ExecutionModeOutputPoints, { CapabilityGeometry }); 2280e839d7e9d7e5a096949e39a4c6e00670c8dee64I-Jui (Ray) Sung ADD_VEC_INIT(ExecutionModeOutputLineStrip, { CapabilityGeometry }); 2290e839d7e9d7e5a096949e39a4c6e00670c8dee64I-Jui (Ray) Sung ADD_VEC_INIT(ExecutionModeOutputTriangleStrip, { CapabilityGeometry }); 2300e839d7e9d7e5a096949e39a4c6e00670c8dee64I-Jui (Ray) Sung ADD_VEC_INIT(ExecutionModeVecTypeHint, { CapabilityKernel }); 2310e839d7e9d7e5a096949e39a4c6e00670c8dee64I-Jui (Ray) Sung ADD_VEC_INIT(ExecutionModeContractionOff, { CapabilityKernel }); 2320e839d7e9d7e5a096949e39a4c6e00670c8dee64I-Jui (Ray) Sung} 2330e839d7e9d7e5a096949e39a4c6e00670c8dee64I-Jui (Ray) Sung 2340e839d7e9d7e5a096949e39a4c6e00670c8dee64I-Jui (Ray) Sungtemplate<> inline void 2350e839d7e9d7e5a096949e39a4c6e00670c8dee64I-Jui (Ray) SungSPIRVMap<SPIRVMemoryModelKind, SPIRVCapVec>::init() { 2360e839d7e9d7e5a096949e39a4c6e00670c8dee64I-Jui (Ray) Sung ADD_VEC_INIT(MemoryModelSimple, { CapabilityShader }); 2370e839d7e9d7e5a096949e39a4c6e00670c8dee64I-Jui (Ray) Sung ADD_VEC_INIT(MemoryModelGLSL450, { CapabilityShader }); 2380e839d7e9d7e5a096949e39a4c6e00670c8dee64I-Jui (Ray) Sung ADD_VEC_INIT(MemoryModelOpenCL, { CapabilityKernel }); 2390e839d7e9d7e5a096949e39a4c6e00670c8dee64I-Jui (Ray) Sung} 2400e839d7e9d7e5a096949e39a4c6e00670c8dee64I-Jui (Ray) Sung 2410e839d7e9d7e5a096949e39a4c6e00670c8dee64I-Jui (Ray) Sungtemplate<> inline void 2420e839d7e9d7e5a096949e39a4c6e00670c8dee64I-Jui (Ray) SungSPIRVMap<SPIRVStorageClassKind, SPIRVCapVec>::init() { 2430e839d7e9d7e5a096949e39a4c6e00670c8dee64I-Jui (Ray) Sung ADD_VEC_INIT(StorageClassInput, { CapabilityShader }); 2440e839d7e9d7e5a096949e39a4c6e00670c8dee64I-Jui (Ray) Sung ADD_VEC_INIT(StorageClassUniform, { CapabilityShader }); 2450e839d7e9d7e5a096949e39a4c6e00670c8dee64I-Jui (Ray) Sung ADD_VEC_INIT(StorageClassOutput, { CapabilityShader }); 2460e839d7e9d7e5a096949e39a4c6e00670c8dee64I-Jui (Ray) Sung ADD_VEC_INIT(StorageClassPrivate, { CapabilityShader }); 2470e839d7e9d7e5a096949e39a4c6e00670c8dee64I-Jui (Ray) Sung ADD_VEC_INIT(StorageClassGeneric, { CapabilityGenericPointer }); 2480e839d7e9d7e5a096949e39a4c6e00670c8dee64I-Jui (Ray) Sung ADD_VEC_INIT(StorageClassPushConstant, { CapabilityShader }); 2490e839d7e9d7e5a096949e39a4c6e00670c8dee64I-Jui (Ray) Sung ADD_VEC_INIT(StorageClassAtomicCounter, { CapabilityAtomicStorage }); 2500e839d7e9d7e5a096949e39a4c6e00670c8dee64I-Jui (Ray) Sung} 2510e839d7e9d7e5a096949e39a4c6e00670c8dee64I-Jui (Ray) Sung 2520e839d7e9d7e5a096949e39a4c6e00670c8dee64I-Jui (Ray) Sungtemplate<> inline void 2530e839d7e9d7e5a096949e39a4c6e00670c8dee64I-Jui (Ray) SungSPIRVMap<SPIRVImageDimKind, SPIRVCapVec>::init() { 2540e839d7e9d7e5a096949e39a4c6e00670c8dee64I-Jui (Ray) Sung ADD_VEC_INIT(Dim1D, { CapabilitySampled1D }); 2550e839d7e9d7e5a096949e39a4c6e00670c8dee64I-Jui (Ray) Sung ADD_VEC_INIT(DimCube, { CapabilityShader }); 2560e839d7e9d7e5a096949e39a4c6e00670c8dee64I-Jui (Ray) Sung ADD_VEC_INIT(DimRect, { CapabilitySampledRect }); 2570e839d7e9d7e5a096949e39a4c6e00670c8dee64I-Jui (Ray) Sung ADD_VEC_INIT(DimBuffer, { CapabilitySampledBuffer }); 2580e839d7e9d7e5a096949e39a4c6e00670c8dee64I-Jui (Ray) Sung ADD_VEC_INIT(DimSubpassData, {CapabilityInputAttachment }); 2590e839d7e9d7e5a096949e39a4c6e00670c8dee64I-Jui (Ray) Sung} 2600e839d7e9d7e5a096949e39a4c6e00670c8dee64I-Jui (Ray) Sung 2610e839d7e9d7e5a096949e39a4c6e00670c8dee64I-Jui (Ray) Sungtemplate<> inline void 2620e839d7e9d7e5a096949e39a4c6e00670c8dee64I-Jui (Ray) SungSPIRVMap<ImageFormat, SPIRVCapVec>::init() { 2630e839d7e9d7e5a096949e39a4c6e00670c8dee64I-Jui (Ray) Sung ADD_VEC_INIT(ImageFormatRgba32f, { CapabilityShader }); 2640e839d7e9d7e5a096949e39a4c6e00670c8dee64I-Jui (Ray) Sung ADD_VEC_INIT(ImageFormatRgba16f, { CapabilityShader }); 2650e839d7e9d7e5a096949e39a4c6e00670c8dee64I-Jui (Ray) Sung ADD_VEC_INIT(ImageFormatR32f, { CapabilityShader }); 2660e839d7e9d7e5a096949e39a4c6e00670c8dee64I-Jui (Ray) Sung ADD_VEC_INIT(ImageFormatRgba8, { CapabilityShader }); 2670e839d7e9d7e5a096949e39a4c6e00670c8dee64I-Jui (Ray) Sung ADD_VEC_INIT(ImageFormatRgba8Snorm, { CapabilityShader }); 2680e839d7e9d7e5a096949e39a4c6e00670c8dee64I-Jui (Ray) Sung ADD_VEC_INIT(ImageFormatRg32f, { CapabilityStorageImageExtendedFormats }); 2690e839d7e9d7e5a096949e39a4c6e00670c8dee64I-Jui (Ray) Sung ADD_VEC_INIT(ImageFormatRg16f, { CapabilityStorageImageExtendedFormats }); 2700e839d7e9d7e5a096949e39a4c6e00670c8dee64I-Jui (Ray) Sung ADD_VEC_INIT(ImageFormatR11fG11fB10f, { CapabilityStorageImageExtendedFormats }); 2710e839d7e9d7e5a096949e39a4c6e00670c8dee64I-Jui (Ray) Sung ADD_VEC_INIT(ImageFormatR16f, { CapabilityStorageImageExtendedFormats }); 2720e839d7e9d7e5a096949e39a4c6e00670c8dee64I-Jui (Ray) Sung ADD_VEC_INIT(ImageFormatRgba16, { CapabilityStorageImageExtendedFormats }); 2730e839d7e9d7e5a096949e39a4c6e00670c8dee64I-Jui (Ray) Sung ADD_VEC_INIT(ImageFormatRgb10A2, { CapabilityStorageImageExtendedFormats }); 2740e839d7e9d7e5a096949e39a4c6e00670c8dee64I-Jui (Ray) Sung ADD_VEC_INIT(ImageFormatRg16, { CapabilityStorageImageExtendedFormats }); 2750e839d7e9d7e5a096949e39a4c6e00670c8dee64I-Jui (Ray) Sung ADD_VEC_INIT(ImageFormatRg8, { CapabilityStorageImageExtendedFormats }); 2760e839d7e9d7e5a096949e39a4c6e00670c8dee64I-Jui (Ray) Sung ADD_VEC_INIT(ImageFormatR16, { CapabilityStorageImageExtendedFormats }); 2770e839d7e9d7e5a096949e39a4c6e00670c8dee64I-Jui (Ray) Sung ADD_VEC_INIT(ImageFormatR8, { CapabilityStorageImageExtendedFormats }); 2780e839d7e9d7e5a096949e39a4c6e00670c8dee64I-Jui (Ray) Sung ADD_VEC_INIT(ImageFormatRgba16Snorm, { CapabilityStorageImageExtendedFormats }); 2790e839d7e9d7e5a096949e39a4c6e00670c8dee64I-Jui (Ray) Sung ADD_VEC_INIT(ImageFormatRg16Snorm, { CapabilityStorageImageExtendedFormats }); 2800e839d7e9d7e5a096949e39a4c6e00670c8dee64I-Jui (Ray) Sung ADD_VEC_INIT(ImageFormatRg8Snorm, { CapabilityStorageImageExtendedFormats }); 2810e839d7e9d7e5a096949e39a4c6e00670c8dee64I-Jui (Ray) Sung ADD_VEC_INIT(ImageFormatR16Snorm, { CapabilityStorageImageExtendedFormats }); 2820e839d7e9d7e5a096949e39a4c6e00670c8dee64I-Jui (Ray) Sung ADD_VEC_INIT(ImageFormatR8Snorm, { CapabilityStorageImageExtendedFormats }); 2830e839d7e9d7e5a096949e39a4c6e00670c8dee64I-Jui (Ray) Sung ADD_VEC_INIT(ImageFormatRgba32i, { CapabilityShader }); 2840e839d7e9d7e5a096949e39a4c6e00670c8dee64I-Jui (Ray) Sung ADD_VEC_INIT(ImageFormatRgba16i, { CapabilityShader }); 2850e839d7e9d7e5a096949e39a4c6e00670c8dee64I-Jui (Ray) Sung ADD_VEC_INIT(ImageFormatRgba8i, { CapabilityShader }); 2860e839d7e9d7e5a096949e39a4c6e00670c8dee64I-Jui (Ray) Sung ADD_VEC_INIT(ImageFormatR32i, { CapabilityShader }); 2870e839d7e9d7e5a096949e39a4c6e00670c8dee64I-Jui (Ray) Sung ADD_VEC_INIT(ImageFormatRg32i, { CapabilityStorageImageExtendedFormats }); 2880e839d7e9d7e5a096949e39a4c6e00670c8dee64I-Jui (Ray) Sung ADD_VEC_INIT(ImageFormatRg16i, { CapabilityStorageImageExtendedFormats }); 2890e839d7e9d7e5a096949e39a4c6e00670c8dee64I-Jui (Ray) Sung ADD_VEC_INIT(ImageFormatRg8i, { CapabilityStorageImageExtendedFormats }); 2900e839d7e9d7e5a096949e39a4c6e00670c8dee64I-Jui (Ray) Sung ADD_VEC_INIT(ImageFormatR16i, { CapabilityStorageImageExtendedFormats }); 2910e839d7e9d7e5a096949e39a4c6e00670c8dee64I-Jui (Ray) Sung ADD_VEC_INIT(ImageFormatR8i, { CapabilityStorageImageExtendedFormats }); 2920e839d7e9d7e5a096949e39a4c6e00670c8dee64I-Jui (Ray) Sung ADD_VEC_INIT(ImageFormatRgba32ui, { CapabilityShader }); 2930e839d7e9d7e5a096949e39a4c6e00670c8dee64I-Jui (Ray) Sung ADD_VEC_INIT(ImageFormatRgba16ui, { CapabilityShader }); 2940e839d7e9d7e5a096949e39a4c6e00670c8dee64I-Jui (Ray) Sung ADD_VEC_INIT(ImageFormatRgba8ui, { CapabilityShader }); 2950e839d7e9d7e5a096949e39a4c6e00670c8dee64I-Jui (Ray) Sung ADD_VEC_INIT(ImageFormatR32ui, { CapabilityShader }); 2960e839d7e9d7e5a096949e39a4c6e00670c8dee64I-Jui (Ray) Sung ADD_VEC_INIT(ImageFormatRgb10a2ui, { CapabilityStorageImageExtendedFormats }); 2970e839d7e9d7e5a096949e39a4c6e00670c8dee64I-Jui (Ray) Sung ADD_VEC_INIT(ImageFormatRg32ui, { CapabilityStorageImageExtendedFormats }); 2980e839d7e9d7e5a096949e39a4c6e00670c8dee64I-Jui (Ray) Sung ADD_VEC_INIT(ImageFormatRg16ui, { CapabilityStorageImageExtendedFormats }); 2990e839d7e9d7e5a096949e39a4c6e00670c8dee64I-Jui (Ray) Sung ADD_VEC_INIT(ImageFormatR16ui, { CapabilityStorageImageExtendedFormats }); 3000e839d7e9d7e5a096949e39a4c6e00670c8dee64I-Jui (Ray) Sung ADD_VEC_INIT(ImageFormatR8ui, { CapabilityStorageImageExtendedFormats }); 3010e839d7e9d7e5a096949e39a4c6e00670c8dee64I-Jui (Ray) Sung} 3020e839d7e9d7e5a096949e39a4c6e00670c8dee64I-Jui (Ray) Sung 3030e839d7e9d7e5a096949e39a4c6e00670c8dee64I-Jui (Ray) Sungtemplate<> inline void 3040e839d7e9d7e5a096949e39a4c6e00670c8dee64I-Jui (Ray) SungSPIRVMap<ImageOperandsMask, SPIRVCapVec>::init() { 3050e839d7e9d7e5a096949e39a4c6e00670c8dee64I-Jui (Ray) Sung ADD_VEC_INIT(ImageOperandsBiasMask, { CapabilityShader }); 3060e839d7e9d7e5a096949e39a4c6e00670c8dee64I-Jui (Ray) Sung ADD_VEC_INIT(ImageOperandsOffsetMask, { CapabilityImageGatherExtended }); 3070e839d7e9d7e5a096949e39a4c6e00670c8dee64I-Jui (Ray) Sung ADD_VEC_INIT(ImageOperandsMinLodMask, { CapabilityMinLod }); 3080e839d7e9d7e5a096949e39a4c6e00670c8dee64I-Jui (Ray) Sung} 3090e839d7e9d7e5a096949e39a4c6e00670c8dee64I-Jui (Ray) Sung 3100e839d7e9d7e5a096949e39a4c6e00670c8dee64I-Jui (Ray) Sungtemplate<> inline void 3110e839d7e9d7e5a096949e39a4c6e00670c8dee64I-Jui (Ray) SungSPIRVMap<Decoration, SPIRVCapVec>::init() { 3120e839d7e9d7e5a096949e39a4c6e00670c8dee64I-Jui (Ray) Sung ADD_VEC_INIT(DecorationRelaxedPrecision, { CapabilityShader }); 3130e839d7e9d7e5a096949e39a4c6e00670c8dee64I-Jui (Ray) Sung ADD_VEC_INIT(DecorationSpecId, { CapabilityShader }); 3140e839d7e9d7e5a096949e39a4c6e00670c8dee64I-Jui (Ray) Sung ADD_VEC_INIT(DecorationBlock, { CapabilityShader }); 3150e839d7e9d7e5a096949e39a4c6e00670c8dee64I-Jui (Ray) Sung ADD_VEC_INIT(DecorationBufferBlock, { CapabilityShader }); 3160e839d7e9d7e5a096949e39a4c6e00670c8dee64I-Jui (Ray) Sung ADD_VEC_INIT(DecorationRowMajor, { CapabilityMatrix }); 3170e839d7e9d7e5a096949e39a4c6e00670c8dee64I-Jui (Ray) Sung ADD_VEC_INIT(DecorationColMajor, { CapabilityMatrix }); 3180e839d7e9d7e5a096949e39a4c6e00670c8dee64I-Jui (Ray) Sung ADD_VEC_INIT(DecorationArrayStride, { CapabilityShader }); 3190e839d7e9d7e5a096949e39a4c6e00670c8dee64I-Jui (Ray) Sung ADD_VEC_INIT(DecorationMatrixStride, { CapabilityMatrix }); 3200e839d7e9d7e5a096949e39a4c6e00670c8dee64I-Jui (Ray) Sung ADD_VEC_INIT(DecorationGLSLShared, { CapabilityShader }); 3210e839d7e9d7e5a096949e39a4c6e00670c8dee64I-Jui (Ray) Sung ADD_VEC_INIT(DecorationGLSLPacked, { CapabilityShader }); 3220e839d7e9d7e5a096949e39a4c6e00670c8dee64I-Jui (Ray) Sung ADD_VEC_INIT(DecorationCPacked, { CapabilityKernel }); 3230e839d7e9d7e5a096949e39a4c6e00670c8dee64I-Jui (Ray) Sung ADD_VEC_INIT(DecorationNoPerspective, { CapabilityShader }); 3240e839d7e9d7e5a096949e39a4c6e00670c8dee64I-Jui (Ray) Sung ADD_VEC_INIT(DecorationFlat, { CapabilityShader }); 3250e839d7e9d7e5a096949e39a4c6e00670c8dee64I-Jui (Ray) Sung ADD_VEC_INIT(DecorationPatch, { CapabilityTessellation }); 3260e839d7e9d7e5a096949e39a4c6e00670c8dee64I-Jui (Ray) Sung ADD_VEC_INIT(DecorationCentroid, { CapabilityShader }); 3270e839d7e9d7e5a096949e39a4c6e00670c8dee64I-Jui (Ray) Sung ADD_VEC_INIT(DecorationSample, { CapabilitySampleRateShading }); 3280e839d7e9d7e5a096949e39a4c6e00670c8dee64I-Jui (Ray) Sung ADD_VEC_INIT(DecorationInvariant, { CapabilityShader }); 3290e839d7e9d7e5a096949e39a4c6e00670c8dee64I-Jui (Ray) Sung ADD_VEC_INIT(DecorationConstant, { CapabilityKernel }); 3300e839d7e9d7e5a096949e39a4c6e00670c8dee64I-Jui (Ray) Sung ADD_VEC_INIT(DecorationUniform, { CapabilityShader }); 3310e839d7e9d7e5a096949e39a4c6e00670c8dee64I-Jui (Ray) Sung ADD_VEC_INIT(DecorationSaturatedConversion, { CapabilityKernel }); 3320e839d7e9d7e5a096949e39a4c6e00670c8dee64I-Jui (Ray) Sung ADD_VEC_INIT(DecorationStream, { CapabilityGeometryStreams }); 3330e839d7e9d7e5a096949e39a4c6e00670c8dee64I-Jui (Ray) Sung ADD_VEC_INIT(DecorationLocation, { CapabilityShader }); 3340e839d7e9d7e5a096949e39a4c6e00670c8dee64I-Jui (Ray) Sung ADD_VEC_INIT(DecorationComponent, { CapabilityShader }); 3350e839d7e9d7e5a096949e39a4c6e00670c8dee64I-Jui (Ray) Sung ADD_VEC_INIT(DecorationIndex, { CapabilityShader }); 3360e839d7e9d7e5a096949e39a4c6e00670c8dee64I-Jui (Ray) Sung ADD_VEC_INIT(DecorationBinding, { CapabilityShader }); 3370e839d7e9d7e5a096949e39a4c6e00670c8dee64I-Jui (Ray) Sung ADD_VEC_INIT(DecorationDescriptorSet, { CapabilityShader }); 3380e839d7e9d7e5a096949e39a4c6e00670c8dee64I-Jui (Ray) Sung ADD_VEC_INIT(DecorationOffset, { CapabilityShader }); 3390e839d7e9d7e5a096949e39a4c6e00670c8dee64I-Jui (Ray) Sung ADD_VEC_INIT(DecorationXfbBuffer, { CapabilityTransformFeedback }); 3400e839d7e9d7e5a096949e39a4c6e00670c8dee64I-Jui (Ray) Sung ADD_VEC_INIT(DecorationXfbStride, { CapabilityTransformFeedback }); 3410e839d7e9d7e5a096949e39a4c6e00670c8dee64I-Jui (Ray) Sung ADD_VEC_INIT(DecorationFuncParamAttr, { CapabilityKernel }); 3420e839d7e9d7e5a096949e39a4c6e00670c8dee64I-Jui (Ray) Sung ADD_VEC_INIT(DecorationFPRoundingMode, { CapabilityKernel }); 3430e839d7e9d7e5a096949e39a4c6e00670c8dee64I-Jui (Ray) Sung ADD_VEC_INIT(DecorationFPFastMathMode, { CapabilityKernel }); 3440e839d7e9d7e5a096949e39a4c6e00670c8dee64I-Jui (Ray) Sung ADD_VEC_INIT(DecorationLinkageAttributes, { CapabilityLinkage }); 3450e839d7e9d7e5a096949e39a4c6e00670c8dee64I-Jui (Ray) Sung ADD_VEC_INIT(DecorationNoContraction, { CapabilityShader }); 3460e839d7e9d7e5a096949e39a4c6e00670c8dee64I-Jui (Ray) Sung ADD_VEC_INIT(DecorationInputAttachmentIndex, { CapabilityInputAttachment }); 3470e839d7e9d7e5a096949e39a4c6e00670c8dee64I-Jui (Ray) Sung ADD_VEC_INIT(DecorationAlignment, { CapabilityKernel }); 3480e839d7e9d7e5a096949e39a4c6e00670c8dee64I-Jui (Ray) Sung} 3490e839d7e9d7e5a096949e39a4c6e00670c8dee64I-Jui (Ray) Sung 3500e839d7e9d7e5a096949e39a4c6e00670c8dee64I-Jui (Ray) Sungtemplate<> inline void 3510e839d7e9d7e5a096949e39a4c6e00670c8dee64I-Jui (Ray) SungSPIRVMap<BuiltIn, SPIRVCapVec>::init() { 3520e839d7e9d7e5a096949e39a4c6e00670c8dee64I-Jui (Ray) Sung ADD_VEC_INIT(BuiltInPosition, { CapabilityShader }); 3530e839d7e9d7e5a096949e39a4c6e00670c8dee64I-Jui (Ray) Sung ADD_VEC_INIT(BuiltInPointSize, { CapabilityShader }); 3540e839d7e9d7e5a096949e39a4c6e00670c8dee64I-Jui (Ray) Sung ADD_VEC_INIT(BuiltInClipDistance, { CapabilityClipDistance }); 3550e839d7e9d7e5a096949e39a4c6e00670c8dee64I-Jui (Ray) Sung ADD_VEC_INIT(BuiltInCullDistance, { CapabilityCullDistance }); 3560e839d7e9d7e5a096949e39a4c6e00670c8dee64I-Jui (Ray) Sung ADD_VEC_INIT(BuiltInVertexId, { CapabilityShader }); 3570e839d7e9d7e5a096949e39a4c6e00670c8dee64I-Jui (Ray) Sung ADD_VEC_INIT(BuiltInInstanceId, { CapabilityShader }); 3580e839d7e9d7e5a096949e39a4c6e00670c8dee64I-Jui (Ray) Sung ADD_VEC_INIT(BuiltInPrimitiveId, { CapabilityGeometry, CapabilityTessellation }); 3590e839d7e9d7e5a096949e39a4c6e00670c8dee64I-Jui (Ray) Sung ADD_VEC_INIT(BuiltInInvocationId, { CapabilityGeometry, CapabilityTessellation }); 3600e839d7e9d7e5a096949e39a4c6e00670c8dee64I-Jui (Ray) Sung ADD_VEC_INIT(BuiltInLayer, { CapabilityGeometry }); 3610e839d7e9d7e5a096949e39a4c6e00670c8dee64I-Jui (Ray) Sung ADD_VEC_INIT(BuiltInViewportIndex, { CapabilityMultiViewport }); 3620e839d7e9d7e5a096949e39a4c6e00670c8dee64I-Jui (Ray) Sung ADD_VEC_INIT(BuiltInTessLevelOuter, { CapabilityTessellation }); 3630e839d7e9d7e5a096949e39a4c6e00670c8dee64I-Jui (Ray) Sung ADD_VEC_INIT(BuiltInTessLevelInner, { CapabilityTessellation }); 3640e839d7e9d7e5a096949e39a4c6e00670c8dee64I-Jui (Ray) Sung ADD_VEC_INIT(BuiltInTessCoord, { CapabilityTessellation }); 3650e839d7e9d7e5a096949e39a4c6e00670c8dee64I-Jui (Ray) Sung ADD_VEC_INIT(BuiltInPatchVertices, { CapabilityTessellation }); 3660e839d7e9d7e5a096949e39a4c6e00670c8dee64I-Jui (Ray) Sung ADD_VEC_INIT(BuiltInFragCoord, { CapabilityShader }); 3670e839d7e9d7e5a096949e39a4c6e00670c8dee64I-Jui (Ray) Sung ADD_VEC_INIT(BuiltInPointCoord, { CapabilityShader }); 3680e839d7e9d7e5a096949e39a4c6e00670c8dee64I-Jui (Ray) Sung ADD_VEC_INIT(BuiltInFrontFacing, { CapabilityShader }); 3690e839d7e9d7e5a096949e39a4c6e00670c8dee64I-Jui (Ray) Sung ADD_VEC_INIT(BuiltInSampleId, { CapabilitySampleRateShading }); 3700e839d7e9d7e5a096949e39a4c6e00670c8dee64I-Jui (Ray) Sung ADD_VEC_INIT(BuiltInSamplePosition, { CapabilitySampleRateShading }); 3710e839d7e9d7e5a096949e39a4c6e00670c8dee64I-Jui (Ray) Sung ADD_VEC_INIT(BuiltInSampleMask, { CapabilitySampleRateShading }); 3720e839d7e9d7e5a096949e39a4c6e00670c8dee64I-Jui (Ray) Sung ADD_VEC_INIT(BuiltInFragDepth, { CapabilityShader }); 3730e839d7e9d7e5a096949e39a4c6e00670c8dee64I-Jui (Ray) Sung ADD_VEC_INIT(BuiltInHelperInvocation, { CapabilityShader }); 3740e839d7e9d7e5a096949e39a4c6e00670c8dee64I-Jui (Ray) Sung ADD_VEC_INIT(BuiltInWorkDim, { CapabilityKernel }); 3750e839d7e9d7e5a096949e39a4c6e00670c8dee64I-Jui (Ray) Sung ADD_VEC_INIT(BuiltInGlobalSize, { CapabilityKernel }); 3760e839d7e9d7e5a096949e39a4c6e00670c8dee64I-Jui (Ray) Sung ADD_VEC_INIT(BuiltInEnqueuedWorkgroupSize, { CapabilityKernel }); 3770e839d7e9d7e5a096949e39a4c6e00670c8dee64I-Jui (Ray) Sung ADD_VEC_INIT(BuiltInGlobalOffset, { CapabilityKernel }); 3780e839d7e9d7e5a096949e39a4c6e00670c8dee64I-Jui (Ray) Sung ADD_VEC_INIT(BuiltInGlobalLinearId, { CapabilityKernel }); 3790e839d7e9d7e5a096949e39a4c6e00670c8dee64I-Jui (Ray) Sung ADD_VEC_INIT(BuiltInSubgroupSize, { CapabilityKernel }); 3800e839d7e9d7e5a096949e39a4c6e00670c8dee64I-Jui (Ray) Sung ADD_VEC_INIT(BuiltInSubgroupMaxSize, { CapabilityKernel }); 3810e839d7e9d7e5a096949e39a4c6e00670c8dee64I-Jui (Ray) Sung ADD_VEC_INIT(BuiltInNumSubgroups, { CapabilityKernel }); 3820e839d7e9d7e5a096949e39a4c6e00670c8dee64I-Jui (Ray) Sung ADD_VEC_INIT(BuiltInNumEnqueuedSubgroups, { CapabilityKernel }); 3830e839d7e9d7e5a096949e39a4c6e00670c8dee64I-Jui (Ray) Sung ADD_VEC_INIT(BuiltInSubgroupId, { CapabilityKernel }); 3840e839d7e9d7e5a096949e39a4c6e00670c8dee64I-Jui (Ray) Sung ADD_VEC_INIT(BuiltInSubgroupLocalInvocationId, { CapabilityKernel }); 3850e839d7e9d7e5a096949e39a4c6e00670c8dee64I-Jui (Ray) Sung ADD_VEC_INIT(BuiltInVertexIndex, { CapabilityShader }); 3860e839d7e9d7e5a096949e39a4c6e00670c8dee64I-Jui (Ray) Sung ADD_VEC_INIT(BuiltInInstanceIndex, { CapabilityShader }); 3870e839d7e9d7e5a096949e39a4c6e00670c8dee64I-Jui (Ray) Sung} 3880e839d7e9d7e5a096949e39a4c6e00670c8dee64I-Jui (Ray) Sung 3890e839d7e9d7e5a096949e39a4c6e00670c8dee64I-Jui (Ray) Sungtemplate<> inline void 3900e839d7e9d7e5a096949e39a4c6e00670c8dee64I-Jui (Ray) SungSPIRVMap<MemorySemanticsMask, SPIRVCapVec>::init() { 3910e839d7e9d7e5a096949e39a4c6e00670c8dee64I-Jui (Ray) Sung ADD_VEC_INIT(MemorySemanticsUniformMemoryMask, { CapabilityShader }); 3920e839d7e9d7e5a096949e39a4c6e00670c8dee64I-Jui (Ray) Sung ADD_VEC_INIT(MemorySemanticsAtomicCounterMemoryMask, { CapabilityAtomicStorage }); 3930e839d7e9d7e5a096949e39a4c6e00670c8dee64I-Jui (Ray) Sung} 3940e839d7e9d7e5a096949e39a4c6e00670c8dee64I-Jui (Ray) Sung 3950e839d7e9d7e5a096949e39a4c6e00670c8dee64I-Jui (Ray) Sung#undef ADD_VEC_INIT 3960e839d7e9d7e5a096949e39a4c6e00670c8dee64I-Jui (Ray) Sung 3970e839d7e9d7e5a096949e39a4c6e00670c8dee64I-Jui (Ray) Sunginline unsigned 3980e839d7e9d7e5a096949e39a4c6e00670c8dee64I-Jui (Ray) SunggetImageDimension(SPIRVImageDimKind K) { 3990e839d7e9d7e5a096949e39a4c6e00670c8dee64I-Jui (Ray) Sung switch(K){ 4000e839d7e9d7e5a096949e39a4c6e00670c8dee64I-Jui (Ray) Sung case Dim1D: return 1; 4010e839d7e9d7e5a096949e39a4c6e00670c8dee64I-Jui (Ray) Sung case Dim2D: return 2; 4020e839d7e9d7e5a096949e39a4c6e00670c8dee64I-Jui (Ray) Sung case Dim3D: return 3; 4030e839d7e9d7e5a096949e39a4c6e00670c8dee64I-Jui (Ray) Sung case DimCube: return 2; 4040e839d7e9d7e5a096949e39a4c6e00670c8dee64I-Jui (Ray) Sung case DimRect: return 2; 4050e839d7e9d7e5a096949e39a4c6e00670c8dee64I-Jui (Ray) Sung case DimBuffer: return 1; 4060e839d7e9d7e5a096949e39a4c6e00670c8dee64I-Jui (Ray) Sung default: return 0; 4070e839d7e9d7e5a096949e39a4c6e00670c8dee64I-Jui (Ray) Sung } 4080e839d7e9d7e5a096949e39a4c6e00670c8dee64I-Jui (Ray) Sung} 4090e839d7e9d7e5a096949e39a4c6e00670c8dee64I-Jui (Ray) Sung 4100e839d7e9d7e5a096949e39a4c6e00670c8dee64I-Jui (Ray) Sung/// Extract memory order part of SPIR-V memory semantics. 4110e839d7e9d7e5a096949e39a4c6e00670c8dee64I-Jui (Ray) Sunginline unsigned 4120e839d7e9d7e5a096949e39a4c6e00670c8dee64I-Jui (Ray) SungextractSPIRVMemOrderSemantic(unsigned Sema) { 4130e839d7e9d7e5a096949e39a4c6e00670c8dee64I-Jui (Ray) Sung return Sema & kSPIRVMemOrderSemanticMask; 4140e839d7e9d7e5a096949e39a4c6e00670c8dee64I-Jui (Ray) Sung} 4150e839d7e9d7e5a096949e39a4c6e00670c8dee64I-Jui (Ray) Sung 4160e839d7e9d7e5a096949e39a4c6e00670c8dee64I-Jui (Ray) Sung 4170e839d7e9d7e5a096949e39a4c6e00670c8dee64I-Jui (Ray) Sung} 4180e839d7e9d7e5a096949e39a4c6e00670c8dee64I-Jui (Ray) Sung 4190e839d7e9d7e5a096949e39a4c6e00670c8dee64I-Jui (Ray) Sung 4200e839d7e9d7e5a096949e39a4c6e00670c8dee64I-Jui (Ray) Sung#endif /* SPIRVENUM_HPP_ */ 421