mirror of
https://git.suyu.dev/suyu/suyu.git
synced 2024-11-26 08:42:45 +01:00
video_core/macro: clear code on upload address assignment
This commit is contained in:
parent
2123594ce2
commit
e158951695
3 changed files with 10 additions and 0 deletions
|
@ -173,6 +173,8 @@ void Maxwell3D::ProcessMethodCall(u32 method, u32 argument, u32 nonshadow_argume
|
||||||
case MAXWELL3D_REG_INDEX(shadow_ram_control):
|
case MAXWELL3D_REG_INDEX(shadow_ram_control):
|
||||||
shadow_state.shadow_ram_control = static_cast<Regs::ShadowRamControl>(nonshadow_argument);
|
shadow_state.shadow_ram_control = static_cast<Regs::ShadowRamControl>(nonshadow_argument);
|
||||||
return;
|
return;
|
||||||
|
case MAXWELL3D_REG_INDEX(macros.upload_address):
|
||||||
|
return macro_engine->ClearCode(regs.macros.upload_address);
|
||||||
case MAXWELL3D_REG_INDEX(macros.data):
|
case MAXWELL3D_REG_INDEX(macros.data):
|
||||||
return macro_engine->AddCode(regs.macros.upload_address, argument);
|
return macro_engine->AddCode(regs.macros.upload_address, argument);
|
||||||
case MAXWELL3D_REG_INDEX(macros.bind):
|
case MAXWELL3D_REG_INDEX(macros.bind):
|
||||||
|
|
|
@ -45,6 +45,11 @@ void MacroEngine::AddCode(u32 method, u32 data) {
|
||||||
uploaded_macro_code[method].push_back(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) {
|
void MacroEngine::Execute(u32 method, const std::vector<u32>& parameters) {
|
||||||
auto compiled_macro = macro_cache.find(method);
|
auto compiled_macro = macro_cache.find(method);
|
||||||
if (compiled_macro != macro_cache.end()) {
|
if (compiled_macro != macro_cache.end()) {
|
||||||
|
|
|
@ -117,6 +117,9 @@ public:
|
||||||
// Store the uploaded macro code to compile them when they're called.
|
// Store the uploaded macro code to compile them when they're called.
|
||||||
void AddCode(u32 method, u32 data);
|
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
|
// Compiles the macro if its not in the cache, and executes the compiled macro
|
||||||
void Execute(u32 method, const std::vector<u32>& parameters);
|
void Execute(u32 method, const std::vector<u32>& parameters);
|
||||||
|
|
||||||
|
|
Loading…
Reference in a new issue