Handle double precision when converting to vulkan format

This commit is contained in:
baldurk
2018-04-09 16:51:42 +01:00
parent 96629e8e96
commit bd983ad783
+46 -2
View File
@@ -1058,6 +1058,17 @@ VkFormat MakeVkFormat(ResourceFormat fmt)
{
ret = fmt.bgraOrder ? VK_FORMAT_B8G8R8A8_SRGB : VK_FORMAT_R8G8B8A8_SRGB;
}
else if(fmt.compByteWidth == 8)
{
if(fmt.compType == CompType::Float || fmt.compType == CompType::Double)
ret = VK_FORMAT_R64G64B64A64_SFLOAT;
else if(fmt.compType == CompType::SInt)
ret = VK_FORMAT_R64G64B64A64_SINT;
else if(fmt.compType == CompType::UInt)
ret = VK_FORMAT_R64G64B64A64_UINT;
else
RDCERR("Unrecognised component type");
}
else if(fmt.compByteWidth == 4)
{
if(fmt.compType == CompType::Float)
@@ -1116,6 +1127,17 @@ VkFormat MakeVkFormat(ResourceFormat fmt)
{
ret = VK_FORMAT_R8G8B8_SRGB;
}
else if(fmt.compByteWidth == 8)
{
if(fmt.compType == CompType::Float || fmt.compType == CompType::Double)
ret = VK_FORMAT_R64G64B64_SFLOAT;
else if(fmt.compType == CompType::SInt)
ret = VK_FORMAT_R64G64B64_SINT;
else if(fmt.compType == CompType::UInt)
ret = VK_FORMAT_R64G64B64_UINT;
else
RDCERR("Unrecognised component type");
}
else if(fmt.compByteWidth == 4)
{
if(fmt.compType == CompType::Float)
@@ -1170,7 +1192,18 @@ VkFormat MakeVkFormat(ResourceFormat fmt)
}
else if(fmt.compCount == 2)
{
if(fmt.compByteWidth == 4)
if(fmt.compByteWidth == 8)
{
if(fmt.compType == CompType::Float || fmt.compType == CompType::Double)
ret = VK_FORMAT_R64G64_SFLOAT;
else if(fmt.compType == CompType::SInt)
ret = VK_FORMAT_R64G64_SINT;
else if(fmt.compType == CompType::UInt)
ret = VK_FORMAT_R64G64_UINT;
else
RDCERR("Unrecognised component type");
}
else if(fmt.compByteWidth == 4)
{
if(fmt.compType == CompType::Float)
ret = VK_FORMAT_R32G32_SFLOAT;
@@ -1224,7 +1257,18 @@ VkFormat MakeVkFormat(ResourceFormat fmt)
}
else if(fmt.compCount == 1)
{
if(fmt.compByteWidth == 4)
if(fmt.compByteWidth == 8)
{
if(fmt.compType == CompType::Float || fmt.compType == CompType::Double)
ret = VK_FORMAT_R64_SFLOAT;
else if(fmt.compType == CompType::SInt)
ret = VK_FORMAT_R64_SINT;
else if(fmt.compType == CompType::UInt)
ret = VK_FORMAT_R64_UINT;
else
RDCERR("Unrecognised component type");
}
else if(fmt.compByteWidth == 4)
{
if(fmt.compType == CompType::Float)
ret = VK_FORMAT_R32_SFLOAT;