From d6b2abe26f511a0a0e4b5e6e2a0c68a02c8355a9 Mon Sep 17 00:00:00 2001 From: nmzik Date: Wed, 23 Sep 2026 13:29:32 +0400 Subject: [PATCH] Remove redundant command buffer checks --- .../command_processor/commandProcessor.h | 1 - src/graphics/guest_gpu/graphicsRun.cpp | 52 +++++++------------ 2 files changed, 19 insertions(+), 34 deletions(-) diff --git a/src/graphics/guest_gpu/command_processor/commandProcessor.h b/src/graphics/guest_gpu/command_processor/commandProcessor.h index d47cbc3de..ca432602d 100644 --- a/src/graphics/guest_gpu/command_processor/commandProcessor.h +++ b/src/graphics/guest_gpu/command_processor/commandProcessor.h @@ -151,7 +151,6 @@ private: void SuspendPm4(); CommandScheduler& GetScheduler() const { return m_renderer.GetCommandScheduler(); } CommandBuffer& CurrentBuffer() { return GetScheduler().Current(); } - void CheckBuffer() const { GetScheduler().CheckActive(); } RenderContext& m_renderer; HW::Context m_ctx; diff --git a/src/graphics/guest_gpu/graphicsRun.cpp b/src/graphics/guest_gpu/graphicsRun.cpp index 4debaef90..a8ce0e9d6 100644 --- a/src/graphics/guest_gpu/graphicsRun.cpp +++ b/src/graphics/guest_gpu/graphicsRun.cpp @@ -874,8 +874,6 @@ void CommandProcessor::SetPredication(uint32_t condition, uint32_t op, uint32_t } void CommandProcessor::DrawIndex(DrawIndexArgs args) { - CheckBuffer(); - args.index_type_and_size = m_index_type_and_size; if (args.instance_count == 0) { args.instance_count = m_num_instances; @@ -1039,7 +1037,6 @@ void CommandProcessor::DispatchDirect(uint32_t thread_group_x, uint32_t thread_g // uint32_t local_z = 1; { - CheckBuffer(); frame_num = m_renderer.GetGpu().GetFrameNum(); if (GraphicsRunDebugDumpEnabled()) { static std::atomic log_count {0}; @@ -1098,13 +1095,10 @@ void CommandProcessor::DispatchIndirect(uint64_t args_addr, uint32_t mode) { return; } m_sh_ctx.SetCsWaveSize(Pm4::ComputeWaveSize(mode)); - CheckBuffer(); m_renderer.GetRenderExecutor().DispatchIndirect(m_submit_id, CurrentBuffer(), args_addr, mode); } void CommandProcessor::DrawIndexAuto(DrawAutoArgs args) { - CheckBuffer(); - if (args.instance_count == 0) { args.instance_count = m_num_instances; } @@ -1126,7 +1120,7 @@ void CommandProcessor::WriteAtEndOfPipe(uint32_t cache_policy, uint32_t event_wr uint32_t interrupt_context_id) { static_assert(sizeof(T) == sizeof(uint32_t) || sizeof(T) == sizeof(uint64_t)); - CheckBuffer(); + auto& command = CurrentBuffer(); if (GraphicsRunDebugDumpEnabled()) { const auto bits = static_cast(sizeof(T) * 8u); @@ -1157,7 +1151,7 @@ void CommandProcessor::WriteAtEndOfPipe(uint32_t cache_policy, uint32_t event_wr case 0x03: with_interrupt = false; break; case 0x01: if (!IsAsyncComputeQueue()) { - Sync::TriggerEopEventAtEndOfPipe(CurrentBuffer(), m_interrupt_event_id, + Sync::TriggerEopEventAtEndOfPipe(command, m_interrupt_event_id, interrupt_context_id); return; } @@ -1174,17 +1168,17 @@ void CommandProcessor::WriteAtEndOfPipe(uint32_t cache_policy, uint32_t event_wr if (with_interrupt) { if (with_writeback) { - Sync::WriteAtEndOfPipeWithInterruptWriteBack32(m_submit_id, CurrentBuffer(), dst, + Sync::WriteAtEndOfPipeWithInterruptWriteBack32(m_submit_id, command, dst, data, m_interrupt_event_id, interrupt_context_id); } else { - Sync::WriteAtEndOfPipeWithInterrupt32(m_submit_id, CurrentBuffer(), dst, data, + Sync::WriteAtEndOfPipeWithInterrupt32(m_submit_id, command, dst, data, m_interrupt_event_id, interrupt_context_id); } } else if (with_writeback) { - Sync::WriteAtEndOfPipeWithWriteBack32(m_submit_id, CurrentBuffer(), dst, data); + Sync::WriteAtEndOfPipeWithWriteBack32(m_submit_id, command, dst, data); } else { - Sync::WriteAtEndOfPipe32(m_submit_id, CurrentBuffer(), dst, data); + Sync::WriteAtEndOfPipe32(m_submit_id, command, dst, data); } }; @@ -1196,7 +1190,7 @@ void CommandProcessor::WriteAtEndOfPipe(uint32_t cache_policy, uint32_t event_wr SynchronizeGpu(); Sync::ReadGds(*m_renderer.GetBufferCache().GetGdsBuffer(), dst, value & 0xffffu, value >> 16u); - Sync::WriteAtEndOfPipeGds32(m_submit_id, CurrentBuffer(), dst, value & 0xffffu, + Sync::WriteAtEndOfPipeGds32(m_submit_id, command, dst, value & 0xffffu, value >> 16u); if (with_interrupt) { m_renderer.TriggerInterrupt(m_interrupt_event_id, interrupt_context_id); @@ -1225,18 +1219,18 @@ void CommandProcessor::WriteAtEndOfPipe(uint32_t cache_policy, uint32_t event_wr if (with_interrupt) { if (with_writeback) { Sync::WriteAtEndOfPipeWithInterruptWriteBack64( - m_submit_id, CurrentBuffer(), dst, value, m_interrupt_event_id, + m_submit_id, command, dst, value, m_interrupt_event_id, interrupt_context_id); } else { - Sync::WriteAtEndOfPipeWithInterrupt64(m_submit_id, CurrentBuffer(), dst, + Sync::WriteAtEndOfPipeWithInterrupt64(m_submit_id, command, dst, value, m_interrupt_event_id, interrupt_context_id); } } else if (with_writeback) { - Sync::WriteAtEndOfPipeWithWriteBack64(m_submit_id, CurrentBuffer(), dst, + Sync::WriteAtEndOfPipeWithWriteBack64(m_submit_id, command, dst, value); } else { - Sync::WriteAtEndOfPipe64(m_submit_id, CurrentBuffer(), dst, value); + Sync::WriteAtEndOfPipe64(m_submit_id, command, dst, value); } }; @@ -1317,10 +1311,10 @@ void CommandProcessor::WriteAtEndOfPipe(uint32_t cache_policy, uint32_t event_wr (eop_event_type == 0x28 && event_index == 0x00)) { if (with_interrupt) { Sync::WriteAtEndOfPipeWithInterrupt64( - m_submit_id, CurrentBuffer(), dst, clock, m_interrupt_event_id, + m_submit_id, command, dst, clock, m_interrupt_event_id, interrupt_context_id); } else { - Sync::WriteAtEndOfPipeClockCounter(m_submit_id, CurrentBuffer(), + Sync::WriteAtEndOfPipeClockCounter(m_submit_id, command, dst, clock); } return; @@ -1332,11 +1326,11 @@ void CommandProcessor::WriteAtEndOfPipe(uint32_t cache_policy, uint32_t event_wr (eop_event_type == 0x28 && event_index == 0x00)) { if (with_interrupt) { Sync::WriteAtEndOfPipeWithInterruptWriteBack64( - m_submit_id, CurrentBuffer(), dst, clock, m_interrupt_event_id, + m_submit_id, command, dst, clock, m_interrupt_event_id, interrupt_context_id); } else { Sync::WriteAtEndOfPipeClockCounterWithWriteBack( - m_submit_id, CurrentBuffer(), dst, clock); + m_submit_id, command, dst, clock); } return; } @@ -1374,8 +1368,6 @@ void CommandProcessor::WriteAtEndOfPipe64(uint32_t cache_policy, uint32_t event_ } void CommandProcessor::EmitGlobalBarrier() { - CheckBuffer(); - Common::LockGuard lock(m_renderer.GetMutex()); vk::MemoryBarrier2 barrier {}; @@ -1392,8 +1384,6 @@ void CommandProcessor::EmitGlobalBarrier() { } void CommandProcessor::TriggerEopEventAtEndOfPipe(uint32_t interrupt_context_id) { - CheckBuffer(); - Sync::TriggerEopEventAtEndOfPipe(CurrentBuffer(), m_interrupt_event_id, interrupt_context_id); } @@ -1477,8 +1467,6 @@ void CommandProcessor::TriggerEvent(uint32_t event_type, uint32_t event_index, } void CommandProcessor::Flip() { - CheckBuffer(); - if (GraphicsRunDebugDumpEnabled()) { LOGF("CommandProcessor::Flip()\n"); } @@ -1492,7 +1480,7 @@ void CommandProcessor::Flip() { } void CommandProcessor::Flip(void* dst_gpu_addr, uint32_t value) { - CheckBuffer(); + auto& command = CurrentBuffer(); if (GraphicsRunDebugDumpEnabled()) { LOGF("CommandProcessor::Flip()\n" @@ -1502,7 +1490,6 @@ void CommandProcessor::Flip(void* dst_gpu_addr, uint32_t value) { } std::memcpy(dst_gpu_addr, &value, sizeof(value)); - auto& command = CurrentBuffer(); auto request = Sync::PrepareVideoOutFlip(command, m_flip.handle, m_flip.index, m_flip.flip_mode, m_flip.flip_arg); Sync::WriteAtEndOfPipeWithFlip32(m_submit_id, command, static_cast(dst_gpu_addr), @@ -1513,7 +1500,7 @@ void CommandProcessor::Flip(void* dst_gpu_addr, uint32_t value) { void CommandProcessor::FlipWithInterrupt(uint32_t eop_event_type, uint32_t cache_action, void* dst_gpu_addr, uint32_t value) { - CheckBuffer(); + auto& command = CurrentBuffer(); if (GraphicsRunDebugDumpEnabled()) { LOGF("CommandProcessor::FlipWithInterrupt()\n" @@ -1528,7 +1515,6 @@ void CommandProcessor::FlipWithInterrupt(uint32_t eop_event_type, uint32_t cache EXIT("unknown event type\n"); } std::memcpy(dst_gpu_addr, &value, sizeof(value)); - auto& command = CurrentBuffer(); auto request = Sync::PrepareVideoOutFlip(command, m_flip.handle, m_flip.index, m_flip.flip_mode, m_flip.flip_arg); Sync::WriteAtEndOfPipeWithInterruptWriteBackFlip32( @@ -1538,7 +1524,7 @@ void CommandProcessor::FlipWithInterrupt(uint32_t eop_event_type, uint32_t cache } void CommandProcessor::PrepareCpuFlip(uint64_t request_id) { - CheckBuffer(); + auto& command = CurrentBuffer(); if (g_current_processor != nullptr) { EXIT("invalid graphics-thread CPU flip preparation\n"); } @@ -1548,7 +1534,7 @@ void CommandProcessor::PrepareCpuFlip(uint64_t request_id) { }; ProcessorScope processor_scope(*this); - m_renderer.GetVideoOut().PrepareFlip(request_id, CurrentBuffer()); + m_renderer.GetVideoOut().PrepareFlip(request_id, command); GetScheduler().Flush(); m_renderer.GetVideoOut().CompleteFlip(request_id); }