|
|
|
@ -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 { |
|
|
|
|