mirror of
https://github.com/Dongyifengs/AssetStudio-Genshin-MoYi.git
synced 2025-04-22 12:39:18 +08:00
366 lines
15 KiB
C#
366 lines
15 KiB
C#
namespace Smolv
|
|
{
|
|
public struct OpData
|
|
{
|
|
public OpData(byte hasResult, byte hasType, sbyte deltaFromResult, byte varrest)
|
|
{
|
|
this.hasResult = hasResult;
|
|
this.hasType = hasType;
|
|
this.deltaFromResult = deltaFromResult;
|
|
this.varrest = varrest;
|
|
}
|
|
|
|
/// <summary>
|
|
/// Does it have result ID?
|
|
/// </summary>
|
|
public byte hasResult;
|
|
/// <summary>
|
|
/// Does it have type ID?
|
|
/// </summary>
|
|
public byte hasType;
|
|
/// <summary>
|
|
/// How many words after (optional) type+result to write out as deltas from result?
|
|
/// </summary>
|
|
public sbyte deltaFromResult;
|
|
/// <summary>
|
|
/// Should the rest of words be written in varint encoding?
|
|
/// </summary>
|
|
public byte varrest;
|
|
|
|
public static readonly OpData[] SpirvOpData =
|
|
{
|
|
new OpData(0, 0, 0, 0), // Nop
|
|
new OpData(1, 1, 0, 0), // Undef
|
|
new OpData(0, 0, 0, 0), // SourceContinued
|
|
new OpData(0, 0, 0, 1), // Source
|
|
new OpData(0, 0, 0, 0), // SourceExtension
|
|
new OpData(0, 0, 0, 0), // Name
|
|
new OpData(0, 0, 0, 0), // MemberName
|
|
new OpData(0, 0, 0, 0), // String
|
|
new OpData(0, 0, 0, 1), // Line
|
|
new OpData(1, 1, 0, 0), // #9
|
|
new OpData(0, 0, 0, 0), // Extension
|
|
new OpData(1, 0, 0, 0), // ExtInstImport
|
|
new OpData(1, 1, 0, 1), // ExtInst
|
|
new OpData(1, 1, 2, 1), // VectorShuffleCompact - new in SMOLV
|
|
new OpData(0, 0, 0, 1), // MemoryModel
|
|
new OpData(0, 0, 0, 1), // EntryPoint
|
|
new OpData(0, 0, 0, 1), // ExecutionMode
|
|
new OpData(0, 0, 0, 1), // Capability
|
|
new OpData(1, 1, 0, 0), // #18
|
|
new OpData(1, 0, 0, 1), // TypeVoid
|
|
new OpData(1, 0, 0, 1), // TypeBool
|
|
new OpData(1, 0, 0, 1), // TypeInt
|
|
new OpData(1, 0, 0, 1), // TypeFloat
|
|
new OpData(1, 0, 0, 1), // TypeVector
|
|
new OpData(1, 0, 0, 1), // TypeMatrix
|
|
new OpData(1, 0, 0, 1), // TypeImage
|
|
new OpData(1, 0, 0, 1), // TypeSampler
|
|
new OpData(1, 0, 0, 1), // TypeSampledImage
|
|
new OpData(1, 0, 0, 1), // TypeArray
|
|
new OpData(1, 0, 0, 1), // TypeRuntimeArray
|
|
new OpData(1, 0, 0, 1), // TypeStruct
|
|
new OpData(1, 0, 0, 1), // TypeOpaque
|
|
new OpData(1, 0, 0, 1), // TypePointer
|
|
new OpData(1, 0, 0, 1), // TypeFunction
|
|
new OpData(1, 0, 0, 1), // TypeEvent
|
|
new OpData(1, 0, 0, 1), // TypeDeviceEvent
|
|
new OpData(1, 0, 0, 1), // TypeReserveId
|
|
new OpData(1, 0, 0, 1), // TypeQueue
|
|
new OpData(1, 0, 0, 1), // TypePipe
|
|
new OpData(0, 0, 0, 1), // TypeForwardPointer
|
|
new OpData(1, 1, 0, 0), // #40
|
|
new OpData(1, 1, 0, 0), // ConstantTrue
|
|
new OpData(1, 1, 0, 0), // ConstantFalse
|
|
new OpData(1, 1, 0, 0), // Constant
|
|
new OpData(1, 1, 9, 0), // ConstantComposite
|
|
new OpData(1, 1, 0, 1), // ConstantSampler
|
|
new OpData(1, 1, 0, 0), // ConstantNull
|
|
new OpData(1, 1, 0, 0), // #47
|
|
new OpData(1, 1, 0, 0), // SpecConstantTrue
|
|
new OpData(1, 1, 0, 0), // SpecConstantFalse
|
|
new OpData(1, 1, 0, 0), // SpecConstant
|
|
new OpData(1, 1, 9, 0), // SpecConstantComposite
|
|
new OpData(1, 1, 0, 0), // SpecConstantOp
|
|
new OpData(1, 1, 0, 0), // #53
|
|
new OpData(1, 1, 0, 1), // Function
|
|
new OpData(1, 1, 0, 0), // FunctionParameter
|
|
new OpData(0, 0, 0, 0), // FunctionEnd
|
|
new OpData(1, 1, 9, 0), // FunctionCall
|
|
new OpData(1, 1, 0, 0), // #58
|
|
new OpData(1, 1, 0, 1), // Variable
|
|
new OpData(1, 1, 0, 0), // ImageTexelPointer
|
|
new OpData(1, 1, 1, 1), // Load
|
|
new OpData(0, 0, 2, 1), // Store
|
|
new OpData(0, 0, 0, 0), // CopyMemory
|
|
new OpData(0, 0, 0, 0), // CopyMemorySized
|
|
new OpData(1, 1, 0, 1), // AccessChain
|
|
new OpData(1, 1, 0, 0), // InBoundsAccessChain
|
|
new OpData(1, 1, 0, 0), // PtrAccessChain
|
|
new OpData(1, 1, 0, 0), // ArrayLength
|
|
new OpData(1, 1, 0, 0), // GenericPtrMemSemantics
|
|
new OpData(1, 1, 0, 0), // InBoundsPtrAccessChain
|
|
new OpData(0, 0, 0, 1), // Decorate
|
|
new OpData(0, 0, 0, 1), // MemberDecorate
|
|
new OpData(1, 0, 0, 0), // DecorationGroup
|
|
new OpData(0, 0, 0, 0), // GroupDecorate
|
|
new OpData(0, 0, 0, 0), // GroupMemberDecorate
|
|
new OpData(1, 1, 0, 0), // #76
|
|
new OpData(1, 1, 1, 1), // VectorExtractDynamic
|
|
new OpData(1, 1, 2, 1), // VectorInsertDynamic
|
|
new OpData(1, 1, 2, 1), // VectorShuffle
|
|
new OpData(1, 1, 9, 0), // CompositeConstruct
|
|
new OpData(1, 1, 1, 1), // CompositeExtract
|
|
new OpData(1, 1, 2, 1), // CompositeInsert
|
|
new OpData(1, 1, 1, 0), // CopyObject
|
|
new OpData(1, 1, 0, 0), // Transpose
|
|
new OpData(1, 1, 0, 0), // #85
|
|
new OpData(1, 1, 0, 0), // SampledImage
|
|
new OpData(1, 1, 2, 1), // ImageSampleImplicitLod
|
|
new OpData(1, 1, 2, 1), // ImageSampleExplicitLod
|
|
new OpData(1, 1, 3, 1), // ImageSampleDrefImplicitLod
|
|
new OpData(1, 1, 3, 1), // ImageSampleDrefExplicitLod
|
|
new OpData(1, 1, 2, 1), // ImageSampleProjImplicitLod
|
|
new OpData(1, 1, 2, 1), // ImageSampleProjExplicitLod
|
|
new OpData(1, 1, 3, 1), // ImageSampleProjDrefImplicitLod
|
|
new OpData(1, 1, 3, 1), // ImageSampleProjDrefExplicitLod
|
|
new OpData(1, 1, 2, 1), // ImageFetch
|
|
new OpData(1, 1, 3, 1), // ImageGather
|
|
new OpData(1, 1, 3, 1), // ImageDrefGather
|
|
new OpData(1, 1, 2, 1), // ImageRead
|
|
new OpData(0, 0, 3, 1), // ImageWrite
|
|
new OpData(1, 1, 1, 0), // Image
|
|
new OpData(1, 1, 1, 0), // ImageQueryFormat
|
|
new OpData(1, 1, 1, 0), // ImageQueryOrder
|
|
new OpData(1, 1, 2, 0), // ImageQuerySizeLod
|
|
new OpData(1, 1, 1, 0), // ImageQuerySize
|
|
new OpData(1, 1, 2, 0), // ImageQueryLod
|
|
new OpData(1, 1, 1, 0), // ImageQueryLevels
|
|
new OpData(1, 1, 1, 0), // ImageQuerySamples
|
|
new OpData(1, 1, 0, 0), // #108
|
|
new OpData(1, 1, 1, 0), // ConvertFToU
|
|
new OpData(1, 1, 1, 0), // ConvertFToS
|
|
new OpData(1, 1, 1, 0), // ConvertSToF
|
|
new OpData(1, 1, 1, 0), // ConvertUToF
|
|
new OpData(1, 1, 1, 0), // UConvert
|
|
new OpData(1, 1, 1, 0), // SConvert
|
|
new OpData(1, 1, 1, 0), // FConvert
|
|
new OpData(1, 1, 1, 0), // QuantizeToF16
|
|
new OpData(1, 1, 1, 0), // ConvertPtrToU
|
|
new OpData(1, 1, 1, 0), // SatConvertSToU
|
|
new OpData(1, 1, 1, 0), // SatConvertUToS
|
|
new OpData(1, 1, 1, 0), // ConvertUToPtr
|
|
new OpData(1, 1, 1, 0), // PtrCastToGeneric
|
|
new OpData(1, 1, 1, 0), // GenericCastToPtr
|
|
new OpData(1, 1, 1, 1), // GenericCastToPtrExplicit
|
|
new OpData(1, 1, 1, 0), // Bitcast
|
|
new OpData(1, 1, 0, 0), // #125
|
|
new OpData(1, 1, 1, 0), // SNegate
|
|
new OpData(1, 1, 1, 0), // FNegate
|
|
new OpData(1, 1, 2, 0), // IAdd
|
|
new OpData(1, 1, 2, 0), // FAdd
|
|
new OpData(1, 1, 2, 0), // ISub
|
|
new OpData(1, 1, 2, 0), // FSub
|
|
new OpData(1, 1, 2, 0), // IMul
|
|
new OpData(1, 1, 2, 0), // FMul
|
|
new OpData(1, 1, 2, 0), // UDiv
|
|
new OpData(1, 1, 2, 0), // SDiv
|
|
new OpData(1, 1, 2, 0), // FDiv
|
|
new OpData(1, 1, 2, 0), // UMod
|
|
new OpData(1, 1, 2, 0), // SRem
|
|
new OpData(1, 1, 2, 0), // SMod
|
|
new OpData(1, 1, 2, 0), // FRem
|
|
new OpData(1, 1, 2, 0), // FMod
|
|
new OpData(1, 1, 2, 0), // VectorTimesScalar
|
|
new OpData(1, 1, 2, 0), // MatrixTimesScalar
|
|
new OpData(1, 1, 2, 0), // VectorTimesMatrix
|
|
new OpData(1, 1, 2, 0), // MatrixTimesVector
|
|
new OpData(1, 1, 2, 0), // MatrixTimesMatrix
|
|
new OpData(1, 1, 2, 0), // OuterProduct
|
|
new OpData(1, 1, 2, 0), // Dot
|
|
new OpData(1, 1, 2, 0), // IAddCarry
|
|
new OpData(1, 1, 2, 0), // ISubBorrow
|
|
new OpData(1, 1, 2, 0), // UMulExtended
|
|
new OpData(1, 1, 2, 0), // SMulExtended
|
|
new OpData(1, 1, 0, 0), // #153
|
|
new OpData(1, 1, 1, 0), // Any
|
|
new OpData(1, 1, 1, 0), // All
|
|
new OpData(1, 1, 1, 0), // IsNan
|
|
new OpData(1, 1, 1, 0), // IsInf
|
|
new OpData(1, 1, 1, 0), // IsFinite
|
|
new OpData(1, 1, 1, 0), // IsNormal
|
|
new OpData(1, 1, 1, 0), // SignBitSet
|
|
new OpData(1, 1, 2, 0), // LessOrGreater
|
|
new OpData(1, 1, 2, 0), // Ordered
|
|
new OpData(1, 1, 2, 0), // Unordered
|
|
new OpData(1, 1, 2, 0), // LogicalEqual
|
|
new OpData(1, 1, 2, 0), // LogicalNotEqual
|
|
new OpData(1, 1, 2, 0), // LogicalOr
|
|
new OpData(1, 1, 2, 0), // LogicalAnd
|
|
new OpData(1, 1, 1, 0), // LogicalNot
|
|
new OpData(1, 1, 3, 0), // Select
|
|
new OpData(1, 1, 2, 0), // IEqual
|
|
new OpData(1, 1, 2, 0), // INotEqual
|
|
new OpData(1, 1, 2, 0), // UGreaterThan
|
|
new OpData(1, 1, 2, 0), // SGreaterThan
|
|
new OpData(1, 1, 2, 0), // UGreaterThanEqual
|
|
new OpData(1, 1, 2, 0), // SGreaterThanEqual
|
|
new OpData(1, 1, 2, 0), // ULessThan
|
|
new OpData(1, 1, 2, 0), // SLessThan
|
|
new OpData(1, 1, 2, 0), // ULessThanEqual
|
|
new OpData(1, 1, 2, 0), // SLessThanEqual
|
|
new OpData(1, 1, 2, 0), // FOrdEqual
|
|
new OpData(1, 1, 2, 0), // FUnordEqual
|
|
new OpData(1, 1, 2, 0), // FOrdNotEqual
|
|
new OpData(1, 1, 2, 0), // FUnordNotEqual
|
|
new OpData(1, 1, 2, 0), // FOrdLessThan
|
|
new OpData(1, 1, 2, 0), // FUnordLessThan
|
|
new OpData(1, 1, 2, 0), // FOrdGreaterThan
|
|
new OpData(1, 1, 2, 0), // FUnordGreaterThan
|
|
new OpData(1, 1, 2, 0), // FOrdLessThanEqual
|
|
new OpData(1, 1, 2, 0), // FUnordLessThanEqual
|
|
new OpData(1, 1, 2, 0), // FOrdGreaterThanEqual
|
|
new OpData(1, 1, 2, 0), // FUnordGreaterThanEqual
|
|
new OpData(1, 1, 0, 0), // #192
|
|
new OpData(1, 1, 0, 0), // #193
|
|
new OpData(1, 1, 2, 0), // ShiftRightLogical
|
|
new OpData(1, 1, 2, 0), // ShiftRightArithmetic
|
|
new OpData(1, 1, 2, 0), // ShiftLeftLogical
|
|
new OpData(1, 1, 2, 0), // BitwiseOr
|
|
new OpData(1, 1, 2, 0), // BitwiseXor
|
|
new OpData(1, 1, 2, 0), // BitwiseAnd
|
|
new OpData(1, 1, 1, 0), // Not
|
|
new OpData(1, 1, 4, 0), // BitFieldInsert
|
|
new OpData(1, 1, 3, 0), // BitFieldSExtract
|
|
new OpData(1, 1, 3, 0), // BitFieldUExtract
|
|
new OpData(1, 1, 1, 0), // BitReverse
|
|
new OpData(1, 1, 1, 0), // BitCount
|
|
new OpData(1, 1, 0, 0), // #206
|
|
new OpData(1, 1, 0, 0), // DPdx
|
|
new OpData(1, 1, 0, 0), // DPdy
|
|
new OpData(1, 1, 0, 0), // Fwidth
|
|
new OpData(1, 1, 0, 0), // DPdxFine
|
|
new OpData(1, 1, 0, 0), // DPdyFine
|
|
new OpData(1, 1, 0, 0), // FwidthFine
|
|
new OpData(1, 1, 0, 0), // DPdxCoarse
|
|
new OpData(1, 1, 0, 0), // DPdyCoarse
|
|
new OpData(1, 1, 0, 0), // FwidthCoarse
|
|
new OpData(1, 1, 0, 0), // #216
|
|
new OpData(1, 1, 0, 0), // #217
|
|
new OpData(0, 0, 0, 0), // EmitVertex
|
|
new OpData(0, 0, 0, 0), // EndPrimitive
|
|
new OpData(0, 0, 0, 0), // EmitStreamVertex
|
|
new OpData(0, 0, 0, 0), // EndStreamPrimitive
|
|
new OpData(1, 1, 0, 0), // #222
|
|
new OpData(1, 1, 0, 0), // #223
|
|
new OpData(0, 0, -3, 0), // ControlBarrier
|
|
new OpData(0, 0, -2, 0), // MemoryBarrier
|
|
new OpData(1, 1, 0, 0), // #226
|
|
new OpData(1, 1, 0, 0), // AtomicLoad
|
|
new OpData(0, 0, 0, 0), // AtomicStore
|
|
new OpData(1, 1, 0, 0), // AtomicExchange
|
|
new OpData(1, 1, 0, 0), // AtomicCompareExchange
|
|
new OpData(1, 1, 0, 0), // AtomicCompareExchangeWeak
|
|
new OpData(1, 1, 0, 0), // AtomicIIncrement
|
|
new OpData(1, 1, 0, 0), // AtomicIDecrement
|
|
new OpData(1, 1, 0, 0), // AtomicIAdd
|
|
new OpData(1, 1, 0, 0), // AtomicISub
|
|
new OpData(1, 1, 0, 0), // AtomicSMin
|
|
new OpData(1, 1, 0, 0), // AtomicUMin
|
|
new OpData(1, 1, 0, 0), // AtomicSMax
|
|
new OpData(1, 1, 0, 0), // AtomicUMax
|
|
new OpData(1, 1, 0, 0), // AtomicAnd
|
|
new OpData(1, 1, 0, 0), // AtomicOr
|
|
new OpData(1, 1, 0, 0), // AtomicXor
|
|
new OpData(1, 1, 0, 0), // #243
|
|
new OpData(1, 1, 0, 0), // #244
|
|
new OpData(1, 1, 0, 0), // Phi
|
|
new OpData(0, 0, -2, 1), // LoopMerge
|
|
new OpData(0, 0, -1, 1), // SelectionMerge
|
|
new OpData(1, 0, 0, 0), // Label
|
|
new OpData(0, 0, -1, 0), // Branch
|
|
new OpData(0, 0, -3, 1), // BranchConditional
|
|
new OpData(0, 0, 0, 0), // Switch
|
|
new OpData(0, 0, 0, 0), // Kill
|
|
new OpData(0, 0, 0, 0), // Return
|
|
new OpData(0, 0, 0, 0), // ReturnValue
|
|
new OpData(0, 0, 0, 0), // Unreachable
|
|
new OpData(0, 0, 0, 0), // LifetimeStart
|
|
new OpData(0, 0, 0, 0), // LifetimeStop
|
|
new OpData(1, 1, 0, 0), // #258
|
|
new OpData(1, 1, 0, 0), // GroupAsyncCopy
|
|
new OpData(0, 0, 0, 0), // GroupWaitEvents
|
|
new OpData(1, 1, 0, 0), // GroupAll
|
|
new OpData(1, 1, 0, 0), // GroupAny
|
|
new OpData(1, 1, 0, 0), // GroupBroadcast
|
|
new OpData(1, 1, 0, 0), // GroupIAdd
|
|
new OpData(1, 1, 0, 0), // GroupFAdd
|
|
new OpData(1, 1, 0, 0), // GroupFMin
|
|
new OpData(1, 1, 0, 0), // GroupUMin
|
|
new OpData(1, 1, 0, 0), // GroupSMin
|
|
new OpData(1, 1, 0, 0), // GroupFMax
|
|
new OpData(1, 1, 0, 0), // GroupUMax
|
|
new OpData(1, 1, 0, 0), // GroupSMax
|
|
new OpData(1, 1, 0, 0), // #272
|
|
new OpData(1, 1, 0, 0), // #273
|
|
new OpData(1, 1, 0, 0), // ReadPipe
|
|
new OpData(1, 1, 0, 0), // WritePipe
|
|
new OpData(1, 1, 0, 0), // ReservedReadPipe
|
|
new OpData(1, 1, 0, 0), // ReservedWritePipe
|
|
new OpData(1, 1, 0, 0), // ReserveReadPipePackets
|
|
new OpData(1, 1, 0, 0), // ReserveWritePipePackets
|
|
new OpData(0, 0, 0, 0), // CommitReadPipe
|
|
new OpData(0, 0, 0, 0), // CommitWritePipe
|
|
new OpData(1, 1, 0, 0), // IsValidReserveId
|
|
new OpData(1, 1, 0, 0), // GetNumPipePackets
|
|
new OpData(1, 1, 0, 0), // GetMaxPipePackets
|
|
new OpData(1, 1, 0, 0), // GroupReserveReadPipePackets
|
|
new OpData(1, 1, 0, 0), // GroupReserveWritePipePackets
|
|
new OpData(0, 0, 0, 0), // GroupCommitReadPipe
|
|
new OpData(0, 0, 0, 0), // GroupCommitWritePipe
|
|
new OpData(1, 1, 0, 0), // #289
|
|
new OpData(1, 1, 0, 0), // #290
|
|
new OpData(1, 1, 0, 0), // EnqueueMarker
|
|
new OpData(1, 1, 0, 0), // EnqueueKernel
|
|
new OpData(1, 1, 0, 0), // GetKernelNDrangeSubGroupCount
|
|
new OpData(1, 1, 0, 0), // GetKernelNDrangeMaxSubGroupSize
|
|
new OpData(1, 1, 0, 0), // GetKernelWorkGroupSize
|
|
new OpData(1, 1, 0, 0), // GetKernelPreferredWorkGroupSizeMultiple
|
|
new OpData(0, 0, 0, 0), // RetainEvent
|
|
new OpData(0, 0, 0, 0), // ReleaseEvent
|
|
new OpData(1, 1, 0, 0), // CreateUserEvent
|
|
new OpData(1, 1, 0, 0), // IsValidEvent
|
|
new OpData(0, 0, 0, 0), // SetUserEventStatus
|
|
new OpData(0, 0, 0, 0), // CaptureEventProfilingInfo
|
|
new OpData(1, 1, 0, 0), // GetDefaultQueue
|
|
new OpData(1, 1, 0, 0), // BuildNDRange
|
|
new OpData(1, 1, 2, 1), // ImageSparseSampleImplicitLod
|
|
new OpData(1, 1, 2, 1), // ImageSparseSampleExplicitLod
|
|
new OpData(1, 1, 3, 1), // ImageSparseSampleDrefImplicitLod
|
|
new OpData(1, 1, 3, 1), // ImageSparseSampleDrefExplicitLod
|
|
new OpData(1, 1, 2, 1), // ImageSparseSampleProjImplicitLod
|
|
new OpData(1, 1, 2, 1), // ImageSparseSampleProjExplicitLod
|
|
new OpData(1, 1, 3, 1), // ImageSparseSampleProjDrefImplicitLod
|
|
new OpData(1, 1, 3, 1), // ImageSparseSampleProjDrefExplicitLod
|
|
new OpData(1, 1, 2, 1), // ImageSparseFetch
|
|
new OpData(1, 1, 3, 1), // ImageSparseGather
|
|
new OpData(1, 1, 3, 1), // ImageSparseDrefGather
|
|
new OpData(1, 1, 1, 0), // ImageSparseTexelsResident
|
|
new OpData(0, 0, 0, 0), // NoLine
|
|
new OpData(1, 1, 0, 0), // AtomicFlagTestAndSet
|
|
new OpData(0, 0, 0, 0), // AtomicFlagClear
|
|
new OpData(1, 1, 0, 0), // ImageSparseRead
|
|
new OpData(1, 1, 0, 0), // SizeOf
|
|
new OpData(1, 1, 0, 0), // TypePipeStorage
|
|
new OpData(1, 1, 0, 0), // ConstantPipeStorage
|
|
new OpData(1, 1, 0, 0), // CreatePipeFromPipeStorage
|
|
new OpData(1, 1, 0, 0), // GetKernelLocalSizeForSubgroupCount
|
|
new OpData(1, 1, 0, 0), // GetKernelMaxNumSubgroups
|
|
new OpData(1, 1, 0, 0), // TypeNamedBarrier
|
|
new OpData(1, 1, 0, 1), // NamedBarrierInitialize
|
|
new OpData(0, 0, -2, 1), // MemoryNamedBarrier
|
|
new OpData(1, 1, 0, 0), // ModuleProcessed
|
|
};
|
|
};
|
|
}
|