| 123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184 |
- using System;
- namespace Ryujinx.Graphics.Shader.IntermediateRepresentation
- {
- [Flags]
- enum Instruction
- {
- Absolute = 1,
- Add,
- AtomicAdd,
- AtomicAnd,
- AtomicCompareAndSwap,
- AtomicMinS32,
- AtomicMinU32,
- AtomicMaxS32,
- AtomicMaxU32,
- AtomicOr,
- AtomicSwap,
- AtomicXor,
- Ballot,
- Barrier,
- BitCount,
- BitfieldExtractS32,
- BitfieldExtractU32,
- BitfieldInsert,
- BitfieldReverse,
- BitwiseAnd,
- BitwiseExclusiveOr,
- BitwiseNot,
- BitwiseOr,
- Branch,
- BranchIfFalse,
- BranchIfTrue,
- Call,
- Ceiling,
- Clamp,
- ClampU32,
- Comment,
- CompareEqual,
- CompareGreater,
- CompareGreaterOrEqual,
- CompareGreaterOrEqualU32,
- CompareGreaterU32,
- CompareLess,
- CompareLessOrEqual,
- CompareLessOrEqualU32,
- CompareLessU32,
- CompareNotEqual,
- ConditionalSelect,
- ConvertFP32ToFP64,
- ConvertFP64ToFP32,
- ConvertFP32ToS32,
- ConvertFP32ToU32,
- ConvertFP64ToS32,
- ConvertFP64ToU32,
- ConvertS32ToFP32,
- ConvertS32ToFP64,
- ConvertU32ToFP32,
- ConvertU32ToFP64,
- Copy,
- Cosine,
- Ddx,
- Ddy,
- Discard,
- Divide,
- EmitVertex,
- EndPrimitive,
- ExponentB2,
- FSIBegin,
- FSIEnd,
- FindLSB,
- FindMSBS32,
- FindMSBU32,
- Floor,
- FusedMultiplyAdd,
- GroupMemoryBarrier,
- ImageLoad,
- ImageStore,
- ImageAtomic,
- IsNan,
- LoadAttribute,
- LoadConstant,
- LoadGlobal,
- LoadLocal,
- LoadShared,
- LoadStorage,
- Lod,
- LogarithmB2,
- LogicalAnd,
- LogicalExclusiveOr,
- LogicalNot,
- LogicalOr,
- LoopBreak,
- LoopContinue,
- MarkLabel,
- Maximum,
- MaximumU32,
- MemoryBarrier,
- Minimum,
- MinimumU32,
- Multiply,
- MultiplyHighS32,
- MultiplyHighU32,
- Negate,
- PackDouble2x32,
- PackHalf2x16,
- ReciprocalSquareRoot,
- Return,
- Round,
- ShiftLeft,
- ShiftRightS32,
- ShiftRightU32,
- Shuffle,
- ShuffleDown,
- ShuffleUp,
- ShuffleXor,
- Sine,
- SquareRoot,
- StoreAttribute,
- StoreGlobal,
- StoreGlobal16,
- StoreGlobal8,
- StoreLocal,
- StoreShared,
- StoreShared16,
- StoreShared8,
- StoreStorage,
- StoreStorage16,
- StoreStorage8,
- Subtract,
- SwizzleAdd,
- TextureSample,
- TextureSize,
- Truncate,
- UnpackDouble2x32,
- UnpackHalf2x16,
- VoteAll,
- VoteAllEqual,
- VoteAny,
- Count,
- FP32 = 1 << 16,
- FP64 = 1 << 17,
- MrShift = 18,
- MrGlobal = 0 << MrShift,
- MrShared = 1 << MrShift,
- MrStorage = 2 << MrShift,
- MrMask = 3 << MrShift,
- Mask = 0xffff
- }
- static class InstructionExtensions
- {
- public static bool IsAtomic(this Instruction inst)
- {
- switch (inst & Instruction.Mask)
- {
- case Instruction.AtomicAdd:
- case Instruction.AtomicAnd:
- case Instruction.AtomicCompareAndSwap:
- case Instruction.AtomicMaxS32:
- case Instruction.AtomicMaxU32:
- case Instruction.AtomicMinS32:
- case Instruction.AtomicMinU32:
- case Instruction.AtomicOr:
- case Instruction.AtomicSwap:
- case Instruction.AtomicXor:
- return true;
- }
- return false;
- }
- public static bool IsTextureQuery(this Instruction inst)
- {
- inst &= Instruction.Mask;
- return inst == Instruction.Lod || inst == Instruction.TextureSize;
- }
- }
- }
|