diff --git a/src/video_core/engines/maxwell_dma.cpp b/src/video_core/engines/maxwell_dma.cpp index 26aa2e10c8..36db7dd9de 100644 --- a/src/video_core/engines/maxwell_dma.cpp +++ b/src/video_core/engines/maxwell_dma.cpp @@ -96,23 +96,23 @@ void MaxwellDMA::Launch() { auto& accelerate = rasterizer->AccessAccelerateDMA(); const bool is_const_a_dst = regs.remap_const.dst_x == RemapConst::Swizzle::CONST_A; if (regs.launch_dma.remap_enable != 0 && is_const_a_dst) { + accelerate.BufferClear(regs.offset_out, regs.line_length_in, regs.remap_const.remap_consta_value); const u32 component_size = regs.remap_const.component_size_minus_one + 1; - const u32 line_length = regs.line_length_in; - read_buffer.resize_destructive(line_length * component_size); + read_buffer.resize_destructive(regs.line_length_in * component_size); u8* buf = read_buffer.data(); switch (component_size) { case 1: { - std::span span(buf, line_length); + std::span span(buf, regs.line_length_in); std::ranges::fill(span, static_cast(regs.remap_const.remap_consta_value & 0xFF)); break; } case 2: { - std::span span(reinterpret_cast(buf), line_length); + std::span span(reinterpret_cast(buf), regs.line_length_in); std::ranges::fill(span, static_cast(regs.remap_const.remap_consta_value & 0xFFFF)); break; } case 4: { - std::span span(reinterpret_cast(buf), line_length); + std::span span(reinterpret_cast(buf), regs.line_length_in); std::ranges::fill(span, regs.remap_const.remap_consta_value); break; } @@ -120,8 +120,7 @@ void MaxwellDMA::Launch() { LOG_WARNING(Render_OpenGL, "Remap CONST_A with unsupported component size {} bytes", component_size); break; } - memory_manager.WriteBlockUnsafe(regs.offset_out, buf, line_length * component_size); - accelerate.BufferClear(regs.offset_out, line_length, regs.remap_const.remap_consta_value); + memory_manager.WriteBlockUnsafe(regs.offset_out, buf, regs.line_length_in * component_size); } else { memory_manager.FlushCaching(); const auto convert_linear_2_blocklinear_addr = [](u64 address) {