diff --git a/GPU/Common/TextureCacheCommon.cpp b/GPU/Common/TextureCacheCommon.cpp index dd67d94ab1..a17565e41f 100644 --- a/GPU/Common/TextureCacheCommon.cpp +++ b/GPU/Common/TextureCacheCommon.cpp @@ -569,6 +569,10 @@ std::vector TextureCacheCommon::GetFramebufferCandidates(const std::vector candidates; FramebufferNotificationChannel channel = Memory::IsDepthTexVRAMAddress(entry.addr) ? FramebufferNotificationChannel::NOTIFY_FB_DEPTH : FramebufferNotificationChannel::NOTIFY_FB_COLOR; + if (channel == FramebufferNotificationChannel::NOTIFY_FB_DEPTH && !gstate_c.Supports(GPU_SUPPORTS_DEPTH_TEXTURE)) { + // Depth texture not supported. Don't try to match it, fall back to the memory behind.. + return std::vector(); + } const std::vector &framebuffers = framebufferManager_->Framebuffers(); diff --git a/GPU/D3D11/GPU_D3D11.cpp b/GPU/D3D11/GPU_D3D11.cpp index 6207358c73..f3e738029c 100644 --- a/GPU/D3D11/GPU_D3D11.cpp +++ b/GPU/D3D11/GPU_D3D11.cpp @@ -140,6 +140,7 @@ void GPU_D3D11::CheckGPUFeatures() { features |= GPU_SUPPORTS_ANISOTROPY; #endif + features |= GPU_SUPPORTS_DEPTH_TEXTURE; features |= GPU_SUPPORTS_OES_TEXTURE_NPOT; if (draw_->GetDeviceCaps().dualSourceBlend) features |= GPU_SUPPORTS_DUALSOURCE_BLEND; diff --git a/GPU/GPUState.h b/GPU/GPUState.h index 25402a3b76..3af959f6b0 100644 --- a/GPU/GPUState.h +++ b/GPU/GPUState.h @@ -480,7 +480,7 @@ enum { GPU_SUPPORTS_16BIT_FORMATS = FLAG_BIT(13), GPU_SUPPORTS_DEPTH_CLAMP = FLAG_BIT(14), GPU_SUPPORTS_32BIT_INT_FSHADER = FLAG_BIT(15), - // Free bit: 16 + GPU_SUPPORTS_DEPTH_TEXTURE = FLAG_BIT(16), GPU_SUPPORTS_ACCURATE_DEPTH = FLAG_BIT(17), GPU_SUPPORTS_VAO = FLAG_BIT(18), GPU_SUPPORTS_COPY_IMAGE = FLAG_BIT(19), diff --git a/GPU/Vulkan/GPU_Vulkan.cpp b/GPU/Vulkan/GPU_Vulkan.cpp index afdebeef05..111ccffd48 100644 --- a/GPU/Vulkan/GPU_Vulkan.cpp +++ b/GPU/Vulkan/GPU_Vulkan.cpp @@ -231,6 +231,7 @@ void GPU_Vulkan::CheckGPUFeatures() { features |= GPU_SUPPORTS_INSTANCE_RENDERING; features |= GPU_SUPPORTS_VERTEX_TEXTURE_FETCH; features |= GPU_SUPPORTS_TEXTURE_FLOAT; + features |= GPU_SUPPORTS_DEPTH_TEXTURE; if (vulkan_->GetDeviceInfo().canBlitToPreferredDepthStencilFormat) { features |= GPU_SUPPORTS_FRAMEBUFFER_BLIT_TO_DEPTH;