summaryrefslogtreecommitdiff
path: root/Source/Core/VideoCommon/FramebufferManagerBase.cpp
diff options
context:
space:
mode:
Diffstat (limited to 'Source/Core/VideoCommon/FramebufferManagerBase.cpp')
-rw-r--r--Source/Core/VideoCommon/FramebufferManagerBase.cpp13
1 files changed, 13 insertions, 0 deletions
diff --git a/Source/Core/VideoCommon/FramebufferManagerBase.cpp b/Source/Core/VideoCommon/FramebufferManagerBase.cpp
index af8ad87256..530aac7584 100644
--- a/Source/Core/VideoCommon/FramebufferManagerBase.cpp
+++ b/Source/Core/VideoCommon/FramebufferManagerBase.cpp
@@ -6,6 +6,8 @@
#include <memory>
+#include "VideoCommon/AbstractTexture.h"
+#include "VideoCommon/DriverDetails.h"
#include "VideoCommon/RenderBase.h"
std::unique_ptr<FramebufferManagerBase> g_framebuffer_manager;
@@ -13,3 +15,14 @@ std::unique_ptr<FramebufferManagerBase> g_framebuffer_manager;
unsigned int FramebufferManagerBase::m_EFBLayers = 1;
FramebufferManagerBase::~FramebufferManagerBase() = default;
+
+AbstractTextureFormat FramebufferManagerBase::GetEFBDepthFormat()
+{
+ // 32-bit depth clears are broken in the Adreno Vulkan driver, and have no effect.
+ // To work around this, we use a D24_S8 buffer instead, which results in a loss of accuracy.
+ // We still resolve this to a R32F texture, as there is no 24-bit format.
+ if (DriverDetails::HasBug(DriverDetails::BUG_BROKEN_D32F_CLEAR))
+ return AbstractTextureFormat::D24_S8;
+ else
+ return AbstractTextureFormat::D32F;
+}