| // Copyright 2019 The SwiftShader Authors. All Rights Reserved. | |
| // | |
| // 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. | |
| // This file contains code used to aid debugging. | |
| #include <spirv/unified1/spirv.hpp> | |
| #include "SpirvShader.hpp" | |
| namespace sw | |
| { | |
| std::string SpirvShader::OpcodeName(spv::Op op) | |
| { | |
| #ifndef NDEBUG | |
| switch(op){ | |
| case spv::OpNop: return "Nop"; | |
| case spv::OpUndef: return "Undef"; | |
| case spv::OpSourceContinued: return "SourceContinued"; | |
| case spv::OpSource: return "Source"; | |
| case spv::OpSourceExtension: return "SourceExtension"; | |
| case spv::OpName: return "Name"; | |
| case spv::OpMemberName: return "MemberName"; | |
| case spv::OpString: return "String"; | |
| case spv::OpLine: return "Line"; | |
| case spv::OpExtension: return "Extension"; | |
| case spv::OpExtInstImport: return "ExtInstImport"; | |
| case spv::OpExtInst: return "ExtInst"; | |
| case spv::OpMemoryModel: return "MemoryModel"; | |
| case spv::OpEntryPoint: return "EntryPoint"; | |
| case spv::OpExecutionMode: return "ExecutionMode"; | |
| case spv::OpCapability: return "Capability"; | |
| case spv::OpTypeVoid: return "TypeVoid"; | |
| case spv::OpTypeBool: return "TypeBool"; | |
| case spv::OpTypeInt: return "TypeInt"; | |
| case spv::OpTypeFloat: return "TypeFloat"; | |
| case spv::OpTypeVector: return "TypeVector"; | |
| case spv::OpTypeMatrix: return "TypeMatrix"; | |
| case spv::OpTypeImage: return "TypeImage"; | |
| case spv::OpTypeSampler: return "TypeSampler"; | |
| case spv::OpTypeSampledImage: return "TypeSampledImage"; | |
| case spv::OpTypeArray: return "TypeArray"; | |
| case spv::OpTypeRuntimeArray: return "TypeRuntimeArray"; | |
| case spv::OpTypeStruct: return "TypeStruct"; | |
| case spv::OpTypeOpaque: return "TypeOpaque"; | |
| case spv::OpTypePointer: return "TypePointer"; | |
| case spv::OpTypeFunction: return "TypeFunction"; | |
| case spv::OpTypeEvent: return "TypeEvent"; | |
| case spv::OpTypeDeviceEvent: return "TypeDeviceEvent"; | |
| case spv::OpTypeReserveId: return "TypeReserveId"; | |
| case spv::OpTypeQueue: return "TypeQueue"; | |
| case spv::OpTypePipe: return "TypePipe"; | |
| case spv::OpTypeForwardPointer: return "TypeForwardPointer"; | |
| case spv::OpConstantTrue: return "ConstantTrue"; | |
| case spv::OpConstantFalse: return "ConstantFalse"; | |
| case spv::OpConstant: return "Constant"; | |
| case spv::OpConstantComposite: return "ConstantComposite"; | |
| case spv::OpConstantSampler: return "ConstantSampler"; | |
| case spv::OpConstantNull: return "ConstantNull"; | |
| case spv::OpSpecConstantTrue: return "SpecConstantTrue"; | |
| case spv::OpSpecConstantFalse: return "SpecConstantFalse"; | |
| case spv::OpSpecConstant: return "SpecConstant"; | |
| case spv::OpSpecConstantComposite: return "SpecConstantComposite"; | |
| case spv::OpSpecConstantOp: return "SpecConstantOp"; | |
| case spv::OpFunction: return "Function"; | |
| case spv::OpFunctionParameter: return "FunctionParameter"; | |
| case spv::OpFunctionEnd: return "FunctionEnd"; | |
| case spv::OpFunctionCall: return "FunctionCall"; | |
| case spv::OpVariable: return "Variable"; | |
| case spv::OpImageTexelPointer: return "ImageTexelPointer"; | |
| case spv::OpLoad: return "Load"; | |
| case spv::OpStore: return "Store"; | |
| case spv::OpCopyMemory: return "CopyMemory"; | |
| case spv::OpCopyMemorySized: return "CopyMemorySized"; | |
| case spv::OpAccessChain: return "AccessChain"; | |
| case spv::OpInBoundsAccessChain: return "InBoundsAccessChain"; | |
| case spv::OpPtrAccessChain: return "PtrAccessChain"; | |
| case spv::OpArrayLength: return "ArrayLength"; | |
| case spv::OpGenericPtrMemSemantics: return "GenericPtrMemSemantics"; | |
| case spv::OpInBoundsPtrAccessChain: return "InBoundsPtrAccessChain"; | |
| case spv::OpDecorate: return "Decorate"; | |
| case spv::OpMemberDecorate: return "MemberDecorate"; | |
| case spv::OpDecorationGroup: return "DecorationGroup"; | |
| case spv::OpGroupDecorate: return "GroupDecorate"; | |
| case spv::OpGroupMemberDecorate: return "GroupMemberDecorate"; | |
| case spv::OpVectorExtractDynamic: return "VectorExtractDynamic"; | |
| case spv::OpVectorInsertDynamic: return "VectorInsertDynamic"; | |
| case spv::OpVectorShuffle: return "VectorShuffle"; | |
| case spv::OpCompositeConstruct: return "CompositeConstruct"; | |
| case spv::OpCompositeExtract: return "CompositeExtract"; | |
| case spv::OpCompositeInsert: return "CompositeInsert"; | |
| case spv::OpCopyObject: return "CopyObject"; | |
| case spv::OpTranspose: return "Transpose"; | |
| case spv::OpSampledImage: return "SampledImage"; | |
| case spv::OpImageSampleImplicitLod: return "ImageSampleImplicitLod"; | |
| case spv::OpImageSampleExplicitLod: return "ImageSampleExplicitLod"; | |
| case spv::OpImageSampleDrefImplicitLod: return "ImageSampleDrefImplicitLod"; | |
| case spv::OpImageSampleDrefExplicitLod: return "ImageSampleDrefExplicitLod"; | |
| case spv::OpImageSampleProjImplicitLod: return "ImageSampleProjImplicitLod"; | |
| case spv::OpImageSampleProjExplicitLod: return "ImageSampleProjExplicitLod"; | |
| case spv::OpImageSampleProjDrefImplicitLod: return "ImageSampleProjDrefImplicitLod"; | |
| case spv::OpImageSampleProjDrefExplicitLod: return "ImageSampleProjDrefExplicitLod"; | |
| case spv::OpImageFetch: return "ImageFetch"; | |
| case spv::OpImageGather: return "ImageGather"; | |
| case spv::OpImageDrefGather: return "ImageDrefGather"; | |
| case spv::OpImageRead: return "ImageRead"; | |
| case spv::OpImageWrite: return "ImageWrite"; | |
| case spv::OpImage: return "Image"; | |
| case spv::OpImageQueryFormat: return "ImageQueryFormat"; | |
| case spv::OpImageQueryOrder: return "ImageQueryOrder"; | |
| case spv::OpImageQuerySizeLod: return "ImageQuerySizeLod"; | |
| case spv::OpImageQuerySize: return "ImageQuerySize"; | |
| case spv::OpImageQueryLod: return "ImageQueryLod"; | |
| case spv::OpImageQueryLevels: return "ImageQueryLevels"; | |
| case spv::OpImageQuerySamples: return "ImageQuerySamples"; | |
| case spv::OpConvertFToU: return "ConvertFToU"; | |
| case spv::OpConvertFToS: return "ConvertFToS"; | |
| case spv::OpConvertSToF: return "ConvertSToF"; | |
| case spv::OpConvertUToF: return "ConvertUToF"; | |
| case spv::OpUConvert: return "UConvert"; | |
| case spv::OpSConvert: return "SConvert"; | |
| case spv::OpFConvert: return "FConvert"; | |
| case spv::OpQuantizeToF16: return "QuantizeToF16"; | |
| case spv::OpConvertPtrToU: return "ConvertPtrToU"; | |
| case spv::OpSatConvertSToU: return "SatConvertSToU"; | |
| case spv::OpSatConvertUToS: return "SatConvertUToS"; | |
| case spv::OpConvertUToPtr: return "ConvertUToPtr"; | |
| case spv::OpPtrCastToGeneric: return "PtrCastToGeneric"; | |
| case spv::OpGenericCastToPtr: return "GenericCastToPtr"; | |
| case spv::OpGenericCastToPtrExplicit: return "GenericCastToPtrExplicit"; | |
| case spv::OpBitcast: return "Bitcast"; | |
| case spv::OpSNegate: return "SNegate"; | |
| case spv::OpFNegate: return "FNegate"; | |
| case spv::OpIAdd: return "IAdd"; | |
| case spv::OpFAdd: return "FAdd"; | |
| case spv::OpISub: return "ISub"; | |
| case spv::OpFSub: return "FSub"; | |
| case spv::OpIMul: return "IMul"; | |
| case spv::OpFMul: return "FMul"; | |
| case spv::OpUDiv: return "UDiv"; | |
| case spv::OpSDiv: return "SDiv"; | |
| case spv::OpFDiv: return "FDiv"; | |
| case spv::OpUMod: return "UMod"; | |
| case spv::OpSRem: return "SRem"; | |
| case spv::OpSMod: return "SMod"; | |
| case spv::OpFRem: return "FRem"; | |
| case spv::OpFMod: return "FMod"; | |
| case spv::OpVectorTimesScalar: return "VectorTimesScalar"; | |
| case spv::OpMatrixTimesScalar: return "MatrixTimesScalar"; | |
| case spv::OpVectorTimesMatrix: return "VectorTimesMatrix"; | |
| case spv::OpMatrixTimesVector: return "MatrixTimesVector"; | |
| case spv::OpMatrixTimesMatrix: return "MatrixTimesMatrix"; | |
| case spv::OpOuterProduct: return "OuterProduct"; | |
| case spv::OpDot: return "Dot"; | |
| case spv::OpIAddCarry: return "IAddCarry"; | |
| case spv::OpISubBorrow: return "ISubBorrow"; | |
| case spv::OpUMulExtended: return "UMulExtended"; | |
| case spv::OpSMulExtended: return "SMulExtended"; | |
| case spv::OpAny: return "Any"; | |
| case spv::OpAll: return "All"; | |
| case spv::OpIsNan: return "IsNan"; | |
| case spv::OpIsInf: return "IsInf"; | |
| case spv::OpIsFinite: return "IsFinite"; | |
| case spv::OpIsNormal: return "IsNormal"; | |
| case spv::OpSignBitSet: return "SignBitSet"; | |
| case spv::OpLessOrGreater: return "LessOrGreater"; | |
| case spv::OpOrdered: return "Ordered"; | |
| case spv::OpUnordered: return "Unordered"; | |
| case spv::OpLogicalEqual: return "LogicalEqual"; | |
| case spv::OpLogicalNotEqual: return "LogicalNotEqual"; | |
| case spv::OpLogicalOr: return "LogicalOr"; | |
| case spv::OpLogicalAnd: return "LogicalAnd"; | |
| case spv::OpLogicalNot: return "LogicalNot"; | |
| case spv::OpSelect: return "Select"; | |
| case spv::OpIEqual: return "IEqual"; | |
| case spv::OpINotEqual: return "INotEqual"; | |
| case spv::OpUGreaterThan: return "UGreaterThan"; | |
| case spv::OpSGreaterThan: return "SGreaterThan"; | |
| case spv::OpUGreaterThanEqual: return "UGreaterThanEqual"; | |
| case spv::OpSGreaterThanEqual: return "SGreaterThanEqual"; | |
| case spv::OpULessThan: return "ULessThan"; | |
| case spv::OpSLessThan: return "SLessThan"; | |
| case spv::OpULessThanEqual: return "ULessThanEqual"; | |
| case spv::OpSLessThanEqual: return "SLessThanEqual"; | |
| case spv::OpFOrdEqual: return "FOrdEqual"; | |
| case spv::OpFUnordEqual: return "FUnordEqual"; | |
| case spv::OpFOrdNotEqual: return "FOrdNotEqual"; | |
| case spv::OpFUnordNotEqual: return "FUnordNotEqual"; | |
| case spv::OpFOrdLessThan: return "FOrdLessThan"; | |
| case spv::OpFUnordLessThan: return "FUnordLessThan"; | |
| case spv::OpFOrdGreaterThan: return "FOrdGreaterThan"; | |
| case spv::OpFUnordGreaterThan: return "FUnordGreaterThan"; | |
| case spv::OpFOrdLessThanEqual: return "FOrdLessThanEqual"; | |
| case spv::OpFUnordLessThanEqual: return "FUnordLessThanEqual"; | |
| case spv::OpFOrdGreaterThanEqual: return "FOrdGreaterThanEqual"; | |
| case spv::OpFUnordGreaterThanEqual: return "FUnordGreaterThanEqual"; | |
| case spv::OpShiftRightLogical: return "ShiftRightLogical"; | |
| case spv::OpShiftRightArithmetic: return "ShiftRightArithmetic"; | |
| case spv::OpShiftLeftLogical: return "ShiftLeftLogical"; | |
| case spv::OpBitwiseOr: return "BitwiseOr"; | |
| case spv::OpBitwiseXor: return "BitwiseXor"; | |
| case spv::OpBitwiseAnd: return "BitwiseAnd"; | |
| case spv::OpNot: return "Not"; | |
| case spv::OpBitFieldInsert: return "BitFieldInsert"; | |
| case spv::OpBitFieldSExtract: return "BitFieldSExtract"; | |
| case spv::OpBitFieldUExtract: return "BitFieldUExtract"; | |
| case spv::OpBitReverse: return "BitReverse"; | |
| case spv::OpBitCount: return "BitCount"; | |
| case spv::OpDPdx: return "DPdx"; | |
| case spv::OpDPdy: return "DPdy"; | |
| case spv::OpFwidth: return "Fwidth"; | |
| case spv::OpDPdxFine: return "DPdxFine"; | |
| case spv::OpDPdyFine: return "DPdyFine"; | |
| case spv::OpFwidthFine: return "FwidthFine"; | |
| case spv::OpDPdxCoarse: return "DPdxCoarse"; | |
| case spv::OpDPdyCoarse: return "DPdyCoarse"; | |
| case spv::OpFwidthCoarse: return "FwidthCoarse"; | |
| case spv::OpEmitVertex: return "EmitVertex"; | |
| case spv::OpEndPrimitive: return "EndPrimitive"; | |
| case spv::OpEmitStreamVertex: return "EmitStreamVertex"; | |
| case spv::OpEndStreamPrimitive: return "EndStreamPrimitive"; | |
| case spv::OpControlBarrier: return "ControlBarrier"; | |
| case spv::OpMemoryBarrier: return "MemoryBarrier"; | |
| case spv::OpAtomicLoad: return "AtomicLoad"; | |
| case spv::OpAtomicStore: return "AtomicStore"; | |
| case spv::OpAtomicExchange: return "AtomicExchange"; | |
| case spv::OpAtomicCompareExchange: return "AtomicCompareExchange"; | |
| case spv::OpAtomicCompareExchangeWeak: return "AtomicCompareExchangeWeak"; | |
| case spv::OpAtomicIIncrement: return "AtomicIIncrement"; | |
| case spv::OpAtomicIDecrement: return "AtomicIDecrement"; | |
| case spv::OpAtomicIAdd: return "AtomicIAdd"; | |
| case spv::OpAtomicISub: return "AtomicISub"; | |
| case spv::OpAtomicSMin: return "AtomicSMin"; | |
| case spv::OpAtomicUMin: return "AtomicUMin"; | |
| case spv::OpAtomicSMax: return "AtomicSMax"; | |
| case spv::OpAtomicUMax: return "AtomicUMax"; | |
| case spv::OpAtomicAnd: return "AtomicAnd"; | |
| case spv::OpAtomicOr: return "AtomicOr"; | |
| case spv::OpAtomicXor: return "AtomicXor"; | |
| case spv::OpPhi: return "Phi"; | |
| case spv::OpLoopMerge: return "LoopMerge"; | |
| case spv::OpSelectionMerge: return "SelectionMerge"; | |
| case spv::OpLabel: return "Label"; | |
| case spv::OpBranch: return "Branch"; | |
| case spv::OpBranchConditional: return "BranchConditional"; | |
| case spv::OpSwitch: return "Switch"; | |
| case spv::OpKill: return "Kill"; | |
| case spv::OpReturn: return "Return"; | |
| case spv::OpReturnValue: return "ReturnValue"; | |
| case spv::OpUnreachable: return "Unreachable"; | |
| case spv::OpLifetimeStart: return "LifetimeStart"; | |
| case spv::OpLifetimeStop: return "LifetimeStop"; | |
| case spv::OpGroupAsyncCopy: return "GroupAsyncCopy"; | |
| case spv::OpGroupWaitEvents: return "GroupWaitEvents"; | |
| case spv::OpGroupAll: return "GroupAll"; | |
| case spv::OpGroupAny: return "GroupAny"; | |
| case spv::OpGroupBroadcast: return "GroupBroadcast"; | |
| case spv::OpGroupIAdd: return "GroupIAdd"; | |
| case spv::OpGroupFAdd: return "GroupFAdd"; | |
| case spv::OpGroupFMin: return "GroupFMin"; | |
| case spv::OpGroupUMin: return "GroupUMin"; | |
| case spv::OpGroupSMin: return "GroupSMin"; | |
| case spv::OpGroupFMax: return "GroupFMax"; | |
| case spv::OpGroupUMax: return "GroupUMax"; | |
| case spv::OpGroupSMax: return "GroupSMax"; | |
| case spv::OpReadPipe: return "ReadPipe"; | |
| case spv::OpWritePipe: return "WritePipe"; | |
| case spv::OpReservedReadPipe: return "ReservedReadPipe"; | |
| case spv::OpReservedWritePipe: return "ReservedWritePipe"; | |
| case spv::OpReserveReadPipePackets: return "ReserveReadPipePackets"; | |
| case spv::OpReserveWritePipePackets: return "ReserveWritePipePackets"; | |
| case spv::OpCommitReadPipe: return "CommitReadPipe"; | |
| case spv::OpCommitWritePipe: return "CommitWritePipe"; | |
| case spv::OpIsValidReserveId: return "IsValidReserveId"; | |
| case spv::OpGetNumPipePackets: return "GetNumPipePackets"; | |
| case spv::OpGetMaxPipePackets: return "GetMaxPipePackets"; | |
| case spv::OpGroupReserveReadPipePackets: return "GroupReserveReadPipePackets"; | |
| case spv::OpGroupReserveWritePipePackets: return "GroupReserveWritePipePackets"; | |
| case spv::OpGroupCommitReadPipe: return "GroupCommitReadPipe"; | |
| case spv::OpGroupCommitWritePipe: return "GroupCommitWritePipe"; | |
| case spv::OpEnqueueMarker: return "EnqueueMarker"; | |
| case spv::OpEnqueueKernel: return "EnqueueKernel"; | |
| case spv::OpGetKernelNDrangeSubGroupCount: return "GetKernelNDrangeSubGroupCount"; | |
| case spv::OpGetKernelNDrangeMaxSubGroupSize: return "GetKernelNDrangeMaxSubGroupSize"; | |
| case spv::OpGetKernelWorkGroupSize: return "GetKernelWorkGroupSize"; | |
| case spv::OpGetKernelPreferredWorkGroupSizeMultiple: return "GetKernelPreferredWorkGroupSizeMultiple"; | |
| case spv::OpRetainEvent: return "RetainEvent"; | |
| case spv::OpReleaseEvent: return "ReleaseEvent"; | |
| case spv::OpCreateUserEvent: return "CreateUserEvent"; | |
| case spv::OpIsValidEvent: return "IsValidEvent"; | |
| case spv::OpSetUserEventStatus: return "SetUserEventStatus"; | |
| case spv::OpCaptureEventProfilingInfo: return "CaptureEventProfilingInfo"; | |
| case spv::OpGetDefaultQueue: return "GetDefaultQueue"; | |
| case spv::OpBuildNDRange: return "BuildNDRange"; | |
| case spv::OpImageSparseSampleImplicitLod: return "ImageSparseSampleImplicitLod"; | |
| case spv::OpImageSparseSampleExplicitLod: return "ImageSparseSampleExplicitLod"; | |
| case spv::OpImageSparseSampleDrefImplicitLod: return "ImageSparseSampleDrefImplicitLod"; | |
| case spv::OpImageSparseSampleDrefExplicitLod: return "ImageSparseSampleDrefExplicitLod"; | |
| case spv::OpImageSparseSampleProjImplicitLod: return "ImageSparseSampleProjImplicitLod"; | |
| case spv::OpImageSparseSampleProjExplicitLod: return "ImageSparseSampleProjExplicitLod"; | |
| case spv::OpImageSparseSampleProjDrefImplicitLod: return "ImageSparseSampleProjDrefImplicitLod"; | |
| case spv::OpImageSparseSampleProjDrefExplicitLod: return "ImageSparseSampleProjDrefExplicitLod"; | |
| case spv::OpImageSparseFetch: return "ImageSparseFetch"; | |
| case spv::OpImageSparseGather: return "ImageSparseGather"; | |
| case spv::OpImageSparseDrefGather: return "ImageSparseDrefGather"; | |
| case spv::OpImageSparseTexelsResident: return "ImageSparseTexelsResident"; | |
| case spv::OpNoLine: return "NoLine"; | |
| case spv::OpAtomicFlagTestAndSet: return "AtomicFlagTestAndSet"; | |
| case spv::OpAtomicFlagClear: return "AtomicFlagClear"; | |
| case spv::OpImageSparseRead: return "ImageSparseRead"; | |
| case spv::OpSizeOf: return "SizeOf"; | |
| case spv::OpTypePipeStorage: return "TypePipeStorage"; | |
| case spv::OpConstantPipeStorage: return "ConstantPipeStorage"; | |
| case spv::OpCreatePipeFromPipeStorage: return "CreatePipeFromPipeStorage"; | |
| case spv::OpGetKernelLocalSizeForSubgroupCount: return "GetKernelLocalSizeForSubgroupCount"; | |
| case spv::OpGetKernelMaxNumSubgroups: return "GetKernelMaxNumSubgroups"; | |
| case spv::OpTypeNamedBarrier: return "TypeNamedBarrier"; | |
| case spv::OpNamedBarrierInitialize: return "NamedBarrierInitialize"; | |
| case spv::OpMemoryNamedBarrier: return "MemoryNamedBarrier"; | |
| case spv::OpModuleProcessed: return "ModuleProcessed"; | |
| case spv::OpExecutionModeId: return "ExecutionModeId"; | |
| case spv::OpDecorateId: return "DecorateId"; | |
| case spv::OpGroupNonUniformElect: return "GroupNonUniformElect"; | |
| case spv::OpGroupNonUniformAll: return "GroupNonUniformAll"; | |
| case spv::OpGroupNonUniformAny: return "GroupNonUniformAny"; | |
| case spv::OpGroupNonUniformAllEqual: return "GroupNonUniformAllEqual"; | |
| case spv::OpGroupNonUniformBroadcast: return "GroupNonUniformBroadcast"; | |
| case spv::OpGroupNonUniformBroadcastFirst: return "GroupNonUniformBroadcastFirst"; | |
| case spv::OpGroupNonUniformBallot: return "GroupNonUniformBallot"; | |
| case spv::OpGroupNonUniformInverseBallot: return "GroupNonUniformInverseBallot"; | |
| case spv::OpGroupNonUniformBallotBitExtract: return "GroupNonUniformBallotBitExtract"; | |
| case spv::OpGroupNonUniformBallotBitCount: return "GroupNonUniformBallotBitCount"; | |
| case spv::OpGroupNonUniformBallotFindLSB: return "GroupNonUniformBallotFindLSB"; | |
| case spv::OpGroupNonUniformBallotFindMSB: return "GroupNonUniformBallotFindMSB"; | |
| case spv::OpGroupNonUniformShuffle: return "GroupNonUniformShuffle"; | |
| case spv::OpGroupNonUniformShuffleXor: return "GroupNonUniformShuffleXor"; | |
| case spv::OpGroupNonUniformShuffleUp: return "GroupNonUniformShuffleUp"; | |
| case spv::OpGroupNonUniformShuffleDown: return "GroupNonUniformShuffleDown"; | |
| case spv::OpGroupNonUniformIAdd: return "GroupNonUniformIAdd"; | |
| case spv::OpGroupNonUniformFAdd: return "GroupNonUniformFAdd"; | |
| case spv::OpGroupNonUniformIMul: return "GroupNonUniformIMul"; | |
| case spv::OpGroupNonUniformFMul: return "GroupNonUniformFMul"; | |
| case spv::OpGroupNonUniformSMin: return "GroupNonUniformSMin"; | |
| case spv::OpGroupNonUniformUMin: return "GroupNonUniformUMin"; | |
| case spv::OpGroupNonUniformFMin: return "GroupNonUniformFMin"; | |
| case spv::OpGroupNonUniformSMax: return "GroupNonUniformSMax"; | |
| case spv::OpGroupNonUniformUMax: return "GroupNonUniformUMax"; | |
| case spv::OpGroupNonUniformFMax: return "GroupNonUniformFMax"; | |
| case spv::OpGroupNonUniformBitwiseAnd: return "GroupNonUniformBitwiseAnd"; | |
| case spv::OpGroupNonUniformBitwiseOr: return "GroupNonUniformBitwiseOr"; | |
| case spv::OpGroupNonUniformBitwiseXor: return "GroupNonUniformBitwiseXor"; | |
| case spv::OpGroupNonUniformLogicalAnd: return "GroupNonUniformLogicalAnd"; | |
| case spv::OpGroupNonUniformLogicalOr: return "GroupNonUniformLogicalOr"; | |
| case spv::OpGroupNonUniformLogicalXor: return "GroupNonUniformLogicalXor"; | |
| case spv::OpGroupNonUniformQuadBroadcast: return "GroupNonUniformQuadBroadcast"; | |
| case spv::OpGroupNonUniformQuadSwap: return "GroupNonUniformQuadSwap"; | |
| case spv::OpSubgroupBallotKHR: return "SubgroupBallotKHR"; | |
| case spv::OpSubgroupFirstInvocationKHR: return "SubgroupFirstInvocationKHR"; | |
| case spv::OpSubgroupAllKHR: return "SubgroupAllKHR"; | |
| case spv::OpSubgroupAnyKHR: return "SubgroupAnyKHR"; | |
| case spv::OpSubgroupAllEqualKHR: return "SubgroupAllEqualKHR"; | |
| case spv::OpSubgroupReadInvocationKHR: return "SubgroupReadInvocationKHR"; | |
| case spv::OpGroupIAddNonUniformAMD: return "GroupIAddNonUniformAMD"; | |
| case spv::OpGroupFAddNonUniformAMD: return "GroupFAddNonUniformAMD"; | |
| case spv::OpGroupFMinNonUniformAMD: return "GroupFMinNonUniformAMD"; | |
| case spv::OpGroupUMinNonUniformAMD: return "GroupUMinNonUniformAMD"; | |
| case spv::OpGroupSMinNonUniformAMD: return "GroupSMinNonUniformAMD"; | |
| case spv::OpGroupFMaxNonUniformAMD: return "GroupFMaxNonUniformAMD"; | |
| case spv::OpGroupUMaxNonUniformAMD: return "GroupUMaxNonUniformAMD"; | |
| case spv::OpGroupSMaxNonUniformAMD: return "GroupSMaxNonUniformAMD"; | |
| case spv::OpFragmentMaskFetchAMD: return "FragmentMaskFetchAMD"; | |
| case spv::OpFragmentFetchAMD: return "FragmentFetchAMD"; | |
| case spv::OpImageSampleFootprintNV: return "ImageSampleFootprintNV"; | |
| case spv::OpGroupNonUniformPartitionNV: return "GroupNonUniformPartitionNV"; | |
| case spv::OpWritePackedPrimitiveIndices4x8NV: return "WritePackedPrimitiveIndices4x8NV"; | |
| case spv::OpReportIntersectionNV: return "ReportIntersectionNV"; | |
| case spv::OpIgnoreIntersectionNV: return "IgnoreIntersectionNV"; | |
| case spv::OpTerminateRayNV: return "TerminateRayNV"; | |
| case spv::OpTraceNV: return "TraceNV"; | |
| case spv::OpTypeAccelerationStructureNV: return "TypeAccelerationStructureNV"; | |
| case spv::OpExecuteCallableNV: return "ExecuteCallableNV"; | |
| case spv::OpSubgroupShuffleINTEL: return "SubgroupShuffleINTEL"; | |
| case spv::OpSubgroupShuffleDownINTEL: return "SubgroupShuffleDownINTEL"; | |
| case spv::OpSubgroupShuffleUpINTEL: return "SubgroupShuffleUpINTEL"; | |
| case spv::OpSubgroupShuffleXorINTEL: return "SubgroupShuffleXorINTEL"; | |
| case spv::OpSubgroupBlockReadINTEL: return "SubgroupBlockReadINTEL"; | |
| case spv::OpSubgroupBlockWriteINTEL: return "SubgroupBlockWriteINTEL"; | |
| case spv::OpSubgroupImageBlockReadINTEL: return "SubgroupImageBlockReadINTEL"; | |
| case spv::OpSubgroupImageBlockWriteINTEL: return "SubgroupImageBlockWriteINTEL"; | |
| case spv::OpDecorateStringGOOGLE: return "DecorateStringGOOGLE"; | |
| case spv::OpMemberDecorateStringGOOGLE: return "MemberDecorateStringGOOGLE"; | |
| case spv::OpMax: return "Max"; | |
| default: | |
| break; | |
| } | |
| #endif // NDEBUG | |
| return "Opcode<" + std::to_string(static_cast<int>(op)) + ">"; | |
| } | |
| } // namespace sw |