From 629ebf1bdee023d3d3ecc96c3276cf3285f8f727 Mon Sep 17 00:00:00 2001 From: simply0001 Date: Fri, 26 Jun 2026 04:15:31 +0200 Subject: [video_core/maxwell3d] compute macro param address on demand (#4067) GetMacroAddress only reads a couple of indices per macro, but ProcessMacro was then building a full std::vector GPUVAddr> with one push_back per parameter word every submission. macro_segments already holds base, count per chunk, so GetMacroAddress can just walk it instead, drops the per-word loop, a .clear(), and a vector member. Also makes it so it returns on the first match in the macro dispatch instead of running every std::get_if check. Reviewed-on: https://git.eden-emu.dev/eden-emu/eden/pulls/4067 Reviewed-by: Lizzie Reviewed-by: CamilleLaVey --- src/video_core/engines/maxwell_3d.cpp | 4 ---- 1 file changed, 4 deletions(-) (limited to 'src/video_core/engines/maxwell_3d.cpp') diff --git a/src/video_core/engines/maxwell_3d.cpp b/src/video_core/engines/maxwell_3d.cpp index 3474ad6d63..53b75726bd 100644 --- a/src/video_core/engines/maxwell_3d.cpp +++ b/src/video_core/engines/maxwell_3d.cpp @@ -208,9 +208,6 @@ void Maxwell3D::ProcessMacro(Core::System& system, u32 method, const u32* base_s } macro_params.insert(macro_params.end(), base_start, base_start + amount); - for (size_t i = 0; i < amount; i++) { - macro_addresses.push_back(current_dma_segment + i * sizeof(u32)); - } macro_segments.emplace_back(current_dma_segment, amount); current_macro_dirty |= current_dirty; current_dirty = false; @@ -220,7 +217,6 @@ void Maxwell3D::ProcessMacro(Core::System& system, u32 method, const u32* base_s ConsumeSink(system); CallMacroMethod(system, executing_macro, macro_params); macro_params.clear(); - macro_addresses.clear(); macro_segments.clear(); current_macro_dirty = false; } -- cgit v1.2.3