summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorGravatar Morph2022-05-11 17:49:25 -0400
committerGravatar GitHub2022-05-11 17:49:25 -0400
commitc2b583c9113985f6e3d228f83f87ee483dc96297 (patch)
tree11fe0c54547ee3e0401f3201de388dee72a41d00
parentMerge pull request #8325 from zhaobot/tx-update-20220509164742 (diff)
parentvideo_core/macro: clear code on upload address assignment (diff)
downloadyuzu-c2b583c9113985f6e3d228f83f87ee483dc96297.tar.gz
yuzu-c2b583c9113985f6e3d228f83f87ee483dc96297.tar.xz
yuzu-c2b583c9113985f6e3d228f83f87ee483dc96297.zip
Merge pull request #8328 from liamwhite/macro-clear
video_core/macro: clear code on upload address assignment
Diffstat (limited to '')
-rw-r--r--src/video_core/engines/maxwell_3d.cpp2
-rw-r--r--src/video_core/macro/macro.cpp5
-rw-r--r--src/video_core/macro/macro.h3
3 files changed, 10 insertions, 0 deletions
diff --git a/src/video_core/engines/maxwell_3d.cpp b/src/video_core/engines/maxwell_3d.cpp
index d4652b167..7d0cb8fce 100644
--- a/src/video_core/engines/maxwell_3d.cpp
+++ b/src/video_core/engines/maxwell_3d.cpp
@@ -173,6 +173,8 @@ void Maxwell3D::ProcessMethodCall(u32 method, u32 argument, u32 nonshadow_argume
173 case MAXWELL3D_REG_INDEX(shadow_ram_control): 173 case MAXWELL3D_REG_INDEX(shadow_ram_control):
174 shadow_state.shadow_ram_control = static_cast<Regs::ShadowRamControl>(nonshadow_argument); 174 shadow_state.shadow_ram_control = static_cast<Regs::ShadowRamControl>(nonshadow_argument);
175 return; 175 return;
176 case MAXWELL3D_REG_INDEX(macros.upload_address):
177 return macro_engine->ClearCode(regs.macros.upload_address);
176 case MAXWELL3D_REG_INDEX(macros.data): 178 case MAXWELL3D_REG_INDEX(macros.data):
177 return macro_engine->AddCode(regs.macros.upload_address, argument); 179 return macro_engine->AddCode(regs.macros.upload_address, argument);
178 case MAXWELL3D_REG_INDEX(macros.bind): 180 case MAXWELL3D_REG_INDEX(macros.bind):
diff --git a/src/video_core/macro/macro.cpp b/src/video_core/macro/macro.cpp
index 86393c49c..e7279efcd 100644
--- a/src/video_core/macro/macro.cpp
+++ b/src/video_core/macro/macro.cpp
@@ -45,6 +45,11 @@ void MacroEngine::AddCode(u32 method, u32 data) {
45 uploaded_macro_code[method].push_back(data); 45 uploaded_macro_code[method].push_back(data);
46} 46}
47 47
48void MacroEngine::ClearCode(u32 method) {
49 macro_cache.erase(method);
50 uploaded_macro_code.erase(method);
51}
52
48void MacroEngine::Execute(u32 method, const std::vector<u32>& parameters) { 53void MacroEngine::Execute(u32 method, const std::vector<u32>& parameters) {
49 auto compiled_macro = macro_cache.find(method); 54 auto compiled_macro = macro_cache.find(method);
50 if (compiled_macro != macro_cache.end()) { 55 if (compiled_macro != macro_cache.end()) {
diff --git a/src/video_core/macro/macro.h b/src/video_core/macro/macro.h
index 7e12c16dc..07d97ba39 100644
--- a/src/video_core/macro/macro.h
+++ b/src/video_core/macro/macro.h
@@ -117,6 +117,9 @@ public:
117 // Store the uploaded macro code to compile them when they're called. 117 // Store the uploaded macro code to compile them when they're called.
118 void AddCode(u32 method, u32 data); 118 void AddCode(u32 method, u32 data);
119 119
120 // Clear the code associated with a method.
121 void ClearCode(u32 method);
122
120 // Compiles the macro if its not in the cache, and executes the compiled macro 123 // Compiles the macro if its not in the cache, and executes the compiled macro
121 void Execute(u32 method, const std::vector<u32>& parameters); 124 void Execute(u32 method, const std::vector<u32>& parameters);
122 125