FramebufferManager: Use D24S8 on Adreno when using Vulkan
D32F clears are broken on Adreno, which resulted in smeared geometry across the screen.
This commit is contained in:
1 parent
3323265d91
commit
dae161e138
3 files changed
+17
-2
No files matched your search
@@ -7,6 +7,7 @@
|
||||
#include <memory>
|
||||
|
||||
#include "VideoCommon/AbstractTexture.h"
|
||||
#include "VideoCommon/DriverDetails.h"
|
||||
#include "VideoCommon/RenderBase.h"
|
||||
|
||||
std::unique_ptr<FramebufferManagerBase> g_framebuffer_manager;
|
||||
@@ -17,5 +18,11 @@ FramebufferManagerBase::~FramebufferManagerBase() = default;
|
||||
|
||||
AbstractTextureFormat FramebufferManagerBase::GetEFBDepthFormat()
|
||||
{
|
||||
return AbstractTextureFormat::D32F;
|
||||
// 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;
|
||||
}
|
||||
Reference in new issue
Block a user