GPUDevice: Remove BeginPresent() skip parameter

It wasn't used - System does its own present skipping.
This commit is contained in:
Stenzek 2024-09-07 12:53:55 +10:00
parent 6336c4ee1f
commit 26aacb0e92
No known key found for this signature in database
18 changed files with 30 additions and 55 deletions

View file

@ -2063,8 +2063,7 @@ GPUDevice::PresentResult GPU::RenderDisplay(GPUTexture* target, const GSVector4i
{ {
if (target) if (target)
g_gpu_device->SetRenderTarget(target); g_gpu_device->SetRenderTarget(target);
else if (const GPUDevice::PresentResult pres = g_gpu_device->BeginPresent(false); else if (const GPUDevice::PresentResult pres = g_gpu_device->BeginPresent(); pres != GPUDevice::PresentResult::OK)
pres != GPUDevice::PresentResult::OK)
return pres; return pres;
} }

View file

@ -160,7 +160,7 @@ void Host::DisplayLoadingScreen(const char* message, int progress_min /*= -1*/,
// TODO: Glass effect or something. // TODO: Glass effect or something.
if (g_gpu_device->BeginPresent(false) == GPUDevice::PresentResult::OK) if (g_gpu_device->BeginPresent() == GPUDevice::PresentResult::OK)
{ {
g_gpu_device->RenderImGui(); g_gpu_device->RenderImGui();
g_gpu_device->EndPresent(false); g_gpu_device->EndPresent(false);

View file

@ -2166,7 +2166,7 @@ void System::FrameDone()
const bool explicit_present = (throttle_before_present && g_gpu_device->GetFeatures().explicit_present); const bool explicit_present = (throttle_before_present && g_gpu_device->GetFeatures().explicit_present);
if (explicit_present) if (explicit_present)
{ {
const bool do_present = PresentDisplay(false, true); const bool do_present = PresentDisplay(true);
Throttle(current_time); Throttle(current_time);
if (do_present) if (do_present)
g_gpu_device->SubmitPresent(); g_gpu_device->SubmitPresent();
@ -2176,7 +2176,7 @@ void System::FrameDone()
if (throttle_before_present) if (throttle_before_present)
Throttle(current_time); Throttle(current_time);
PresentDisplay(false, false); PresentDisplay(false);
if (!throttle_before_present && s_throttler_enabled && !IsExecutionInterrupted()) if (!throttle_before_present && s_throttler_enabled && !IsExecutionInterrupted())
Throttle(current_time); Throttle(current_time);
@ -5734,31 +5734,23 @@ void System::HostDisplayResized()
g_gpu->UpdateResolutionScale(); g_gpu->UpdateResolutionScale();
} }
bool System::PresentDisplay(bool skip_present, bool explicit_present) bool System::PresentDisplay(bool explicit_present)
{ {
// acquire for IO.MousePos. // acquire for IO.MousePos.
std::atomic_thread_fence(std::memory_order_acquire); std::atomic_thread_fence(std::memory_order_acquire);
if (!skip_present) FullscreenUI::Render();
{ ImGuiManager::RenderTextOverlays();
FullscreenUI::Render(); ImGuiManager::RenderOSDMessages();
ImGuiManager::RenderTextOverlays();
ImGuiManager::RenderOSDMessages();
if (s_state == State::Running) if (s_state == State::Running)
ImGuiManager::RenderSoftwareCursors(); ImGuiManager::RenderSoftwareCursors();
}
// Debug windows are always rendered, otherwise mouse input breaks on skip. // Debug windows are always rendered, otherwise mouse input breaks on skip.
ImGuiManager::RenderOverlayWindows(); ImGuiManager::RenderOverlayWindows();
ImGuiManager::RenderDebugWindows(); ImGuiManager::RenderDebugWindows();
GPUDevice::PresentResult pres; const GPUDevice::PresentResult pres = g_gpu ? g_gpu->PresentDisplay() : g_gpu_device->BeginPresent();
if (g_gpu && !skip_present)
pres = g_gpu->PresentDisplay();
else
pres = g_gpu_device->BeginPresent(skip_present);
if (pres == GPUDevice::PresentResult::OK) if (pres == GPUDevice::PresentResult::OK)
{ {
g_gpu_device->RenderImGui(); g_gpu_device->RenderImGui();
@ -5786,7 +5778,7 @@ bool System::PresentDisplay(bool skip_present, bool explicit_present)
void System::InvalidateDisplay() void System::InvalidateDisplay()
{ {
PresentDisplay(false, false); PresentDisplay(false);
if (g_gpu) if (g_gpu)
g_gpu->RestoreDeviceContext(); g_gpu->RestoreDeviceContext();

View file

@ -448,7 +448,7 @@ void RequestDisplaySize(float scale = 0.0f);
void HostDisplayResized(); void HostDisplayResized();
/// Renders the display. /// Renders the display.
bool PresentDisplay(bool skip_present, bool explicit_present); bool PresentDisplay(bool explicit_present);
void InvalidateDisplay(); void InvalidateDisplay();
////////////////////////////////////////////////////////////////////////// //////////////////////////////////////////////////////////////////////////

View file

@ -1798,7 +1798,7 @@ void EmuThread::run()
System::Internal::IdlePollUpdate(); System::Internal::IdlePollUpdate();
if (g_gpu_device) if (g_gpu_device)
{ {
System::PresentDisplay(false, false); System::PresentDisplay(false);
if (!g_gpu_device->IsVSyncModeBlocking()) if (!g_gpu_device->IsVSyncModeBlocking())
g_gpu_device->ThrottlePresentation(); g_gpu_device->ThrottlePresentation();
} }

View file

@ -639,11 +639,8 @@ void D3D11Device::SetVSyncMode(GPUVSyncMode mode, bool allow_present_throttle)
} }
} }
GPUDevice::PresentResult D3D11Device::BeginPresent(bool skip_present, u32 clear_color) GPUDevice::PresentResult D3D11Device::BeginPresent(u32 clear_color)
{ {
if (skip_present)
return PresentResult::SkipPresent;
if (!m_swap_chain) if (!m_swap_chain)
{ {
// Note: Really slow on Intel... // Note: Really slow on Intel...

View file

@ -104,7 +104,7 @@ public:
bool SetGPUTimingEnabled(bool enabled) override; bool SetGPUTimingEnabled(bool enabled) override;
float GetAndResetAccumulatedGPUTime() override; float GetAndResetAccumulatedGPUTime() override;
PresentResult BeginPresent(bool skip_present, u32 clear_color) override; PresentResult BeginPresent(u32 clear_color) override;
void EndPresent(bool explicit_present) override; void EndPresent(bool explicit_present) override;
void SubmitPresent() override; void SubmitPresent() override;

View file

@ -1123,7 +1123,7 @@ void D3D12Device::SetVSyncMode(GPUVSyncMode mode, bool allow_present_throttle)
} }
} }
GPUDevice::PresentResult D3D12Device::BeginPresent(bool frame_skip, u32 clear_color) GPUDevice::PresentResult D3D12Device::BeginPresent(u32 clear_color)
{ {
if (InRenderPass()) if (InRenderPass())
EndRenderPass(); EndRenderPass();
@ -1131,9 +1131,6 @@ GPUDevice::PresentResult D3D12Device::BeginPresent(bool frame_skip, u32 clear_co
if (m_device_was_lost) [[unlikely]] if (m_device_was_lost) [[unlikely]]
return PresentResult::DeviceLost; return PresentResult::DeviceLost;
if (frame_skip)
return PresentResult::SkipPresent;
// If we're running surfaceless, kick the command buffer so we don't run out of descriptors. // If we're running surfaceless, kick the command buffer so we don't run out of descriptors.
if (!m_swap_chain) if (!m_swap_chain)
{ {

View file

@ -126,7 +126,7 @@ public:
bool SetGPUTimingEnabled(bool enabled) override; bool SetGPUTimingEnabled(bool enabled) override;
float GetAndResetAccumulatedGPUTime() override; float GetAndResetAccumulatedGPUTime() override;
PresentResult BeginPresent(bool skip_present, u32 clear_color) override; PresentResult BeginPresent(u32 clear_color) override;
void EndPresent(bool explicit_present) override; void EndPresent(bool explicit_present) override;
void SubmitPresent() override; void SubmitPresent() override;

View file

@ -709,7 +709,7 @@ public:
virtual void DrawIndexedWithBarrier(u32 index_count, u32 base_index, u32 base_vertex, DrawBarrier type) = 0; virtual void DrawIndexedWithBarrier(u32 index_count, u32 base_index, u32 base_vertex, DrawBarrier type) = 0;
/// Returns false if the window was completely occluded. /// Returns false if the window was completely occluded.
virtual PresentResult BeginPresent(bool skip_present, u32 clear_color = DEFAULT_CLEAR_COLOR) = 0; virtual PresentResult BeginPresent(u32 clear_color = DEFAULT_CLEAR_COLOR) = 0;
virtual void EndPresent(bool explicit_submit) = 0; virtual void EndPresent(bool explicit_submit) = 0;
virtual void SubmitPresent() = 0; virtual void SubmitPresent() = 0;

View file

@ -265,7 +265,7 @@ public:
void SetVSyncMode(GPUVSyncMode mode, bool allow_present_throttle) override; void SetVSyncMode(GPUVSyncMode mode, bool allow_present_throttle) override;
PresentResult BeginPresent(bool skip_present, u32 clear_color) override; PresentResult BeginPresent(u32 clear_color) override;
void EndPresent(bool explicit_submit) override; void EndPresent(bool explicit_submit) override;
void SubmitPresent() override; void SubmitPresent() override;

View file

@ -2312,13 +2312,10 @@ id<MTLBlitCommandEncoder> MetalDevice::GetBlitEncoder(bool is_inline)
} }
} }
GPUDevice::PresentResult MetalDevice::BeginPresent(bool skip_present, u32 clear_color) GPUDevice::PresentResult MetalDevice::BeginPresent(u32 clear_color)
{ {
@autoreleasepool @autoreleasepool
{ {
if (skip_present)
return PresentResult::SkipPresent;
if (m_layer == nil) if (m_layer == nil)
{ {
TrimTexturePool(); TrimTexturePool();

View file

@ -740,16 +740,12 @@ void OpenGLDevice::DestroyBuffers()
m_vertex_buffer.reset(); m_vertex_buffer.reset();
} }
GPUDevice::PresentResult OpenGLDevice::BeginPresent(bool skip_present, u32 clear_color) GPUDevice::PresentResult OpenGLDevice::BeginPresent(u32 clear_color)
{ {
if (skip_present || m_window_info.type == WindowInfo::Type::Surfaceless) if (m_window_info.type == WindowInfo::Type::Surfaceless)
{ {
if (!skip_present) glFlush();
{ TrimTexturePool();
glFlush();
TrimTexturePool();
}
return PresentResult::SkipPresent; return PresentResult::SkipPresent;
} }

View file

@ -104,7 +104,7 @@ public:
void SetVSyncMode(GPUVSyncMode mode, bool allow_present_throttle) override; void SetVSyncMode(GPUVSyncMode mode, bool allow_present_throttle) override;
PresentResult BeginPresent(bool skip_present, u32 clear_color) override; PresentResult BeginPresent(u32 clear_color) override;
void EndPresent(bool explicit_present) override; void EndPresent(bool explicit_present) override;
void SubmitPresent() override; void SubmitPresent() override;

View file

@ -1784,7 +1784,7 @@ GPUDevice::PresentResult PostProcessing::ReShadeFXShader::Apply(GPUTexture* inpu
if (pass.render_targets.size() == 1 && pass.render_targets[0] == OUTPUT_COLOR_TEXTURE && !final_target) if (pass.render_targets.size() == 1 && pass.render_targets[0] == OUTPUT_COLOR_TEXTURE && !final_target)
{ {
// Special case: drawing to final buffer. // Special case: drawing to final buffer.
if (const GPUDevice::PresentResult pres = g_gpu_device->BeginPresent(false); pres != GPUDevice::PresentResult::OK) if (const GPUDevice::PresentResult pres = g_gpu_device->BeginPresent(); pres != GPUDevice::PresentResult::OK)
{ {
GL_POP(); GL_POP();
return pres; return pres;

View file

@ -177,7 +177,7 @@ GPUDevice::PresentResult PostProcessing::GLSLShader::Apply(GPUTexture* input_col
// Assumes final stage has been cleared already. // Assumes final stage has been cleared already.
if (!final_target) if (!final_target)
{ {
if (const GPUDevice::PresentResult pres = g_gpu_device->BeginPresent(false); pres != GPUDevice::PresentResult::OK) if (const GPUDevice::PresentResult pres = g_gpu_device->BeginPresent(); pres != GPUDevice::PresentResult::OK)
return pres; return pres;
} }
else else

View file

@ -2342,7 +2342,7 @@ void VulkanDevice::SetVSyncMode(GPUVSyncMode mode, bool allow_present_throttle)
} }
} }
GPUDevice::PresentResult VulkanDevice::BeginPresent(bool frame_skip, u32 clear_color) GPUDevice::PresentResult VulkanDevice::BeginPresent(u32 clear_color)
{ {
if (InRenderPass()) if (InRenderPass())
EndRenderPass(); EndRenderPass();
@ -2350,9 +2350,6 @@ GPUDevice::PresentResult VulkanDevice::BeginPresent(bool frame_skip, u32 clear_c
if (m_device_was_lost) [[unlikely]] if (m_device_was_lost) [[unlikely]]
return PresentResult::DeviceLost; return PresentResult::DeviceLost;
if (frame_skip)
return PresentResult::SkipPresent;
// If we're running surfaceless, kick the command buffer so we don't run out of descriptors. // If we're running surfaceless, kick the command buffer so we don't run out of descriptors.
if (!m_swap_chain) if (!m_swap_chain)
{ {

View file

@ -142,7 +142,7 @@ public:
void SetVSyncMode(GPUVSyncMode mode, bool allow_present_throttle) override; void SetVSyncMode(GPUVSyncMode mode, bool allow_present_throttle) override;
PresentResult BeginPresent(bool skip_present, u32 clear_color) override; PresentResult BeginPresent(u32 clear_color) override;
void EndPresent(bool explicit_present) override; void EndPresent(bool explicit_present) override;
void SubmitPresent() override; void SubmitPresent() override;