mirror of
https://git.citron-emu.org/citron/emulator
synced 2025-12-19 10:43:33 +00:00
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:
@@ -73,7 +73,17 @@ void MaxwellDMA::Launch() {
|
||||
// TODO(Subv): Perform more research and implement all features of this engine.
|
||||
const LaunchDMA& launch = regs.launch_dma;
|
||||
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) {
|
||||
const bool is_src_pitch = launch.src_memory_layout == LaunchDMA::MemoryLayout::PITCH;
|
||||
|
||||
Reference in New Issue
Block a user