fir-0.1.0.0: src/SPIRV/Operation.hs
{-# LANGUAGE DerivingStrategies #-}
{-# LANGUAGE PatternSynonyms #-}
{-|
Module: SPIRV.Operation
Raw SPIR-V OpCodes. Used only at the value-level.
See "SPIRV.PrimOp" which categorises operations.
-}
module SPIRV.Operation where
-- base
import Data.Word
( Word16, Word32 )
-- fir
import SPIRV.Extension
( ExtInst(GLSL, OpenCL) )
import qualified SPIRV.Extension
( ExtInst(DebugPrintf) )
--------------------------------------------------
-- operation data type
data Operation
= Code Word16
| ExtCode ExtInst Word32
deriving stock Eq
instance Show Operation where
show op@(Code _) = showOperation op
show op@(ExtCode ext _) = "Ext(" ++ show ext ++") " ++ showOperation op
--------------------------------------------------
-- operations
pattern Nop :: Operation
pattern Nop = Code 0
pattern Undef :: Operation
pattern Undef = Code 1
-- (optional) annotations
pattern SourceContinued :: Operation
pattern SourceContinued = Code 2
pattern Source :: Operation
pattern Source = Code 3
pattern SourceExtension :: Operation
pattern SourceExtension = Code 4
pattern Name :: Operation
pattern Name = Code 5
pattern MemberName :: Operation
pattern MemberName = Code 6
pattern String :: Operation
pattern String = Code 7
pattern Line :: Operation
pattern Line = Code 8
-- no 9
-- extensions
pattern Extension :: Operation
pattern Extension = Code 10
pattern ExtInstImport :: Operation
pattern ExtInstImport = Code 11
pattern ExtInst :: Operation
pattern ExtInst = Code 12
-- no 13
pattern MemoryModel :: Operation
pattern MemoryModel = Code 14
pattern EntryPoint :: Operation
pattern EntryPoint = Code 15
pattern ExecutionMode :: Operation
pattern ExecutionMode = Code 16
pattern Capability :: Operation
pattern Capability = Code 17
-- no 18
-- type constructors
pattern TypeVoid :: Operation
pattern TypeVoid = Code 19
pattern TypeBool :: Operation
pattern TypeBool = Code 20
pattern TypeInt :: Operation
pattern TypeInt = Code 21
pattern TypeFloat :: Operation
pattern TypeFloat = Code 22
pattern TypeVector :: Operation
pattern TypeVector = Code 23
pattern TypeMatrix :: Operation
pattern TypeMatrix = Code 24
pattern TypeImage :: Operation
pattern TypeImage = Code 25
pattern TypeSampler :: Operation
pattern TypeSampler = Code 26
pattern TypeSampledImage :: Operation
pattern TypeSampledImage = Code 27
pattern TypeArray :: Operation
pattern TypeArray = Code 28
pattern TypeRuntimeArray :: Operation
pattern TypeRuntimeArray = Code 29
pattern TypeStruct :: Operation
pattern TypeStruct = Code 30
pattern TypeOpaque :: Operation
pattern TypeOpaque = Code 31
pattern TypePointer :: Operation
pattern TypePointer = Code 32
pattern TypeFunction :: Operation
pattern TypeFunction = Code 33
pattern TypeEvent :: Operation
pattern TypeEvent = Code 34
pattern TypeDeviceEvent :: Operation
pattern TypeDeviceEvent = Code 35
pattern TypeReserveId :: Operation
pattern TypeReserveId = Code 36
pattern TypeQueue :: Operation
pattern TypeQueue = Code 37
pattern TypePipe :: Operation
pattern TypePipe = Code 38
pattern TypeForwardPointer :: Operation
pattern TypeForwardPointer = Code 39
-- no 40
-- constants
pattern ConstantTrue :: Operation
pattern ConstantTrue = Code 41
pattern ConstantFalse :: Operation
pattern ConstantFalse = Code 42
pattern Constant :: Operation
pattern Constant = Code 43
pattern ConstantComposite :: Operation
pattern ConstantComposite = Code 44
pattern ConstantSampler :: Operation
pattern ConstantSampler = Code 45
pattern ConstantNull :: Operation
pattern ConstantNull = Code 46
-- no 47
-- specialisation constants
pattern SpecConstantTrue :: Operation
pattern SpecConstantTrue = Code 48
pattern SpecConstantFalse :: Operation
pattern SpecConstantFalse = Code 49
pattern SpecConstant :: Operation
pattern SpecConstant = Code 50
pattern SpecConstantComposite :: Operation
pattern SpecConstantComposite = Code 51
pattern SpecConstantOp :: Operation
pattern SpecConstantOp = Code 52
-- no 53
-- functions
pattern Function :: Operation
pattern Function = Code 54
pattern FunctionParameter :: Operation
pattern FunctionParameter = Code 55
pattern FunctionEnd :: Operation
pattern FunctionEnd = Code 56
pattern FunctionCall :: Operation
pattern FunctionCall = Code 57
-- no 58
-- variables & pointers
pattern Variable :: Operation
pattern Variable = Code 59
pattern ImageTexelPointer :: Operation
pattern ImageTexelPointer = Code 60
pattern Load :: Operation
pattern Load = Code 61
pattern Store :: Operation
pattern Store = Code 62
pattern CopyMemory :: Operation
pattern CopyMemory = Code 63
pattern CopyMemorySized :: Operation
pattern CopyMemorySized = Code 54
pattern AccessChain :: Operation
pattern AccessChain = Code 65
pattern InBoundsAccessChain :: Operation
pattern InBoundsAccessChain = Code 66
pattern PtrAccessChain :: Operation
pattern PtrAccessChain = Code 67
pattern ArrayLength :: Operation
pattern ArrayLength = Code 68
pattern GenericPtrMemSemantics :: Operation
pattern GenericPtrMemSemantics = Code 69
pattern InBoundsPtrAccessChain :: Operation
pattern InBoundsPtrAccessChain = Code 70
-- decorations
pattern Decorate :: Operation
pattern Decorate = Code 71
pattern MemberDecorate :: Operation
pattern MemberDecorate = Code 72
pattern DecorationGroup :: Operation
pattern DecorationGroup = Code 73
pattern GroupDecorate :: Operation
pattern GroupDecorate = Code 74
pattern GroupMemberDecorate :: Operation
pattern GroupMemberDecorate = Code 75
-- no 76
-- vector indexing
pattern VectorExtractDynamic :: Operation
pattern VectorExtractDynamic = Code 77
pattern VectorInsertDynamic :: Operation
pattern VectorInsertDynamic = Code 78
pattern VectorShuffle :: Operation
pattern VectorShuffle = Code 79
-- structs
pattern CompositeConstruct :: Operation
pattern CompositeConstruct = Code 80
pattern CompositeExtract :: Operation
pattern CompositeExtract = Code 81
pattern CompositeInsert :: Operation
pattern CompositeInsert = Code 82
pattern CopyObject :: Operation
pattern CopyObject = Code 83
pattern CopyLogical :: Operation
pattern CopyLogical = Code 400
-- operation 84 (Transpose) defined later (141.5)
-- no 85
-- image instructions
pattern SampledImage :: Operation
pattern SampledImage = Code 86
pattern ImageSampleImplicitLod :: Operation
pattern ImageSampleImplicitLod = Code 87
pattern ImageSampleExplicitLod :: Operation
pattern ImageSampleExplicitLod = Code 88
pattern ImageSampleDrefImplicitLod :: Operation
pattern ImageSampleDrefImplicitLod = Code 89
pattern ImageSampleDrefExplicitLod :: Operation
pattern ImageSampleDrefExplicitLod = Code 90
pattern ImageSampleProjImplicitLod :: Operation
pattern ImageSampleProjImplicitLod = Code 91
pattern ImageSampleProjExplicitLod :: Operation
pattern ImageSampleProjExplicitLod = Code 92
pattern ImageSampleProjDrefImplicitLod :: Operation
pattern ImageSampleProjDrefImplicitLod = Code 93
pattern ImageSampleProjDrefExplicitLod :: Operation
pattern ImageSampleProjDrefExplicitLod = Code 94
pattern ImageFetch :: Operation
pattern ImageFetch = Code 95
pattern ImageGather :: Operation
pattern ImageGather = Code 96
pattern ImageDrefGather :: Operation
pattern ImageDrefGather = Code 97
pattern ImageRead :: Operation
pattern ImageRead = Code 98
pattern ImageWrite :: Operation
pattern ImageWrite = Code 99
pattern Image :: Operation
pattern Image = Code 100
-- image queries
pattern ImageQueryFormat :: Operation
pattern ImageQueryFormat = Code 101
pattern ImageQueryOrder :: Operation
pattern ImageQueryOrder = Code 102
pattern ImageQuerySizeLod :: Operation
pattern ImageQuerySizeLod = Code 103
pattern ImageQuerySize :: Operation
pattern ImageQuerySize = Code 104
pattern ImageQueryLod :: Operation
pattern ImageQueryLod = Code 105
pattern ImageQueryLevels :: Operation
pattern ImageQueryLevels = Code 106
pattern ImageQuerySamples :: Operation
pattern ImageQuerySamples = Code 107
-- sparse image instructions
-- no 108
-- conversion instructions
pattern ConvertFToU :: Operation
pattern ConvertFToU = Code 109
pattern ConvertFToS :: Operation
pattern ConvertFToS = Code 110
pattern ConvertSToF :: Operation
pattern ConvertSToF = Code 111
pattern ConvertUToF :: Operation
pattern ConvertUToF = Code 112
pattern UConvert :: Operation
pattern UConvert = Code 113
pattern SConvert :: Operation
pattern SConvert = Code 114
pattern FConvert :: Operation
pattern FConvert = Code 115
pattern SatConvertSToU :: Operation
pattern SatConvertSToU = Code 118
pattern SatConvertUToS :: Operation
pattern SatConvertUToS = Code 119
-- pointer casting
-- bit cast
pattern BitCast :: Operation
pattern BitCast = Code 124
-- no 125
-- numeric instructions
pattern SNegate :: Operation
pattern SNegate = Code 126
pattern FNegate :: Operation
pattern FNegate = Code 127
pattern IAdd :: Operation
pattern IAdd = Code 128
pattern FAdd :: Operation
pattern FAdd = Code 129
pattern ISub :: Operation
pattern ISub = Code 130
pattern FSub :: Operation
pattern FSub = Code 131
pattern IMul :: Operation
pattern IMul = Code 132
pattern FMul :: Operation
pattern FMul = Code 133
pattern UDiv :: Operation
pattern UDiv = Code 134
pattern SDiv :: Operation
pattern SDiv = Code 135
pattern FDiv :: Operation
pattern FDiv = Code 136
pattern UMod :: Operation
pattern UMod = Code 137
pattern SRem :: Operation
pattern SRem = Code 138
pattern SMod :: Operation
pattern SMod = Code 139
pattern FRem :: Operation
pattern FRem = Code 140
pattern FMod :: Operation
pattern FMod = Code 141
-- vector and matrix instructions
pattern Transpose :: Operation
pattern Transpose = Code 84
pattern VectorTimesScalar :: Operation
pattern VectorTimesScalar = Code 142
pattern MatrixTimesScalar :: Operation
pattern MatrixTimesScalar = Code 143
pattern VectorTimesMatrix :: Operation
pattern VectorTimesMatrix = Code 144
pattern MatrixTimesVector :: Operation
pattern MatrixTimesVector = Code 145
pattern MatrixTimesMatrix :: Operation
pattern MatrixTimesMatrix = Code 146
pattern OuterProduct :: Operation
pattern OuterProduct = Code 147
pattern Dot :: Operation
pattern Dot = Code 148
-- IEEE floating point logical instructions
pattern IsNan :: Operation
pattern IsNan = Code 156
pattern IsInf :: Operation
pattern IsInf = Code 157
-- boolean instructions
pattern LogicalEqual :: Operation
pattern LogicalEqual = Code 164
pattern LogicalNotEqual :: Operation
pattern LogicalNotEqual = Code 165
pattern LogicalOr :: Operation
pattern LogicalOr = Code 166
pattern LogicalAnd :: Operation
pattern LogicalAnd = Code 167
pattern LogicalNot :: Operation
pattern LogicalNot = Code 168
pattern Select :: Operation
pattern Select = Code 169
-- integer comparisons
pattern IEqual :: Operation
pattern IEqual = Code 170
pattern INotEqual :: Operation
pattern INotEqual = Code 171
pattern UGreaterThan :: Operation
pattern UGreaterThan = Code 172
pattern SGreaterThan :: Operation
pattern SGreaterThan = Code 173
pattern UGreaterThanEqual :: Operation
pattern UGreaterThanEqual = Code 174
pattern SGreaterThanEqual :: Operation
pattern SGreaterThanEqual = Code 175
pattern ULessThan :: Operation
pattern ULessThan = Code 176
pattern SLessThan :: Operation
pattern SLessThan = Code 177
pattern ULessThanEqual :: Operation
pattern ULessThanEqual = Code 178
pattern SLessThanEqual :: Operation
pattern SLessThanEqual = Code 179
-- floating point comparisons
pattern FOrdEqual :: Operation
pattern FOrdEqual = Code 180
pattern FUnordEqual :: Operation
pattern FUnordEqual = Code 181
pattern FOrdNotEqual :: Operation
pattern FOrdNotEqual = Code 182
pattern FUnordNotEqual :: Operation
pattern FUnordNotEqual = Code 183
pattern FOrdLessThan :: Operation
pattern FOrdLessThan = Code 184
pattern FUnordLessThan :: Operation
pattern FUnordLessThan = Code 185
pattern FOrdGreaterThan :: Operation
pattern FOrdGreaterThan = Code 186
pattern FUnordGreaterThan :: Operation
pattern FUnordGreaterThan = Code 187
pattern FOrdLessThanEqual :: Operation
pattern FOrdLessThanEqual = Code 188
pattern FUnordLessThanEqual :: Operation
pattern FUnordLessThanEqual = Code 189
pattern FOrdGreaterThanEqual :: Operation
pattern FOrdGreaterThanEqual = Code 190
pattern FUnordGreaterThanEqual :: Operation
pattern FUnordGreaterThanEqual = Code 191
-- bitwise operations
pattern ShiftRightLogical :: Operation
pattern ShiftRightLogical = Code 194
pattern ShiftRightArithmetic :: Operation
pattern ShiftRightArithmetic = Code 195
pattern ShiftLeftLogical :: Operation
pattern ShiftLeftLogical = Code 196
pattern BitwiseOr :: Operation
pattern BitwiseOr = Code 197
pattern BitwiseXor :: Operation
pattern BitwiseXor = Code 198
pattern BitwiseAnd :: Operation
pattern BitwiseAnd = Code 199
pattern Not :: Operation
pattern Not = Code 200
pattern BitReverse :: Operation
pattern BitReverse = Code 204
-- geometry primitives
pattern EmitVertex :: Operation
pattern EmitVertex = Code 218
pattern EndPrimitive :: Operation
pattern EndPrimitive = Code 219
pattern EmitStreamVertex :: Operation
pattern EmitStreamVertex = Code 220
pattern EndStreamPrimitive :: Operation
pattern EndStreamPrimitive = Code 221
-- memory synchronisation
pattern ControlBarrier :: Operation
pattern ControlBarrier = Code 224
pattern MemoryBarrier :: Operation
pattern MemoryBarrier = Code 225
-- atomic instructions
pattern AtomicLoad :: Operation
pattern AtomicLoad = Code 227
pattern AtomicStore :: Operation
pattern AtomicStore = Code 228
pattern AtomicExchange :: Operation
pattern AtomicExchange = Code 229
pattern AtomicCompareExchange :: Operation
pattern AtomicCompareExchange = Code 230
pattern AtomicIIncrement :: Operation
pattern AtomicIIncrement = Code 232
pattern AtomicIDecrement :: Operation
pattern AtomicIDecrement = Code 233
pattern AtomicIAdd :: Operation
pattern AtomicIAdd = Code 234
pattern AtomicISub :: Operation
pattern AtomicISub = Code 235
pattern AtomicSMin :: Operation
pattern AtomicSMin = Code 236
pattern AtomicUMin :: Operation
pattern AtomicUMin = Code 237
pattern AtomicSMax :: Operation
pattern AtomicSMax = Code 238
pattern AtomicUMax :: Operation
pattern AtomicUMax = Code 239
pattern AtomicAnd :: Operation
pattern AtomicAnd = Code 240
pattern AtomicOr :: Operation
pattern AtomicOr = Code 241
pattern AtomicXor :: Operation
pattern AtomicXor = Code 242
pattern AtomicFMinEXT :: Operation
pattern AtomicFMinEXT = Code 5614
pattern AtomicFMaxEXT :: Operation
pattern AtomicFMaxEXT = Code 5615
pattern AtomicFAddEXT :: Operation
pattern AtomicFAddEXT = Code 6035
-- group and subgroup operations
pattern GroupAsyncCopy :: Operation
pattern GroupAsyncCopy = Code 259
pattern GroupWaitEvents :: Operation
pattern GroupWaitEvents = Code 260
pattern GroupAll :: Operation
pattern GroupAll = Code 261
pattern GroupAny :: Operation
pattern GroupAny = Code 262
pattern GroupBroadcast :: Operation
pattern GroupBroadcast = Code 263
pattern GroupIAdd :: Operation
pattern GroupIAdd = Code 264
pattern GroupFAdd :: Operation
pattern GroupFAdd = Code 265
pattern GroupFMin :: Operation
pattern GroupFMin = Code 266
pattern GroupUMin :: Operation
pattern GroupUMin = Code 267
pattern GroupSMin :: Operation
pattern GroupSMin = Code 268
pattern GroupFMax :: Operation
pattern GroupFMax = Code 269
pattern GroupUMax :: Operation
pattern GroupUMax = Code 270
pattern GroupSMax :: Operation
pattern GroupSMax = Code 271
-- control flow
pattern Phi :: Operation
pattern Phi = Code 245
pattern LoopMerge :: Operation
pattern LoopMerge = Code 246
pattern SelectionMerge :: Operation
pattern SelectionMerge = Code 247
pattern Label :: Operation
pattern Label = Code 248
pattern Branch :: Operation
pattern Branch = Code 249
pattern BranchConditional :: Operation
pattern BranchConditional = Code 250
pattern Switch :: Operation
pattern Switch = Code 251
pattern Kill :: Operation
pattern Kill = Code 252
pattern Return :: Operation
pattern Return = Code 253
pattern ReturnValue :: Operation
pattern ReturnValue = Code 254
pattern Unreachable :: Operation
pattern Unreachable = Code 255
-- non uniform group instructions
pattern GroupNonUniformElect :: Operation
pattern GroupNonUniformElect = Code 333
pattern GroupNonUniformAll :: Operation
pattern GroupNonUniformAll = Code 334
pattern GroupNonUniformAny :: Operation
pattern GroupNonUniformAny = Code 335
pattern GroupNonUniformAllEqual :: Operation
pattern GroupNonUniformAllEqual = Code 336
pattern GroupNonUniformBroadcast :: Operation
pattern GroupNonUniformBroadcast = Code 337
pattern GroupNonUniformBroadcastFirst :: Operation
pattern GroupNonUniformBroadcastFirst = Code 338
pattern GroupNonUniformBallot :: Operation
pattern GroupNonUniformBallot = Code 339
pattern GroupNonUniformInverseBallot :: Operation
pattern GroupNonUniformInverseBallot = Code 340
pattern GroupNonUniformBallotBitExtract :: Operation
pattern GroupNonUniformBallotBitExtract = Code 341
pattern GroupNonUniformBallotBitCount :: Operation
pattern GroupNonUniformBallotBitCount = Code 342
pattern GroupNonUniformBallotFindLSB :: Operation
pattern GroupNonUniformBallotFindLSB = Code 343
pattern GroupNonUniformBallotFindMSB :: Operation
pattern GroupNonUniformBallotFindMSB = Code 344
pattern GroupNonUniformShuffle :: Operation
pattern GroupNonUniformShuffle = Code 345
pattern GroupNonUniformShuffleXor :: Operation
pattern GroupNonUniformShuffleXor = Code 346
pattern GroupNonUniformShuffleUp :: Operation
pattern GroupNonUniformShuffleUp = Code 347
pattern GroupNonUniformShuffleDown :: Operation
pattern GroupNonUniformShuffleDown = Code 348
pattern GroupNonUniformIAdd :: Operation
pattern GroupNonUniformIAdd = Code 349
pattern GroupNonUniformFAdd :: Operation
pattern GroupNonUniformFAdd = Code 350
pattern GroupNonUniformIMul :: Operation
pattern GroupNonUniformIMul = Code 351
pattern GroupNonUniformFMul :: Operation
pattern GroupNonUniformFMul = Code 352
pattern GroupNonUniformSMin :: Operation
pattern GroupNonUniformSMin = Code 353
pattern GroupNonUniformUMin :: Operation
pattern GroupNonUniformUMin = Code 354
pattern GroupNonUniformFMin :: Operation
pattern GroupNonUniformFMin = Code 355
pattern GroupNonUniformSMax :: Operation
pattern GroupNonUniformSMax = Code 356
pattern GroupNonUniformUMax :: Operation
pattern GroupNonUniformUMax = Code 357
pattern GroupNonUniformFMax :: Operation
pattern GroupNonUniformFMax = Code 358
pattern GroupNonUniformBitwiseAnd :: Operation
pattern GroupNonUniformBitwiseAnd = Code 359
pattern GroupNonUniformBitwiseOr :: Operation
pattern GroupNonUniformBitwiseOr = Code 360
pattern GroupNonUniformBitwiseXor :: Operation
pattern GroupNonUniformBitwiseXor = Code 361
pattern GroupNonUniformLogicalAnd :: Operation
pattern GroupNonUniformLogicalAnd = Code 362
pattern GroupNonUniformLogicalOr :: Operation
pattern GroupNonUniformLogicalOr = Code 363
pattern GroupNonUniformLogicalXor :: Operation
pattern GroupNonUniformLogicalXor = Code 364
pattern GroupNonUniformQuadBroadcast :: Operation
pattern GroupNonUniformQuadBroadcast = Code 365
pattern GroupNonUniformQuadSwap :: Operation
pattern GroupNonUniformQuadSwap = Code 366
-- ray tracing instructions
pattern TraceRay :: Operation
pattern TraceRay = Code 4445
pattern ExecuteCallable :: Operation
pattern ExecuteCallable = Code 4446
pattern ConvertUToAccelerationStructure :: Operation
pattern ConvertUToAccelerationStructure = Code 4447
pattern IgnoreIntersection :: Operation
pattern IgnoreIntersection = Code 4448
pattern TerminateRay :: Operation
pattern TerminateRay = Code 4449
pattern ReportIntersection :: Operation
pattern ReportIntersection = Code 5334
pattern TypeAccelerationStructure :: Operation
pattern TypeAccelerationStructure = Code 5341
-- ray query instructions
pattern TypeRayQuery :: Operation
pattern TypeRayQuery = Code 4472
pattern RayQueryInitialize :: Operation
pattern RayQueryInitialize = Code 4473
pattern RayQueryTerminate :: Operation
pattern RayQueryTerminate = Code 4474
pattern RayQueryGenerateIntersection :: Operation
pattern RayQueryGenerateIntersection = Code 4475
pattern RayQueryConfirmIntersection :: Operation
pattern RayQueryConfirmIntersection = Code 4476
pattern RayQueryProceed :: Operation
pattern RayQueryProceed = Code 4477
pattern RayQueryGetIntersectionType :: Operation
pattern RayQueryGetIntersectionType = Code 4479
pattern RayQueryGetRayTMin :: Operation
pattern RayQueryGetRayTMin = Code 6016
pattern RayQueryGetRayFlags :: Operation
pattern RayQueryGetRayFlags = Code 6017
pattern RayQueryGetIntersectionT :: Operation
pattern RayQueryGetIntersectionT = Code 6018
pattern RayQueryGetIntersectionInstanceCustomIndex :: Operation
pattern RayQueryGetIntersectionInstanceCustomIndex = Code 6019
pattern RayQueryGetIntersectionInstanceId :: Operation
pattern RayQueryGetIntersectionInstanceId = Code 6020
pattern RayQueryGetIntersectionInstanceShaderBindingTableRecordOffset :: Operation
pattern RayQueryGetIntersectionInstanceShaderBindingTableRecordOffset = Code 6021
pattern RayQueryGetIntersectionGeometryIndex :: Operation
pattern RayQueryGetIntersectionGeometryIndex = Code 6022
pattern RayQueryGetIntersectionPrimitiveIndex :: Operation
pattern RayQueryGetIntersectionPrimitiveIndex = Code 6023
pattern RayQueryGetIntersectionBarycentrics :: Operation
pattern RayQueryGetIntersectionBarycentrics = Code 6024
pattern RayQueryGetIntersectionFrontFace :: Operation
pattern RayQueryGetIntersectionFrontFace = Code 6025
pattern RayQueryGetIntersectionCandidateAABBOpaque :: Operation
pattern RayQueryGetIntersectionCandidateAABBOpaque = Code 6026
pattern RayQueryGetIntersectionObjectRayDirection :: Operation
pattern RayQueryGetIntersectionObjectRayDirection = Code 6027
pattern RayQueryGetIntersectionObjectRayOrigin :: Operation
pattern RayQueryGetIntersectionObjectRayOrigin = Code 6028
pattern RayQueryGetWorldRayDirection :: Operation
pattern RayQueryGetWorldRayDirection = Code 6029
pattern RayQueryGetWorldRayOrigin :: Operation
pattern RayQueryGetWorldRayOrigin = Code 6030
pattern RayQueryGetIntersectionObjectToWorld :: Operation
pattern RayQueryGetIntersectionObjectToWorld = Code 6031
pattern RayQueryGetIntersectionWorldToObject :: Operation
pattern RayQueryGetIntersectionWorldToObject = Code 6032
-- GLSL extended instructions
pattern GLSL_Round :: Operation
pattern GLSL_Round = ExtCode GLSL 1
pattern GLSL_RoundEven :: Operation
pattern GLSL_RoundEven = ExtCode GLSL 2
pattern GLSL_Trunc :: Operation
pattern GLSL_Trunc = ExtCode GLSL 3
pattern GLSL_FAbs :: Operation
pattern GLSL_FAbs = ExtCode GLSL 4
pattern GLSL_SAbs :: Operation
pattern GLSL_SAbs = ExtCode GLSL 5
pattern GLSL_FSign :: Operation
pattern GLSL_FSign = ExtCode GLSL 6
pattern GLSL_SSign :: Operation
pattern GLSL_SSign = ExtCode GLSL 7
pattern GLSL_Floor :: Operation
pattern GLSL_Floor = ExtCode GLSL 8
pattern GLSL_Ceil :: Operation
pattern GLSL_Ceil = ExtCode GLSL 9
pattern GLSL_Fract :: Operation
pattern GLSL_Fract = ExtCode GLSL 10
pattern GLSL_Sin :: Operation
pattern GLSL_Sin = ExtCode GLSL 13
pattern GLSL_Cos :: Operation
pattern GLSL_Cos = ExtCode GLSL 14
pattern GLSL_Tan :: Operation
pattern GLSL_Tan = ExtCode GLSL 15
pattern GLSL_Asin :: Operation
pattern GLSL_Asin = ExtCode GLSL 16
pattern GLSL_Acos :: Operation
pattern GLSL_Acos = ExtCode GLSL 17
pattern GLSL_Atan :: Operation
pattern GLSL_Atan = ExtCode GLSL 18
pattern GLSL_Sinh :: Operation
pattern GLSL_Sinh = ExtCode GLSL 19
pattern GLSL_Cosh :: Operation
pattern GLSL_Cosh = ExtCode GLSL 20
pattern GLSL_Tanh :: Operation
pattern GLSL_Tanh = ExtCode GLSL 21
pattern GLSL_Asinh :: Operation
pattern GLSL_Asinh = ExtCode GLSL 22
pattern GLSL_Acosh :: Operation
pattern GLSL_Acosh = ExtCode GLSL 23
pattern GLSL_Atanh :: Operation
pattern GLSL_Atanh = ExtCode GLSL 24
pattern GLSL_Atan2 :: Operation
pattern GLSL_Atan2 = ExtCode GLSL 25
pattern GLSL_Pow :: Operation
pattern GLSL_Pow = ExtCode GLSL 26
pattern GLSL_Exp :: Operation
pattern GLSL_Exp = ExtCode GLSL 27
pattern GLSL_Log :: Operation
pattern GLSL_Log = ExtCode GLSL 28
pattern GLSL_Sqrt :: Operation
pattern GLSL_Sqrt = ExtCode GLSL 31
pattern GLSL_InvSqrt :: Operation
pattern GLSL_InvSqrt = ExtCode GLSL 32
pattern GLSL_Determinant :: Operation
pattern GLSL_Determinant = ExtCode GLSL 33
pattern GLSL_MatrixInverse :: Operation
pattern GLSL_MatrixInverse = ExtCode GLSL 34
pattern GLSL_FMin :: Operation
pattern GLSL_FMin = ExtCode GLSL 37
pattern GLSL_UMin :: Operation
pattern GLSL_UMin = ExtCode GLSL 38
pattern GLSL_SMin :: Operation
pattern GLSL_SMin = ExtCode GLSL 39
pattern GLSL_FMax :: Operation
pattern GLSL_FMax = ExtCode GLSL 40
pattern GLSL_UMax :: Operation
pattern GLSL_UMax = ExtCode GLSL 41
pattern GLSL_SMax :: Operation
pattern GLSL_SMax = ExtCode GLSL 42
pattern GLSL_Cross :: Operation
pattern GLSL_Cross = ExtCode GLSL 68
pattern GLSL_Normalize :: Operation
pattern GLSL_Normalize = ExtCode GLSL 69
-- OpenCL extended instructions
-- floating point instructions
pattern OpenCL_Acos :: Operation
pattern OpenCL_Acos = ExtCode OpenCL 0
pattern OpenCL_Acosh :: Operation
pattern OpenCL_Acosh = ExtCode OpenCL 1
pattern OpenCL_Asin :: Operation
pattern OpenCL_Asin = ExtCode OpenCL 3
pattern OpenCL_Asinh :: Operation
pattern OpenCL_Asinh = ExtCode OpenCL 4
pattern OpenCL_Atan :: Operation
pattern OpenCL_Atan = ExtCode OpenCL 6
pattern OpenCL_Atan2 :: Operation
pattern OpenCL_Atan2 = ExtCode OpenCL 7
pattern OpenCL_Atanh :: Operation
pattern OpenCL_Atanh = ExtCode OpenCL 8
pattern OpenCL_Cbrt :: Operation
pattern OpenCL_Cbrt = ExtCode OpenCL 11
pattern OpenCL_Ceil :: Operation
pattern OpenCL_Ceil = ExtCode OpenCL 12
pattern OpenCL_Cos :: Operation
pattern OpenCL_Cos = ExtCode OpenCL 14
pattern OpenCL_Cosh :: Operation
pattern OpenCL_Cosh = ExtCode OpenCL 15
pattern OpenCL_Erfc :: Operation
pattern OpenCL_Erfc = ExtCode OpenCL 17
pattern OpenCL_Erf :: Operation
pattern OpenCL_Erf = ExtCode OpenCL 18
pattern OpenCL_Exp :: Operation
pattern OpenCL_Exp = ExtCode OpenCL 19
pattern OpenCL_Exp2 :: Operation
pattern OpenCL_Exp2 = ExtCode OpenCL 20
pattern OpenCL_Exp10 :: Operation
pattern OpenCL_Exp10 = ExtCode OpenCL 21
pattern OpenCL_Expm1 :: Operation
pattern OpenCL_Expm1 = ExtCode OpenCL 22
pattern OpenCL_FAbs :: Operation
pattern OpenCL_FAbs = ExtCode OpenCL 23
pattern OpenCL_FDim :: Operation
pattern OpenCL_FDim = ExtCode OpenCL 24
pattern OpenCL_Floor :: Operation
pattern OpenCL_Floor = ExtCode OpenCL 25
pattern OpenCL_FMAdd :: Operation
pattern OpenCL_FMAdd = ExtCode OpenCL 26
pattern OpenCL_FMax :: Operation
pattern OpenCL_FMax = ExtCode OpenCL 27
pattern OpenCL_FMin :: Operation
pattern OpenCL_FMin = ExtCode OpenCL 28
pattern OpenCL_FMod :: Operation
pattern OpenCL_FMod = ExtCode OpenCL 29
pattern OpenCL_Fract :: Operation
pattern OpenCL_Fract = ExtCode OpenCL 30
pattern OpenCL_FRExp :: Operation
pattern OpenCL_FRExp = ExtCode OpenCL 31
pattern OpenCL_Hypot :: Operation
pattern OpenCL_Hypot = ExtCode OpenCL 32
pattern OpenCL_LogGamma :: Operation
pattern OpenCL_LogGamma = ExtCode OpenCL 35
pattern OpenCL_Log :: Operation
pattern OpenCL_Log = ExtCode OpenCL 37
pattern OpenCL_Log2 :: Operation
pattern OpenCL_Log2 = ExtCode OpenCL 38
pattern OpenCL_Log10 :: Operation
pattern OpenCL_Log10 = ExtCode OpenCL 39
pattern OpenCL_Log1P :: Operation
pattern OpenCL_Log1P = ExtCode OpenCL 40
pattern OpenCL_LogB :: Operation
pattern OpenCL_LogB = ExtCode OpenCL 41
pattern OpenCL_MAdd :: Operation
pattern OpenCL_MAdd = ExtCode OpenCL 42
pattern OpenCL_MaxMag :: Operation
pattern OpenCL_MaxMag = ExtCode OpenCL 43
pattern OpenCL_MinMag :: Operation
pattern OpenCL_MinMag = ExtCode OpenCL 44
pattern OpenCL_ModF :: Operation
pattern OpenCL_ModF = ExtCode OpenCL 45
pattern OpenCL_NaN :: Operation
pattern OpenCL_NaN = ExtCode OpenCL 46
pattern OpenCL_NextAfter :: Operation
pattern OpenCL_NextAfter = ExtCode OpenCL 47
pattern OpenCL_Pow :: Operation
pattern OpenCL_Pow = ExtCode OpenCL 48
pattern OpenCL_FRem :: Operation
pattern OpenCL_FRem = ExtCode OpenCL 51
pattern OpenCL_FRemQuot :: Operation
pattern OpenCL_FRemQuot = ExtCode OpenCL 52
pattern OpenCL_RoundEven :: Operation
pattern OpenCL_RoundEven = ExtCode OpenCL 53
pattern OpenCL_Round :: Operation
pattern OpenCL_Round = ExtCode OpenCL 55
pattern OpenCL_InvSqrt :: Operation
pattern OpenCL_InvSqrt = ExtCode OpenCL 56
pattern OpenCL_Sin :: Operation
pattern OpenCL_Sin = ExtCode OpenCL 57
pattern OpenCL_SinCos :: Operation
pattern OpenCL_SinCos = ExtCode OpenCL 58
pattern OpenCL_Sinh :: Operation
pattern OpenCL_Sinh = ExtCode OpenCL 59
pattern OpenCL_Sqrt :: Operation
pattern OpenCL_Sqrt = ExtCode OpenCL 61
pattern OpenCL_Tan :: Operation
pattern OpenCL_Tan = ExtCode OpenCL 62
pattern OpenCL_Tanh :: Operation
pattern OpenCL_Tanh = ExtCode OpenCL 63
pattern OpenCL_Gamma :: Operation
pattern OpenCL_Gamma = ExtCode OpenCL 65
pattern OpenCL_Trunc :: Operation
pattern OpenCL_Trunc = ExtCode OpenCL 66
pattern OpenCL_FSign :: Operation
pattern OpenCL_FSign = ExtCode OpenCL 103
-- integral instructions
pattern OpenCL_SAbs :: Operation
pattern OpenCL_SAbs = ExtCode OpenCL 141
pattern OpenCL_SAbsDiff :: Operation
pattern OpenCL_SAbsDiff = ExtCode OpenCL 142
pattern OpenCL_SMax :: Operation
pattern OpenCL_SMax = ExtCode OpenCL 156
pattern OpenCL_UMax :: Operation
pattern OpenCL_UMax = ExtCode OpenCL 157
pattern OpenCL_SMin :: Operation
pattern OpenCL_SMin = ExtCode OpenCL 158
pattern OpenCL_UMin :: Operation
pattern OpenCL_UMin = ExtCode OpenCL 159
pattern OpenCL_UAbs :: Operation
pattern OpenCL_UAbs = ExtCode OpenCL 201
pattern OpenCL_UAbsDiff :: Operation
pattern OpenCL_UAbsDiff = ExtCode OpenCL 202
-- vectors and matrices
pattern OpenCL_Cross :: Operation
pattern OpenCL_Cross = ExtCode OpenCL 104
pattern OpenCL_Normalize :: Operation
pattern OpenCL_Normalize = ExtCode OpenCL 107
-- Non-semantic DebugPrintf instruction
pattern DebugPrintf :: Operation
pattern DebugPrintf = ExtCode SPIRV.Extension.DebugPrintf 1
-- | Whether an operation is a block termination instruction.
isBlockTerminator :: Operation -> Bool
isBlockTerminator op = op `elem`
[ Branch, BranchConditional, Switch
, Return, ReturnValue
, Kill, Unreachable
, IgnoreIntersection, TerminateRay
]
showOperation :: Operation -> String
showOperation Nop = "Nop"
showOperation Undef = "Undef"
showOperation SourceContinued = "SourceContinued"
showOperation Source = "Source"
showOperation SourceExtension = "SourceExtension"
showOperation Name = "Name"
showOperation MemberName = "MemberName"
showOperation String = "String"
showOperation Line = "Line"
showOperation ExtInst = "ExtInst"
showOperation ExtInstImport = "ExtInstImport"
showOperation MemoryModel = "MemoryModel"
showOperation EntryPoint = "EntryPoint"
showOperation ExecutionMode = "ExecutionMode"
showOperation Capability = "Capability"
showOperation TypeVoid = "TypeVoid"
showOperation TypeBool = "TypeBool"
showOperation TypeInt = "TypeInt"
showOperation TypeFloat = "TypeFloat"
showOperation TypeVector = "TypeVector"
showOperation TypeMatrix = "TypeMatrix"
showOperation TypeImage = "TypeImage"
showOperation TypeSampler = "TypeSampler"
showOperation TypeSampledImage = "TypeSampledImage"
showOperation TypeArray = "TypeArray"
showOperation TypeRuntimeArray = "TypeRuntimeArray"
showOperation TypeStruct = "TypeStruct"
showOperation TypeOpaque = "TypeOpaque"
showOperation TypePointer = "TypePointer"
showOperation TypeFunction = "TypeFunction"
showOperation TypeEvent = "TypeEvent"
showOperation TypeDeviceEvent = "TypeDeviceEvent"
showOperation TypeReserveId = "TypeReserveId"
showOperation TypeQueue = "TypeQueue"
showOperation TypePipe = "TypePipe"
showOperation TypeForwardPointer = "TypeForwardPointer"
showOperation ConstantTrue = "ConstantTrue"
showOperation ConstantFalse = "ConstantFalse"
showOperation Constant = "Constant"
showOperation ConstantComposite = "ConstantComposite"
showOperation ConstantSampler = "ConstantSampler"
showOperation ConstantNull = "ConstantNull"
showOperation SpecConstantTrue = "SpecConstantTrue"
showOperation SpecConstantFalse = "SpecConstantFalse"
showOperation SpecConstant = "SpecConstant"
showOperation SpecConstantComposite = "SpecConstantComposite"
showOperation SpecConstantOp = "SpecConstantOp"
showOperation Function = "Function"
showOperation FunctionParameter = "FunctionParameter"
showOperation FunctionEnd = "FunctionEnd"
showOperation FunctionCall = "FunctionCall"
showOperation Variable = "Variable"
showOperation ImageTexelPointer = "ImageTexelPointer"
showOperation Load = "Load"
showOperation Store = "Store"
showOperation CopyMemory = "CopyMemory"
showOperation CopyMemorySized = "CopyMemorySized"
showOperation AccessChain = "AccessChain"
showOperation InBoundsAccessChain = "InBoundsAccessChain"
showOperation PtrAccessChain = "PtrAccessChain"
showOperation ArrayLength = "ArrayLength"
showOperation GenericPtrMemSemantics = "GenericPtrMemSemantics"
showOperation InBoundsPtrAccessChain = "InBoundsPtrAccessChain"
showOperation Decorate = "Decorate"
showOperation MemberDecorate = "MemberDecorate"
showOperation DecorationGroup = "DecorationGroup"
showOperation GroupDecorate = "GroupDecorate"
showOperation GroupMemberDecorate = "GroupMemberDecorate"
showOperation VectorExtractDynamic = "VectorExtractDynamic"
showOperation VectorInsertDynamic = "VectorInsertDynamic"
showOperation VectorShuffle = "VectorShuffle"
showOperation CompositeConstruct = "CompositeConstruct"
showOperation CompositeExtract = "CompositeExtract"
showOperation CompositeInsert = "CompositeInsert"
showOperation CopyObject = "CopyObject"
showOperation CopyLogical = "CopyLogical"
showOperation SampledImage = "SampledImage"
showOperation ImageSampleImplicitLod = "ImageSampleImplicitLod"
showOperation ImageSampleExplicitLod = "ImageSampleExplicitLod"
showOperation ImageSampleDrefImplicitLod = "ImageSampleDrefImplicitLod"
showOperation ImageSampleDrefExplicitLod = "ImageSampleDrefExplicitLod"
showOperation ImageSampleProjImplicitLod = "ImageSampleProjImplicitLod"
showOperation ImageSampleProjExplicitLod = "ImageSampleProjExplicitLod"
showOperation ImageSampleProjDrefImplicitLod = "ImageSampleProjDrefImplicitLod"
showOperation ImageSampleProjDrefExplicitLod = "ImageSampleProjDrefExplicitLod"
showOperation ImageFetch = "ImageFetch"
showOperation ImageGather = "ImageGather"
showOperation ImageDrefGather = "ImageDrefGather"
showOperation ImageRead = "ImageRead"
showOperation ImageWrite = "ImageWrite"
showOperation Image = "Image"
showOperation ImageQueryFormat = "ImageQueryFormat"
showOperation ImageQueryOrder = "ImageQueryOrder"
showOperation ImageQuerySizeLod = "ImageQuerySizeLod"
showOperation ImageQuerySize = "ImageQuerySize"
showOperation ImageQueryLod = "ImageQueryLod"
showOperation ImageQueryLevels = "ImageQueryLevels"
showOperation ImageQuerySamples = "ImageQuerySamples"
showOperation ConvertFToU = "ConvertFToU"
showOperation ConvertFToS = "ConvertFToS"
showOperation ConvertSToF = "ConvertSToF"
showOperation ConvertUToF = "ConvertUToF"
showOperation UConvert = "UConvert"
showOperation SConvert = "SConvert"
showOperation FConvert = "FConvert"
showOperation SatConvertSToU = "SatConvertSToU"
showOperation SatConvertUToS = "SatConvertUToS"
showOperation BitCast = "BitCast"
showOperation SNegate = "SNegate"
showOperation FNegate = "FNegate"
showOperation IAdd = "IAdd"
showOperation FAdd = "FAdd"
showOperation ISub = "ISub"
showOperation FSub = "FSub"
showOperation IMul = "IMul"
showOperation FMul = "FMul"
showOperation UDiv = "UDiv"
showOperation SDiv = "SDiv"
showOperation FDiv = "FDiv"
showOperation UMod = "UMod"
showOperation SRem = "SRem"
showOperation SMod = "SMod"
showOperation FRem = "FRem"
showOperation FMod = "FMod"
showOperation Transpose = "Transpose"
showOperation VectorTimesScalar = "VectorTimesScalar"
showOperation MatrixTimesScalar = "MatrixTimesScalar"
showOperation VectorTimesMatrix = "VectorTimesMatrix"
showOperation MatrixTimesVector = "MatrixTimesVector"
showOperation MatrixTimesMatrix = "MatrixTimesMatrix"
showOperation OuterProduct = "OuterProduct"
showOperation Dot = "Dot"
showOperation LogicalEqual = "LogicalEqual"
showOperation LogicalNotEqual = "LogicalNotEqual"
showOperation LogicalOr = "LogicalOr"
showOperation LogicalAnd = "LogicalAnd"
showOperation LogicalNot = "LogicalNot"
showOperation IEqual = "IEqual"
showOperation INotEqual = "INotEqual"
showOperation UGreaterThan = "UGreaterThan"
showOperation SGreaterThan = "SGreaterThan"
showOperation UGreaterThanEqual = "UGreaterThanEqual"
showOperation SGreaterThanEqual = "SGreaterThanEqual"
showOperation ULessThan = "ULessThan"
showOperation SLessThan = "SLessThan"
showOperation ULessThanEqual = "ULessThanEqual"
showOperation SLessThanEqual = "SLessThanEqual"
showOperation FOrdEqual = "FOrdEqual"
showOperation FUnordEqual = "FUnordEqual"
showOperation FOrdNotEqual = "FOrdNotEqual"
showOperation FUnordNotEqual = "FUnordNotEqual"
showOperation FOrdLessThan = "FOrdLessThan"
showOperation FUnordLessThan = "FUnordLessThan"
showOperation FOrdGreaterThan = "FOrdGreaterThan"
showOperation FUnordGreaterThan = "FUnordGreaterThan"
showOperation FOrdLessThanEqual = "FOrdLessThanEqual"
showOperation FUnordLessThanEqual = "FUnordLessThanEqual"
showOperation FOrdGreaterThanEqual = "FOrdGreaterThanEqual"
showOperation FUnordGreaterThanEqual = "FUnordGreaterThanEqual"
showOperation ShiftRightLogical = "ShiftRightLogical"
showOperation ShiftRightArithmetic = "ShiftRightArithmetic"
showOperation ShiftLeftLogical = "ShiftLeftLogical"
showOperation BitwiseOr = "BitwiseOr"
showOperation BitwiseXor = "BitwiseXor"
showOperation BitwiseAnd = "BitwiseAnd"
showOperation Not = "Not"
showOperation BitReverse = "BitReverse"
showOperation EmitVertex = "EmitVertex"
showOperation EndPrimitive = "EndPrimitive"
showOperation EmitStreamVertex = "EmitStreamVertex"
showOperation EndStreamPrimitive = "EndStreamPrimitive"
showOperation AtomicLoad = "AtomicLoad"
showOperation AtomicStore = "AtomicStore"
showOperation AtomicExchange = "AtomicExchange"
showOperation AtomicCompareExchange = "AtomicCompareExchange"
showOperation AtomicIIncrement = "AtomicIIncrement"
showOperation AtomicIDecrement = "AtomicIDecrement"
showOperation AtomicIAdd = "AtomicIAdd"
showOperation AtomicISub = "AtomicISub"
showOperation AtomicSMin = "AtomicSMin"
showOperation AtomicUMin = "AtomicUMin"
showOperation AtomicSMax = "AtomicSMax"
showOperation AtomicUMax = "AtomicUMax"
showOperation AtomicAnd = "AtomicAnd"
showOperation AtomicOr = "AtomicOr"
showOperation AtomicXor = "AtomicXor"
showOperation AtomicFMinEXT = "AtomicFMinEXT"
showOperation AtomicFMaxEXT = "AtomicFMaxEXT"
showOperation AtomicFAddEXT = "AtomicFAddEXT"
showOperation GroupAsyncCopy = "GroupAsyncCopy"
showOperation GroupWaitEvents = "GroupWaitEvents"
showOperation GroupAll = "GroupAll"
showOperation GroupAny = "GroupAny"
showOperation GroupBroadcast = "GroupBroadcast"
showOperation GroupIAdd = "GroupIAdd"
showOperation GroupFAdd = "GroupFAdd"
showOperation GroupFMin = "GroupFMin"
showOperation GroupUMin = "GroupUMin"
showOperation GroupSMin = "GroupSMin"
showOperation GroupFMax = "GroupFMax"
showOperation GroupUMax = "GroupUMax"
showOperation GroupSMax = "GroupSMax"
showOperation Phi = "Phi"
showOperation LoopMerge = "LoopMerge"
showOperation SelectionMerge = "SelectionMerge"
showOperation Label = "Label"
showOperation Branch = "Branch"
showOperation BranchConditional = "BranchConditional"
showOperation Switch = "Switch"
showOperation Kill = "Kill"
showOperation Return = "Return"
showOperation ReturnValue = "ReturnValue"
showOperation Unreachable = "Unreachable"
-- non uniform group instructions
showOperation GroupNonUniformElect = "GroupNonUniformElect"
showOperation GroupNonUniformAll = "GroupNonUniformAll"
showOperation GroupNonUniformAny = "GroupNonUniformAny"
showOperation GroupNonUniformAllEqual = "GroupNonUniformAllEqual"
showOperation GroupNonUniformBroadcast = "GroupNonUniformBroadcast"
showOperation GroupNonUniformBroadcastFirst = "GroupNonUniformBroadcastFirst"
showOperation GroupNonUniformBallot = "GroupNonUniformBallot"
showOperation GroupNonUniformInverseBallot = "GroupNonUniformInverseBallot"
showOperation GroupNonUniformBallotBitExtract = "GroupNonUniformBallotBitExtract"
showOperation GroupNonUniformBallotBitCount = "GroupNonUniformBallotBitCount"
showOperation GroupNonUniformBallotFindLSB = "GroupNonUniformBallotFindLSB"
showOperation GroupNonUniformBallotFindMSB = "GroupNonUniformBallotFindMSB"
showOperation GroupNonUniformShuffle = "GroupNonUniformShuffle"
showOperation GroupNonUniformShuffleXor = "GroupNonUniformShuffleXor"
showOperation GroupNonUniformShuffleUp = "GroupNonUniformShuffleUp"
showOperation GroupNonUniformShuffleDown = "GroupNonUniformShuffleDown"
showOperation GroupNonUniformIAdd = "GroupNonUniformIAdd"
showOperation GroupNonUniformFAdd = "GroupNonUniformFAdd"
showOperation GroupNonUniformIMul = "GroupNonUniformIMul"
showOperation GroupNonUniformFMul = "GroupNonUniformFMul"
showOperation GroupNonUniformSMin = "GroupNonUniformSMin"
showOperation GroupNonUniformUMin = "GroupNonUniformUMin"
showOperation GroupNonUniformFMin = "GroupNonUniformFMin"
showOperation GroupNonUniformSMax = "GroupNonUniformSMax"
showOperation GroupNonUniformUMax = "GroupNonUniformUMax"
showOperation GroupNonUniformFMax = "GroupNonUniformFMax"
showOperation GroupNonUniformBitwiseAnd = "GroupNonUniformBitwiseAnd"
showOperation GroupNonUniformBitwiseOr = "GroupNonUniformBitwiseOr"
showOperation GroupNonUniformBitwiseXor = "GroupNonUniformBitwiseXor"
showOperation GroupNonUniformLogicalAnd = "GroupNonUniformLogicalAnd"
showOperation GroupNonUniformLogicalOr = "GroupNonUniformLogicalOr"
showOperation GroupNonUniformLogicalXor = "GroupNonUniformLogicalXor"
showOperation GroupNonUniformQuadBroadcast = "GroupNonUniformQuadBroadcast"
showOperation GroupNonUniformQuadSwap = "GroupNonUniformQuadSwap"
-- ray tracing instructions
showOperation TraceRay = "TraceRay"
showOperation ExecuteCallable = "ExecuteCallable"
showOperation ConvertUToAccelerationStructure = "ConvertUToAccelerationStructure"
showOperation IgnoreIntersection = "IgnoreIntersection"
showOperation TerminateRay = "TerminateRay"
showOperation ReportIntersection = "ReportIntersection"
showOperation TypeAccelerationStructure = "TypeAccelerationStructure"
-- ray query instructions
showOperation TypeRayQuery = "TypeRayQuery"
showOperation RayQueryInitialize = "RayQueryInitialize"
showOperation RayQueryTerminate = "RayQueryTerminate"
showOperation RayQueryGenerateIntersection = "RayQueryGenerateIntersection"
showOperation RayQueryConfirmIntersection = "RayQueryConfirmIntersection"
showOperation RayQueryProceed = "RayQueryProceed"
showOperation RayQueryGetIntersectionType = "RayQueryGetIntersectionType"
showOperation RayQueryGetRayTMin = "RayQueryGetRayTMin"
showOperation RayQueryGetRayFlags = "RayQueryGetRayFlags"
showOperation RayQueryGetIntersectionT = "RayQueryGetIntersectionT"
showOperation RayQueryGetIntersectionInstanceCustomIndex = "RayQueryGetIntersectionInstanceCustomIndex"
showOperation RayQueryGetIntersectionInstanceId = "RayQueryGetIntersectionInstanceId"
showOperation RayQueryGetIntersectionInstanceShaderBindingTableRecordOffset = "RayQueryGetIntersectionInstanceShaderBindingTableRecordOffset"
showOperation RayQueryGetIntersectionGeometryIndex = "RayQueryGetIntersectionGeometryIndex"
showOperation RayQueryGetIntersectionPrimitiveIndex = "RayQueryGetIntersectionPrimitiveIndex"
showOperation RayQueryGetIntersectionBarycentrics = "RayQueryGetIntersectionBarycentrics"
showOperation RayQueryGetIntersectionFrontFace = "RayQueryGetIntersectionFrontFace"
showOperation RayQueryGetIntersectionCandidateAABBOpaque = "RayQueryGetIntersectionCandidateAABBOpaque"
showOperation RayQueryGetIntersectionObjectRayDirection = "RayQueryGetIntersectionObjectRayDirection"
showOperation RayQueryGetIntersectionObjectRayOrigin = "RayQueryGetIntersectionObjectRayOrigin"
showOperation RayQueryGetWorldRayDirection = "RayQueryGetWorldRayDirection"
showOperation RayQueryGetWorldRayOrigin = "RayQueryGetWorldRayOrigin"
showOperation RayQueryGetIntersectionObjectToWorld = "RayQueryGetIntersectionObjectToWorld"
showOperation RayQueryGetIntersectionWorldToObject = "RayQueryGetIntersectionWorldToObject"
-- GLSL instructions
showOperation GLSL_Round = "Round"
showOperation GLSL_RoundEven = "RoundEven"
showOperation GLSL_Trunc = "Trunc"
showOperation GLSL_FAbs = "FAbs"
showOperation GLSL_SAbs = "SAbs"
showOperation GLSL_FSign = "FSign"
showOperation GLSL_SSign = "SSign"
showOperation GLSL_Floor = "Floor"
showOperation GLSL_Ceil = "Ceil"
showOperation GLSL_Fract = "Fract"
showOperation GLSL_Sin = "Sin"
showOperation GLSL_Cos = "Cos"
showOperation GLSL_Tan = "Tan"
showOperation GLSL_Asin = "Asin"
showOperation GLSL_Acos = "Acos"
showOperation GLSL_Atan = "Atan"
showOperation GLSL_Sinh = "Sinh"
showOperation GLSL_Cosh = "Cosh"
showOperation GLSL_Tanh = "Tanh"
showOperation GLSL_Asinh = "Asinh"
showOperation GLSL_Acosh = "Acosh"
showOperation GLSL_Atanh = "Atanh"
showOperation GLSL_Atan2 = "Atan2"
showOperation GLSL_Pow = "Pow"
showOperation GLSL_Exp = "Exp"
showOperation GLSL_Log = "Log"
showOperation GLSL_Sqrt = "Sqrt"
showOperation GLSL_InvSqrt = "InvSqrt"
showOperation GLSL_Determinant = "Determinant"
showOperation GLSL_MatrixInverse = "MatrixInverse"
showOperation GLSL_FMin = "FMin"
showOperation GLSL_UMin = "UMin"
showOperation GLSL_SMin = "SMin"
showOperation GLSL_FMax = "FMax"
showOperation GLSL_UMax = "UMax"
showOperation GLSL_SMax = "SMax"
showOperation GLSL_Cross = "Cross"
showOperation GLSL_Normalize = "Normalize"
-- OpenCL instructions
showOperation OpenCL_Acos = "Acos"
showOperation OpenCL_Acosh = "Acosh"
showOperation OpenCL_Asin = "Asin"
showOperation OpenCL_Asinh = "Asinh"
showOperation OpenCL_Atan = "Atan"
showOperation OpenCL_Atan2 = "Atan2"
showOperation OpenCL_Atanh = "Atanh"
showOperation OpenCL_Cbrt = "Cbrt"
showOperation OpenCL_Ceil = "Ceil"
showOperation OpenCL_Cos = "Cos"
showOperation OpenCL_Cosh = "Cosh"
showOperation OpenCL_Erfc = "Erfc"
showOperation OpenCL_Erf = "Erf"
showOperation OpenCL_Exp = "Exp"
showOperation OpenCL_Exp2 = "Exp2"
showOperation OpenCL_Exp10 = "Exp10"
showOperation OpenCL_Expm1 = "Expm1"
showOperation OpenCL_FAbs = "FAbs"
showOperation OpenCL_FDim = "FDim"
showOperation OpenCL_Floor = "Floor"
showOperation OpenCL_FMAdd = "FMAdd"
showOperation OpenCL_FMax = "FMax"
showOperation OpenCL_FMin = "FMin"
showOperation OpenCL_FMod = "FMod"
showOperation OpenCL_Fract = "Fract"
showOperation OpenCL_FRExp = "FRExp"
showOperation OpenCL_Hypot = "Hypot"
showOperation OpenCL_LogGamma = "LogGamma"
showOperation OpenCL_Log = "Log"
showOperation OpenCL_Log2 = "Log2"
showOperation OpenCL_Log10 = "Log10"
showOperation OpenCL_Log1P = "Log1P"
showOperation OpenCL_LogB = "LogB"
showOperation OpenCL_MAdd = "MAdd"
showOperation OpenCL_MaxMag = "MaxMag"
showOperation OpenCL_MinMag = "MinMag"
showOperation OpenCL_ModF = "ModF"
showOperation OpenCL_NaN = "NaN"
showOperation OpenCL_NextAfter = "NextAfter"
showOperation OpenCL_Pow = "Pow"
showOperation OpenCL_FRem = "FRem"
showOperation OpenCL_FRemQuot = "FRemQuot"
showOperation OpenCL_RoundEven = "RoundEven"
showOperation OpenCL_Round = "Round"
showOperation OpenCL_InvSqrt = "InvSqrt"
showOperation OpenCL_Sin = "Sin"
showOperation OpenCL_SinCos = "SinCos"
showOperation OpenCL_Sinh = "Sinh"
showOperation OpenCL_Sqrt = "Sqrt"
showOperation OpenCL_Tan = "Tan"
showOperation OpenCL_Tanh = "Tanh"
showOperation OpenCL_Gamma = "Gamma"
showOperation OpenCL_Trunc = "Trunc"
showOperation OpenCL_FSign = "FSign"
showOperation OpenCL_SAbs = "SAbs"
showOperation OpenCL_SAbsDiff = "SAbsDiff"
showOperation OpenCL_SMax = "SMax"
showOperation OpenCL_UMax = "UMax"
showOperation OpenCL_SMin = "SMin"
showOperation OpenCL_UMin = "UMin"
showOperation OpenCL_UAbs = "UAbs"
showOperation OpenCL_UAbsDiff = "UAbsDiff"
showOperation OpenCL_Cross = "Cross"
showOperation OpenCL_Normalize = "Normalize"
showOperation DebugPrintf = "DebugPrintf"
showOperation (Code i) = show i
showOperation (ExtCode _ i) = show i