mirror of
https://github.com/yuzu-emu/yuzu-android.git
synced 2025-06-10 14:48:17 -05:00
shader: Fix branches to visited virtual blocks
This commit is contained in:
@ -486,6 +486,16 @@ Block* CFG::AddLabel(Block* block, Stack stack, Location pc, FunctionId function
|
||||
}
|
||||
if (const auto it{function.blocks.find(pc, Compare{})}; it != function.blocks.end()) {
|
||||
// Block already exists and it has been visited
|
||||
if (function.blocks.begin() != it) {
|
||||
// Check if the previous node is the virtual variant of the label
|
||||
// This won't exist if a virtual node is not needed or it hasn't been visited
|
||||
// If it hasn't been visited and a virtual node is needed, this will still behave as
|
||||
// expected because the node impersonated with its virtual node.
|
||||
const auto prev{std::prev(it)};
|
||||
if (it->begin.Virtual() == prev->begin) {
|
||||
return &*prev;
|
||||
}
|
||||
}
|
||||
return &*it;
|
||||
}
|
||||
Block* const new_block{block_pool.Create(Block{
|
||||
|
Reference in New Issue
Block a user