fix(dma): allow pipelined transfers to prevent assertion failures

Remove strict assertion on data_transfer_type and allow PIPELINED
transfers (treating them as NON_PIPELINED). Some games like Marvel
Cosmic Invasion use pipelined transfers, causing crashes.

Fixes assertion at maxwell_dma.cpp:76

Signed-off-by: Zephyron <zephyron@citron-emu.org>
This commit is contained in:
Zephyron
2025-12-13 12:16:07 +10:00
parent feddd58680
commit d7a3c585ae

View File

@@ -73,7 +73,17 @@ void MaxwellDMA::Launch() {
// TODO(Subv): Perform more research and implement all features of this engine. // TODO(Subv): Perform more research and implement all features of this engine.
const LaunchDMA& launch = regs.launch_dma; const LaunchDMA& launch = regs.launch_dma;
ASSERT(launch.interrupt_type == LaunchDMA::InterruptType::NONE); ASSERT(launch.interrupt_type == LaunchDMA::InterruptType::NONE);
ASSERT(launch.data_transfer_type == LaunchDMA::DataTransferType::NON_PIPELINED);
// Handle pipelined transfers: treat as non-pipelined for now
// Some games (e.g., Marvel Cosmic Invasion) use pipelined transfers
if (launch.data_transfer_type != LaunchDMA::DataTransferType::NON_PIPELINED &&
launch.data_transfer_type != LaunchDMA::DataTransferType::PIPELINED) {
UNIMPLEMENTED_IF_MSG(launch.data_transfer_type != LaunchDMA::DataTransferType::NONE,
"Unsupported data transfer type: {}",
static_cast<u32>(launch.data_transfer_type.Value()));
ReleaseSemaphore();
return;
}
if (launch.multi_line_enable) { if (launch.multi_line_enable) {
const bool is_src_pitch = launch.src_memory_layout == LaunchDMA::MemoryLayout::PITCH; const bool is_src_pitch = launch.src_memory_layout == LaunchDMA::MemoryLayout::PITCH;