mirror of
https://github.com/hrydgard/ppsspp.git
synced 2026-10-01 14:58:14 +00:00
Vulkan: Correct displayed depth/stencil format.
Also corrects handling of non-24 bit depth when reducing the range.
This commit is contained in:
1 parent
b33662550f
commit
9fcccd789a
3 files changed
+27
-1
No files matched your search
@@ -65,6 +65,7 @@ enum class DataFormat : uint8_t {
|
||||
|
||||
S8,
|
||||
D16,
|
||||
D16_S8,
|
||||
D24_S8,
|
||||
D32F,
|
||||
D32F_S8,
|
||||
|
||||
@@ -592,6 +592,8 @@ static int GetBpp(VkFormat format) {
|
||||
static VkFormat DataFormatToVulkan(DataFormat format) {
|
||||
switch (format) {
|
||||
case DataFormat::D16: return VK_FORMAT_D16_UNORM;
|
||||
case DataFormat::D16_S8: return VK_FORMAT_D16_UNORM_S8_UINT;
|
||||
case DataFormat::D24_S8: return VK_FORMAT_D24_UNORM_S8_UINT;
|
||||
case DataFormat::D32F: return VK_FORMAT_D32_SFLOAT;
|
||||
case DataFormat::D32F_S8: return VK_FORMAT_D32_SFLOAT_S8_UINT;
|
||||
case DataFormat::S8: return VK_FORMAT_S8_UINT;
|
||||
@@ -784,6 +786,25 @@ bool VKTexture::Create(VkCommandBuffer cmd, VulkanPushBuffer *push, const Textur
|
||||
return true;
|
||||
}
|
||||
|
||||
static DataFormat DataFormatFromVulkanDepth(VkFormat fmt) {
|
||||
switch (fmt) {
|
||||
case VK_FORMAT_D24_UNORM_S8_UINT:
|
||||
return DataFormat::D24_S8;
|
||||
case VK_FORMAT_D16_UNORM:
|
||||
return DataFormat::D16;
|
||||
case VK_FORMAT_D32_SFLOAT:
|
||||
return DataFormat::D32F;
|
||||
case VK_FORMAT_D32_SFLOAT_S8_UINT:
|
||||
return DataFormat::D32F_S8;
|
||||
case VK_FORMAT_D16_UNORM_S8_UINT:
|
||||
return DataFormat::D16_S8;
|
||||
default:
|
||||
break;
|
||||
}
|
||||
|
||||
return DataFormat::UNDEFINED;
|
||||
}
|
||||
|
||||
VKContext::VKContext(VulkanContext *vulkan)
|
||||
: vulkan_(vulkan), renderManager_(vulkan) {
|
||||
shaderLanguageDesc_.Init(GLSL_VULKAN);
|
||||
@@ -803,7 +824,8 @@ VKContext::VKContext(VulkanContext *vulkan)
|
||||
caps_.framebufferStencilBlitSupported = caps_.framebufferDepthBlitSupported;
|
||||
caps_.framebufferDepthCopySupported = true; // Will pretty much always be the case.
|
||||
caps_.framebufferSeparateDepthCopySupported = true; // Will pretty much always be the case.
|
||||
caps_.preferredDepthBufferFormat = DataFormat::D24_S8; // TODO: Ask vulkan.
|
||||
// This doesn't affect what depth/stencil format is actually used, see VulkanQueueRunner.
|
||||
caps_.preferredDepthBufferFormat = DataFormatFromVulkanDepth(vulkan->GetDeviceInfo().preferredDepthStencilFormat);
|
||||
caps_.texture3DSupported = true;
|
||||
caps_.textureDepthSupported = true;
|
||||
caps_.fragmentShaderInt32Supported = true;
|
||||
|
||||
@@ -46,6 +46,7 @@ size_t DataFormatSizeInBytes(DataFormat fmt) {
|
||||
|
||||
case DataFormat::S8: return 1;
|
||||
case DataFormat::D16: return 2;
|
||||
case DataFormat::D16_S8: return 3;
|
||||
case DataFormat::D24_S8: return 4;
|
||||
case DataFormat::D32F: return 4;
|
||||
// Or maybe 8...
|
||||
@@ -68,6 +69,7 @@ const char *DataFormatToString(DataFormat fmt) {
|
||||
|
||||
case DataFormat::S8: return "S8";
|
||||
case DataFormat::D16: return "D16";
|
||||
case DataFormat::D16_S8: return "D16_S8";
|
||||
case DataFormat::D24_S8: return "D24_S8";
|
||||
case DataFormat::D32F: return "D32F";
|
||||
case DataFormat::D32F_S8: return "D32F_S8";
|
||||
@@ -80,6 +82,7 @@ const char *DataFormatToString(DataFormat fmt) {
|
||||
bool DataFormatIsDepthStencil(DataFormat fmt) {
|
||||
switch (fmt) {
|
||||
case DataFormat::D16:
|
||||
case DataFormat::D16_S8:
|
||||
case DataFormat::D24_S8:
|
||||
case DataFormat::S8:
|
||||
case DataFormat::D32F:
|
||||
|
||||
Reference in new issue
Block a user