video_core/macro: clear code on upload address assignment
This commit is contained in:
		| @@ -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); | ||||||
|  |  | ||||||
|   | |||||||
		Reference in New Issue
	
	Block a user
	 Liam
					Liam