summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
-rw-r--r--src/video_core/shader/ast.cpp4
-rw-r--r--src/video_core/shader/ast.h8
2 files changed, 9 insertions, 3 deletions
diff --git a/src/video_core/shader/ast.cpp b/src/video_core/shader/ast.cpp
index 14c50e1c6..74b9a8f9a 100644
--- a/src/video_core/shader/ast.cpp
+++ b/src/video_core/shader/ast.cpp
@@ -497,9 +497,7 @@ void ASTManager::Decompile() {
}
}
if (can_remove) {
- auto& manager = label->GetManager();
- manager.Remove(label);
- labels.erase(it);
+ label->MarkLabelUnused();
}
}
}
diff --git a/src/video_core/shader/ast.h b/src/video_core/shader/ast.h
index 849d0612c..07deb58e4 100644
--- a/src/video_core/shader/ast.h
+++ b/src/video_core/shader/ast.h
@@ -112,6 +112,7 @@ class ASTLabel {
public:
ASTLabel(u32 index) : index{index} {}
u32 index;
+ bool unused{};
};
class ASTGoto {
@@ -204,6 +205,13 @@ public:
return nullptr;
}
+ void MarkLabelUnused() const {
+ auto inner = std::get_if<ASTLabel>(&data);
+ if (inner) {
+ inner->unused = true;
+ }
+ }
+
Expr GetIfCondition() const {
auto inner = std::get_if<ASTIfThen>(&data);
if (inner) {