mirror of
https://github.com/yuzu-emu/yuzu.git
synced 2025-06-13 22:37:56 -05:00
shader_ir: Pass decoded nodes as a whole instead of per basic blocks
Some games call LDG at the top of a basic block, making the tracking heuristic to fail. This commit lets the heuristic the decoded nodes as a whole instead of per basic blocks. This may lead to some false positives but allows it the heuristic to track cases it previously couldn't.
This commit is contained in:
@ -591,31 +591,31 @@ private:
|
||||
*/
|
||||
u32 DecodeInstr(BasicBlock& bb, u32 pc);
|
||||
|
||||
u32 DecodeArithmetic(BasicBlock& bb, const BasicBlock& code, u32 pc);
|
||||
u32 DecodeArithmeticImmediate(BasicBlock& bb, const BasicBlock& code, u32 pc);
|
||||
u32 DecodeBfe(BasicBlock& bb, const BasicBlock& code, u32 pc);
|
||||
u32 DecodeBfi(BasicBlock& bb, const BasicBlock& code, u32 pc);
|
||||
u32 DecodeShift(BasicBlock& bb, const BasicBlock& code, u32 pc);
|
||||
u32 DecodeArithmeticInteger(BasicBlock& bb, const BasicBlock& code, u32 pc);
|
||||
u32 DecodeArithmeticIntegerImmediate(BasicBlock& bb, const BasicBlock& code, u32 pc);
|
||||
u32 DecodeArithmeticHalf(BasicBlock& bb, const BasicBlock& code, u32 pc);
|
||||
u32 DecodeArithmeticHalfImmediate(BasicBlock& bb, const BasicBlock& code, u32 pc);
|
||||
u32 DecodeFfma(BasicBlock& bb, const BasicBlock& code, u32 pc);
|
||||
u32 DecodeHfma2(BasicBlock& bb, const BasicBlock& code, u32 pc);
|
||||
u32 DecodeConversion(BasicBlock& bb, const BasicBlock& code, u32 pc);
|
||||
u32 DecodeMemory(BasicBlock& bb, const BasicBlock& code, u32 pc);
|
||||
u32 DecodeFloatSetPredicate(BasicBlock& bb, const BasicBlock& code, u32 pc);
|
||||
u32 DecodeIntegerSetPredicate(BasicBlock& bb, const BasicBlock& code, u32 pc);
|
||||
u32 DecodeHalfSetPredicate(BasicBlock& bb, const BasicBlock& code, u32 pc);
|
||||
u32 DecodePredicateSetRegister(BasicBlock& bb, const BasicBlock& code, u32 pc);
|
||||
u32 DecodePredicateSetPredicate(BasicBlock& bb, const BasicBlock& code, u32 pc);
|
||||
u32 DecodeRegisterSetPredicate(BasicBlock& bb, const BasicBlock& code, u32 pc);
|
||||
u32 DecodeFloatSet(BasicBlock& bb, const BasicBlock& code, u32 pc);
|
||||
u32 DecodeIntegerSet(BasicBlock& bb, const BasicBlock& code, u32 pc);
|
||||
u32 DecodeHalfSet(BasicBlock& bb, const BasicBlock& code, u32 pc);
|
||||
u32 DecodeVideo(BasicBlock& bb, const BasicBlock& code, u32 pc);
|
||||
u32 DecodeXmad(BasicBlock& bb, const BasicBlock& code, u32 pc);
|
||||
u32 DecodeOther(BasicBlock& bb, const BasicBlock& code, u32 pc);
|
||||
u32 DecodeArithmetic(BasicBlock& bb, u32 pc);
|
||||
u32 DecodeArithmeticImmediate(BasicBlock& bb, u32 pc);
|
||||
u32 DecodeBfe(BasicBlock& bb, u32 pc);
|
||||
u32 DecodeBfi(BasicBlock& bb, u32 pc);
|
||||
u32 DecodeShift(BasicBlock& bb, u32 pc);
|
||||
u32 DecodeArithmeticInteger(BasicBlock& bb, u32 pc);
|
||||
u32 DecodeArithmeticIntegerImmediate(BasicBlock& bb, u32 pc);
|
||||
u32 DecodeArithmeticHalf(BasicBlock& bb, u32 pc);
|
||||
u32 DecodeArithmeticHalfImmediate(BasicBlock& bb, u32 pc);
|
||||
u32 DecodeFfma(BasicBlock& bb, u32 pc);
|
||||
u32 DecodeHfma2(BasicBlock& bb, u32 pc);
|
||||
u32 DecodeConversion(BasicBlock& bb, u32 pc);
|
||||
u32 DecodeMemory(BasicBlock& bb, u32 pc);
|
||||
u32 DecodeFloatSetPredicate(BasicBlock& bb, u32 pc);
|
||||
u32 DecodeIntegerSetPredicate(BasicBlock& bb, u32 pc);
|
||||
u32 DecodeHalfSetPredicate(BasicBlock& bb, u32 pc);
|
||||
u32 DecodePredicateSetRegister(BasicBlock& bb, u32 pc);
|
||||
u32 DecodePredicateSetPredicate(BasicBlock& bb, u32 pc);
|
||||
u32 DecodeRegisterSetPredicate(BasicBlock& bb, u32 pc);
|
||||
u32 DecodeFloatSet(BasicBlock& bb, u32 pc);
|
||||
u32 DecodeIntegerSet(BasicBlock& bb, u32 pc);
|
||||
u32 DecodeHalfSet(BasicBlock& bb, u32 pc);
|
||||
u32 DecodeVideo(BasicBlock& bb, u32 pc);
|
||||
u32 DecodeXmad(BasicBlock& bb, u32 pc);
|
||||
u32 DecodeOther(BasicBlock& bb, u32 pc);
|
||||
|
||||
/// Internalizes node's data and returns a managed pointer to a clone of that node
|
||||
Node StoreNode(NodeData&& node_data);
|
||||
@ -804,6 +804,7 @@ private:
|
||||
std::map<std::pair<u32, u32>, ExitMethod> exit_method_map;
|
||||
|
||||
std::map<u32, BasicBlock> basic_blocks;
|
||||
BasicBlock global_code;
|
||||
|
||||
std::vector<std::unique_ptr<NodeData>> stored_nodes;
|
||||
|
||||
|
Reference in New Issue
Block a user