From 98df4bbec354155427680d29fcc237b1e4722656 Mon Sep 17 00:00:00 2001 From: "Unknown W. Brackets" Date: Sun, 1 Mar 2020 08:53:46 -0800 Subject: [PATCH] GPU: Allow choosing number of inflight frames. --- Core/Config.cpp | 2 +- Core/Config.h | 2 +- GPU/GLES/GPU_GLES.cpp | 4 ++-- GPU/Vulkan/GPU_Vulkan.cpp | 4 ++-- UI/GameSettingsScreen.cpp | 5 +++-- ext/native/thin3d/GLRenderManager.h | 4 ++-- ext/native/thin3d/VulkanRenderManager.h | 4 ++-- 7 files changed, 13 insertions(+), 12 deletions(-) diff --git a/Core/Config.cpp b/Core/Config.cpp index e1bbe8ddbb..ca38c4ed9b 100644 --- a/Core/Config.cpp +++ b/Core/Config.cpp @@ -772,7 +772,7 @@ static ConfigSetting graphicsSettings[] = { ConfigSetting("GfxDebugSplitSubmit", &g_Config.bGfxDebugSplitSubmit, false, false, false), ConfigSetting("LogFrameDrops", &g_Config.bLogFrameDrops, false, true, false), - ConfigSetting("UseInflightFrames", &g_Config.bUseInflightFrames, true, true, true), + ConfigSetting("InflightFrames", &g_Config.iInflightFrames, 3, true, true), ConfigSetting(false), }; diff --git a/Core/Config.h b/Core/Config.h index 62ee4733d9..43e417006e 100644 --- a/Core/Config.h +++ b/Core/Config.h @@ -195,7 +195,7 @@ public: std::string sPostShaderName; // Off for off. bool bGfxDebugOutput; bool bGfxDebugSplitSubmit; - bool bUseInflightFrames; + int iInflightFrames; // Sound bool bEnableSound; diff --git a/GPU/GLES/GPU_GLES.cpp b/GPU/GLES/GPU_GLES.cpp index 3fa59b5257..21523c53ad 100644 --- a/GPU/GLES/GPU_GLES.cpp +++ b/GPU/GLES/GPU_GLES.cpp @@ -98,7 +98,7 @@ GPU_GLES::GPU_GLES(GraphicsContext *gfxCtx, Draw::DrawContext *draw) textureCacheGL_->NotifyConfigChanged(); GLRenderManager *rm = (GLRenderManager *)draw_->GetNativeObject(Draw::NativeObject::RENDER_MANAGER); - rm->UseInflightFrames(g_Config.bUseInflightFrames); + rm->SetInflightFrames(g_Config.iInflightFrames); // Load shader cache. std::string discID = g_paramSFO.GetDiscID(); @@ -359,7 +359,7 @@ void GPU_GLES::BeginHostFrame() { UpdateCmdInfo(); if (resized_) { GLRenderManager *rm = (GLRenderManager *)draw_->GetNativeObject(Draw::NativeObject::RENDER_MANAGER); - rm->UseInflightFrames(g_Config.bUseInflightFrames); + rm->SetInflightFrames(g_Config.iInflightFrames); CheckGPUFeatures(); framebufferManager_->Resized(); diff --git a/GPU/Vulkan/GPU_Vulkan.cpp b/GPU/Vulkan/GPU_Vulkan.cpp index 464adaf0ba..3caa3181c7 100644 --- a/GPU/Vulkan/GPU_Vulkan.cpp +++ b/GPU/Vulkan/GPU_Vulkan.cpp @@ -99,7 +99,7 @@ GPU_Vulkan::GPU_Vulkan(GraphicsContext *gfxCtx, Draw::DrawContext *draw) drawEngine_.SetLineWidth(PSP_CoreParameter().renderWidth / 480.0f); } VulkanRenderManager *rm = (VulkanRenderManager *)draw_->GetNativeObject(Draw::NativeObject::RENDER_MANAGER); - rm->UseInflightFrames(g_Config.bUseInflightFrames); + rm->SetInflightFrames(g_Config.iInflightFrames); // Load shader cache. std::string discID = g_paramSFO.GetDiscID(); @@ -278,7 +278,7 @@ void GPU_Vulkan::BeginHostFrame() { if (resized_) { VulkanRenderManager *rm = (VulkanRenderManager *)draw_->GetNativeObject(Draw::NativeObject::RENDER_MANAGER); - rm->UseInflightFrames(g_Config.bUseInflightFrames); + rm->SetInflightFrames(g_Config.iInflightFrames); CheckGPUFeatures(); // In case the GPU changed. diff --git a/UI/GameSettingsScreen.cpp b/UI/GameSettingsScreen.cpp index 26a0329021..1618361d5f 100644 --- a/UI/GameSettingsScreen.cpp +++ b/UI/GameSettingsScreen.cpp @@ -346,8 +346,9 @@ void GameSettingsScreen::CreateViews() { #endif if (GetGPUBackend() == GPUBackend::VULKAN || GetGPUBackend() == GPUBackend::OPENGL) { - CheckBox *inflightFrames = graphicsSettings->Add(new CheckBox(&g_Config.bUseInflightFrames, gr->T("Buffer graphics commands (faster, input lag)"))); - inflightFrames->OnClick.Add([=](EventParams &e) { + static const char *bufferOptions[] = { "No buffer", "Up to 1", "Up to 2" }; + PopupMultiChoice *inflightChoice = graphicsSettings->Add(new PopupMultiChoice(&g_Config.iInflightFrames, gr->T("Buffer graphics commands (faster, input lag)"), bufferOptions, 0, ARRAY_SIZE(bufferOptions), gr->GetName(), screenManager())); + inflightChoice->OnChoice.Add([=](EventParams &e) { NativeMessageReceived("gpu_resized", ""); return UI::EVENT_CONTINUE; }); diff --git a/ext/native/thin3d/GLRenderManager.h b/ext/native/thin3d/GLRenderManager.h index 69838cc52f..377344b073 100644 --- a/ext/native/thin3d/GLRenderManager.h +++ b/ext/native/thin3d/GLRenderManager.h @@ -862,8 +862,8 @@ public: enum { MAX_INFLIGHT_FRAMES = 3 }; - void UseInflightFrames(bool use) { - newInflightFrames_ = use ? MAX_INFLIGHT_FRAMES : 1; + void SetInflightFrames(int f) { + newInflightFrames_ = f < 1 || f > MAX_INFLIGHT_FRAMES ? MAX_INFLIGHT_FRAMES : f; } int GetCurFrame() const { diff --git a/ext/native/thin3d/VulkanRenderManager.h b/ext/native/thin3d/VulkanRenderManager.h index 837e0e37b5..27fc2deca9 100644 --- a/ext/native/thin3d/VulkanRenderManager.h +++ b/ext/native/thin3d/VulkanRenderManager.h @@ -240,8 +240,8 @@ public: splitSubmit_ = split; } - void UseInflightFrames(bool use) { - newInflightFrames_ = use ? VulkanContext::MAX_INFLIGHT_FRAMES : 1; + void SetInflightFrames(int f) { + newInflightFrames_ = f < 1 || f > VulkanContext::MAX_INFLIGHT_FRAMES ? VulkanContext::MAX_INFLIGHT_FRAMES : f; } VulkanContext *GetVulkanContext() {