diff options
| -rw-r--r-- | src/video_core/engines/maxwell_3d.cpp | 2 | ||||
| -rw-r--r-- | src/video_core/macro/macro.cpp | 5 | ||||
| -rw-r--r-- | src/video_core/macro/macro.h | 3 |
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 | ||
| 48 | void MacroEngine::ClearCode(u32 method) { | ||
| 49 | macro_cache.erase(method); | ||
| 50 | uploaded_macro_code.erase(method); | ||
| 51 | } | ||
| 52 | |||
| 48 | void MacroEngine::Execute(u32 method, const std::vector<u32>& parameters) { | 53 | void 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 | ||