mirror of
https://github.com/hrydgard/ppsspp.git
synced 2026-07-11 01:25:07 +02:00
Merge pull request #20894 from hrydgard/small-gfx-refactor
Remove unused "interval" concept from presentation mode
This commit is contained in:
@@ -160,7 +160,7 @@ public:
|
||||
|
||||
void BeginFrame(DebugFlags debugFlags) override;
|
||||
void EndFrame() override;
|
||||
void Present(PresentMode presentMode, int vblanks) override;
|
||||
void Present(PresentMode presentMode) override;
|
||||
|
||||
int GetFrameCount() override { return frameCount_; }
|
||||
|
||||
@@ -478,12 +478,12 @@ void D3D11DrawContext::EndFrame() {
|
||||
curPipeline_ = nullptr;
|
||||
}
|
||||
|
||||
void D3D11DrawContext::Present(PresentMode presentMode, int vblanks) {
|
||||
void D3D11DrawContext::Present(PresentMode presentMode) {
|
||||
frameTimeHistory_[frameCount_].queuePresent = time_now_d();
|
||||
|
||||
// Safety for libretro
|
||||
if (swapChain_) {
|
||||
uint32_t interval = vblanks;
|
||||
uint32_t interval = 1;
|
||||
uint32_t flags = 0;
|
||||
if (presentMode != PresentMode::FIFO) {
|
||||
interval = 0;
|
||||
|
||||
@@ -367,7 +367,7 @@ public:
|
||||
|
||||
void BeginFrame(DebugFlags debugFlags) override;
|
||||
void EndFrame() override;
|
||||
void Present(PresentMode mode, int vblanks) override;
|
||||
void Present(PresentMode mode) override;
|
||||
|
||||
int GetFrameCount() override {
|
||||
return frameCount_;
|
||||
@@ -811,7 +811,7 @@ void OpenGLContext::EndFrame() {
|
||||
Invalidate(InvalidationFlags::CACHED_RENDER_STATE);
|
||||
}
|
||||
|
||||
void OpenGLContext::Present(PresentMode presentMode, int vblanks) {
|
||||
void OpenGLContext::Present(PresentMode presentMode) {
|
||||
renderManager_.Present();
|
||||
frameCount_++;
|
||||
}
|
||||
|
||||
@@ -503,7 +503,7 @@ public:
|
||||
|
||||
void BeginFrame(DebugFlags debugFlags) override;
|
||||
void EndFrame() override;
|
||||
void Present(PresentMode presentMode, int vblanks) override;
|
||||
void Present(PresentMode presentMode) override;
|
||||
|
||||
int GetFrameCount() override {
|
||||
return frameCount_;
|
||||
@@ -1141,10 +1141,7 @@ void VKContext::EndFrame() {
|
||||
Invalidate(InvalidationFlags::CACHED_RENDER_STATE);
|
||||
}
|
||||
|
||||
void VKContext::Present(PresentMode presentMode, int vblanks) {
|
||||
if (presentMode == PresentMode::FIFO) {
|
||||
_dbg_assert_(vblanks == 0 || vblanks == 1);
|
||||
}
|
||||
void VKContext::Present(PresentMode presentMode) {
|
||||
renderManager_.Present();
|
||||
frameCount_++;
|
||||
}
|
||||
|
||||
@@ -261,7 +261,7 @@ static const std::vector<ShaderSource> fsCol = {
|
||||
"float4 main(PS_INPUT input) : SV_Target {\n"
|
||||
" float4 col = input.color;\n"
|
||||
" col.rgb *= input.color.a;\n"
|
||||
" return input.color;\n"
|
||||
" return col;\n"
|
||||
"}\n"
|
||||
},
|
||||
{ ShaderLanguage::GLSL_VULKAN,
|
||||
|
||||
+6
-3
@@ -587,6 +587,10 @@ enum class PresentMode {
|
||||
};
|
||||
ENUM_CLASS_BITOPS(PresentMode);
|
||||
|
||||
inline bool PresentationModeBlocks(PresentMode mode) {
|
||||
return mode & (PresentMode::FIFO | PresentMode::FIFO_RELAXED | PresentMode::FIFO_LATEST_READY);
|
||||
}
|
||||
|
||||
struct DeviceCaps {
|
||||
GPUVendor vendor;
|
||||
uint32_t deviceID; // use caution!
|
||||
@@ -856,9 +860,8 @@ public:
|
||||
virtual void BeginFrame(DebugFlags debugFlags) = 0;
|
||||
virtual void EndFrame() = 0;
|
||||
|
||||
// vblanks is only relevant in FIFO present mode.
|
||||
// NOTE: Not all backends support vblanks > 1. Some backends also can't change presentation mode immediately.
|
||||
virtual void Present(PresentMode presentMode, int vblanks) = 0;
|
||||
// Some backends also can't change presentation mode immediately.
|
||||
virtual void Present(PresentMode presentMode) = 0;
|
||||
|
||||
// This should be avoided as much as possible, in favor of clearing when binding a render target, which is native
|
||||
// on Vulkan.
|
||||
|
||||
@@ -67,10 +67,8 @@ inline Draw::PresentMode GetBestImmediateMode(Draw::PresentMode supportedModes)
|
||||
void FrameTiming::Reset(Draw::DrawContext *draw) {
|
||||
if (g_Config.bVSync || !(draw->GetDeviceCaps().presentModesSupported & (Draw::PresentMode::MAILBOX | Draw::PresentMode::IMMEDIATE))) {
|
||||
presentMode = Draw::PresentMode::FIFO;
|
||||
presentInterval = 1;
|
||||
} else {
|
||||
presentMode = GetBestImmediateMode(draw->GetDeviceCaps().presentModesSupported);
|
||||
presentInterval = 0;
|
||||
}
|
||||
}
|
||||
|
||||
@@ -91,7 +89,7 @@ void FrameTiming::PostSubmit() {
|
||||
}
|
||||
}
|
||||
|
||||
Draw::PresentMode ComputePresentMode(Draw::DrawContext *draw, int *interval) {
|
||||
Draw::PresentMode ComputePresentMode(Draw::DrawContext *draw) {
|
||||
_assert_(draw);
|
||||
|
||||
Draw::PresentMode mode = Draw::PresentMode::FIFO;
|
||||
@@ -140,6 +138,5 @@ Draw::PresentMode ComputePresentMode(Draw::DrawContext *draw, int *interval) {
|
||||
}
|
||||
}
|
||||
|
||||
*interval = (mode == Draw::PresentMode::FIFO) ? 1 : 0;
|
||||
return mode;
|
||||
}
|
||||
|
||||
+1
-2
@@ -16,7 +16,6 @@ public:
|
||||
|
||||
// Some backends won't allow changing this willy nilly.
|
||||
Draw::PresentMode presentMode;
|
||||
int presentInterval;
|
||||
|
||||
private:
|
||||
double waitUntil_;
|
||||
@@ -25,6 +24,6 @@ private:
|
||||
|
||||
extern FrameTiming g_frameTiming;
|
||||
|
||||
Draw::PresentMode ComputePresentMode(Draw::DrawContext *draw, int *interval);
|
||||
Draw::PresentMode ComputePresentMode(Draw::DrawContext *draw);
|
||||
|
||||
void WaitUntil(double now, double timestamp, const char *reason);
|
||||
|
||||
@@ -584,7 +584,7 @@ void __DisplayFlip(int cyclesLate) {
|
||||
|
||||
Draw::DrawContext *draw = gpu->GetDrawContext();
|
||||
if (draw) {
|
||||
g_frameTiming.presentMode = ComputePresentMode(draw, &g_frameTiming.presentInterval);
|
||||
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.
|
||||
@@ -594,7 +594,6 @@ void __DisplayFlip(int cyclesLate) {
|
||||
} else {
|
||||
// Surely can never get here?
|
||||
g_frameTiming.presentMode = Draw::PresentMode::FIFO;
|
||||
g_frameTiming.presentInterval = 1;
|
||||
}
|
||||
|
||||
if (!g_Config.bSkipBufferEffects) {
|
||||
|
||||
@@ -3098,6 +3098,7 @@ bool GetOutputFramebuffer(Draw::DrawContext *draw, GPUDebugBuffer &buffer) {
|
||||
draw->GetFramebufferDimensions(nullptr, &w, &h);
|
||||
Draw::DataFormat fmt = draw->PreferredFramebufferReadbackFormat(nullptr);
|
||||
// Ignore preferred formats other than BGRA.
|
||||
_dbg_assert_(fmt == Draw::DataFormat::B8G8R8A8_UNORM || fmt == Draw::DataFormat::R8G8B8A8_UNORM);
|
||||
if (fmt != Draw::DataFormat::B8G8R8A8_UNORM)
|
||||
fmt = Draw::DataFormat::R8G8B8A8_UNORM;
|
||||
|
||||
|
||||
+2
-3
@@ -138,9 +138,8 @@ static void DrawFrameTiming(UIContext *ctx, const Bounds &bounds) {
|
||||
|
||||
// NOTE: This is not necessarily the same as the actual present mode.
|
||||
snprintf(statBuf, sizeof(statBuf),
|
||||
"Timing mode (interval): %s (%d)",
|
||||
Draw::PresentModeToString(g_frameTiming.presentMode),
|
||||
g_frameTiming.presentInterval);
|
||||
"Timing mode (interval): %s",
|
||||
Draw::PresentModeToString(g_frameTiming.presentMode));
|
||||
|
||||
ctx->Draw()->DrawTextRect(ubuntu24, statBuf, bounds.x + 10, bounds.y + 50, bounds.w - 20, bounds.h - 30, 0xFFFFFFFF, FLAG_DYNAMIC_ASCII);
|
||||
|
||||
|
||||
+2
-3
@@ -1206,9 +1206,8 @@ void NativeFrame(GraphicsContext *graphicsContext) {
|
||||
ClearFailedGPUBackends();
|
||||
}
|
||||
|
||||
int interval;
|
||||
Draw::PresentMode presentMode = ComputePresentMode(g_draw, &interval);
|
||||
g_draw->Present(presentMode, interval);
|
||||
Draw::PresentMode presentMode = ComputePresentMode(g_draw);
|
||||
g_draw->Present(presentMode);
|
||||
|
||||
if (resized) {
|
||||
INFO_LOG(Log::G3D, "Resized flag set - recalculating bounds");
|
||||
|
||||
@@ -1388,7 +1388,7 @@ namespace Libretro
|
||||
|
||||
if (ctx->GetDrawContext()) {
|
||||
ctx->GetDrawContext()->EndFrame();
|
||||
ctx->GetDrawContext()->Present(Draw::PresentMode::FIFO, 1);
|
||||
ctx->GetDrawContext()->Present(Draw::PresentMode::FIFO);
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
Reference in New Issue
Block a user