Browse Source

[maxwell_dma] Fix CONST_A for different component sizes in MaxwellDMA Launch (#3211)

This implements 1 byte and 2 bytes component sizes, required by Marvel: Cosmic Invasion.

Reviewed-on: https://git.eden-emu.dev/eden-emu/eden/pulls/3211
Reviewed-by: Lizzie <lizzie@eden-emu.dev>
Co-authored-by: MaranBr <maranbr@outlook.com>
Co-committed-by: MaranBr <maranbr@outlook.com>
pull/3235/head
MaranBr 2 days ago
committed by crueter
parent
commit
8ad1d0c317
No known key found for this signature in database GPG Key ID: 425ACD2D4830EBC6
  1. 15
      src/video_core/engines/maxwell_dma.cpp

15
src/video_core/engines/maxwell_dma.cpp

@ -96,15 +96,14 @@ 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) {
ASSERT(regs.remap_const.component_size_minus_one == 3);
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;
ASSERT(component_size == 1 || component_size == 2 || component_size == 4);
if (component_size == 4) {
accelerate.BufferClear(regs.offset_out, regs.line_length_in, regs.remap_const.remap_consta_value);
}
read_buffer.resize_destructive(regs.line_length_in * sizeof(u32));
std::span<u32> span(reinterpret_cast<u32*>(read_buffer.data()), regs.line_length_in);
std::ranges::fill(span, regs.remap_const.remap_consta_value);
memory_manager.WriteBlockUnsafe(regs.offset_out,
reinterpret_cast<u8*>(read_buffer.data()),
regs.line_length_in * sizeof(u32));
std::ranges::fill(std::span<u32>(reinterpret_cast<u32*>(read_buffer.data()), regs.line_length_in), regs.remap_const.remap_consta_value);
memory_manager.WriteBlockUnsafe(regs.offset_out, reinterpret_cast<u8*>(read_buffer.data()), static_cast<size_t>(regs.line_length_in) * component_size);
} else {
memory_manager.FlushCaching();
const auto convert_linear_2_blocklinear_addr = [](u64 address) {

Loading…
Cancel
Save