Merge pull request #2826 from ReinUsesLisp/macro-binding

maxwell_3d: Fix macro binding cursor
This commit is contained in:
bunnei 2019-09-03 22:32:42 -04:00 committed by GitHub
commit 137d165672
No known key found for this signature in database
GPG key ID: 4AEE18F83AFDEB23
2 changed files with 4 additions and 10 deletions

View file

@ -249,16 +249,10 @@ void Maxwell3D::CallMacroMethod(u32 method, std::vector<u32> parameters) {
executing_macro = 0; executing_macro = 0;
// Lookup the macro offset // Lookup the macro offset
const u32 entry{(method - MacroRegistersStart) >> 1}; const u32 entry = ((method - MacroRegistersStart) >> 1) % macro_positions.size();
const auto& search{macro_offsets.find(entry)};
if (search == macro_offsets.end()) {
LOG_CRITICAL(HW_GPU, "macro not found for method 0x{:X}!", method);
UNREACHABLE();
return;
}
// Execute the current macro. // Execute the current macro.
macro_interpreter.Execute(search->second, std::move(parameters)); macro_interpreter.Execute(macro_positions[entry], std::move(parameters));
} }
void Maxwell3D::CallMethod(const GPU::MethodCall& method_call) { void Maxwell3D::CallMethod(const GPU::MethodCall& method_call) {
@ -421,7 +415,7 @@ void Maxwell3D::ProcessMacroUpload(u32 data) {
} }
void Maxwell3D::ProcessMacroBind(u32 data) { void Maxwell3D::ProcessMacroBind(u32 data) {
macro_offsets[regs.macros.entry] = data; macro_positions[regs.macros.entry++] = data;
} }
void Maxwell3D::ProcessQueryGet() { void Maxwell3D::ProcessQueryGet() {

View file

@ -1270,7 +1270,7 @@ private:
MemoryManager& memory_manager; MemoryManager& memory_manager;
/// Start offsets of each macro in macro_memory /// Start offsets of each macro in macro_memory
std::unordered_map<u32, u32> macro_offsets; std::array<u32, 0x80> macro_positions = {};
/// Memory for macro code /// Memory for macro code
MacroMemory macro_memory; MacroMemory macro_memory;