diff --git a/Source/Core/Core/HW/DVD/DVDInterface.cpp b/Source/Core/Core/HW/DVD/DVDInterface.cpp index 8f8ec4f4e4..5d87cce3bd 100644 --- a/Source/Core/Core/HW/DVD/DVDInterface.cpp +++ b/Source/Core/Core/HW/DVD/DVDInterface.cpp @@ -43,9 +43,11 @@ #include "VideoCommon/OnScreenDisplay.h" -// The minimum time it takes for the DVD drive to process a command (in -// microseconds) -constexpr u64 COMMAND_LATENCY_US = 300; +// The minimum time it takes for the DVD drive to process a command (in microseconds) +constexpr u64 MINIMUM_COMMAND_LATENCY_US = 300; + +// The time it takes for a read command to start (in microseconds) +constexpr u64 READ_COMMAND_LATENCY_US = 600; // The size of the streaming buffer. constexpr u64 STREAMING_BUFFER_SIZE = 1024 * 1024; @@ -1182,10 +1184,10 @@ void ExecuteCommand(ReplyType reply_type) if (!command_handled_by_thread) { - // TODO: Needs testing to determine if COMMAND_LATENCY_US is accurate for this - CoreTiming::ScheduleEvent(COMMAND_LATENCY_US * (SystemTimers::GetTicksPerSecond() / 1000000), - s_finish_executing_command, - PackFinishExecutingCommandUserdata(reply_type, interrupt_type)); + // TODO: Needs testing to determine if MINIMUM_COMMAND_LATENCY_US is accurate for this + CoreTiming::ScheduleEvent( + MINIMUM_COMMAND_LATENCY_US * (SystemTimers::GetTicksPerSecond() / 1000000), + s_finish_executing_command, PackFinishExecutingCommandUserdata(reply_type, interrupt_type)); } } @@ -1201,10 +1203,10 @@ void PerformDecryptingRead(u32 position, u32 length, u32 output_address, if (!command_handled_by_thread) { - // TODO: Needs testing to determine if COMMAND_LATENCY_US is accurate for this - CoreTiming::ScheduleEvent(COMMAND_LATENCY_US * (SystemTimers::GetTicksPerSecond() / 1000000), - s_finish_executing_command, - PackFinishExecutingCommandUserdata(reply_type, interrupt_type)); + // TODO: Needs testing to determine if MINIMUM_COMMAND_LATENCY_US is accurate for this + CoreTiming::ScheduleEvent( + MINIMUM_COMMAND_LATENCY_US * (SystemTimers::GetTicksPerSecond() / 1000000), + s_finish_executing_command, PackFinishExecutingCommandUserdata(reply_type, interrupt_type)); } } @@ -1378,8 +1380,8 @@ void ScheduleReads(u64 offset, u32 length, const DiscIO::Partition& partition, u "Schedule reads: offset=0x%" PRIx64 " length=0x%" PRIx32 " address=0x%" PRIx32, offset, length, output_address); - // The DVD drive's minimum turnaround time on a command, based on a hardware test. - s64 ticks_until_completion = COMMAND_LATENCY_US * (SystemTimers::GetTicksPerSecond() / 1000000); + s64 ticks_until_completion = + READ_COMMAND_LATENCY_US * (SystemTimers::GetTicksPerSecond() / 1000000); u32 buffered_blocks = 0; u32 unbuffered_blocks = 0;