|
|
@@ -1295,139 +1295,139 @@ private:
|
|
|
}
|
|
|
|
|
|
static constexpr OperationDecompilersArray operation_decompilers = {
|
|
|
- &Assign,
|
|
|
- &AssignComposite,
|
|
|
-
|
|
|
- &Composite,
|
|
|
- &Select,
|
|
|
-
|
|
|
- &Add<Type::Float>,
|
|
|
- &Mul<Type::Float>,
|
|
|
- &Div<Type::Float>,
|
|
|
- &Fma<Type::Float>,
|
|
|
- &Negate<Type::Float>,
|
|
|
- &Absolute<Type::Float>,
|
|
|
- &FClamp,
|
|
|
- &Min<Type::Float>,
|
|
|
- &Max<Type::Float>,
|
|
|
- &FCos,
|
|
|
- &FSin,
|
|
|
- &FExp2,
|
|
|
- &FLog2,
|
|
|
- &FInverseSqrt,
|
|
|
- &FSqrt,
|
|
|
- &FRoundEven,
|
|
|
- &FFloor,
|
|
|
- &FCeil,
|
|
|
- &FTrunc,
|
|
|
- &FCastInteger<Type::Int>,
|
|
|
- &FCastInteger<Type::Uint>,
|
|
|
-
|
|
|
- &Add<Type::Int>,
|
|
|
- &Mul<Type::Int>,
|
|
|
- &Div<Type::Int>,
|
|
|
- &Negate<Type::Int>,
|
|
|
- &Absolute<Type::Int>,
|
|
|
- &Min<Type::Int>,
|
|
|
- &Max<Type::Int>,
|
|
|
-
|
|
|
- &ICastFloat,
|
|
|
- &ICastUnsigned,
|
|
|
- &LogicalShiftLeft<Type::Int>,
|
|
|
- &ILogicalShiftRight,
|
|
|
- &IArithmeticShiftRight,
|
|
|
- &BitwiseAnd<Type::Int>,
|
|
|
- &BitwiseOr<Type::Int>,
|
|
|
- &BitwiseXor<Type::Int>,
|
|
|
- &BitwiseNot<Type::Int>,
|
|
|
- &BitfieldInsert<Type::Int>,
|
|
|
- &BitCount<Type::Int>,
|
|
|
-
|
|
|
- &Add<Type::Uint>,
|
|
|
- &Mul<Type::Uint>,
|
|
|
- &Div<Type::Uint>,
|
|
|
- &Min<Type::Uint>,
|
|
|
- &Max<Type::Uint>,
|
|
|
- &UCastFloat,
|
|
|
- &UCastSigned,
|
|
|
- &LogicalShiftLeft<Type::Uint>,
|
|
|
- &UShiftRight,
|
|
|
- &UShiftRight,
|
|
|
- &BitwiseAnd<Type::Uint>,
|
|
|
- &BitwiseOr<Type::Uint>,
|
|
|
- &BitwiseXor<Type::Uint>,
|
|
|
- &BitwiseNot<Type::Uint>,
|
|
|
- &BitfieldInsert<Type::Uint>,
|
|
|
- &BitCount<Type::Uint>,
|
|
|
-
|
|
|
- &Add<Type::HalfFloat>,
|
|
|
- &Mul<Type::HalfFloat>,
|
|
|
- &Fma<Type::HalfFloat>,
|
|
|
- &Absolute<Type::HalfFloat>,
|
|
|
- &HNegate,
|
|
|
- &HMergeF32,
|
|
|
- &HMergeH0,
|
|
|
- &HMergeH1,
|
|
|
-
|
|
|
- &LogicalAssign,
|
|
|
- &LogicalAnd,
|
|
|
- &LogicalOr,
|
|
|
- &LogicalXor,
|
|
|
- &LogicalNegate,
|
|
|
- &LogicalPick2,
|
|
|
- &LogicalAll2,
|
|
|
- &LogicalAny2,
|
|
|
-
|
|
|
- &LogicalLessThan<Type::Float>,
|
|
|
- &LogicalEqual<Type::Float>,
|
|
|
- &LogicalLessEqual<Type::Float>,
|
|
|
- &LogicalGreaterThan<Type::Float>,
|
|
|
- &LogicalNotEqual<Type::Float>,
|
|
|
- &LogicalGreaterEqual<Type::Float>,
|
|
|
- &LogicalFIsNan,
|
|
|
-
|
|
|
- &LogicalLessThan<Type::Int>,
|
|
|
- &LogicalEqual<Type::Int>,
|
|
|
- &LogicalLessEqual<Type::Int>,
|
|
|
- &LogicalGreaterThan<Type::Int>,
|
|
|
- &LogicalNotEqual<Type::Int>,
|
|
|
- &LogicalGreaterEqual<Type::Int>,
|
|
|
-
|
|
|
- &LogicalLessThan<Type::Uint>,
|
|
|
- &LogicalEqual<Type::Uint>,
|
|
|
- &LogicalLessEqual<Type::Uint>,
|
|
|
- &LogicalGreaterThan<Type::Uint>,
|
|
|
- &LogicalNotEqual<Type::Uint>,
|
|
|
- &LogicalGreaterEqual<Type::Uint>,
|
|
|
-
|
|
|
- &Logical2HLessThan,
|
|
|
- &Logical2HEqual,
|
|
|
- &Logical2HLessEqual,
|
|
|
- &Logical2HGreaterThan,
|
|
|
- &Logical2HNotEqual,
|
|
|
- &Logical2HGreaterEqual,
|
|
|
-
|
|
|
- &F4Texture,
|
|
|
- &F4TextureLod,
|
|
|
- &F4TextureGather,
|
|
|
- &F4TextureQueryDimensions,
|
|
|
- &F4TextureQueryLod,
|
|
|
- &F4TexelFetch,
|
|
|
-
|
|
|
- &Ipa,
|
|
|
-
|
|
|
- &Bra,
|
|
|
- &PushFlowStack, // Ssy
|
|
|
- &PushFlowStack, // Brk
|
|
|
- &PopFlowStack, // Sync
|
|
|
- &PopFlowStack, // Brk
|
|
|
- &Exit,
|
|
|
- &Kil,
|
|
|
-
|
|
|
- &EmitVertex,
|
|
|
- &EndPrimitive,
|
|
|
-
|
|
|
- &YNegate,
|
|
|
+ &GLSLDecompiler::Assign,
|
|
|
+ &GLSLDecompiler::AssignComposite,
|
|
|
+
|
|
|
+ &GLSLDecompiler::Composite,
|
|
|
+ &GLSLDecompiler::Select,
|
|
|
+
|
|
|
+ &GLSLDecompiler::Add<Type::Float>,
|
|
|
+ &GLSLDecompiler::Mul<Type::Float>,
|
|
|
+ &GLSLDecompiler::Div<Type::Float>,
|
|
|
+ &GLSLDecompiler::Fma<Type::Float>,
|
|
|
+ &GLSLDecompiler::Negate<Type::Float>,
|
|
|
+ &GLSLDecompiler::Absolute<Type::Float>,
|
|
|
+ &GLSLDecompiler::FClamp,
|
|
|
+ &GLSLDecompiler::Min<Type::Float>,
|
|
|
+ &GLSLDecompiler::Max<Type::Float>,
|
|
|
+ &GLSLDecompiler::FCos,
|
|
|
+ &GLSLDecompiler::FSin,
|
|
|
+ &GLSLDecompiler::FExp2,
|
|
|
+ &GLSLDecompiler::FLog2,
|
|
|
+ &GLSLDecompiler::FInverseSqrt,
|
|
|
+ &GLSLDecompiler::FSqrt,
|
|
|
+ &GLSLDecompiler::FRoundEven,
|
|
|
+ &GLSLDecompiler::FFloor,
|
|
|
+ &GLSLDecompiler::FCeil,
|
|
|
+ &GLSLDecompiler::FTrunc,
|
|
|
+ &GLSLDecompiler::FCastInteger<Type::Int>,
|
|
|
+ &GLSLDecompiler::FCastInteger<Type::Uint>,
|
|
|
+
|
|
|
+ &GLSLDecompiler::Add<Type::Int>,
|
|
|
+ &GLSLDecompiler::Mul<Type::Int>,
|
|
|
+ &GLSLDecompiler::Div<Type::Int>,
|
|
|
+ &GLSLDecompiler::Negate<Type::Int>,
|
|
|
+ &GLSLDecompiler::Absolute<Type::Int>,
|
|
|
+ &GLSLDecompiler::Min<Type::Int>,
|
|
|
+ &GLSLDecompiler::Max<Type::Int>,
|
|
|
+
|
|
|
+ &GLSLDecompiler::ICastFloat,
|
|
|
+ &GLSLDecompiler::ICastUnsigned,
|
|
|
+ &GLSLDecompiler::LogicalShiftLeft<Type::Int>,
|
|
|
+ &GLSLDecompiler::ILogicalShiftRight,
|
|
|
+ &GLSLDecompiler::IArithmeticShiftRight,
|
|
|
+ &GLSLDecompiler::BitwiseAnd<Type::Int>,
|
|
|
+ &GLSLDecompiler::BitwiseOr<Type::Int>,
|
|
|
+ &GLSLDecompiler::BitwiseXor<Type::Int>,
|
|
|
+ &GLSLDecompiler::BitwiseNot<Type::Int>,
|
|
|
+ &GLSLDecompiler::BitfieldInsert<Type::Int>,
|
|
|
+ &GLSLDecompiler::BitCount<Type::Int>,
|
|
|
+
|
|
|
+ &GLSLDecompiler::Add<Type::Uint>,
|
|
|
+ &GLSLDecompiler::Mul<Type::Uint>,
|
|
|
+ &GLSLDecompiler::Div<Type::Uint>,
|
|
|
+ &GLSLDecompiler::Min<Type::Uint>,
|
|
|
+ &GLSLDecompiler::Max<Type::Uint>,
|
|
|
+ &GLSLDecompiler::UCastFloat,
|
|
|
+ &GLSLDecompiler::UCastSigned,
|
|
|
+ &GLSLDecompiler::LogicalShiftLeft<Type::Uint>,
|
|
|
+ &GLSLDecompiler::UShiftRight,
|
|
|
+ &GLSLDecompiler::UShiftRight,
|
|
|
+ &GLSLDecompiler::BitwiseAnd<Type::Uint>,
|
|
|
+ &GLSLDecompiler::BitwiseOr<Type::Uint>,
|
|
|
+ &GLSLDecompiler::BitwiseXor<Type::Uint>,
|
|
|
+ &GLSLDecompiler::BitwiseNot<Type::Uint>,
|
|
|
+ &GLSLDecompiler::BitfieldInsert<Type::Uint>,
|
|
|
+ &GLSLDecompiler::BitCount<Type::Uint>,
|
|
|
+
|
|
|
+ &GLSLDecompiler::Add<Type::HalfFloat>,
|
|
|
+ &GLSLDecompiler::Mul<Type::HalfFloat>,
|
|
|
+ &GLSLDecompiler::Fma<Type::HalfFloat>,
|
|
|
+ &GLSLDecompiler::Absolute<Type::HalfFloat>,
|
|
|
+ &GLSLDecompiler::HNegate,
|
|
|
+ &GLSLDecompiler::HMergeF32,
|
|
|
+ &GLSLDecompiler::HMergeH0,
|
|
|
+ &GLSLDecompiler::HMergeH1,
|
|
|
+
|
|
|
+ &GLSLDecompiler::LogicalAssign,
|
|
|
+ &GLSLDecompiler::LogicalAnd,
|
|
|
+ &GLSLDecompiler::LogicalOr,
|
|
|
+ &GLSLDecompiler::LogicalXor,
|
|
|
+ &GLSLDecompiler::LogicalNegate,
|
|
|
+ &GLSLDecompiler::LogicalPick2,
|
|
|
+ &GLSLDecompiler::LogicalAll2,
|
|
|
+ &GLSLDecompiler::LogicalAny2,
|
|
|
+
|
|
|
+ &GLSLDecompiler::LogicalLessThan<Type::Float>,
|
|
|
+ &GLSLDecompiler::LogicalEqual<Type::Float>,
|
|
|
+ &GLSLDecompiler::LogicalLessEqual<Type::Float>,
|
|
|
+ &GLSLDecompiler::LogicalGreaterThan<Type::Float>,
|
|
|
+ &GLSLDecompiler::LogicalNotEqual<Type::Float>,
|
|
|
+ &GLSLDecompiler::LogicalGreaterEqual<Type::Float>,
|
|
|
+ &GLSLDecompiler::LogicalFIsNan,
|
|
|
+
|
|
|
+ &GLSLDecompiler::LogicalLessThan<Type::Int>,
|
|
|
+ &GLSLDecompiler::LogicalEqual<Type::Int>,
|
|
|
+ &GLSLDecompiler::LogicalLessEqual<Type::Int>,
|
|
|
+ &GLSLDecompiler::LogicalGreaterThan<Type::Int>,
|
|
|
+ &GLSLDecompiler::LogicalNotEqual<Type::Int>,
|
|
|
+ &GLSLDecompiler::LogicalGreaterEqual<Type::Int>,
|
|
|
+
|
|
|
+ &GLSLDecompiler::LogicalLessThan<Type::Uint>,
|
|
|
+ &GLSLDecompiler::LogicalEqual<Type::Uint>,
|
|
|
+ &GLSLDecompiler::LogicalLessEqual<Type::Uint>,
|
|
|
+ &GLSLDecompiler::LogicalGreaterThan<Type::Uint>,
|
|
|
+ &GLSLDecompiler::LogicalNotEqual<Type::Uint>,
|
|
|
+ &GLSLDecompiler::LogicalGreaterEqual<Type::Uint>,
|
|
|
+
|
|
|
+ &GLSLDecompiler::Logical2HLessThan,
|
|
|
+ &GLSLDecompiler::Logical2HEqual,
|
|
|
+ &GLSLDecompiler::Logical2HLessEqual,
|
|
|
+ &GLSLDecompiler::Logical2HGreaterThan,
|
|
|
+ &GLSLDecompiler::Logical2HNotEqual,
|
|
|
+ &GLSLDecompiler::Logical2HGreaterEqual,
|
|
|
+
|
|
|
+ &GLSLDecompiler::F4Texture,
|
|
|
+ &GLSLDecompiler::F4TextureLod,
|
|
|
+ &GLSLDecompiler::F4TextureGather,
|
|
|
+ &GLSLDecompiler::F4TextureQueryDimensions,
|
|
|
+ &GLSLDecompiler::F4TextureQueryLod,
|
|
|
+ &GLSLDecompiler::F4TexelFetch,
|
|
|
+
|
|
|
+ &GLSLDecompiler::Ipa,
|
|
|
+
|
|
|
+ &GLSLDecompiler::Bra,
|
|
|
+ &GLSLDecompiler::PushFlowStack, // Ssy
|
|
|
+ &GLSLDecompiler::PushFlowStack, // Brk
|
|
|
+ &GLSLDecompiler::PopFlowStack, // Sync
|
|
|
+ &GLSLDecompiler::PopFlowStack, // Brk
|
|
|
+ &GLSLDecompiler::Exit,
|
|
|
+ &GLSLDecompiler::Kil,
|
|
|
+
|
|
|
+ &GLSLDecompiler::EmitVertex,
|
|
|
+ &GLSLDecompiler::EndPrimitive,
|
|
|
+
|
|
|
+ &GLSLDecompiler::YNegate,
|
|
|
};
|
|
|
|
|
|
std::string GetRegister(u32 index) const {
|