From 042cf87248459936f5d415f6ac06a7e0fb303003 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Henrik=20Rydg=C3=A5rd?= Date: Mon, 20 Oct 2025 15:10:31 +0200 Subject: [PATCH] Rework the present mode settings, refactor. --- Common/GPU/D3D11/thin3d_d3d11.cpp | 10 +++ Common/GPU/OpenGL/thin3d_gl.cpp | 11 +++ Common/GPU/Vulkan/VulkanContext.cpp | 4 +- Common/GPU/Vulkan/thin3d_vulkan.cpp | 14 ++++ Common/GPU/thin3d.h | 1 + Core/Config.cpp | 20 +---- Core/ConfigValues.h | 8 -- Core/FrameTiming.cpp | 110 +++++++++++++-------------- Core/FrameTiming.h | 15 +++- Core/HLE/sceDisplay.cpp | 32 +++----- GPU/Vulkan/VulkanUtil.cpp | 12 +-- GPU/Vulkan/VulkanUtil.h | 2 +- SDL/SDLVulkanGraphicsContext.cpp | 15 ++-- UI/DebugOverlay.cpp | 9 ++- UI/GameSettingsScreen.cpp | 48 ++++++------ UI/NativeApp.cpp | 6 +- Windows/GPU/WindowsVulkanContext.cpp | 18 +++-- android/jni/AndroidVulkanContext.cpp | 15 ++-- assets/lang/ar_AE.ini | 2 + assets/lang/az_AZ.ini | 2 + assets/lang/be_BY.ini | 2 + assets/lang/bg_BG.ini | 2 + assets/lang/ca_ES.ini | 2 + assets/lang/cz_CZ.ini | 2 + assets/lang/da_DK.ini | 2 + assets/lang/de_DE.ini | 2 + assets/lang/dr_ID.ini | 2 + assets/lang/en_US.ini | 2 + assets/lang/es_ES.ini | 2 + assets/lang/es_LA.ini | 2 + assets/lang/fa_IR.ini | 2 + assets/lang/fi_FI.ini | 2 + assets/lang/fr_FR.ini | 2 + assets/lang/gl_ES.ini | 2 + assets/lang/gr_EL.ini | 2 + assets/lang/he_IL.ini | 2 + assets/lang/he_IL_invert.ini | 2 + assets/lang/hr_HR.ini | 2 + assets/lang/hu_HU.ini | 2 + assets/lang/id_ID.ini | 2 + assets/lang/it_IT.ini | 2 + assets/lang/ja_JP.ini | 2 + assets/lang/jv_ID.ini | 2 + assets/lang/ko_KR.ini | 2 + assets/lang/ku_SO.ini | 2 + assets/lang/lo_LA.ini | 2 + assets/lang/lt-LT.ini | 2 + assets/lang/ms_MY.ini | 2 + assets/lang/nl_NL.ini | 2 + assets/lang/no_NO.ini | 2 + assets/lang/pl_PL.ini | 2 + assets/lang/pt_BR.ini | 2 + assets/lang/pt_PT.ini | 2 + assets/lang/ro_RO.ini | 2 + assets/lang/ru_RU.ini | 2 + assets/lang/sv_SE.ini | 2 + assets/lang/tg_PH.ini | 2 + assets/lang/th_TH.ini | 2 + assets/lang/tr_TR.ini | 2 + assets/lang/uk_UA.ini | 2 + assets/lang/vi_VN.ini | 2 + assets/lang/zh_CN.ini | 2 + assets/lang/zh_TW.ini | 2 + ios/ViewControllerMetal.mm | 18 +++-- libretro/LibretroVulkanContext.cpp | 1 + 65 files changed, 284 insertions(+), 175 deletions(-) diff --git a/Common/GPU/D3D11/thin3d_d3d11.cpp b/Common/GPU/D3D11/thin3d_d3d11.cpp index fe0a7e6a92..7ce3893546 100644 --- a/Common/GPU/D3D11/thin3d_d3d11.cpp +++ b/Common/GPU/D3D11/thin3d_d3d11.cpp @@ -161,6 +161,13 @@ public: void BeginFrame(DebugFlags debugFlags) override; void EndFrame() override; void Present(PresentMode presentMode) override; + PresentMode GetCurrentPresentMode() const override { + if (currentInterval_ == 1) { + return PresentMode::FIFO; + } else { + return PresentMode::IMMEDIATE; + } + } int GetFrameCount() override { return frameCount_; } @@ -272,6 +279,8 @@ private: D3D_FEATURE_LEVEL featureLevel_; std::string adapterDesc_; std::vector deviceList_; + + int currentInterval_ = -1; }; D3D11DrawContext::D3D11DrawContext(ComPtr device, ComPtr deviceContext, ComPtr device1, ComPtr deviceContext1, ComPtr swapChain, D3D_FEATURE_LEVEL featureLevel, HWND hWnd, std::vector deviceList, int maxInflightFrames) @@ -492,6 +501,7 @@ void D3D11DrawContext::Present(PresentMode presentMode) { #endif } swapChain_->Present(interval, flags); + currentInterval_ = interval; } curRenderTargetView_.Reset(); diff --git a/Common/GPU/OpenGL/thin3d_gl.cpp b/Common/GPU/OpenGL/thin3d_gl.cpp index 0b3debbba3..ffe2b75d74 100644 --- a/Common/GPU/OpenGL/thin3d_gl.cpp +++ b/Common/GPU/OpenGL/thin3d_gl.cpp @@ -368,6 +368,9 @@ public: void BeginFrame(DebugFlags debugFlags) override; void EndFrame() override; void Present(PresentMode mode) override; + PresentMode GetCurrentPresentMode() const override { + return requestedPresentMode_; + } int GetFrameCount() override { return frameCount_; @@ -527,6 +530,8 @@ private: GLPushBuffer *push; }; FrameData frameData_[GLRenderManager::MAX_INFLIGHT_FRAMES]{}; + + PresentMode requestedPresentMode_{}; }; static constexpr int MakeIntelSimpleVer(int v1, int v2, int v3) { @@ -812,8 +817,14 @@ void OpenGLContext::EndFrame() { } void OpenGLContext::Present(PresentMode presentMode) { + if ((caps_.presentModesSupported & presentMode) == 0) { + ERROR_LOG(Log::G3D, "Present mode %d not supported", (int)presentMode); + _dbg_assert_(false); + } + renderManager_.Present(); frameCount_++; + requestedPresentMode_ = presentMode; } void OpenGLContext::Invalidate(InvalidationFlags flags) { diff --git a/Common/GPU/Vulkan/VulkanContext.cpp b/Common/GPU/Vulkan/VulkanContext.cpp index f8cc8b41f8..1ab7134c4f 100644 --- a/Common/GPU/Vulkan/VulkanContext.cpp +++ b/Common/GPU/Vulkan/VulkanContext.cpp @@ -946,10 +946,10 @@ void VulkanContext::SetDebugNameImpl(uint64_t handle, VkObjectType type, const c VkResult VulkanContext::InitSurface(WindowSystem winsys, void *data1, void *data2) { winsys_ = winsys; - if (winsysData1_ != data1) { + if (winsysData1_ != data1 && winsysData1_ != 0) { WARN_LOG(Log::G3D, "winsysData1 changed from %p to %p", winsysData1_, data1); } - if (winsysData2_ != data2) { + if (winsysData2_ != data2 && winsysData2_ != 0) { WARN_LOG(Log::G3D, "winsysData2 changed from %p to %p", winsysData2_, data2); } winsysData1_ = data1; diff --git a/Common/GPU/Vulkan/thin3d_vulkan.cpp b/Common/GPU/Vulkan/thin3d_vulkan.cpp index 06dcc48743..db5131b32a 100644 --- a/Common/GPU/Vulkan/thin3d_vulkan.cpp +++ b/Common/GPU/Vulkan/thin3d_vulkan.cpp @@ -501,7 +501,21 @@ public: void BeginFrame(DebugFlags debugFlags) override; void EndFrame() override; + void Present(PresentMode presentMode) override; + PresentMode GetCurrentPresentMode() const override { + switch (vulkan_->GetPresentMode()) { + case VK_PRESENT_MODE_IMMEDIATE_KHR: + return PresentMode::IMMEDIATE; + case VK_PRESENT_MODE_MAILBOX_KHR: + return PresentMode::MAILBOX; + case VK_PRESENT_MODE_FIFO_KHR: + case VK_PRESENT_MODE_FIFO_RELAXED_KHR: + case VK_PRESENT_MODE_FIFO_LATEST_READY_KHR: + default: + return PresentMode::FIFO; + } + } int GetFrameCount() override { return frameCount_; diff --git a/Common/GPU/thin3d.h b/Common/GPU/thin3d.h index 48dea69e7a..6cb931c0f2 100644 --- a/Common/GPU/thin3d.h +++ b/Common/GPU/thin3d.h @@ -860,6 +860,7 @@ public: // Some backends also can't change presentation mode immediately. virtual void Present(PresentMode presentMode) = 0; + virtual PresentMode GetCurrentPresentMode() const = 0; // This should be avoided as much as possible, in favor of clearing when binding a render target, which is native // on Vulkan. diff --git a/Core/Config.cpp b/Core/Config.cpp index 95c642dff3..dc9576cae2 100644 --- a/Core/Config.cpp +++ b/Core/Config.cpp @@ -605,24 +605,6 @@ struct ConfigTranslator { typedef ConfigTranslator GPUBackendTranslator; -static int FastForwardModeFromString(const std::string &s) { - if (!strcasecmp(s.c_str(), "CONTINUOUS")) - return (int)FastForwardMode::CONTINUOUS; - if (!strcasecmp(s.c_str(), "SKIP_FLIP")) - return (int)FastForwardMode::SKIP_FLIP; - return DefaultFastForwardMode(); -} - -static std::string FastForwardModeToString(int v) { - switch (FastForwardMode(v)) { - case FastForwardMode::CONTINUOUS: - return "CONTINUOUS"; - case FastForwardMode::SKIP_FLIP: - return "SKIP_FLIP"; - } - return "CONTINUOUS"; -} - static std::string DefaultInfrastructureUsername() { // If the user has already picked a Nickname that satisfies the rules and is not "PPSSPP", // let's use that. @@ -718,7 +700,7 @@ static const ConfigSetting graphicsSettings[] = { ConfigSetting("TexScalingType", &g_Config.iTexScalingType, 0, CfgFlag::PER_GAME | CfgFlag::REPORT), ConfigSetting("TexDeposterize", &g_Config.bTexDeposterize, false, CfgFlag::PER_GAME | CfgFlag::REPORT), ConfigSetting("TexHardwareScaling", &g_Config.bTexHardwareScaling, false, CfgFlag::PER_GAME | CfgFlag::REPORT), - ConfigSetting("VSync", &g_Config.bVSync, true, CfgFlag::PER_GAME), + ConfigSetting("VerticalSync", &g_Config.bVSync, true, CfgFlag::PER_GAME), ConfigSetting("LowLatencyPresent", &g_Config.bLowLatencyPresent, true, CfgFlag::PER_GAME), ConfigSetting("BloomHack", &g_Config.iBloomHack, 0, CfgFlag::PER_GAME | CfgFlag::REPORT), diff --git a/Core/ConfigValues.h b/Core/ConfigValues.h index 53f9dfb9d4..e02d06e714 100644 --- a/Core/ConfigValues.h +++ b/Core/ConfigValues.h @@ -147,14 +147,6 @@ ENUM_CLASS_BITOPS(DisableHLEFlags); std::string GPUBackendToString(GPUBackend backend); GPUBackend GPUBackendFromString(std::string_view backend); -// Vulkan present modes, linearized. Currently in order of lowest to highest latency, hopefully won't change in the future. -// NOTE: These values DO NOT match the flags in DrawContext caps - these are not used as a bitfield. -enum class PresentMode { - Immediate = 0, // VK_PRESENT_MODE_IMMEDIATE_KHR - Mailbox = 1, // VK_PRESENT_MODE_MAILBOX_KHR - Fifo = 2, // VK_PRESENT_MODE_FIFO_KHR -}; - // For iIOTimingMethod. enum IOTimingMethods { IOTIMING_FAST = 0, diff --git a/Core/FrameTiming.cpp b/Core/FrameTiming.cpp index a7fbfe9d01..731bee82ce 100644 --- a/Core/FrameTiming.cpp +++ b/Core/FrameTiming.cpp @@ -22,6 +22,7 @@ #include "ppsspp_config.h" #include "Common/Profiler/Profiler.h" #include "Common/Log.h" +#include "Common/System/Display.h" #include "Common/TimeUtil.h" #include "Core/RetroAchievements.h" @@ -56,22 +57,6 @@ void WaitUntil(double now, double timestamp, const char *reason) { #endif } -inline Draw::PresentMode GetBestImmediateMode(Draw::PresentMode supportedModes) { - if (supportedModes & Draw::PresentMode::MAILBOX) { - return Draw::PresentMode::MAILBOX; - } else { - return Draw::PresentMode::IMMEDIATE; - } -} - -void FrameTiming::Reset(Draw::DrawContext *draw) { - if (g_Config.bVSync || !(draw->GetDeviceCaps().presentModesSupported & (Draw::PresentMode::MAILBOX | Draw::PresentMode::IMMEDIATE))) { - presentMode = Draw::PresentMode::FIFO; - } else { - presentMode = GetBestImmediateMode(draw->GetDeviceCaps().presentModesSupported); - } -} - void FrameTiming::DeferWaitUntil(double until, double *curTimePtr) { _dbg_assert_(until > 0.0); waitUntil_ = until; @@ -89,54 +74,65 @@ void FrameTiming::PostSubmit() { } } -Draw::PresentMode ComputePresentMode(Draw::DrawContext *draw) { - _assert_(draw); +void FrameTiming::ComputePresentMode(Draw::DrawContext *draw, bool fastForward) { + _dbg_assert_(draw); + if (!draw) { + fastForwardSkipFlip_ = true; + presentMode_ = Draw::PresentMode::FIFO; + return; + } - Draw::PresentMode mode = Draw::PresentMode::FIFO; + _dbg_assert_(draw->GetDeviceCaps().presentModesSupported != (Draw::PresentMode)0); - if (draw->GetDeviceCaps().presentModesSupported & (Draw::PresentMode::IMMEDIATE | Draw::PresentMode::MAILBOX)) { - // Switch to immediate if desired and possible. - bool wantInstant = false; - if (!g_Config.bVSync) { - wantInstant = true; + if (draw->GetDeviceCaps().presentModesSupported == Draw::PresentMode::FIFO) { + // Only FIFO mode is supported (like on iOS and some GLES backends). + fastForwardSkipFlip_ = true; + presentMode_ = Draw::PresentMode::FIFO; + return; + } + + // More than one present mode is supported. Use careful logic. + + // The user has requested vsync off. + if (!g_Config.bVSync) { + if (draw->GetDeviceCaps().presentModesSupported & Draw::PresentMode::IMMEDIATE) { + // Use immediate mode, whether fast-forwarding or not. + presentMode_ = Draw::PresentMode::IMMEDIATE; + fastForwardSkipFlip_ = false; + return; } + // Inconsistent state - vsync is off but immediate mode is not supported. + // We will simply force on VSync. + g_Config.bVSync = true; + } - if (PSP_CoreParameter().fastForward && NetworkAllowSpeedControl()) { - wantInstant = true; + // At this point, vsync is always on. What decides now is whether MAILBOX or IMMEDIATE is available, + // and also if we need an unsynced mode. + + // OK, vsync is requested (or immediate is not available). If mailbox is supported, it works the same as IMMEDIATE above. + + if (g_Config.bLowLatencyPresent) { + // Use mailbox if available. It works fine for both fast-forward and normal. + if (draw->GetDeviceCaps().presentModesSupported & Draw::PresentMode::MAILBOX) { + presentMode_ = Draw::PresentMode::MAILBOX; + fastForwardSkipFlip_ = false; + return; } + // We could force off lowLatencyPresent here, but it's no good when changing between backends. + // So let's leave it on in the background, maybe the user just went from Vulkan to OpenGL. + } - FPSLimit limit = PSP_CoreParameter().fpsLimit; - if (!NetworkAllowSpeedControl()) { - limit = FPSLimit::NORMAL; - } - - if (limit != FPSLimit::NORMAL) { - int limit; - if (PSP_CoreParameter().fpsLimit == FPSLimit::CUSTOM1) - limit = g_Config.iFpsLimit1; - else if (PSP_CoreParameter().fpsLimit == FPSLimit::CUSTOM2) - limit = g_Config.iFpsLimit2; - else - limit = PSP_CoreParameter().analogFpsLimit; - - // For an alternative speed that is a clean factor of 60, the user probably still wants vsync. - // TODO: Should take the user's display refresh rate into account... - if (limit == 0 || (limit >= 0 && limit != 15 && limit != 30 && limit != 60)) { - wantInstant = true; - } - } - - if (wantInstant && g_Config.bVSync && !draw->GetDeviceCaps().presentInstantModeChange) { - // If in vsync mode (which will be FIFO), and the backend can't switch immediately, - // stick to FIFO. - wantInstant = false; - } - - // The outer if checks that instant modes are available. - if (wantInstant) { - mode = GetBestImmediateMode(draw->GetDeviceCaps().presentModesSupported); + // At this point, low-latency mode is not available, and vsync is on. We see if we can use INSTANT + // mode for fast-forwarding, or if we need to resort to frameskipping. + if (draw->GetDeviceCaps().presentInstantModeChange) { + if (fastForward) { + presentMode_ = Draw::PresentMode::IMMEDIATE; + fastForwardSkipFlip_ = false; + return; } } - return mode; + // Finally, fallback to FIFO mode, with skip-flip in fast-forward. + presentMode_ = Draw::PresentMode::FIFO; + fastForwardSkipFlip_ = true; } diff --git a/Core/FrameTiming.h b/Core/FrameTiming.h index b8ceaa2ab1..fbdfab9a31 100644 --- a/Core/FrameTiming.h +++ b/Core/FrameTiming.h @@ -12,18 +12,25 @@ class FrameTiming { public: void DeferWaitUntil(double until, double *curTimePtr); void PostSubmit(); - void Reset(Draw::DrawContext *draw); + void ComputePresentMode(Draw::DrawContext *draw, bool fastForward); - // Some backends won't allow changing this willy nilly. - Draw::PresentMode presentMode; + bool FastForwardNeedsSkipFlip() const { + return fastForwardSkipFlip_; + } + Draw::PresentMode PresentMode() const { + return presentMode_; + } private: + // For use on the next Present. These two are set by ComputePresentMode. + Draw::PresentMode presentMode_; + bool fastForwardSkipFlip_; + double waitUntil_; double *curTimePtr_; }; extern FrameTiming g_frameTiming; -Draw::PresentMode ComputePresentMode(Draw::DrawContext *draw); void WaitUntil(double now, double timestamp, const char *reason); diff --git a/Core/HLE/sceDisplay.cpp b/Core/HLE/sceDisplay.cpp index 64401735f6..7d231e4b15 100644 --- a/Core/HLE/sceDisplay.cpp +++ b/Core/HLE/sceDisplay.cpp @@ -580,22 +580,6 @@ void __DisplayFlip(int cyclesLate) { bool duplicateFrames = g_Config.bRenderDuplicateFrames && g_Config.iFrameSkip == 0; - bool fastForwardSkipFlip = false; - - Draw::DrawContext *draw = gpu->GetDrawContext(); - if (draw) { - g_frameTiming.presentMode = ComputePresentMode(draw); - if (!draw->GetDeviceCaps().presentInstantModeChange && g_frameTiming.presentMode == Draw::PresentMode::FIFO) { - // Some backends can't just flip into MAILBOX/IMMEDIATE mode instantly. - // Vulkan doesn't support the interval setting, so we force skipping the flip. - // TODO: We'll clean this up in a more backend-independent way later. - fastForwardSkipFlip = true; - } - } else { - // Surely can never get here? - g_frameTiming.presentMode = Draw::PresentMode::FIFO; - } - if (!g_Config.bSkipBufferEffects) { postEffectRequiresFlip = duplicateFrames || g_Config.bShaderChainRequires60FPS; } @@ -606,11 +590,14 @@ void __DisplayFlip(int cyclesLate) { const bool fbDirty = gpu->FramebufferDirty(); + Draw::DrawContext *draw = gpu->GetDrawContext(); + bool needFlip = fbDirty || noRecentFlip || postEffectRequiresFlip; if (!needFlip) { // Okay, there's no new frame to draw, game might be sitting in a static loading screen // or similar, and not long enough to trigger noRecentFlip. But audio may be playing, so we need to time still. DoFrameIdleTiming(); + g_frameTiming.ComputePresentMode(draw, false); return; } @@ -624,10 +611,16 @@ void __DisplayFlip(int cyclesLate) { bool forceNoFlip = false; float refreshRate = System_GetPropertyFloat(SYSPROP_DISPLAY_REFRESH_RATE); // Avoid skipping on devices that have 58 or 59 FPS, except when alternate speed is set. - bool refreshRateNeedsSkip = FrameTimingLimit() != framerate && FrameTimingLimit() > refreshRate; + const double fpsLimit = FrameTimingLimit(); + bool throttle = fpsLimit != 0.0; + + bool refreshRateNeedsSkip = fpsLimit != framerate && fpsLimit > refreshRate || !throttle; + + g_frameTiming.ComputePresentMode(draw, refreshRateNeedsSkip); + // Alternative to frameskip fast-forward, where we draw everything. // Useful if skipping a frame breaks graphics or for checking drawing speed. - if (fastForwardSkipFlip && (!FrameTimingThrottled() || refreshRateNeedsSkip)) { + if (g_frameTiming.FastForwardNeedsSkipFlip() && (!FrameTimingThrottled() || refreshRateNeedsSkip)) { static double lastFlip = 0; double now = time_now_d(); if ((now - lastFlip) < 1.0f / refreshRate) { @@ -662,9 +655,6 @@ void __DisplayFlip(int cyclesLate) { gpuStats.numFlips++; } - bool throttle = FrameTimingThrottled(); - - int fpsLimit = FrameTimingLimit(); float scaledTimestep = (float)numVBlanksSinceFlip * timePerVblank; if (fpsLimit > 0 && fpsLimit != framerate) { scaledTimestep *= (float)framerate / fpsLimit; diff --git a/GPU/Vulkan/VulkanUtil.cpp b/GPU/Vulkan/VulkanUtil.cpp index e0b7570a87..e1d26e08e7 100644 --- a/GPU/Vulkan/VulkanUtil.cpp +++ b/GPU/Vulkan/VulkanUtil.cpp @@ -21,6 +21,7 @@ #include "Common/GPU/Vulkan/VulkanContext.h" #include "Common/Data/Text/Parsers.h" #include "Core/Config.h" +#include "Core/FrameTiming.h" #include "GPU/Vulkan/VulkanUtil.h" #ifdef _DEBUG @@ -36,14 +37,15 @@ const VkComponentMapping VULKAN_1555_SWIZZLE = { VK_COMPONENT_SWIZZLE_B, VK_COMP const VkComponentMapping VULKAN_565_SWIZZLE = { VK_COMPONENT_SWIZZLE_B, VK_COMPONENT_SWIZZLE_IDENTITY, VK_COMPONENT_SWIZZLE_R, VK_COMPONENT_SWIZZLE_IDENTITY }; const VkComponentMapping VULKAN_8888_SWIZZLE = { VK_COMPONENT_SWIZZLE_IDENTITY, VK_COMPONENT_SWIZZLE_IDENTITY, VK_COMPONENT_SWIZZLE_IDENTITY, VK_COMPONENT_SWIZZLE_IDENTITY }; -VkPresentModeKHR ConfigPresentModeToVulkan() { - PresentMode presentMode = (PresentMode)g_Config.iVulkanPresentationMode; +VkPresentModeKHR ConfigPresentModeToVulkan(Draw::DrawContext *draw) { + g_frameTiming.ComputePresentMode(draw, false); + Draw::PresentMode presentMode = g_frameTiming.PresentMode(); switch (presentMode) { - case PresentMode::Immediate: + case Draw::PresentMode::IMMEDIATE: return VK_PRESENT_MODE_IMMEDIATE_KHR; - case PresentMode::Mailbox: + case Draw::PresentMode::MAILBOX: return VK_PRESENT_MODE_MAILBOX_KHR; - case PresentMode::Fifo: + case Draw::PresentMode::FIFO: default: return VK_PRESENT_MODE_FIFO_KHR; } diff --git a/GPU/Vulkan/VulkanUtil.h b/GPU/Vulkan/VulkanUtil.h index 72ca392dc8..ade0e555c4 100644 --- a/GPU/Vulkan/VulkanUtil.h +++ b/GPU/Vulkan/VulkanUtil.h @@ -89,5 +89,5 @@ private: VkShaderModule CompileShaderModule(VulkanContext *vulkan, VkShaderStageFlagBits stage, const char *code, std::string *error); -VkPresentModeKHR ConfigPresentModeToVulkan(); +VkPresentModeKHR ConfigPresentModeToVulkan(Draw::DrawContext *draw); void InitVulkanCreateInfoFromConfig(VulkanContext::CreateInfo *info); diff --git a/SDL/SDLVulkanGraphicsContext.cpp b/SDL/SDLVulkanGraphicsContext.cpp index d77ae8cef2..47d05697d6 100644 --- a/SDL/SDLVulkanGraphicsContext.cpp +++ b/SDL/SDLVulkanGraphicsContext.cpp @@ -128,18 +128,19 @@ bool SDLVulkanGraphicsContext::Init(SDL_Window *&window, int x, int y, int w, in break; } - VkPresentModeKHR presentMode = ConfigPresentModeToVulkan(); + bool useMultiThreading = g_Config.bRenderMultiThreading; + if (g_Config.iInflightFrames == 1) { + useMultiThreading = false; + } + draw_ = Draw::T3DCreateVulkanContext(vulkan_, useMultiThreading); + + VkPresentModeKHR presentMode = ConfigPresentModeToVulkan(draw_); if (!vulkan_->InitSwapchain(presentMode)) { *error_message = vulkan_->InitError(); Shutdown(); return false; } - bool useMultiThreading = g_Config.bRenderMultiThreading; - if (g_Config.iInflightFrames == 1) { - useMultiThreading = false; - } - draw_ = Draw::T3DCreateVulkanContext(vulkan_, useMultiThreading); SetGPUBackend(GPUBackend::VULKAN); bool success = draw_->CreatePresets(); _assert_(success); @@ -170,7 +171,7 @@ void SDLVulkanGraphicsContext::Resize() { // NOTE: Removing DestroySwapchain here causes a double re-create on MacOS with MoltenVK, for some reason. // It's like passing on oldSwapchain doesn't really work as expected. vulkan_->DestroySwapchain(); - VkPresentModeKHR presentMode = ConfigPresentModeToVulkan(); + VkPresentModeKHR presentMode = ConfigPresentModeToVulkan(draw_); vulkan_->InitSwapchain(presentMode); draw_->HandleEvent(Draw::Event::GOT_BACKBUFFER, vulkan_->GetBackbufferWidth(), vulkan_->GetBackbufferHeight()); } diff --git a/UI/DebugOverlay.cpp b/UI/DebugOverlay.cpp index 1243208d5f..4f31d4b6e6 100644 --- a/UI/DebugOverlay.cpp +++ b/UI/DebugOverlay.cpp @@ -132,14 +132,19 @@ static void DrawFrameTiming(UIContext *ctx, const Bounds &bounds) { char statBuf[1024]{}; + Draw::DrawContext *draw = ctx->GetDrawContext(); + ctx->Flush(); ctx->BindFontTexture(); ctx->Draw()->SetFontScale(0.5f, 0.5f); // NOTE: This is not necessarily the same as the actual present mode. snprintf(statBuf, sizeof(statBuf), - "Timing mode (interval): %s", - Draw::PresentModeToString(g_frameTiming.presentMode)); + "Presentation mode: %s Needs skip: %s\n" + "Actual presentation mode: %s", + Draw::PresentModeToString(g_frameTiming.PresentMode()), + g_frameTiming.FastForwardNeedsSkipFlip() ? "true" : "false"), + Draw::PresentModeToString(draw->GetCurrentPresentMode()); ctx->Draw()->DrawTextRect(ubuntu24, statBuf, bounds.x + 10, bounds.y + 50, bounds.w - 20, bounds.h - 30, 0xFFFFFFFF, FLAG_DYNAMIC_ASCII); diff --git a/UI/GameSettingsScreen.cpp b/UI/GameSettingsScreen.cpp index bb19b2c4ea..c9bfc8fb7e 100644 --- a/UI/GameSettingsScreen.cpp +++ b/UI/GameSettingsScreen.cpp @@ -355,6 +355,10 @@ void GameSettingsScreen::CreateGraphicsSettings(UI::ViewGroup *graphicsSettings) } #endif + graphicsSettings->Add(new CheckBox(&g_Config.bReplaceTextures, dev->T("Replace textures"))); + + graphicsSettings->Add(new ItemHeader(gr->T("Display"))); + if (deviceType != DEVICE_TYPE_VR) { #if !defined(MOBILE_DEVICE) graphicsSettings->Add(new CheckBox(&g_Config.bFullScreen, gr->T("FullScreen", "Full Screen")))->OnClick.Handle(this, &GameSettingsScreen::OnFullscreenChange); @@ -367,28 +371,6 @@ void GameSettingsScreen::CreateGraphicsSettings(UI::ViewGroup *graphicsSettings) } #endif - // If only one mode is supported (like FIFO on iOS), no need to show the options. - if (CountSetBits((u32)draw->GetDeviceCaps().presentModesSupported) > 1) { - // Immediate means non-synchronized, tearing. - if (draw->GetDeviceCaps().presentModesSupported & Draw::PresentMode::IMMEDIATE) { - CheckBox *vSync = graphicsSettings->Add(new CheckBox(&g_Config.bVSync, gr->T("VSync"))); - vSync->OnClick.Add([=](EventParams &e) { - NativeResized(); // TODO: Remove - }); - } - if (draw->GetDeviceCaps().presentModesSupported & Draw::PresentMode::MAILBOX) { - CheckBox *lowLatency = graphicsSettings->Add(new CheckBox(&g_Config.bLowLatencyPresent, gr->T("Low latency presentation"))); - lowLatency->OnClick.Add([=](EventParams &e) { - NativeResized(); // TODO: Remove - }); - - // If the immediate mode is supported, we can tie low latency present to VSync. - if (draw->GetDeviceCaps().presentModesSupported & Draw::PresentMode::IMMEDIATE) { - lowLatency->SetEnabledPtr(&g_Config.bVSync); - } - } - } - #if PPSSPP_PLATFORM(ANDROID) // Hide Immersive Mode on pre-kitkat Android if (System_GetPropertyInt(SYSPROP_SYSTEMVERSION) >= 19) { @@ -403,7 +385,27 @@ void GameSettingsScreen::CreateGraphicsSettings(UI::ViewGroup *graphicsSettings) }); } - graphicsSettings->Add(new CheckBox(&g_Config.bReplaceTextures, dev->T("Replace textures"))); + // If only one mode is supported (like FIFO on iOS), no need to show the options. + if (CountSetBits((u32)draw->GetDeviceCaps().presentModesSupported) > 1) { + // Immediate means non-synchronized, tearing. + if (draw->GetDeviceCaps().presentModesSupported & Draw::PresentMode::IMMEDIATE) { + CheckBox *vSync = graphicsSettings->Add(new CheckBox(&g_Config.bVSync, gr->T("VSync"))); + vSync->OnClick.Add([=](EventParams &e) { + NativeResized(); // TODO: Remove + }); + } + if (draw->GetDeviceCaps().presentModesSupported & Draw::PresentMode::MAILBOX) { + CheckBox *lowLatency = graphicsSettings->Add(new CheckBox(&g_Config.bLowLatencyPresent, gr->T("Low latency display"))); + lowLatency->OnClick.Add([=](EventParams &e) { + NativeResized(); // TODO: Remove + }); + + // If the immediate mode is supported, we can tie low latency present to VSync. + if (draw->GetDeviceCaps().presentModesSupported & Draw::PresentMode::IMMEDIATE) { + lowLatency->SetEnabledPtr(&g_Config.bVSync); + } + } + } graphicsSettings->Add(new ItemHeader(gr->T("Frame Rate Control"))); static const char *frameSkip[] = {"Off", "1", "2", "3", "4", "5", "6", "7", "8"}; diff --git a/UI/NativeApp.cpp b/UI/NativeApp.cpp index b4a4f153b1..10788b0b85 100644 --- a/UI/NativeApp.cpp +++ b/UI/NativeApp.cpp @@ -1179,7 +1179,8 @@ void NativeFrame(GraphicsContext *graphicsContext) { if (g_Config.bGpuLogProfiler) debugFlags |= Draw::DebugFlags::PROFILE_SCOPES; - g_frameTiming.Reset(g_draw); + // Can be overridden by sceDisplay which may pass true for the second argument. + g_frameTiming.ComputePresentMode(g_draw, false); g_draw->BeginFrame(debugFlags); @@ -1206,8 +1207,7 @@ void NativeFrame(GraphicsContext *graphicsContext) { ClearFailedGPUBackends(); } - Draw::PresentMode presentMode = ComputePresentMode(g_draw); - g_draw->Present(presentMode); + g_draw->Present(g_frameTiming.PresentMode()); if (resized) { INFO_LOG(Log::G3D, "Resized flag set - recalculating bounds"); diff --git a/Windows/GPU/WindowsVulkanContext.cpp b/Windows/GPU/WindowsVulkanContext.cpp index 9870a17cc7..243f210345 100644 --- a/Windows/GPU/WindowsVulkanContext.cpp +++ b/Windows/GPU/WindowsVulkanContext.cpp @@ -52,6 +52,7 @@ #include "Core/Config.h" #include "Core/ConfigValues.h" #include "Core/System.h" +#include "Core/FrameTiming.h" #include "Common/GPU/Vulkan/VulkanLoader.h" #include "Common/GPU/Vulkan/VulkanContext.h" @@ -117,19 +118,20 @@ bool WindowsVulkanContext::Init(HINSTANCE hInst, HWND hWnd, std::string *error_m vulkan_->InitSurface(WINDOWSYSTEM_WIN32, (void *)hInst, (void *)hWnd); - VkPresentModeKHR presentMode = ConfigPresentModeToVulkan(); - if (!vulkan_->InitSwapchain(presentMode)) { - *error_message = vulkan_->InitError(); - Shutdown(); - return false; - } - bool useMultiThreading = g_Config.bRenderMultiThreading; if (g_Config.iInflightFrames == 1) { useMultiThreading = false; } draw_ = Draw::T3DCreateVulkanContext(vulkan_, useMultiThreading); + + VkPresentModeKHR presentMode = ConfigPresentModeToVulkan(draw_); + if (!vulkan_->InitSwapchain(presentMode)) { + *error_message = vulkan_->InitError(); + Shutdown(); + return false; + } + SetGPUBackend(GPUBackend::VULKAN, vulkan_->GetPhysicalDeviceProperties(deviceNum).properties.deviceName); bool success = draw_->CreatePresets(); _assert_msg_(success, "Failed to compile preset shaders"); @@ -166,7 +168,7 @@ void WindowsVulkanContext::Shutdown() { void WindowsVulkanContext::Resize() { draw_->HandleEvent(Draw::Event::LOST_BACKBUFFER, vulkan_->GetBackbufferWidth(), vulkan_->GetBackbufferHeight()); - VkPresentModeKHR presentMode = ConfigPresentModeToVulkan(); + VkPresentModeKHR presentMode = ConfigPresentModeToVulkan(draw_); vulkan_->InitSwapchain(presentMode); draw_->HandleEvent(Draw::Event::GOT_BACKBUFFER, vulkan_->GetBackbufferWidth(), vulkan_->GetBackbufferHeight()); } diff --git a/android/jni/AndroidVulkanContext.cpp b/android/jni/AndroidVulkanContext.cpp index e28b3cd5bf..cf56bf26b1 100644 --- a/android/jni/AndroidVulkanContext.cpp +++ b/android/jni/AndroidVulkanContext.cpp @@ -70,14 +70,15 @@ bool AndroidVulkanContext::InitFromRenderThread(ANativeWindow *wnd, int desiredB return false; } - VkPresentModeKHR presentMode = ConfigPresentModeToVulkan(); + bool useMultiThreading = g_Config.bRenderMultiThreading; + if (g_Config.iInflightFrames == 1) { + useMultiThreading = false; + } + draw_ = Draw::T3DCreateVulkanContext(g_Vulkan, useMultiThreading); + + VkPresentModeKHR presentMode = ConfigPresentModeToVulkan(draw_); bool success = false; if (g_Vulkan->InitSwapchain(presentMode)) { - bool useMultiThreading = g_Config.bRenderMultiThreading; - if (g_Config.iInflightFrames == 1) { - useMultiThreading = false; - } - draw_ = Draw::T3DCreateVulkanContext(g_Vulkan, useMultiThreading); SetGPUBackend(GPUBackend::VULKAN); success = draw_->CreatePresets(); // Doesn't fail, we ship the compiler. _assert_msg_(success, "Failed to compile preset shaders"); @@ -128,7 +129,7 @@ void AndroidVulkanContext::Resize() { g_Vulkan->DestroySurface(); g_Vulkan->ReinitSurface(); - VkPresentModeKHR presentMode = ConfigPresentModeToVulkan(); + VkPresentModeKHR presentMode = ConfigPresentModeToVulkan(draw_); g_Vulkan->InitSwapchain(presentMode); draw_->HandleEvent(Draw::Event::GOT_BACKBUFFER, g_Vulkan->GetBackbufferWidth(), g_Vulkan->GetBackbufferHeight()); INFO_LOG(Log::G3D, "AndroidVulkanContext::Resize end (final size: %dx%d)", g_Vulkan->GetBackbufferWidth(), g_Vulkan->GetBackbufferHeight()); diff --git a/assets/lang/ar_AE.ini b/assets/lang/ar_AE.ini index 20f3a17f80..502c3566f3 100644 --- a/assets/lang/ar_AE.ini +++ b/assets/lang/ar_AE.ini @@ -651,6 +651,7 @@ Device = Device Direct3D 11 = Direct3D 11 Disable culling = Disable culling Disabled = Disabled +Display = عرض Display layout & effects = ‎أظهر مُعدل النسق Display Resolution (HW scaler) = Display resolution (HW scaler) Driver requires Android API version %1, current is %2 = Driver requires Android API version %1, current is %2 @@ -686,6 +687,7 @@ Lazy texture caching Tip = Faster, but can cause text problems in a few games Lens flare occlusion = Lens flare occlusion Linear = ‎خطي Low = ‎منخفض +Low latency display = عرض تأخير منخفض LowCurves = Spline/Bezier curves quality LowCurves Tip = ‎فقط يستخدم من بعض الألعاب, يتحكم بنعومة المنحنيات Lower resolution for effects (reduces artifacts) = Lower resolution for effects (reduces artifacts) diff --git a/assets/lang/az_AZ.ini b/assets/lang/az_AZ.ini index 495b5073e8..979e521c3b 100644 --- a/assets/lang/az_AZ.ini +++ b/assets/lang/az_AZ.ini @@ -643,6 +643,7 @@ Device = Device Direct3D 11 = Direct3D 11 Disable culling = Disable culling Disabled = Disabled +Display = Ekran Display layout & effects = Display layout & effects Display Resolution (HW scaler) = Display resolution (HW scaler) Driver requires Android API version %1, current is %2 = Driver requires Android API version %1, current is %2 @@ -678,6 +679,7 @@ Lazy texture caching Tip = Faster, but can cause text problems in a few games Lens flare occlusion = Lens flare occlusion Linear = Linear Low = Low +Low latency display = Aşağı gecikmə ekranı LowCurves = Spline/Bezier curves quality LowCurves Tip = Only used by some games, controls smoothness of curves Lower resolution for effects (reduces artifacts) = Lower resolution for effects (reduces artifacts) diff --git a/assets/lang/be_BY.ini b/assets/lang/be_BY.ini index 335adfd157..d95ed362b7 100644 --- a/assets/lang/be_BY.ini +++ b/assets/lang/be_BY.ini @@ -626,6 +626,7 @@ CPU texture upscaler (slow) = Тып маштабавання Current GPU driver = Бягучы драйвер ГП Default GPU driver = Стандартны драйвер ГП Disable culling = Disable culling +Display = Дисплей Display layout & effects = Размяшчэнне экрана і эфекты Driver requires Android API version %1, current is %2 = Driver requires Android API version %1, current is %2 Drivers = Драйверы @@ -678,6 +679,7 @@ Lazy texture caching Tip = Faster, but can cause text problems in a few games Lens flare occlusion = Аклюзія блікаў аб'ектыва Linear = Лінейны Low = Нізкая +Low latency display = Дыск з нізкай затрымкай LowCurves = Якасць сплайнаў і крывых Безье LowCurves Tip = Only used by some games, controls smoothness of curves Lower resolution for effects (reduces artifacts) = Меншае разрозненне для эфектаў (памяншае артэфакты) diff --git a/assets/lang/bg_BG.ini b/assets/lang/bg_BG.ini index df01c92b5a..94ecd8534d 100644 --- a/assets/lang/bg_BG.ini +++ b/assets/lang/bg_BG.ini @@ -643,6 +643,7 @@ Device = Устройство Direct3D 11 = Direct3D 11 Disable culling = Disable culling Disabled = Disabled +Display = Дисплей Display layout & effects = Оформление и ефекти на дисплея Display Resolution (HW scaler) = Display resolution (HW scaler) Driver requires Android API version %1, current is %2 = Driver requires Android API version %1, current is %2 @@ -678,6 +679,7 @@ Lazy texture caching Tip = По-бързо, но може да причини п Lens flare occlusion = Запушване на отблясъка на обектива Linear = Линеарно Low = Ниско +Low latency display = Дисплей с ниска латентност LowCurves = Качество на сплайните и кривите на Безие LowCurves Tip = Използва се само от някои игри, контролира плавността на кривите Lower resolution for effects (reduces artifacts) = По-ниска резолюция за ефекти (намалява артефактите) diff --git a/assets/lang/ca_ES.ini b/assets/lang/ca_ES.ini index 5000890672..34c83fcd23 100644 --- a/assets/lang/ca_ES.ini +++ b/assets/lang/ca_ES.ini @@ -643,6 +643,7 @@ Device = Dispositiu Direct3D 11 = Direct3D 11 Disable culling = Disable culling Disabled = Desactivat +Display = Pantalla Display layout & effects = Editor de l'àrea de pantalla Display Resolution (HW scaler) = Resolució de pantalla (escalat per maquinari) Driver requires Android API version %1, current is %2 = Driver requires Android API version %1, current is %2 @@ -678,6 +679,7 @@ Lazy texture caching Tip = Ràpid, però puc provocar problemes als textos d'alg Lens flare occlusion = Lens flare occlusion Linear = Lineal Low = Baixa +Low latency display = Pantalla de baixa latència LowCurves = Qualitat de corbes Bézier LowCurves Tip = Augmenta/redueix significativament el renderitzat de corbes Bézier Lower resolution for effects (reduces artifacts) = Efectes en baixa resolució\n(redueix errors gràfics per escalat) diff --git a/assets/lang/cz_CZ.ini b/assets/lang/cz_CZ.ini index 1e8835b213..59b47a6773 100644 --- a/assets/lang/cz_CZ.ini +++ b/assets/lang/cz_CZ.ini @@ -643,6 +643,7 @@ Device = Device Direct3D 11 = Direct3D 11 Disable culling = Disable culling Disabled = Disabled +Display = Displej Display layout & effects = Zobrazit editor rozvržení Display Resolution (HW scaler) = Rozlišení obrazovky (Hardwarové zvětšení) Driver requires Android API version %1, current is %2 = Driver requires Android API version %1, current is %2 @@ -678,6 +679,7 @@ Lazy texture caching Tip = Faster, but can cause text problems in a few games Lens flare occlusion = Lens flare occlusion Linear = Lineární Low = Nízké +Low latency display = Displej s nízkou latencí LowCurves = Kvalita křivek/Beziérových křivek LowCurves Tip = Only used by some games, controls smoothness of curves Lower resolution for effects (reduces artifacts) = Nižší rozlišení efektů (snižuje artefakty) diff --git a/assets/lang/da_DK.ini b/assets/lang/da_DK.ini index 9a14209ac9..25ea6e4986 100644 --- a/assets/lang/da_DK.ini +++ b/assets/lang/da_DK.ini @@ -643,6 +643,7 @@ Device = Device Direct3D 11 = Direct3D 11 Disable culling = Disable culling Disabled = Disabled +Display = Skærm Display layout & effects = Display layout & effects Display Resolution (HW scaler) = Skærmopløsning (HW scaler) Driver requires Android API version %1, current is %2 = Driver requires Android API version %1, current is %2 @@ -678,6 +679,7 @@ Lazy texture caching Tip = Faster, but can cause text problems in a few games Lens flare occlusion = Lens flare occlusion Linear = Lineær Low = Lav +Low latency display = Lav latens display LowCurves = Simple spline og bezier-kurver (hurtigere) LowCurves Tip = Bruges kun af nogle spil, kontrollerer glathed af kurver Lower resolution for effects (reduces artifacts) = Lavere opløsning for effekter (reducerer artefakter) diff --git a/assets/lang/de_DE.ini b/assets/lang/de_DE.ini index 0114abca69..c2ef28e4b5 100644 --- a/assets/lang/de_DE.ini +++ b/assets/lang/de_DE.ini @@ -634,6 +634,7 @@ Device = Gerät Direct3D 11 = Direct3D 11 Disable culling = Culling deaktivieren Disabled = Deaktiviert +Display = Anzeige Display layout & effects = Bildschirm-Layout & Effekte Display Resolution (HW scaler) = Bildschirmauflösung (HW-Skalierer) Driver requires Android API version %1, current is %2 = Treiber erfordert Android-API-Version %1, aktuell ist %2 @@ -669,6 +670,7 @@ Lazy texture caching Tip = Schneller, kann aber in einigen Spielen Textprobleme Lens flare occlusion = Verdeckung von Linsenreflexionen Linear = Linear Low = Niedrig +Low latency display = Niedriglatenzdisplay LowCurves = Spline-/Bezierkurven-Qualität LowCurves Tip = Wird nur von einigen Spielen verwendet, es steuert die Glätte von Kurven Lower resolution for effects (reduces artifacts) = Niedrigere Auflösung für Effekte (Reduziert Artifakte) diff --git a/assets/lang/dr_ID.ini b/assets/lang/dr_ID.ini index 3643d46e00..00408e5741 100644 --- a/assets/lang/dr_ID.ini +++ b/assets/lang/dr_ID.ini @@ -643,6 +643,7 @@ Device = Device Direct3D 11 = Direct3D 11 Disable culling = Disable culling Disabled = Disabled +Display = Tampilan Display layout & effects = Display layout & effects Display Resolution (HW scaler) = Display resolution (HW scaler) Driver requires Android API version %1, current is %2 = Driver requires Android API version %1, current is %2 @@ -678,6 +679,7 @@ Lazy texture caching Tip = Faster, but can cause text problems in a few games Lens flare occlusion = Lens flare occlusion Linear = Maruruh Low = Low +Low latency display = Tampilan latensi rendah LowCurves = Spline/Bezier curves quality LowCurves Tip = Only used by some games, controls smoothness of curves Lower resolution for effects (reduces artifacts) = Lower resolution for effects (reduces artifacts) diff --git a/assets/lang/en_US.ini b/assets/lang/en_US.ini index d84684f216..76855bfde8 100644 --- a/assets/lang/en_US.ini +++ b/assets/lang/en_US.ini @@ -650,6 +650,7 @@ CPU texture upscaler (slow) = Upscale type Current GPU driver = Current GPU driver Default GPU driver = Default GPU driver Disable culling = Disable culling +Display = Display Display layout & effects = Display layout & effects Driver requires Android API version %1, current is %2 = Driver requires Android API version %1, current is %2 Drivers = Drivers @@ -702,6 +703,7 @@ Lazy texture caching Tip = Faster, but can cause text problems in a few games Lens flare occlusion = Lens flare occlusion Linear = Linear Low = Low +Low latency display = Low latency display LowCurves = Spline/Bezier curves quality LowCurves Tip = Only used by some games, controls smoothness of curves Lower resolution for effects (reduces artifacts) = Lower resolution for effects (reduces artifacts) diff --git a/assets/lang/es_ES.ini b/assets/lang/es_ES.ini index 63a7fd12f8..8e13be0f04 100644 --- a/assets/lang/es_ES.ini +++ b/assets/lang/es_ES.ini @@ -644,6 +644,7 @@ Device = Dispositivo Direct3D 11 = Direct3D 11 Disable culling = Desactivar selección Disabled = Desactivado +Display = Pantalla Display layout & effects = Distribución de pantalla y efectos Display Resolution (HW scaler) = Resolución de pantalla (escalado por hardware) Driver requires Android API version %1, current is %2 = El controlador requiere la versión API de Android %1, la versión actual es %2 @@ -679,6 +680,7 @@ Lazy texture caching Tip = Más rápido, pero puede causar problemas de texto en Lens flare occlusion = Oclusión por destello de lente Linear = Lineal Low = Baja +Low latency display = Pantalla de baja latencia LowCurves = Calidad de curvas Spline/Bezier LowCurves Tip = Solo lo utilizan algunos juegos, controla la suavidad de las curvas. Lower resolution for effects (reduces artifacts) = Resolución más baja para efectos (reduce artefactos) diff --git a/assets/lang/es_LA.ini b/assets/lang/es_LA.ini index 43ad619ced..4378e1e82e 100644 --- a/assets/lang/es_LA.ini +++ b/assets/lang/es_LA.ini @@ -643,6 +643,7 @@ Device = Dispositivo Direct3D 11 = Direct3D 11 Disable culling = Disable culling Disabled = Apagado +Display = Pantalla Display layout & effects = Editar pantalla y Shaders Display Resolution (HW scaler) = Resolución de pantalla (escalado por HW) Driver requires Android API version %1, current is %2 = El controlador requiere la versión de API de Android %1, la actual es %2 @@ -678,6 +679,7 @@ Lazy texture caching Tip = Más rápido, pero puede causar problemas de texto en Lens flare occlusion = Lens flare occlusion Linear = Lineal Low = Baja +Low latency display = Pantalla de baja latencia LowCurves = Calidad de curvas bézier/Spline LowCurves Tip = Controla la calidad de las curvas renderizadas, pero solo se utiliza en ciertos juegos. Lower resolution for effects (reduces artifacts) = Efectos en baja resolución\n(reduce errores gráficos por escalado) diff --git a/assets/lang/fa_IR.ini b/assets/lang/fa_IR.ini index 37a35fc61b..f051092e78 100644 --- a/assets/lang/fa_IR.ini +++ b/assets/lang/fa_IR.ini @@ -643,6 +643,7 @@ Device = Device Direct3D 11 = Direct3D 11 Disable culling = Disable culling Disabled = Disabled +Display = نمایش Display layout & effects = چیدمان صفحه Display Resolution (HW scaler) = رزولوشن صفحه Driver requires Android API version %1, current is %2 = Driver requires Android API version %1, current is %2 @@ -678,6 +679,7 @@ Lazy texture caching Tip = Faster, but can cause text problems in a few games Lens flare occlusion = Lens flare occlusion Linear = ‎خطی Low = ‎کم +Low latency display = نمایش با تأخیر کم LowCurves = ‎Spline/Bezier کیفیت منحنی‌های LowCurves Tip = ‎فقط در تعدادی بازی استفاده میشود، کیفیت منحنی‌ها را کنترل میکند Lower resolution for effects (reduces artifacts) = ‎کاهش رزولوشن افکت‌ها (کاهش باگ گرافیکی) diff --git a/assets/lang/fi_FI.ini b/assets/lang/fi_FI.ini index ed6b9b23ad..d969dfc00d 100644 --- a/assets/lang/fi_FI.ini +++ b/assets/lang/fi_FI.ini @@ -643,6 +643,7 @@ Device = Laite Direct3D 11 = Direct3D 11 Disable culling = Poista taustapintojen hylkääminen Disabled = Poistettu käytöstä +Display = Näyttö Display layout & effects = Näyttöasettelu ja -efektit Display Resolution (HW scaler) = Näyttöresoluutio (Laitteiston skaalaaja) Driver requires Android API version %1, current is %2 = Ajurin vaatima Android API -versio on %1, nykyinen versio on %2 @@ -678,6 +679,7 @@ Lazy texture caching Tip = Nopeampi, mutta voi aiheuttaa tekstiongelmia joissaki Lens flare occlusion = Lens flare occlusion Linear = Lineaarinen Low = Matala +Low latency display = Alhaisen viiveen näyttö LowCurves = Spline/Bezier-käyrien laatu LowCurves Tip = Käytetään vain joissakin peleissä, ohjaa käyrien sileyttä Lower resolution for effects (reduces artifacts) = Alempi resoluutio efekteille (vähentää häiriöitä) diff --git a/assets/lang/fr_FR.ini b/assets/lang/fr_FR.ini index 017eb85b85..3d41c91e2b 100644 --- a/assets/lang/fr_FR.ini +++ b/assets/lang/fr_FR.ini @@ -643,6 +643,7 @@ Device = Appareil Direct3D 11 = Direct3D 11 Disable culling = Disable culling Disabled = Désactivé +Display = Affichage Display layout & effects = Éditeur d'affichage Display Resolution (HW scaler) = Définition d'affichage (mise à l'échelle matérielle) Driver requires Android API version %1, current is %2 = Driver requires Android API version %1, current is %2 @@ -678,6 +679,7 @@ Lazy texture caching Tip = Faster, but can cause text problems in a few games Lens flare occlusion = Lens flare occlusion Linear = Linéaire Low = Basse +Low latency display = Écran à faible latence LowCurves = Qualité des courbes de Bézier et splines LowCurves Tip = Seulement utilisé par certains jeux, contrôle le lissage des courbes Lower resolution for effects (reduces artifacts) = Réduire définition des effets (réduit artéfacts) diff --git a/assets/lang/gl_ES.ini b/assets/lang/gl_ES.ini index 94d2006f07..ea389a5e94 100644 --- a/assets/lang/gl_ES.ini +++ b/assets/lang/gl_ES.ini @@ -643,6 +643,7 @@ Device = Device Direct3D 11 = Direct3D 11 Disable culling = Disable culling Disabled = Disabled +Display = Pantalla Display layout & effects = Display layout & effects Display Resolution (HW scaler) = Resolución de pantalla (escalado por hardware) Driver requires Android API version %1, current is %2 = Driver requires Android API version %1, current is %2 @@ -678,6 +679,7 @@ Lazy texture caching Tip = Faster, but can cause text problems in a few games Lens flare occlusion = Lens flare occlusion Linear = Lineal Low = Baixa +Low latency display = Pantalla de baixa latencia LowCurves = Calidade de curvas bézier LowCurves Tip = Only used by some games, controls smoothness of curves Lower resolution for effects (reduces artifacts) = Lower resolution for effects (reduces artifacts) diff --git a/assets/lang/gr_EL.ini b/assets/lang/gr_EL.ini index 4b369e82d3..8922198139 100644 --- a/assets/lang/gr_EL.ini +++ b/assets/lang/gr_EL.ini @@ -643,6 +643,7 @@ Device = Device Direct3D 11 = Direct3D 11 Disable culling = Disable culling Disabled = Απενεργοποιημένο +Display = Οθόνη Display layout & effects = Επεξεργασία διάταξης οθόνης Display Resolution (HW scaler) = Ανάλυση οθόνης (Κλιμακοτής hardware) Driver requires Android API version %1, current is %2 = Driver requires Android API version %1, current is %2 @@ -678,6 +679,7 @@ Lazy texture caching Tip = Faster, but can cause text problems in a few games Lens flare occlusion = Lens flare occlusion Linear = Γραμμικό Low = Χαμηλή +Low latency display = Οθόνη χαμηλής καθυστέρησης LowCurves = Ποιότητα καμπυλών spline/bezier LowCurves Tip = Αυτή η επιλογή θα βελτιώσει/μειώσει σημαντικά την ποιότητα των παρεχόμενων καμπυλών Lower resolution for effects (reduces artifacts) = Χαμηλότερη ανάλυση για εφέ (λιγότερα προβλήματα) diff --git a/assets/lang/he_IL.ini b/assets/lang/he_IL.ini index 6da2774b11..3e9a068f90 100644 --- a/assets/lang/he_IL.ini +++ b/assets/lang/he_IL.ini @@ -643,6 +643,7 @@ Device = Device Direct3D 11 = Direct3D 11 Disable culling = Disable culling Disabled = Disabled +Display = תצוגה Display layout & effects = Display layout & effects Display Resolution (HW scaler) = Display resolution (HW scaler) Driver requires Android API version %1, current is %2 = Driver requires Android API version %1, current is %2 @@ -678,6 +679,7 @@ Lazy texture caching Tip = Faster, but can cause text problems in a few games Lens flare occlusion = Lens flare occlusion Linear = קווי Low = Low +Low latency display = תצוגה עם השהיה נמוכה LowCurves = Spline/Bezier curves quality LowCurves Tip = Only used by some games, controls smoothness of curves Lower resolution for effects (reduces artifacts) = Lower resolution for effects (reduces artifacts) diff --git a/assets/lang/he_IL_invert.ini b/assets/lang/he_IL_invert.ini index 8cffbe310a..d19a0bd496 100644 --- a/assets/lang/he_IL_invert.ini +++ b/assets/lang/he_IL_invert.ini @@ -640,6 +640,7 @@ Device = Device Direct3D 11 = Direct3D 11 Disable culling = Disable culling Disabled = Disabled +Display = תצוגה Display layout & effects = Display layout & effects Display Resolution (HW scaler) = Display resolution (HW scaler) Driver requires Android API version %1, current is %2 = Driver requires Android API version %1, current is %2 @@ -675,6 +676,7 @@ Lazy texture caching Tip = Faster, but can cause text problems in a few games Lens flare occlusion = Lens flare occlusion Linear = יווק Low = Low +Low latency display = תצוגה עם השהיה נמוכה LowCurves = Spline/Bezier curves quality LowCurves Tip = Only used by some games, controls smoothness of curves Lower resolution for effects (reduces artifacts) = Lower resolution for effects (reduces artifacts) diff --git a/assets/lang/hr_HR.ini b/assets/lang/hr_HR.ini index 21278436ef..5a647dbc87 100644 --- a/assets/lang/hr_HR.ini +++ b/assets/lang/hr_HR.ini @@ -643,6 +643,7 @@ Device = Uređaj Direct3D 11 = Direct3D 11 Disable culling = Disable culling Disabled = Isključeno +Display = Prikaz Display layout & effects = Prikaz layout uređivača Display Resolution (HW scaler) = Prikaz rezolucije (HW mjeritelj) Driver requires Android API version %1, current is %2 = Driver requires Android API version %1, current is %2 @@ -678,6 +679,7 @@ Lazy texture caching Tip = Faster, but can cause text problems in a few games Lens flare occlusion = Lens flare occlusion Linear = Linearno Low = Nisko +Low latency display = Prikaz s niskom kašnjenjem LowCurves = Dugačke/Bezijerove kvalitete zavoja LowCurves Tip = Jedino korišteno od strane nekoliko igara, kontrolira uglađenost grafike Lower resolution for effects (reduces artifacts) = Snizi rezoluciju za efekte (smanjuje artefakte) diff --git a/assets/lang/hu_HU.ini b/assets/lang/hu_HU.ini index b5b18ae45b..ae0e35d374 100644 --- a/assets/lang/hu_HU.ini +++ b/assets/lang/hu_HU.ini @@ -643,6 +643,7 @@ Device = Eszköz Direct3D 11 = Direct3D 11 Disable culling = Culling kikapcsolása Disabled = Letiltva +Display = Kijelző Display layout & effects = Nézet szerkesztő Display Resolution (HW scaler) = Megjelenítési felbontás (HW skálázó) Driver requires Android API version %1, current is %2 = A driverhez Android API %1 verzió szükséges, a jelenlegi %2 @@ -678,6 +679,7 @@ Lazy texture caching Tip = Faster, but can cause text problems in a few games Lens flare occlusion = Lens flare occlusion Linear = Lineáris Low = Alacsony +Low latency display = Alacsony késleltetésű kijelző LowCurves = Spline/Bezier görbék minősége LowCurves Tip = Csak néhány játék használja, a görbék simaságát szabályozza Lower resolution for effects (reduces artifacts) = Alacsonyabb felbontású effektek (artifacteket csökkenti) diff --git a/assets/lang/id_ID.ini b/assets/lang/id_ID.ini index a296414bb2..4667e4a6dc 100644 --- a/assets/lang/id_ID.ini +++ b/assets/lang/id_ID.ini @@ -643,6 +643,7 @@ Device = Perangkat Direct3D 11 = Direct3D 11 Disable culling = Nonaktifkan pemusnahan Disabled = Nonaktif +Display = Tampilan Display layout & effects = Penyesuaian tata letak tampilan Display Resolution (HW scaler) = Resolusi tampilan (penskala HW) Driver requires Android API version %1, current is %2 = Driver requires Android API version %1, current is %2 @@ -678,6 +679,7 @@ Lazy texture caching Tip = Lebih cepat, tetapi dapat menyebabkan masalah teks di Lens flare occlusion = Oklusi silau lensa Linear = Linier Low = Rendah +Low latency display = Tampilan latensi rendah LowCurves = Kualitas kurva spline/bezier LowCurves Tip = Hanya digunakan oleh beberapa permainan, mengontrol kualitas kurva bezier dan spline Lower resolution for effects (reduces artifacts) = Resolusi efek lebih rendah (mengurangi artefak) diff --git a/assets/lang/it_IT.ini b/assets/lang/it_IT.ini index b5e4f670cd..74ca54009f 100644 --- a/assets/lang/it_IT.ini +++ b/assets/lang/it_IT.ini @@ -644,6 +644,7 @@ Direct3D 11 = Direct3D 11 #Disable slower effects (speedup) = Disattiva gli effetti più lenti (veloce) Disable culling = Disabilita culling Disabled = Disabilitato +Display = Display Display layout & effects = Editor Display Display Resolution (HW scaler) = Risoluzione Display (scaler HW) Driver requires Android API version %1, current is %2 = Il driver richiede la versione API di Android %1, attualmente c'è la %2 @@ -679,6 +680,7 @@ Lazy texture caching Tip = Veloce, ma può causare problemi di testo in alcuni g Lens flare occlusion = Occlusione lens flare Linear = Lineare Low = Bassa +Low latency display = Display a bassa latenza LowCurves = Riduci qualità splines e curve di bezier (maggior velocità) LowCurves Tip = Usato solo in alcuni giochi, controlla la fluidità delle curve Lower resolution for effects (reduces artifacts) = Bassa risoluzione degli effetti (riduce gli artefatti) diff --git a/assets/lang/ja_JP.ini b/assets/lang/ja_JP.ini index d0de416372..3fc3a60578 100644 --- a/assets/lang/ja_JP.ini +++ b/assets/lang/ja_JP.ini @@ -643,6 +643,7 @@ Device = デバイス Direct3D 11 = Direct3D 11 Disable culling = カリングを無効化 Disabled = 無効 +Display = ディスプレイ Display layout & effects = 画面のレイアウトを編集する Display Resolution (HW scaler) = 画面解像度 (HWスケーラー) Driver requires Android API version %1, current is %2 = ドライバーはAndroid API version %1を要求していますが, 現在 %2です @@ -678,6 +679,7 @@ Lazy texture caching Tip = 高速化するがいくつかのゲームでテキ Lens flare occlusion = レンズフレア表現への遮蔽処理 Linear = Linear Low = 低 +Low latency display = 低遅延ディスプレイ LowCurves = スプライン/ベジェ曲線の品質 LowCurves Tip = いくつかのゲームでのみ用いられ、曲線の滑らかさをコントロールする Lower resolution for effects (reduces artifacts) = エフェクトを低解像度にする (生成物を減らす) diff --git a/assets/lang/jv_ID.ini b/assets/lang/jv_ID.ini index 26684ebb4e..ec077f004f 100644 --- a/assets/lang/jv_ID.ini +++ b/assets/lang/jv_ID.ini @@ -643,6 +643,7 @@ Device = Device Direct3D 11 = Direct3D 11 Disable culling = Disable culling Disabled = Disabled +Display = Tampilan Display layout & effects = Tata letak Tampilan editor Display Resolution (HW scaler) = Resolusi tampilan (HW scaler) Driver requires Android API version %1, current is %2 = Driver requires Android API version %1, current is %2 @@ -678,6 +679,7 @@ Lazy texture caching Tip = Faster, but can cause text problems in a few games Lens flare occlusion = Lens flare occlusion Linear = Linear Low = Kurang +Low latency display = Layang latensi rendah LowCurves = Kualitas kurva Spline/Bezier LowCurves Tip = Only used by some games, controls smoothness of curves Lower resolution for effects (reduces artifacts) = Resolusi ngisor kanggo efek (nyuda artefak) diff --git a/assets/lang/ko_KR.ini b/assets/lang/ko_KR.ini index 75d937c7c4..a0ee5ef023 100644 --- a/assets/lang/ko_KR.ini +++ b/assets/lang/ko_KR.ini @@ -626,6 +626,7 @@ CPU texture upscaler (slow) = 업스케일 유형 Current GPU driver = 현재 GPU 드라이버 Default GPU driver = 기본 GPU 드라이버 Disable culling = 컬링 비활성화 +Display = 디스플레이 Display layout & effects = 화면 레이아웃 편집기 Driver requires Android API version %1, current is %2 = 드라이버에는 안드로이드 API 버전 %1이(가) 필요하며, 현재는 %2입니다. Drivers = 드라이버 @@ -678,6 +679,7 @@ Lazy texture caching Tip = 더 빠르지만 몇몇 게임에서 텍스트 문제 Lens flare occlusion = 렌즈 플레어 차단 Linear = 선형 필터링 Low = 낮음 +Low latency display = 낮은 지연 시간 디스플레이 LowCurves = 스플라인/베지어 곡선 품질 LowCurves Tip = 일부 게임에서만 사용되며, 곡선의 부드러움을 제어 Lower resolution for effects (reduces artifacts) = 효과에 대한 낮은 해상도 (인공물 감소) diff --git a/assets/lang/ku_SO.ini b/assets/lang/ku_SO.ini index 162fa9fe76..8682aa56bb 100644 --- a/assets/lang/ku_SO.ini +++ b/assets/lang/ku_SO.ini @@ -640,6 +640,7 @@ CPU texture upscaler (slow) = Upscale type Current GPU driver = Current GPU driver Default GPU driver = Default GPU driver Disable culling = Disable culling +Display = Nîşan Display layout & effects = Display layout & effects Driver requires Android API version %1, current is %2 = Driver requires Android API version %1, current is %2 Drivers = Drivers @@ -692,6 +693,7 @@ Lazy texture caching Tip = Faster, but can cause text problems in a few games Lens flare occlusion = Lens flare occlusion Linear = Linear Low = Low +Low latency display = Pêşangeha bi derfeta jê LowCurves = Spline/Bezier curves quality LowCurves Tip = Only used by some games, controls smoothness of curves Lower resolution for effects (reduces artifacts) = Lower resolution for effects (reduces artifacts) diff --git a/assets/lang/lo_LA.ini b/assets/lang/lo_LA.ini index 26553c3610..7ca1efabde 100644 --- a/assets/lang/lo_LA.ini +++ b/assets/lang/lo_LA.ini @@ -643,6 +643,7 @@ Device = Device Direct3D 11 = Direct3D 11 Disable culling = Disable culling Disabled = Disabled +Display = ສະແດງ Display layout & effects = ແກ້ໄຂຮູບແບບໜ້າຈໍ Display Resolution (HW scaler) = ຄວາມລະອຽດໜ້າຈໍ (ຕາມຮາດແວຣ໌) Driver requires Android API version %1, current is %2 = Driver requires Android API version %1, current is %2 @@ -678,6 +679,7 @@ Lazy texture caching Tip = Faster, but can cause text problems in a few games Lens flare occlusion = Lens flare occlusion Linear = Linear Low = ຕ່ຳ +Low latency display = ການສະແດງທີ່ມີລາຍການສະຫຼຸບແລະສົທານ LowCurves = ລະດັບເສັ້ນສອງມິຕິ ຫຼື ເສັ້ນໂຄ້ງ LowCurves Tip = ໃຊ້ສະເພາະບາງເກມ, ເພື່ອຄວບຄຸມຄວາມມື່ນໄຫຼຂອງເສັ້ນໂຄ້ງ Lower resolution for effects (reduces artifacts) = ຫຼຸດຄວາມລະອຽດຂອງເອັບເຟກໃຫ້ຕ່ຳລົງ (ແກ້ພາບແຈ້ງ) diff --git a/assets/lang/lt-LT.ini b/assets/lang/lt-LT.ini index 3e132462cf..c2ed213fee 100644 --- a/assets/lang/lt-LT.ini +++ b/assets/lang/lt-LT.ini @@ -643,6 +643,7 @@ Device = Device Direct3D 11 = Direct3D 11 Disable culling = Disable culling Disabled = Disabled +Display = Ekranas Display layout & effects = Display layout & effects Display Resolution (HW scaler) = Ekrano rezoliucija ("HW" ištiesinimas) Driver requires Android API version %1, current is %2 = Driver requires Android API version %1, current is %2 @@ -678,6 +679,7 @@ Lazy texture caching Tip = Faster, but can cause text problems in a few games Lens flare occlusion = Lens flare occlusion Linear = Linijinis Low = Žema +Low latency display = Žema uždelsimo ekranas LowCurves = "Spline/Bezier" lankstumų kokybė LowCurves Tip = Only used by some games, controls smoothness of curves Lower resolution for effects (reduces artifacts) = Lower resolution for effects (reduces artifacts) diff --git a/assets/lang/ms_MY.ini b/assets/lang/ms_MY.ini index 476cb2fd2b..38be643cb7 100644 --- a/assets/lang/ms_MY.ini +++ b/assets/lang/ms_MY.ini @@ -643,6 +643,7 @@ Device = Device Direct3D 11 = Direct3D 11 Disable culling = Disable culling Disabled = Disabled +Display = Paparan Display layout & effects = Display layout & effects Display Resolution (HW scaler) = Display resolution (HW scaler) Driver requires Android API version %1, current is %2 = Driver requires Android API version %1, current is %2 @@ -678,6 +679,7 @@ Lazy texture caching Tip = Faster, but can cause text problems in a few games Lens flare occlusion = Lens flare occlusion Linear = Garis dekat Low = Low +Low latency display = Paparan latensi rendah LowCurves = Kualiti rendah splin dan keluk bezier (tingkatkan kelajuan) LowCurves Tip = Only used by some games, controls smoothness of curves Lower resolution for effects (reduces artifacts) = Lower resolution for effects (reduces artifacts) diff --git a/assets/lang/nl_NL.ini b/assets/lang/nl_NL.ini index 39f8b3ea57..258b3d706c 100644 --- a/assets/lang/nl_NL.ini +++ b/assets/lang/nl_NL.ini @@ -643,6 +643,7 @@ Device = Device Direct3D 11 = Direct3D 11 Disable culling = Disable culling Disabled = Disabled +Display = Display Display layout & effects = Schermweergave bewerken Display Resolution (HW scaler) = Schermresolutie (hardware) Driver requires Android API version %1, current is %2 = Driver requires Android API version %1, current is %2 @@ -678,6 +679,7 @@ Lazy texture caching Tip = Faster, but can cause text problems in a few games Lens flare occlusion = Lens flare occlusion Linear = Lineair Low = Laag +Low latency display = Laag-latentie-display LowCurves = Kwaliteit spline- en béziercurves LowCurves Tip = Alleen gebruikt in sommige games, bestuurt de afronding van curves Lower resolution for effects (reduces artifacts) = Effectresolutie verlagen (minder objecten) diff --git a/assets/lang/no_NO.ini b/assets/lang/no_NO.ini index 43d3ced539..7262814ff1 100644 --- a/assets/lang/no_NO.ini +++ b/assets/lang/no_NO.ini @@ -643,6 +643,7 @@ Device = Device Direct3D 11 = Direct3D 11 Disable culling = Disable culling Disabled = Disabled +Display = Skjerm Display layout & effects = Display layout & effects Display Resolution (HW scaler) = Display resolution (HW scaler) Driver requires Android API version %1, current is %2 = Driver requires Android API version %1, current is %2 @@ -678,6 +679,7 @@ Lazy texture caching Tip = Faster, but can cause text problems in a few games Lens flare occlusion = Lens flare occlusion Linear = Lineær Low = Low +Low latency display = Lav latens skjerm LowCurves = Spline/Bezier curves quality LowCurves Tip = Only used by some games, controls smoothness of curves Lower resolution for effects (reduces artifacts) = Lower resolution for effects (reduces artifacts) diff --git a/assets/lang/pl_PL.ini b/assets/lang/pl_PL.ini index 816537a88a..dd07e30aa0 100644 --- a/assets/lang/pl_PL.ini +++ b/assets/lang/pl_PL.ini @@ -644,6 +644,7 @@ Device = Urządzenie Direct3D 11 = Direct3D 11 Disable culling = Wyłącz przycinanie Disabled = Wył. +Display = Wyświetlacz Display layout & effects = Edytor położenia obrazu Display Resolution (HW scaler) = Rozdzielczość ekranu (skaler sprz.) Driver requires Android API version %1, current is %2 = Sterownik wymaga wersji %1 Android API, aktualna wersja to %2 @@ -674,6 +675,7 @@ Lazy texture caching Tip = Szybsze, ale może powodować problemy z tekstem/napi Lens flare occlusion = Okluzja flary (halacji) obiektywu Linear = Liniowe Low = Niskie +Low latency display = Ekran o niskiej latencji LowCurves = Detale krzywych sklejanych/Beziera (przyśpieszenie) LowCurves Tip = Używane tylko przez niektóre gry, kontroluje gładkość krzywych Lower resolution for effects (reduces artifacts) = Zmniejszenie rozdzielczość efektów (mniej błędów) diff --git a/assets/lang/pt_BR.ini b/assets/lang/pt_BR.ini index 7b14dee424..698ac2d80f 100644 --- a/assets/lang/pt_BR.ini +++ b/assets/lang/pt_BR.ini @@ -649,6 +649,7 @@ CPU texture upscaler (slow) = Tipo de ampliação Current GPU driver = Driver da GPU Atual Default GPU driver = Driver padrão da GPU Disable culling = Desativar o culling +Display = Tela Display layout & effects = Ajustar a tela & efeitos Driver requires Android API version %1, current is %2 = O driver requer a versão %1 da API do Android, a atual é %2 Drivers = Drivers @@ -701,6 +702,7 @@ Lazy texture caching Tip = Mais rápido mas pode causar problemas para carregar Lens flare occlusion = Oclusão da luz da lente Linear = Linear Low = Baixa +Low latency display = Display de baixa latência LowCurves = Qualidade das curvas spline/bezier LowCurves Tip = Usado só por alguns jogos, controla a suavidade das curvas Lower resolution for effects (reduces artifacts) = Resolução menor para efeitos (reduz artefatos) diff --git a/assets/lang/pt_PT.ini b/assets/lang/pt_PT.ini index 37c13c31d6..5de2f3c604 100644 --- a/assets/lang/pt_PT.ini +++ b/assets/lang/pt_PT.ini @@ -667,6 +667,7 @@ Device = Dispositivo Direct3D 11 = Direct3D 11 Disable culling = Disable culling Disabled = Desativado +Display = Ecrã Display layout & effects = Mostrar o editor dos esquemas Display Resolution (HW scaler) = Resolução da tela (Dimensionador do hardware) Driver requires Android API version %1, current is %2 = Driver requires Android API version %1, current is %2 @@ -702,6 +703,7 @@ Lazy texture caching Tip = Mais rápido, mas pode causar problemas no texto em a Lens flare occlusion = Lens flare occlusion Linear = Linear Low = Baixa +Low latency display = Ecrã de baixa latência LowCurves = Qualidade das curvas spline/bezier LowCurves Tip = Usado só em alguns jogos, controla a suavidade das curvas Lower resolution for effects (reduces artifacts) = Menor Resolução dos efeitos (reduz artefatos) diff --git a/assets/lang/ro_RO.ini b/assets/lang/ro_RO.ini index 869a12a938..eb6e54a107 100644 --- a/assets/lang/ro_RO.ini +++ b/assets/lang/ro_RO.ini @@ -644,6 +644,7 @@ Device = Device Direct3D 11 = Direct3D 11 Disable culling = Disable culling Disabled = Disabled +Display = Display Display layout & effects = Display layout & effects Display Resolution (HW scaler) = Rezoluție ecran (scalare HW) Driver requires Android API version %1, current is %2 = Driver requires Android API version %1, current is %2 @@ -679,6 +680,7 @@ Lazy texture caching Tip = Faster, but can cause text problems in a few games Lens flare occlusion = Lens flare occlusion Linear = Linear Low = Jos +Low latency display = Ecran cu latență scăzută LowCurves = Calitate curbe Spline/Bezier LowCurves Tip = Only used by some games, controls smoothness of curves Lower resolution for effects (reduces artifacts) = Rezoluții mai mici pt. efecte (reduce artefacte) diff --git a/assets/lang/ru_RU.ini b/assets/lang/ru_RU.ini index f091e56f7a..1cf42b4d2c 100644 --- a/assets/lang/ru_RU.ini +++ b/assets/lang/ru_RU.ini @@ -643,6 +643,7 @@ Device = Устройство Direct3D 11 = Direct3D 11 Disable culling = Отключить отбраковку Disabled = Откл. +Display = Дисплей Display layout & effects = Расположение экрана и эффектов Display Resolution (HW scaler) = Разрешение экрана (аппаратное) Driver requires Android API version %1, current is %2 = Для драйвера требуется Android API версии %1, текущая - %2 @@ -678,6 +679,7 @@ Lazy texture caching Tip = Быстрее, но может вызвать про Lens flare occlusion = Окклюзия бликов объектива Linear = Линейный Low = Низкое +Low latency display = Дисплей с низкой задержкой LowCurves = Качество сплайнов и кривых Безье LowCurves Tip = Используется в некоторых играх, влияет на плавность кривых Lower resolution for effects (reduces artifacts) = Эффекты низкого качества (меньше артефактов) diff --git a/assets/lang/sv_SE.ini b/assets/lang/sv_SE.ini index c8baba5349..00e661119f 100644 --- a/assets/lang/sv_SE.ini +++ b/assets/lang/sv_SE.ini @@ -644,6 +644,7 @@ Device = Enhet Direct3D 11 = Direct3D 11 Disable culling = Inaktivera klippning Disabled = Avstängd +Display = Skärm Display layout & effects = Skärmlayout och effekter Display Resolution (HW scaler) = Skärmupplösning (HW scaler) Driver requires Android API version %1, current is %2 = Drivrutinen kräver Android-API-version %1, nuvarande är %2 @@ -679,6 +680,7 @@ Lazy texture caching Tip = Snabbare, men kan orsaka problem med text i vissa spe Lens flare occlusion = Linsljus-blockering Linear = Linjär Low = Låg +Low latency display = Låg latens visning LowCurves = Spline/Bezier-kvalitet LowCurves Tip = Only used by some games, controls smoothness of curves Lower resolution for effects (reduces artifacts) = Lägre upplösning för effekter (bättre kvalitet) diff --git a/assets/lang/tg_PH.ini b/assets/lang/tg_PH.ini index 8874fc62fd..73f299c8c9 100644 --- a/assets/lang/tg_PH.ini +++ b/assets/lang/tg_PH.ini @@ -644,6 +644,7 @@ Device = Device Direct3D 11 = Direct3D 11 Disable culling = Disable culling Disabled = Disabled +Display = Намоиш Display layout & effects = Display layout & effects Display Resolution (HW scaler) = Display resolution (HW scaler) Driver requires Android API version %1, current is %2 = Driver requires Android API version %1, current is %2 @@ -679,6 +680,7 @@ Lazy texture caching Tip = Faster, but can cause text problems in a few games Lens flare occlusion = Lens flare occlusion Linear = Linyar Low = Low +Low latency display = Дисплей бо таъхир LowCurves = Mababang kalidad ng splines at bezier curves (pampa-bilis) LowCurves Tip = Only used by some games, controls smoothness of curves Lower resolution for effects (reduces artifacts) = Lower resolution for effects (reduces artifacts) diff --git a/assets/lang/th_TH.ini b/assets/lang/th_TH.ini index 3e98dad3cd..b3419d66dc 100644 --- a/assets/lang/th_TH.ini +++ b/assets/lang/th_TH.ini @@ -660,6 +660,7 @@ Device = การ์ดจอ Direct3D 11 = ไดเร็คท์ 3D 11 Disable culling = ปิดการใช้งาน culling Disabled = ปิดการใช้งาน +Display = แสดงผล Display layout & effects = รูปแบบหน้าจอ และเอฟเฟ็คท์ Display Resolution (HW scaler) = ความละเอียดหน้าจอ (ตามฮาร์ดแวร์) Driver requires Android API version %1, current is %2 = ไดรเวอร์นี้ต้องการแอนดรอยด์ API ที่เวอร์ชั่น %1, แต่มือถือนี้ใช้เวอร์ชั่น %2 @@ -696,6 +697,7 @@ Lazy texture caching Tip = เร็วขึ้น แต่อาจจะท Lens flare occlusion = การบดบังแสงเลนส์แฟลร์ Linear = แบบเชิงเส้น Low = ต่ำ +Low latency display = จอแสดงผลการหน่วงเวลาต่ำ LowCurves = ระดับของเส้นโค้ง Spline/Bezier LowCurves Tip = ใช้แค่ในบางเกม ช่วยปรับคุณภาพของเส้นโค้งให้มีความเรียบเนียนขึ้น Lower resolution for effects (reduces artifacts) = ลดความละเอียดของเอฟเฟ็คต์ให้ต่ำลง (ลดขอบภาพสว่าง) diff --git a/assets/lang/tr_TR.ini b/assets/lang/tr_TR.ini index 792d598a2a..ffd103ed8d 100644 --- a/assets/lang/tr_TR.ini +++ b/assets/lang/tr_TR.ini @@ -645,6 +645,7 @@ Device = Cihaz Direct3D 11 = Direct3D 11 Disable culling = Ayıklamayı Devre Dışı Bırak Disabled = Devre Dışı +Display = Ekran Display layout & effects = Ekran Düzeni ve Efektleri Display Resolution (HW scaler) = Görüntü Çözünürlüğü (HW ölçek) Driver requires Android API version %1, current is %2 = Sürücü, Android API'nin %1 sürümünü gerektiriyor, şu anki sürüm %2 @@ -680,6 +681,7 @@ Lazy texture caching Tip = Daha hızlıdır ancak bazı oyunlarda yazılarda sor Lens flare occlusion = Lens parlaması tıkanıklığı Linear = Doğrusal Low = Düşük +Low latency display = Düşük gecikme ekranı LowCurves = Düşük Eğriler LowCurves Tip = Sadece bazı oyunlar tarafından kullanılır, eğrilerin pürüzsüzlüğünü kontrol eder Lower resolution for effects (reduces artifacts) = Efektler İçin Düşük Çözünürlük (sorunları azaltır) diff --git a/assets/lang/uk_UA.ini b/assets/lang/uk_UA.ini index 193f1b01af..bdc16e8576 100644 --- a/assets/lang/uk_UA.ini +++ b/assets/lang/uk_UA.ini @@ -643,6 +643,7 @@ Device = Пристрій Direct3D 11 = Direct3D 11 Disable culling = Вимкнути вибракування Disabled = Вимкнено +Display = Відображення Display layout & effects = Редактор розташування екрану Display Resolution (HW scaler) = Розширення екрану (HW масштабування) Driver requires Android API version %1, current is %2 = Драйвер вимагає Андроїд API версію %1, поточна %2 @@ -678,6 +679,7 @@ Lazy texture caching Tip = Швидше, але може спричинити п Lens flare occlusion = Оклюзія відблисків об'єктива Linear = Лінійний Low = Низька +Low latency display = Дисплей з низькою затримкою LowCurves = Якість сплайну LowCurves Tip = Використовується лише в деяких іграх, контролюючи плавність кривих Lower resolution for effects (reduces artifacts) = Ефекти низької якості (зменшує артефакти) diff --git a/assets/lang/vi_VN.ini b/assets/lang/vi_VN.ini index a4717457a9..a21b769f8f 100644 --- a/assets/lang/vi_VN.ini +++ b/assets/lang/vi_VN.ini @@ -643,6 +643,7 @@ Device = Thiết bị Direct3D 11 = Direct3D 11 Disable culling = Disable culling Disabled = Vô hiệu hóa +Display = Hiển thị Display layout & effects = Chỉnh bố trí hiển thị Display Resolution (HW scaler) = Độ phân giải màn hình (HW scaler) Driver requires Android API version %1, current is %2 = Driver requires Android API version %1, current is %2 @@ -678,6 +679,7 @@ Lazy texture caching Tip = Faster, but can cause text problems in a few games Lens flare occlusion = Lens flare occlusion Linear = Tuyến tính Low = Thấp +Low latency display = Màn hình độ trễ thấp LowCurves = Đường cong Spline/bezier chất lượng thấp (tăng tốc) LowCurves Tip = Chỉ được sử dụng bởi một số trò chơi, kiểm soát độ mượt của đường cong. Lower resolution for effects (reduces artifacts) = Độ phân giải thấp cho các hiệu ứng (làm giảm vật thể) diff --git a/assets/lang/zh_CN.ini b/assets/lang/zh_CN.ini index 3aabfb9b8b..8ae75be2d7 100644 --- a/assets/lang/zh_CN.ini +++ b/assets/lang/zh_CN.ini @@ -643,6 +643,7 @@ Device = 设备 Direct3D 11 = Direct3D 11 Disable culling = 关闭遮挡剔除 (修复模型错误) Disabled = 禁用 +Display = 显示 Display layout & effects = 屏幕布局和滤镜 Display Resolution (HW scaler) = 屏幕分辨率 Driver requires Android API version %1, current is %2 = 驱动需要Android API版本 %1, 目前系统版本为%2 @@ -678,6 +679,7 @@ Lazy texture caching Tip = 速度更快,并使部分游戏文字渲染出错 Lens flare occlusion = 镜头眩光遮挡 Linear = 线性过滤 Low = 低质量 +Low latency display = 低延迟显示 LowCurves = 贝塞尔曲线质量 (提速) LowCurves Tip = 调整曲线的绘制质量,只有少数游戏适用此设置 Lower resolution for effects (reduces artifacts) = 降低特效分辨率 (修复光晕效果) diff --git a/assets/lang/zh_TW.ini b/assets/lang/zh_TW.ini index 360404867a..39a9c992cc 100644 --- a/assets/lang/zh_TW.ini +++ b/assets/lang/zh_TW.ini @@ -643,6 +643,7 @@ Device = 裝置 Direct3D 11 = Direct3D 11 Disable culling = 停用揀選 Disabled = 已停用 +Display = 顯示 Display layout & effects = 顯示版面配置與效果 Display Resolution (HW scaler) = 顯示解析度 (硬體縮放) Driver requires Android API version %1, current is %2 = 驅動程式需要 Android API 版本為 %1,目前為 %2 @@ -678,6 +679,7 @@ Lazy texture caching Tip = 更快,但在某些遊戲中可能會造成文字 Lens flare occlusion = 鏡頭眩光遮蔽 Linear = 線性 Low = 低 +Low latency display = 低延遲顯示 LowCurves = 曲線/貝茲曲線品質 LowCurves Tip = 僅供少數遊戲使用,控制曲線平滑度 Lower resolution for effects (reduces artifacts) = 降低效果解析度 (降低失真) diff --git a/ios/ViewControllerMetal.mm b/ios/ViewControllerMetal.mm index bf5e6d12dd..7d5ab12245 100644 --- a/ios/ViewControllerMetal.mm +++ b/ios/ViewControllerMetal.mm @@ -77,8 +77,16 @@ bool IOSVulkanContext::InitFromRenderThread(CAMetalLayer *layer, int desiredBack return false; } - VkPresentModeKHR presentMode = ConfigPresentModeToVulkan(); + bool useMultiThreading = g_Config.bRenderMultiThreading; + if (g_Config.iInflightFrames == 1) { + useMultiThreading = false; + } + + draw_ = Draw::T3DCreateVulkanContext(g_Vulkan, useMultiThreading); + + VkPresentModeKHR presentMode = ConfigPresentModeToVulkan(draw_); if (!g_Vulkan->InitSwapchain(presentMode)) { + delete draw_; ERROR_LOG(Log::G3D, "InitSwapchain failed"); g_Vulkan->DestroySwapchain(); g_Vulkan->DestroySurface(); @@ -87,12 +95,6 @@ bool IOSVulkanContext::InitFromRenderThread(CAMetalLayer *layer, int desiredBack return false; } - bool useMultiThreading = g_Config.bRenderMultiThreading; - if (g_Config.iInflightFrames == 1) { - useMultiThreading = false; - } - - draw_ = Draw::T3DCreateVulkanContext(g_Vulkan, useMultiThreading); SetGPUBackend(GPUBackend::VULKAN); bool shaderSuccess = draw_->CreatePresets(); // Doesn't fail, we ship the compiler. _assert_msg_(shaderSuccess, "Failed to compile preset shaders"); @@ -131,7 +133,7 @@ void IOSVulkanContext::Resize() { g_Vulkan->DestroySwapchain(); g_Vulkan->DestroySurface(); g_Vulkan->ReinitSurface(); - VkPresentModeKHR presentMode = ConfigPresentModeToVulkan(); + VkPresentModeKHR presentMode = ConfigPresentModeToVulkan(draw_); g_Vulkan->InitSwapchain(presentMode); draw_->HandleEvent(Draw::Event::GOT_BACKBUFFER, g_Vulkan->GetBackbufferWidth(), g_Vulkan->GetBackbufferHeight()); INFO_LOG(Log::G3D, "IOSVulkanContext::Resize end (final size: %dx%d)", g_Vulkan->GetBackbufferWidth(), g_Vulkan->GetBackbufferHeight()); diff --git a/libretro/LibretroVulkanContext.cpp b/libretro/LibretroVulkanContext.cpp index 1ffffce6c2..a4c63147d3 100644 --- a/libretro/LibretroVulkanContext.cpp +++ b/libretro/LibretroVulkanContext.cpp @@ -139,6 +139,7 @@ void LibretroVulkanContext::CreateDrawContext() { useMultiThreading = false; } draw_ = Draw::T3DCreateVulkanContext(vk, useMultiThreading); + ((VulkanRenderManager*)draw_->GetNativeObject(Draw::NativeObject::RENDER_MANAGER))->SetInflightFrames(g_Config.iInflightFrames); SetGPUBackend(GPUBackend::VULKAN); }