diff options
author | Morph <39850852+Morph1984@users.noreply.github.com> | 2022-05-11 23:49:25 +0200 |
---|---|---|
committer | GitHub <noreply@github.com> | 2022-05-11 23:49:25 +0200 |
commit | c2b583c9113985f6e3d228f83f87ee483dc96297 (patch) | |
tree | 11fe0c54547ee3e0401f3201de388dee72a41d00 /src/video_core | |
parent | Merge pull request #8325 from zhaobot/tx-update-20220509164742 (diff) | |
parent | video_core/macro: clear code on upload address assignment (diff) | |
download | yuzu-c2b583c9113985f6e3d228f83f87ee483dc96297.tar yuzu-c2b583c9113985f6e3d228f83f87ee483dc96297.tar.gz yuzu-c2b583c9113985f6e3d228f83f87ee483dc96297.tar.bz2 yuzu-c2b583c9113985f6e3d228f83f87ee483dc96297.tar.lz yuzu-c2b583c9113985f6e3d228f83f87ee483dc96297.tar.xz yuzu-c2b583c9113985f6e3d228f83f87ee483dc96297.tar.zst yuzu-c2b583c9113985f6e3d228f83f87ee483dc96297.zip |
Diffstat (limited to 'src/video_core')
-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 case MAXWELL3D_REG_INDEX(shadow_ram_control): shadow_state.shadow_ram_control = static_cast<Regs::ShadowRamControl>(nonshadow_argument); return; + case MAXWELL3D_REG_INDEX(macros.upload_address): + return macro_engine->ClearCode(regs.macros.upload_address); case MAXWELL3D_REG_INDEX(macros.data): return macro_engine->AddCode(regs.macros.upload_address, argument); 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) { uploaded_macro_code[method].push_back(data); } +void MacroEngine::ClearCode(u32 method) { + macro_cache.erase(method); + uploaded_macro_code.erase(method); +} + void MacroEngine::Execute(u32 method, const std::vector<u32>& parameters) { auto compiled_macro = macro_cache.find(method); 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: // Store the uploaded macro code to compile them when they're called. void AddCode(u32 method, u32 data); + // Clear the code associated with a method. + void ClearCode(u32 method); + // Compiles the macro if its not in the cache, and executes the compiled macro void Execute(u32 method, const std::vector<u32>& parameters); |