Track enough while READING to set drawcall topology/index width

This commit is contained in:
baldurk
2016-02-07 18:39:32 +01:00
parent 2eb87b804f
commit 26f773684a
5 changed files with 717 additions and 656 deletions
+696
View File
@@ -26,6 +26,702 @@
#include "vk_manager.h"
#include "vk_resources.h"
ResourceFormat MakeResourceFormat(VkFormat fmt)
{
ResourceFormat ret;
ret.rawType = (uint32_t)fmt;
ret.special = false;
ret.specialFormat = eSpecial_Unknown;
ret.strname = ToStr::Get(fmt).substr(10); // 3 == strlen("VK_FORMAT_")
ret.compByteWidth = 0;
ret.compCount = 0;
ret.compType = eCompType_None;
ret.srgbCorrected = false;
if(fmt == VK_FORMAT_UNDEFINED)
{
return ret;
}
// VKTODOMED R4G4, R4G4B4A4, and refactor BGRA formats
switch(fmt)
{
case VK_FORMAT_B4G4R4A4_UNORM:
ret.special = true;
ret.specialFormat = eSpecial_B4G4R4A4;
break;
case VK_FORMAT_R10G10B10A2_UNORM:
case VK_FORMAT_R10G10B10A2_SNORM:
case VK_FORMAT_R10G10B10A2_USCALED:
case VK_FORMAT_R10G10B10A2_SSCALED:
case VK_FORMAT_R10G10B10A2_UINT:
case VK_FORMAT_R10G10B10A2_SINT:
ret.special = true;
ret.specialFormat = eSpecial_R10G10B10A2;
break;
case VK_FORMAT_R11G11B10_UFLOAT:
ret.special = true;
ret.specialFormat = eSpecial_R11G11B10;
break;
case VK_FORMAT_R9G9B9E5_UFLOAT:
ret.special = true;
ret.specialFormat = eSpecial_R9G9B9E5;
break;
case VK_FORMAT_D16_UNORM_S8_UINT:
ret.special = true;
ret.specialFormat = eSpecial_D16S8;
break;
case VK_FORMAT_D24_UNORM_S8_UINT:
ret.special = true;
ret.specialFormat = eSpecial_D24S8;
break;
case VK_FORMAT_D32_SFLOAT_S8_UINT:
ret.special = true;
ret.specialFormat = eSpecial_D32S8;
break;
case VK_FORMAT_BC1_RGB_UNORM:
case VK_FORMAT_BC1_RGB_SRGB:
case VK_FORMAT_BC1_RGBA_UNORM:
case VK_FORMAT_BC1_RGBA_SRGB:
ret.special = true;
ret.specialFormat = eSpecial_BC1;
break;
case VK_FORMAT_BC2_UNORM:
case VK_FORMAT_BC2_SRGB:
ret.special = true;
ret.specialFormat = eSpecial_BC2;
break;
case VK_FORMAT_BC3_UNORM:
case VK_FORMAT_BC3_SRGB:
ret.special = true;
ret.specialFormat = eSpecial_BC3;
break;
case VK_FORMAT_BC4_UNORM:
case VK_FORMAT_BC4_SNORM:
ret.special = true;
ret.specialFormat = eSpecial_BC4;
break;
case VK_FORMAT_BC5_UNORM:
case VK_FORMAT_BC5_SNORM:
ret.special = true;
ret.specialFormat = eSpecial_BC5;
break;
case VK_FORMAT_BC6H_UFLOAT:
case VK_FORMAT_BC6H_SFLOAT:
ret.special = true;
ret.specialFormat = eSpecial_BC6;
break;
case VK_FORMAT_BC7_UNORM:
case VK_FORMAT_BC7_SRGB:
ret.special = true;
ret.specialFormat = eSpecial_BC7;
break;
case VK_FORMAT_ETC2_R8G8B8_UNORM:
case VK_FORMAT_ETC2_R8G8B8_SRGB:
case VK_FORMAT_ETC2_R8G8B8A1_UNORM:
case VK_FORMAT_ETC2_R8G8B8A1_SRGB:
case VK_FORMAT_ETC2_R8G8B8A8_UNORM:
case VK_FORMAT_ETC2_R8G8B8A8_SRGB:
ret.special = true;
ret.specialFormat = eSpecial_ETC2;
break;
case VK_FORMAT_EAC_R11_UNORM:
case VK_FORMAT_EAC_R11_SNORM:
case VK_FORMAT_EAC_R11G11_UNORM:
case VK_FORMAT_EAC_R11G11_SNORM:
ret.special = true;
ret.specialFormat = eSpecial_EAC;
break;
case VK_FORMAT_ASTC_4x4_UNORM:
case VK_FORMAT_ASTC_4x4_SRGB:
case VK_FORMAT_ASTC_5x4_UNORM:
case VK_FORMAT_ASTC_5x4_SRGB:
case VK_FORMAT_ASTC_5x5_UNORM:
case VK_FORMAT_ASTC_5x5_SRGB:
case VK_FORMAT_ASTC_6x5_UNORM:
case VK_FORMAT_ASTC_6x5_SRGB:
case VK_FORMAT_ASTC_6x6_UNORM:
case VK_FORMAT_ASTC_6x6_SRGB:
case VK_FORMAT_ASTC_8x5_UNORM:
case VK_FORMAT_ASTC_8x5_SRGB:
case VK_FORMAT_ASTC_8x6_UNORM:
case VK_FORMAT_ASTC_8x6_SRGB:
case VK_FORMAT_ASTC_8x8_UNORM:
case VK_FORMAT_ASTC_8x8_SRGB:
case VK_FORMAT_ASTC_10x5_UNORM:
case VK_FORMAT_ASTC_10x5_SRGB:
case VK_FORMAT_ASTC_10x6_UNORM:
case VK_FORMAT_ASTC_10x6_SRGB:
case VK_FORMAT_ASTC_10x8_UNORM:
case VK_FORMAT_ASTC_10x8_SRGB:
case VK_FORMAT_ASTC_10x10_UNORM:
case VK_FORMAT_ASTC_10x10_SRGB:
case VK_FORMAT_ASTC_12x10_UNORM:
case VK_FORMAT_ASTC_12x10_SRGB:
case VK_FORMAT_ASTC_12x12_UNORM:
case VK_FORMAT_ASTC_12x12_SRGB:
ret.special = true;
ret.specialFormat = eSpecial_ASTC;
break;
case VK_FORMAT_B8G8R8A8_UNORM:
case VK_FORMAT_B8G8R8A8_SNORM:
case VK_FORMAT_B8G8R8A8_USCALED:
case VK_FORMAT_B8G8R8A8_SSCALED:
case VK_FORMAT_B8G8R8A8_UINT:
case VK_FORMAT_B8G8R8A8_SINT:
case VK_FORMAT_B8G8R8A8_SRGB:
ret.special = true;
ret.specialFormat = eSpecial_B8G8R8A8;
break;
default:
break;
}
switch(fmt)
{
case VK_FORMAT_R8_UNORM:
case VK_FORMAT_R8_SNORM:
case VK_FORMAT_R8_USCALED:
case VK_FORMAT_R8_SSCALED:
case VK_FORMAT_R8_UINT:
case VK_FORMAT_R8_SINT:
case VK_FORMAT_R8_SRGB:
case VK_FORMAT_R16_UNORM:
case VK_FORMAT_R16_SNORM:
case VK_FORMAT_R16_USCALED:
case VK_FORMAT_R16_SSCALED:
case VK_FORMAT_R16_UINT:
case VK_FORMAT_R16_SINT:
case VK_FORMAT_R16_SFLOAT:
case VK_FORMAT_R32_UINT:
case VK_FORMAT_R32_SINT:
case VK_FORMAT_R32_SFLOAT:
case VK_FORMAT_R64_SFLOAT:
case VK_FORMAT_D16_UNORM:
case VK_FORMAT_D24_UNORM:
case VK_FORMAT_D32_SFLOAT:
case VK_FORMAT_S8_UINT:
case VK_FORMAT_BC4_UNORM:
case VK_FORMAT_BC4_SNORM:
case VK_FORMAT_EAC_R11_UNORM:
case VK_FORMAT_EAC_R11_SNORM:
ret.compCount = 1;
break;
case VK_FORMAT_R4G4_UNORM:
case VK_FORMAT_R4G4_USCALED:
case VK_FORMAT_R8G8_UNORM:
case VK_FORMAT_R8G8_SNORM:
case VK_FORMAT_R8G8_USCALED:
case VK_FORMAT_R8G8_SSCALED:
case VK_FORMAT_R8G8_UINT:
case VK_FORMAT_R8G8_SINT:
case VK_FORMAT_R8G8_SRGB:
case VK_FORMAT_R16G16_UNORM:
case VK_FORMAT_R16G16_SNORM:
case VK_FORMAT_R16G16_USCALED:
case VK_FORMAT_R16G16_SSCALED:
case VK_FORMAT_R16G16_UINT:
case VK_FORMAT_R16G16_SINT:
case VK_FORMAT_R16G16_SFLOAT:
case VK_FORMAT_R32G32_UINT:
case VK_FORMAT_R32G32_SINT:
case VK_FORMAT_R32G32_SFLOAT:
case VK_FORMAT_R64G64_SFLOAT:
case VK_FORMAT_D16_UNORM_S8_UINT:
case VK_FORMAT_D24_UNORM_S8_UINT:
case VK_FORMAT_D32_SFLOAT_S8_UINT:
case VK_FORMAT_BC5_UNORM:
case VK_FORMAT_BC5_SNORM:
case VK_FORMAT_EAC_R11G11_UNORM:
case VK_FORMAT_EAC_R11G11_SNORM:
ret.compCount = 2;
break;
case VK_FORMAT_R5G6B5_UNORM:
case VK_FORMAT_R5G6B5_USCALED:
case VK_FORMAT_R8G8B8_UNORM:
case VK_FORMAT_R8G8B8_SNORM:
case VK_FORMAT_R8G8B8_USCALED:
case VK_FORMAT_R8G8B8_SSCALED:
case VK_FORMAT_R8G8B8_UINT:
case VK_FORMAT_R8G8B8_SINT:
case VK_FORMAT_R8G8B8_SRGB:
case VK_FORMAT_R16G16B16_UNORM:
case VK_FORMAT_R16G16B16_SNORM:
case VK_FORMAT_R16G16B16_USCALED:
case VK_FORMAT_R16G16B16_SSCALED:
case VK_FORMAT_R16G16B16_UINT:
case VK_FORMAT_R16G16B16_SINT:
case VK_FORMAT_R16G16B16_SFLOAT:
case VK_FORMAT_R64G64B64_SFLOAT:
case VK_FORMAT_R11G11B10_UFLOAT:
case VK_FORMAT_R9G9B9E5_UFLOAT:
case VK_FORMAT_BC1_RGB_UNORM:
case VK_FORMAT_BC1_RGB_SRGB:
case VK_FORMAT_BC6H_UFLOAT:
case VK_FORMAT_BC6H_SFLOAT:
case VK_FORMAT_ETC2_R8G8B8_UNORM:
case VK_FORMAT_ETC2_R8G8B8_SRGB:
case VK_FORMAT_B5G6R5_UNORM:
case VK_FORMAT_B5G6R5_USCALED:
case VK_FORMAT_B8G8R8_UNORM:
case VK_FORMAT_B8G8R8_SNORM:
case VK_FORMAT_B8G8R8_USCALED:
case VK_FORMAT_B8G8R8_SSCALED:
case VK_FORMAT_B8G8R8_UINT:
case VK_FORMAT_B8G8R8_SINT:
case VK_FORMAT_B8G8R8_SRGB:
ret.compCount = 3;
break;
case VK_FORMAT_R4G4B4A4_UNORM:
case VK_FORMAT_R4G4B4A4_USCALED:
case VK_FORMAT_R5G5B5A1_UNORM:
case VK_FORMAT_R5G5B5A1_USCALED:
case VK_FORMAT_R8G8B8A8_UNORM:
case VK_FORMAT_R8G8B8A8_SNORM:
case VK_FORMAT_R8G8B8A8_USCALED:
case VK_FORMAT_R8G8B8A8_SSCALED:
case VK_FORMAT_R8G8B8A8_UINT:
case VK_FORMAT_R8G8B8A8_SINT:
case VK_FORMAT_R8G8B8A8_SRGB:
case VK_FORMAT_R32G32B32_UINT:
case VK_FORMAT_R32G32B32_SINT:
case VK_FORMAT_R32G32B32_SFLOAT:
case VK_FORMAT_R10G10B10A2_UNORM:
case VK_FORMAT_R10G10B10A2_SNORM:
case VK_FORMAT_R10G10B10A2_USCALED:
case VK_FORMAT_R10G10B10A2_SSCALED:
case VK_FORMAT_R10G10B10A2_UINT:
case VK_FORMAT_R10G10B10A2_SINT:
case VK_FORMAT_R16G16B16A16_UNORM:
case VK_FORMAT_R16G16B16A16_SNORM:
case VK_FORMAT_R16G16B16A16_USCALED:
case VK_FORMAT_R16G16B16A16_SSCALED:
case VK_FORMAT_R16G16B16A16_UINT:
case VK_FORMAT_R16G16B16A16_SINT:
case VK_FORMAT_R16G16B16A16_SFLOAT:
case VK_FORMAT_R32G32B32A32_UINT:
case VK_FORMAT_R32G32B32A32_SINT:
case VK_FORMAT_R32G32B32A32_SFLOAT:
case VK_FORMAT_R64G64B64A64_SFLOAT:
case VK_FORMAT_BC1_RGBA_UNORM:
case VK_FORMAT_BC1_RGBA_SRGB:
case VK_FORMAT_BC2_UNORM:
case VK_FORMAT_BC2_SRGB:
case VK_FORMAT_BC3_UNORM:
case VK_FORMAT_BC3_SRGB:
case VK_FORMAT_BC7_UNORM:
case VK_FORMAT_BC7_SRGB:
case VK_FORMAT_ETC2_R8G8B8A1_UNORM:
case VK_FORMAT_ETC2_R8G8B8A1_SRGB:
case VK_FORMAT_ETC2_R8G8B8A8_UNORM:
case VK_FORMAT_ETC2_R8G8B8A8_SRGB:
case VK_FORMAT_B4G4R4A4_UNORM:
case VK_FORMAT_B5G5R5A1_UNORM:
case VK_FORMAT_B8G8R8A8_UNORM:
case VK_FORMAT_B8G8R8A8_SNORM:
case VK_FORMAT_B8G8R8A8_USCALED:
case VK_FORMAT_B8G8R8A8_SSCALED:
case VK_FORMAT_B8G8R8A8_UINT:
case VK_FORMAT_B8G8R8A8_SINT:
case VK_FORMAT_B8G8R8A8_SRGB:
case VK_FORMAT_B10G10R10A2_UNORM:
case VK_FORMAT_B10G10R10A2_SNORM:
case VK_FORMAT_B10G10R10A2_USCALED:
case VK_FORMAT_B10G10R10A2_SSCALED:
case VK_FORMAT_B10G10R10A2_UINT:
case VK_FORMAT_B10G10R10A2_SINT:
ret.compCount = 4;
break;
default:
break;
}
switch(fmt)
{
case VK_FORMAT_R8_SRGB:
case VK_FORMAT_R8G8_SRGB:
case VK_FORMAT_R8G8B8_SRGB:
case VK_FORMAT_R8G8B8A8_SRGB:
case VK_FORMAT_BC1_RGB_SRGB:
case VK_FORMAT_BC1_RGBA_SRGB:
case VK_FORMAT_BC2_SRGB:
case VK_FORMAT_BC3_SRGB:
case VK_FORMAT_BC7_SRGB:
case VK_FORMAT_ETC2_R8G8B8_SRGB:
case VK_FORMAT_ETC2_R8G8B8A1_SRGB:
case VK_FORMAT_ETC2_R8G8B8A8_SRGB:
case VK_FORMAT_ASTC_4x4_SRGB:
case VK_FORMAT_ASTC_5x4_SRGB:
case VK_FORMAT_ASTC_5x5_SRGB:
case VK_FORMAT_ASTC_6x5_SRGB:
case VK_FORMAT_ASTC_6x6_SRGB:
case VK_FORMAT_ASTC_8x5_SRGB:
case VK_FORMAT_ASTC_8x6_SRGB:
case VK_FORMAT_ASTC_8x8_SRGB:
case VK_FORMAT_ASTC_10x5_SRGB:
case VK_FORMAT_ASTC_10x6_SRGB:
case VK_FORMAT_ASTC_10x8_SRGB:
case VK_FORMAT_ASTC_10x10_SRGB:
case VK_FORMAT_ASTC_12x10_SRGB:
case VK_FORMAT_ASTC_12x12_SRGB:
case VK_FORMAT_B8G8R8_SRGB:
case VK_FORMAT_B8G8R8A8_SRGB:
ret.srgbCorrected = true;
break;
default:
break;
}
switch(fmt)
{
case VK_FORMAT_R4G4_UNORM:
case VK_FORMAT_R4G4B4A4_UNORM:
case VK_FORMAT_R5G6B5_UNORM:
case VK_FORMAT_R5G5B5A1_UNORM:
case VK_FORMAT_R8_UNORM:
case VK_FORMAT_R8_SRGB:
case VK_FORMAT_R8G8_UNORM:
case VK_FORMAT_R8G8_SRGB:
case VK_FORMAT_R8G8B8_UNORM:
case VK_FORMAT_R8G8B8_SRGB:
case VK_FORMAT_R8G8B8A8_UNORM:
case VK_FORMAT_R8G8B8A8_SRGB:
case VK_FORMAT_R10G10B10A2_UNORM:
case VK_FORMAT_R16_UNORM:
case VK_FORMAT_R16G16_UNORM:
case VK_FORMAT_R16G16B16_UNORM:
case VK_FORMAT_R16G16B16A16_UNORM:
case VK_FORMAT_BC1_RGB_UNORM:
case VK_FORMAT_BC1_RGB_SRGB:
case VK_FORMAT_BC1_RGBA_UNORM:
case VK_FORMAT_BC1_RGBA_SRGB:
case VK_FORMAT_BC2_UNORM:
case VK_FORMAT_BC2_SRGB:
case VK_FORMAT_BC3_UNORM:
case VK_FORMAT_BC3_SRGB:
case VK_FORMAT_BC4_UNORM:
case VK_FORMAT_BC5_UNORM:
case VK_FORMAT_BC7_UNORM:
case VK_FORMAT_BC7_SRGB:
case VK_FORMAT_BC6H_UFLOAT:
case VK_FORMAT_ETC2_R8G8B8_UNORM:
case VK_FORMAT_ETC2_R8G8B8_SRGB:
case VK_FORMAT_ETC2_R8G8B8A1_UNORM:
case VK_FORMAT_ETC2_R8G8B8A1_SRGB:
case VK_FORMAT_ETC2_R8G8B8A8_UNORM:
case VK_FORMAT_ETC2_R8G8B8A8_SRGB:
case VK_FORMAT_EAC_R11_UNORM:
case VK_FORMAT_EAC_R11G11_UNORM:
case VK_FORMAT_ASTC_4x4_UNORM:
case VK_FORMAT_ASTC_4x4_SRGB:
case VK_FORMAT_ASTC_5x4_UNORM:
case VK_FORMAT_ASTC_5x4_SRGB:
case VK_FORMAT_ASTC_5x5_UNORM:
case VK_FORMAT_ASTC_5x5_SRGB:
case VK_FORMAT_ASTC_6x5_UNORM:
case VK_FORMAT_ASTC_6x5_SRGB:
case VK_FORMAT_ASTC_6x6_UNORM:
case VK_FORMAT_ASTC_6x6_SRGB:
case VK_FORMAT_ASTC_8x5_UNORM:
case VK_FORMAT_ASTC_8x5_SRGB:
case VK_FORMAT_ASTC_8x6_UNORM:
case VK_FORMAT_ASTC_8x6_SRGB:
case VK_FORMAT_ASTC_8x8_UNORM:
case VK_FORMAT_ASTC_8x8_SRGB:
case VK_FORMAT_ASTC_10x5_UNORM:
case VK_FORMAT_ASTC_10x5_SRGB:
case VK_FORMAT_ASTC_10x6_UNORM:
case VK_FORMAT_ASTC_10x6_SRGB:
case VK_FORMAT_ASTC_10x8_UNORM:
case VK_FORMAT_ASTC_10x8_SRGB:
case VK_FORMAT_ASTC_10x10_UNORM:
case VK_FORMAT_ASTC_10x10_SRGB:
case VK_FORMAT_ASTC_12x10_UNORM:
case VK_FORMAT_ASTC_12x10_SRGB:
case VK_FORMAT_ASTC_12x12_UNORM:
case VK_FORMAT_ASTC_12x12_SRGB:
case VK_FORMAT_B4G4R4A4_UNORM:
case VK_FORMAT_B5G5R5A1_UNORM:
case VK_FORMAT_B5G6R5_UNORM:
case VK_FORMAT_B8G8R8_UNORM:
case VK_FORMAT_B8G8R8_SRGB:
case VK_FORMAT_B8G8R8A8_UNORM:
case VK_FORMAT_B8G8R8A8_SRGB:
case VK_FORMAT_B10G10R10A2_UNORM:
ret.compType = eCompType_UNorm;
break;
case VK_FORMAT_R8_SNORM:
case VK_FORMAT_R8G8_SNORM:
case VK_FORMAT_R8G8B8_SNORM:
case VK_FORMAT_R8G8B8A8_SNORM:
case VK_FORMAT_R10G10B10A2_SNORM:
case VK_FORMAT_R16_SNORM:
case VK_FORMAT_R16G16_SNORM:
case VK_FORMAT_R16G16B16_SNORM:
case VK_FORMAT_R16G16B16A16_SNORM:
case VK_FORMAT_BC4_SNORM:
case VK_FORMAT_BC5_SNORM:
case VK_FORMAT_BC6H_SFLOAT:
case VK_FORMAT_EAC_R11_SNORM:
case VK_FORMAT_EAC_R11G11_SNORM:
case VK_FORMAT_B8G8R8_SNORM:
case VK_FORMAT_B8G8R8A8_SNORM:
case VK_FORMAT_B10G10R10A2_SNORM:
ret.compType = eCompType_SNorm;
break;
case VK_FORMAT_R4G4_USCALED:
case VK_FORMAT_R4G4B4A4_USCALED:
case VK_FORMAT_R5G6B5_USCALED:
case VK_FORMAT_R5G5B5A1_USCALED:
case VK_FORMAT_R8_USCALED:
case VK_FORMAT_R8G8_USCALED:
case VK_FORMAT_R8G8B8_USCALED:
case VK_FORMAT_R8G8B8A8_USCALED:
case VK_FORMAT_R16_USCALED:
case VK_FORMAT_R16G16_USCALED:
case VK_FORMAT_R16G16B16_USCALED:
case VK_FORMAT_R16G16B16A16_USCALED:
case VK_FORMAT_R10G10B10A2_USCALED:
case VK_FORMAT_B5G6R5_USCALED:
case VK_FORMAT_B8G8R8_USCALED:
case VK_FORMAT_B8G8R8A8_USCALED:
case VK_FORMAT_B10G10R10A2_USCALED:
ret.compType = eCompType_UScaled;
break;
case VK_FORMAT_R8_SSCALED:
case VK_FORMAT_R8G8_SSCALED:
case VK_FORMAT_R8G8B8_SSCALED:
case VK_FORMAT_R8G8B8A8_SSCALED:
case VK_FORMAT_R10G10B10A2_SSCALED:
case VK_FORMAT_R16_SSCALED:
case VK_FORMAT_R16G16_SSCALED:
case VK_FORMAT_R16G16B16_SSCALED:
case VK_FORMAT_R16G16B16A16_SSCALED:
case VK_FORMAT_B8G8R8_SSCALED:
case VK_FORMAT_B8G8R8A8_SSCALED:
case VK_FORMAT_B10G10R10A2_SSCALED:
ret.compType = eCompType_SScaled;
break;
case VK_FORMAT_R8_UINT:
case VK_FORMAT_R8G8_UINT:
case VK_FORMAT_R8G8B8_UINT:
case VK_FORMAT_R8G8B8A8_UINT:
case VK_FORMAT_R8G8B8A8_SINT:
case VK_FORMAT_R10G10B10A2_UINT:
case VK_FORMAT_R16_UINT:
case VK_FORMAT_R16G16_UINT:
case VK_FORMAT_R16G16B16_UINT:
case VK_FORMAT_R16G16B16A16_UINT:
case VK_FORMAT_R32_UINT:
case VK_FORMAT_R32G32_UINT:
case VK_FORMAT_R32G32B32_UINT:
case VK_FORMAT_R32G32B32A32_UINT:
// Maybe S8 should be identified by something else?
case VK_FORMAT_S8_UINT:
case VK_FORMAT_B8G8R8_UINT:
case VK_FORMAT_B8G8R8A8_UINT:
case VK_FORMAT_B10G10R10A2_UINT:
ret.compType = eCompType_UInt;
break;
case VK_FORMAT_R8_SINT:
case VK_FORMAT_R8G8_SINT:
case VK_FORMAT_R8G8B8_SINT:
case VK_FORMAT_R10G10B10A2_SINT:
case VK_FORMAT_R16_SINT:
case VK_FORMAT_R16G16_SINT:
case VK_FORMAT_R16G16B16_SINT:
case VK_FORMAT_R16G16B16A16_SINT:
case VK_FORMAT_R32_SINT:
case VK_FORMAT_R32G32_SINT:
case VK_FORMAT_R32G32B32_SINT:
case VK_FORMAT_R32G32B32A32_SINT:
case VK_FORMAT_B8G8R8_SINT:
case VK_FORMAT_B8G8R8A8_SINT:
case VK_FORMAT_B10G10R10A2_SINT:
ret.compType = eCompType_SInt;
break;
case VK_FORMAT_R16_SFLOAT:
case VK_FORMAT_R16G16_SFLOAT:
case VK_FORMAT_R16G16B16_SFLOAT:
case VK_FORMAT_R16G16B16A16_SFLOAT:
case VK_FORMAT_R32_SFLOAT:
case VK_FORMAT_R32G32_SFLOAT:
case VK_FORMAT_R32G32B32_SFLOAT:
case VK_FORMAT_R32G32B32A32_SFLOAT:
case VK_FORMAT_R11G11B10_UFLOAT:
case VK_FORMAT_R9G9B9E5_UFLOAT:
ret.compType = eCompType_Float;
break;
case VK_FORMAT_R64_SFLOAT:
case VK_FORMAT_R64G64_SFLOAT:
case VK_FORMAT_R64G64B64_SFLOAT:
case VK_FORMAT_R64G64B64A64_SFLOAT:
ret.compType = eCompType_Double;
break;
case VK_FORMAT_D16_UNORM:
case VK_FORMAT_D24_UNORM:
case VK_FORMAT_D32_SFLOAT:
ret.compType = eCompType_Depth;
break;
default:
break;
}
switch(fmt)
{
case VK_FORMAT_R8_UNORM:
case VK_FORMAT_R8_SNORM:
case VK_FORMAT_R8_USCALED:
case VK_FORMAT_R8_SSCALED:
case VK_FORMAT_R8_UINT:
case VK_FORMAT_R8_SINT:
case VK_FORMAT_R8_SRGB:
case VK_FORMAT_R8G8_UNORM:
case VK_FORMAT_R8G8_SNORM:
case VK_FORMAT_R8G8_USCALED:
case VK_FORMAT_R8G8_SSCALED:
case VK_FORMAT_R8G8_UINT:
case VK_FORMAT_R8G8_SINT:
case VK_FORMAT_R8G8_SRGB:
case VK_FORMAT_R8G8B8_UNORM:
case VK_FORMAT_R8G8B8_SNORM:
case VK_FORMAT_R8G8B8_USCALED:
case VK_FORMAT_R8G8B8_SSCALED:
case VK_FORMAT_R8G8B8_UINT:
case VK_FORMAT_R8G8B8_SINT:
case VK_FORMAT_R8G8B8_SRGB:
case VK_FORMAT_R8G8B8A8_UNORM:
case VK_FORMAT_R8G8B8A8_SNORM:
case VK_FORMAT_R8G8B8A8_USCALED:
case VK_FORMAT_R8G8B8A8_SSCALED:
case VK_FORMAT_R8G8B8A8_UINT:
case VK_FORMAT_R8G8B8A8_SINT:
case VK_FORMAT_R8G8B8A8_SRGB:
case VK_FORMAT_S8_UINT:
case VK_FORMAT_B8G8R8_UNORM:
case VK_FORMAT_B8G8R8_SNORM:
case VK_FORMAT_B8G8R8_USCALED:
case VK_FORMAT_B8G8R8_SSCALED:
case VK_FORMAT_B8G8R8_UINT:
case VK_FORMAT_B8G8R8_SINT:
case VK_FORMAT_B8G8R8_SRGB:
case VK_FORMAT_B8G8R8A8_UNORM:
case VK_FORMAT_B8G8R8A8_SNORM:
case VK_FORMAT_B8G8R8A8_USCALED:
case VK_FORMAT_B8G8R8A8_SSCALED:
case VK_FORMAT_B8G8R8A8_UINT:
case VK_FORMAT_B8G8R8A8_SINT:
case VK_FORMAT_B8G8R8A8_SRGB:
ret.compByteWidth = 1;
break;
case VK_FORMAT_R16_UNORM:
case VK_FORMAT_R16_SNORM:
case VK_FORMAT_R16_USCALED:
case VK_FORMAT_R16_SSCALED:
case VK_FORMAT_R16_UINT:
case VK_FORMAT_R16_SINT:
case VK_FORMAT_R16_SFLOAT:
case VK_FORMAT_R16G16_UNORM:
case VK_FORMAT_R16G16_SNORM:
case VK_FORMAT_R16G16_USCALED:
case VK_FORMAT_R16G16_SSCALED:
case VK_FORMAT_R16G16_UINT:
case VK_FORMAT_R16G16_SINT:
case VK_FORMAT_R16G16_SFLOAT:
case VK_FORMAT_R16G16B16_UNORM:
case VK_FORMAT_R16G16B16_SNORM:
case VK_FORMAT_R16G16B16_USCALED:
case VK_FORMAT_R16G16B16_SSCALED:
case VK_FORMAT_R16G16B16_UINT:
case VK_FORMAT_R16G16B16_SINT:
case VK_FORMAT_R16G16B16_SFLOAT:
case VK_FORMAT_R16G16B16A16_UNORM:
case VK_FORMAT_R16G16B16A16_SNORM:
case VK_FORMAT_R16G16B16A16_USCALED:
case VK_FORMAT_R16G16B16A16_SSCALED:
case VK_FORMAT_R16G16B16A16_UINT:
case VK_FORMAT_R16G16B16A16_SINT:
case VK_FORMAT_R16G16B16A16_SFLOAT:
case VK_FORMAT_D16_UNORM:
ret.compByteWidth = 2;
break;
case VK_FORMAT_D24_UNORM:
ret.compByteWidth = 3;
break;
case VK_FORMAT_R32_UINT:
case VK_FORMAT_R32_SINT:
case VK_FORMAT_R32_SFLOAT:
case VK_FORMAT_R32G32_UINT:
case VK_FORMAT_R32G32_SINT:
case VK_FORMAT_R32G32_SFLOAT:
case VK_FORMAT_R32G32B32_UINT:
case VK_FORMAT_R32G32B32_SINT:
case VK_FORMAT_R32G32B32_SFLOAT:
case VK_FORMAT_R32G32B32A32_UINT:
case VK_FORMAT_R32G32B32A32_SINT:
case VK_FORMAT_R32G32B32A32_SFLOAT:
case VK_FORMAT_D32_SFLOAT:
ret.compByteWidth = 4;
break;
case VK_FORMAT_R64_SFLOAT:
case VK_FORMAT_R64G64_SFLOAT:
case VK_FORMAT_R64G64B64_SFLOAT:
case VK_FORMAT_R64G64B64A64_SFLOAT:
ret.compByteWidth = 8;
break;
default:
break;
}
return ret;
}
PrimitiveTopology MakePrimitiveTopology(VkPrimitiveTopology Topo, uint32_t patchControlPoints)
{
switch(Topo)
{
default:
break;
case VK_PRIMITIVE_TOPOLOGY_POINT_LIST:
return eTopology_PointList;
break;
case VK_PRIMITIVE_TOPOLOGY_LINE_LIST:
return eTopology_LineList;
break;
case VK_PRIMITIVE_TOPOLOGY_LINE_STRIP:
return eTopology_LineStrip;
break;
case VK_PRIMITIVE_TOPOLOGY_TRIANGLE_LIST:
return eTopology_TriangleList;
break;
case VK_PRIMITIVE_TOPOLOGY_TRIANGLE_STRIP:
return eTopology_TriangleStrip;
break;
case VK_PRIMITIVE_TOPOLOGY_TRIANGLE_FAN:
return eTopology_TriangleFan;
break;
case VK_PRIMITIVE_TOPOLOGY_LINE_LIST_ADJ:
return eTopology_LineList_Adj;
break;
case VK_PRIMITIVE_TOPOLOGY_LINE_STRIP_ADJ:
return eTopology_LineStrip_Adj;
break;
case VK_PRIMITIVE_TOPOLOGY_TRIANGLE_LIST_ADJ:
return eTopology_TriangleList_Adj;
break;
case VK_PRIMITIVE_TOPOLOGY_TRIANGLE_STRIP_ADJ:
return eTopology_TriangleStrip_Adj;
break;
case VK_PRIMITIVE_TOPOLOGY_PATCH:
return PrimitiveTopology(eTopology_PatchList_1CPs + patchControlPoints);
break;
}
return eTopology_Unknown;
}
// VKTODOMED need a Deserialise or otherwise deallocate function to release buffers or new'd memory
VulkanResourceManager *manager = NULL;
+5
View File
@@ -60,6 +60,11 @@
#include <vk_wsi_swapchain.h>
#include <vk_wsi_device_swapchain.h>
#include "api/replay/renderdoc_replay.h"
ResourceFormat MakeResourceFormat(VkFormat fmt);
PrimitiveTopology MakePrimitiveTopology(VkPrimitiveTopology Topo, uint32_t patchControlPoints);
// structure for casting to easily iterate and template specialising Serialise
struct VkGenericStruct
{
+16 -2
View File
@@ -3937,6 +3937,12 @@ bool WrappedVulkan::Serialise_vkCmdBindPipeline(
VkCmdBuffer cmd = (VkCmdBuffer)GetResourceManager()->GetLiveResource(cmdid).handle;
pipeline = (VkPipeline)GetResourceManager()->GetLiveResource(pipeid).handle;
// track this while reading, as we need to bind current topology & index byte width to draws
if(bind == VK_PIPELINE_BIND_POINT_GRAPHICS)
m_PartialReplayData.state.graphics.pipeline = pipeid;
else
m_PartialReplayData.state.compute.pipeline = pipeid;
device_dispatch_table(cmdBuffer)->CmdBindPipeline(cmd, bind, pipeline);
}
@@ -4437,6 +4443,9 @@ bool WrappedVulkan::Serialise_vkCmdBindIndexBuffer(
{
VkCmdBuffer cmd = (VkCmdBuffer)GetResourceManager()->GetLiveResource(cmdid).handle;
buffer = (VkBuffer)GetResourceManager()->GetLiveResource(bufid).handle;
// track this while reading, as we need to bind current topology & index byte width to draws
m_PartialReplayData.state.ibuffer.bytewidth = idxType == VK_INDEX_TYPE_UINT32 ? 4 : 2;
device_dispatch_table(cmdBuffer)->CmdBindIndexBuffer(cmd, buffer, offs, idxType);
}
@@ -7329,8 +7338,13 @@ void WrappedVulkan::AddDrawcall(FetchDrawcall d, bool hasEvents)
draw.depthOut = ResourceId();
// VKTODOHIGH set index byte width here
// VKTODOHIGH set topology here
ResourceId pipe = m_PartialReplayData.state.graphics.pipeline;
if(pipe != ResourceId())
draw.topology = MakePrimitiveTopology(m_CreationInfo.m_Pipeline[pipe].topology, m_CreationInfo.m_Pipeline[pipe].patchControlPoints);
else
draw.topology = eTopology_Unknown;
draw.indexByteWidth = m_PartialReplayData.state.ibuffer.bytewidth;
m_CurDrawcallID++;
if(hasEvents)
-652
View File
@@ -108,655 +108,3 @@ bool IsDepthStencilFormat(VkFormat f)
return false;
}
ResourceFormat MakeResourceFormat(VkFormat fmt)
{
ResourceFormat ret;
ret.rawType = (uint32_t)fmt;
ret.special = false;
ret.specialFormat = eSpecial_Unknown;
ret.strname = ToStr::Get(fmt).substr(10); // 3 == strlen("VK_FORMAT_")
ret.compByteWidth = 0;
ret.compCount = 0;
ret.compType = eCompType_None;
ret.srgbCorrected = false;
if(fmt == VK_FORMAT_UNDEFINED)
{
return ret;
}
// VKTODOMED R4G4, R4G4B4A4, and refactor BGRA formats
switch(fmt)
{
case VK_FORMAT_B4G4R4A4_UNORM:
ret.special = true;
ret.specialFormat = eSpecial_B4G4R4A4;
break;
case VK_FORMAT_R10G10B10A2_UNORM:
case VK_FORMAT_R10G10B10A2_SNORM:
case VK_FORMAT_R10G10B10A2_USCALED:
case VK_FORMAT_R10G10B10A2_SSCALED:
case VK_FORMAT_R10G10B10A2_UINT:
case VK_FORMAT_R10G10B10A2_SINT:
ret.special = true;
ret.specialFormat = eSpecial_R10G10B10A2;
break;
case VK_FORMAT_R11G11B10_UFLOAT:
ret.special = true;
ret.specialFormat = eSpecial_R11G11B10;
break;
case VK_FORMAT_R9G9B9E5_UFLOAT:
ret.special = true;
ret.specialFormat = eSpecial_R9G9B9E5;
break;
case VK_FORMAT_D16_UNORM_S8_UINT:
ret.special = true;
ret.specialFormat = eSpecial_D16S8;
break;
case VK_FORMAT_D24_UNORM_S8_UINT:
ret.special = true;
ret.specialFormat = eSpecial_D24S8;
break;
case VK_FORMAT_D32_SFLOAT_S8_UINT:
ret.special = true;
ret.specialFormat = eSpecial_D32S8;
break;
case VK_FORMAT_BC1_RGB_UNORM:
case VK_FORMAT_BC1_RGB_SRGB:
case VK_FORMAT_BC1_RGBA_UNORM:
case VK_FORMAT_BC1_RGBA_SRGB:
ret.special = true;
ret.specialFormat = eSpecial_BC1;
break;
case VK_FORMAT_BC2_UNORM:
case VK_FORMAT_BC2_SRGB:
ret.special = true;
ret.specialFormat = eSpecial_BC2;
break;
case VK_FORMAT_BC3_UNORM:
case VK_FORMAT_BC3_SRGB:
ret.special = true;
ret.specialFormat = eSpecial_BC3;
break;
case VK_FORMAT_BC4_UNORM:
case VK_FORMAT_BC4_SNORM:
ret.special = true;
ret.specialFormat = eSpecial_BC4;
break;
case VK_FORMAT_BC5_UNORM:
case VK_FORMAT_BC5_SNORM:
ret.special = true;
ret.specialFormat = eSpecial_BC5;
break;
case VK_FORMAT_BC6H_UFLOAT:
case VK_FORMAT_BC6H_SFLOAT:
ret.special = true;
ret.specialFormat = eSpecial_BC6;
break;
case VK_FORMAT_BC7_UNORM:
case VK_FORMAT_BC7_SRGB:
ret.special = true;
ret.specialFormat = eSpecial_BC7;
break;
case VK_FORMAT_ETC2_R8G8B8_UNORM:
case VK_FORMAT_ETC2_R8G8B8_SRGB:
case VK_FORMAT_ETC2_R8G8B8A1_UNORM:
case VK_FORMAT_ETC2_R8G8B8A1_SRGB:
case VK_FORMAT_ETC2_R8G8B8A8_UNORM:
case VK_FORMAT_ETC2_R8G8B8A8_SRGB:
ret.special = true;
ret.specialFormat = eSpecial_ETC2;
break;
case VK_FORMAT_EAC_R11_UNORM:
case VK_FORMAT_EAC_R11_SNORM:
case VK_FORMAT_EAC_R11G11_UNORM:
case VK_FORMAT_EAC_R11G11_SNORM:
ret.special = true;
ret.specialFormat = eSpecial_EAC;
break;
case VK_FORMAT_ASTC_4x4_UNORM:
case VK_FORMAT_ASTC_4x4_SRGB:
case VK_FORMAT_ASTC_5x4_UNORM:
case VK_FORMAT_ASTC_5x4_SRGB:
case VK_FORMAT_ASTC_5x5_UNORM:
case VK_FORMAT_ASTC_5x5_SRGB:
case VK_FORMAT_ASTC_6x5_UNORM:
case VK_FORMAT_ASTC_6x5_SRGB:
case VK_FORMAT_ASTC_6x6_UNORM:
case VK_FORMAT_ASTC_6x6_SRGB:
case VK_FORMAT_ASTC_8x5_UNORM:
case VK_FORMAT_ASTC_8x5_SRGB:
case VK_FORMAT_ASTC_8x6_UNORM:
case VK_FORMAT_ASTC_8x6_SRGB:
case VK_FORMAT_ASTC_8x8_UNORM:
case VK_FORMAT_ASTC_8x8_SRGB:
case VK_FORMAT_ASTC_10x5_UNORM:
case VK_FORMAT_ASTC_10x5_SRGB:
case VK_FORMAT_ASTC_10x6_UNORM:
case VK_FORMAT_ASTC_10x6_SRGB:
case VK_FORMAT_ASTC_10x8_UNORM:
case VK_FORMAT_ASTC_10x8_SRGB:
case VK_FORMAT_ASTC_10x10_UNORM:
case VK_FORMAT_ASTC_10x10_SRGB:
case VK_FORMAT_ASTC_12x10_UNORM:
case VK_FORMAT_ASTC_12x10_SRGB:
case VK_FORMAT_ASTC_12x12_UNORM:
case VK_FORMAT_ASTC_12x12_SRGB:
ret.special = true;
ret.specialFormat = eSpecial_ASTC;
break;
case VK_FORMAT_B8G8R8A8_UNORM:
case VK_FORMAT_B8G8R8A8_SNORM:
case VK_FORMAT_B8G8R8A8_USCALED:
case VK_FORMAT_B8G8R8A8_SSCALED:
case VK_FORMAT_B8G8R8A8_UINT:
case VK_FORMAT_B8G8R8A8_SINT:
case VK_FORMAT_B8G8R8A8_SRGB:
ret.special = true;
ret.specialFormat = eSpecial_B8G8R8A8;
break;
default:
break;
}
switch(fmt)
{
case VK_FORMAT_R8_UNORM:
case VK_FORMAT_R8_SNORM:
case VK_FORMAT_R8_USCALED:
case VK_FORMAT_R8_SSCALED:
case VK_FORMAT_R8_UINT:
case VK_FORMAT_R8_SINT:
case VK_FORMAT_R8_SRGB:
case VK_FORMAT_R16_UNORM:
case VK_FORMAT_R16_SNORM:
case VK_FORMAT_R16_USCALED:
case VK_FORMAT_R16_SSCALED:
case VK_FORMAT_R16_UINT:
case VK_FORMAT_R16_SINT:
case VK_FORMAT_R16_SFLOAT:
case VK_FORMAT_R32_UINT:
case VK_FORMAT_R32_SINT:
case VK_FORMAT_R32_SFLOAT:
case VK_FORMAT_R64_SFLOAT:
case VK_FORMAT_D16_UNORM:
case VK_FORMAT_D24_UNORM:
case VK_FORMAT_D32_SFLOAT:
case VK_FORMAT_S8_UINT:
case VK_FORMAT_BC4_UNORM:
case VK_FORMAT_BC4_SNORM:
case VK_FORMAT_EAC_R11_UNORM:
case VK_FORMAT_EAC_R11_SNORM:
ret.compCount = 1;
break;
case VK_FORMAT_R4G4_UNORM:
case VK_FORMAT_R4G4_USCALED:
case VK_FORMAT_R8G8_UNORM:
case VK_FORMAT_R8G8_SNORM:
case VK_FORMAT_R8G8_USCALED:
case VK_FORMAT_R8G8_SSCALED:
case VK_FORMAT_R8G8_UINT:
case VK_FORMAT_R8G8_SINT:
case VK_FORMAT_R8G8_SRGB:
case VK_FORMAT_R16G16_UNORM:
case VK_FORMAT_R16G16_SNORM:
case VK_FORMAT_R16G16_USCALED:
case VK_FORMAT_R16G16_SSCALED:
case VK_FORMAT_R16G16_UINT:
case VK_FORMAT_R16G16_SINT:
case VK_FORMAT_R16G16_SFLOAT:
case VK_FORMAT_R32G32_UINT:
case VK_FORMAT_R32G32_SINT:
case VK_FORMAT_R32G32_SFLOAT:
case VK_FORMAT_R64G64_SFLOAT:
case VK_FORMAT_D16_UNORM_S8_UINT:
case VK_FORMAT_D24_UNORM_S8_UINT:
case VK_FORMAT_D32_SFLOAT_S8_UINT:
case VK_FORMAT_BC5_UNORM:
case VK_FORMAT_BC5_SNORM:
case VK_FORMAT_EAC_R11G11_UNORM:
case VK_FORMAT_EAC_R11G11_SNORM:
ret.compCount = 2;
break;
case VK_FORMAT_R5G6B5_UNORM:
case VK_FORMAT_R5G6B5_USCALED:
case VK_FORMAT_R8G8B8_UNORM:
case VK_FORMAT_R8G8B8_SNORM:
case VK_FORMAT_R8G8B8_USCALED:
case VK_FORMAT_R8G8B8_SSCALED:
case VK_FORMAT_R8G8B8_UINT:
case VK_FORMAT_R8G8B8_SINT:
case VK_FORMAT_R8G8B8_SRGB:
case VK_FORMAT_R16G16B16_UNORM:
case VK_FORMAT_R16G16B16_SNORM:
case VK_FORMAT_R16G16B16_USCALED:
case VK_FORMAT_R16G16B16_SSCALED:
case VK_FORMAT_R16G16B16_UINT:
case VK_FORMAT_R16G16B16_SINT:
case VK_FORMAT_R16G16B16_SFLOAT:
case VK_FORMAT_R64G64B64_SFLOAT:
case VK_FORMAT_R11G11B10_UFLOAT:
case VK_FORMAT_R9G9B9E5_UFLOAT:
case VK_FORMAT_BC1_RGB_UNORM:
case VK_FORMAT_BC1_RGB_SRGB:
case VK_FORMAT_BC6H_UFLOAT:
case VK_FORMAT_BC6H_SFLOAT:
case VK_FORMAT_ETC2_R8G8B8_UNORM:
case VK_FORMAT_ETC2_R8G8B8_SRGB:
case VK_FORMAT_B5G6R5_UNORM:
case VK_FORMAT_B5G6R5_USCALED:
case VK_FORMAT_B8G8R8_UNORM:
case VK_FORMAT_B8G8R8_SNORM:
case VK_FORMAT_B8G8R8_USCALED:
case VK_FORMAT_B8G8R8_SSCALED:
case VK_FORMAT_B8G8R8_UINT:
case VK_FORMAT_B8G8R8_SINT:
case VK_FORMAT_B8G8R8_SRGB:
ret.compCount = 3;
break;
case VK_FORMAT_R4G4B4A4_UNORM:
case VK_FORMAT_R4G4B4A4_USCALED:
case VK_FORMAT_R5G5B5A1_UNORM:
case VK_FORMAT_R5G5B5A1_USCALED:
case VK_FORMAT_R8G8B8A8_UNORM:
case VK_FORMAT_R8G8B8A8_SNORM:
case VK_FORMAT_R8G8B8A8_USCALED:
case VK_FORMAT_R8G8B8A8_SSCALED:
case VK_FORMAT_R8G8B8A8_UINT:
case VK_FORMAT_R8G8B8A8_SINT:
case VK_FORMAT_R8G8B8A8_SRGB:
case VK_FORMAT_R32G32B32_UINT:
case VK_FORMAT_R32G32B32_SINT:
case VK_FORMAT_R32G32B32_SFLOAT:
case VK_FORMAT_R10G10B10A2_UNORM:
case VK_FORMAT_R10G10B10A2_SNORM:
case VK_FORMAT_R10G10B10A2_USCALED:
case VK_FORMAT_R10G10B10A2_SSCALED:
case VK_FORMAT_R10G10B10A2_UINT:
case VK_FORMAT_R10G10B10A2_SINT:
case VK_FORMAT_R16G16B16A16_UNORM:
case VK_FORMAT_R16G16B16A16_SNORM:
case VK_FORMAT_R16G16B16A16_USCALED:
case VK_FORMAT_R16G16B16A16_SSCALED:
case VK_FORMAT_R16G16B16A16_UINT:
case VK_FORMAT_R16G16B16A16_SINT:
case VK_FORMAT_R16G16B16A16_SFLOAT:
case VK_FORMAT_R32G32B32A32_UINT:
case VK_FORMAT_R32G32B32A32_SINT:
case VK_FORMAT_R32G32B32A32_SFLOAT:
case VK_FORMAT_R64G64B64A64_SFLOAT:
case VK_FORMAT_BC1_RGBA_UNORM:
case VK_FORMAT_BC1_RGBA_SRGB:
case VK_FORMAT_BC2_UNORM:
case VK_FORMAT_BC2_SRGB:
case VK_FORMAT_BC3_UNORM:
case VK_FORMAT_BC3_SRGB:
case VK_FORMAT_BC7_UNORM:
case VK_FORMAT_BC7_SRGB:
case VK_FORMAT_ETC2_R8G8B8A1_UNORM:
case VK_FORMAT_ETC2_R8G8B8A1_SRGB:
case VK_FORMAT_ETC2_R8G8B8A8_UNORM:
case VK_FORMAT_ETC2_R8G8B8A8_SRGB:
case VK_FORMAT_B4G4R4A4_UNORM:
case VK_FORMAT_B5G5R5A1_UNORM:
case VK_FORMAT_B8G8R8A8_UNORM:
case VK_FORMAT_B8G8R8A8_SNORM:
case VK_FORMAT_B8G8R8A8_USCALED:
case VK_FORMAT_B8G8R8A8_SSCALED:
case VK_FORMAT_B8G8R8A8_UINT:
case VK_FORMAT_B8G8R8A8_SINT:
case VK_FORMAT_B8G8R8A8_SRGB:
case VK_FORMAT_B10G10R10A2_UNORM:
case VK_FORMAT_B10G10R10A2_SNORM:
case VK_FORMAT_B10G10R10A2_USCALED:
case VK_FORMAT_B10G10R10A2_SSCALED:
case VK_FORMAT_B10G10R10A2_UINT:
case VK_FORMAT_B10G10R10A2_SINT:
ret.compCount = 4;
break;
default:
break;
}
switch(fmt)
{
case VK_FORMAT_R8_SRGB:
case VK_FORMAT_R8G8_SRGB:
case VK_FORMAT_R8G8B8_SRGB:
case VK_FORMAT_R8G8B8A8_SRGB:
case VK_FORMAT_BC1_RGB_SRGB:
case VK_FORMAT_BC1_RGBA_SRGB:
case VK_FORMAT_BC2_SRGB:
case VK_FORMAT_BC3_SRGB:
case VK_FORMAT_BC7_SRGB:
case VK_FORMAT_ETC2_R8G8B8_SRGB:
case VK_FORMAT_ETC2_R8G8B8A1_SRGB:
case VK_FORMAT_ETC2_R8G8B8A8_SRGB:
case VK_FORMAT_ASTC_4x4_SRGB:
case VK_FORMAT_ASTC_5x4_SRGB:
case VK_FORMAT_ASTC_5x5_SRGB:
case VK_FORMAT_ASTC_6x5_SRGB:
case VK_FORMAT_ASTC_6x6_SRGB:
case VK_FORMAT_ASTC_8x5_SRGB:
case VK_FORMAT_ASTC_8x6_SRGB:
case VK_FORMAT_ASTC_8x8_SRGB:
case VK_FORMAT_ASTC_10x5_SRGB:
case VK_FORMAT_ASTC_10x6_SRGB:
case VK_FORMAT_ASTC_10x8_SRGB:
case VK_FORMAT_ASTC_10x10_SRGB:
case VK_FORMAT_ASTC_12x10_SRGB:
case VK_FORMAT_ASTC_12x12_SRGB:
case VK_FORMAT_B8G8R8_SRGB:
case VK_FORMAT_B8G8R8A8_SRGB:
ret.srgbCorrected = true;
break;
default:
break;
}
switch(fmt)
{
case VK_FORMAT_R4G4_UNORM:
case VK_FORMAT_R4G4B4A4_UNORM:
case VK_FORMAT_R5G6B5_UNORM:
case VK_FORMAT_R5G5B5A1_UNORM:
case VK_FORMAT_R8_UNORM:
case VK_FORMAT_R8_SRGB:
case VK_FORMAT_R8G8_UNORM:
case VK_FORMAT_R8G8_SRGB:
case VK_FORMAT_R8G8B8_UNORM:
case VK_FORMAT_R8G8B8_SRGB:
case VK_FORMAT_R8G8B8A8_UNORM:
case VK_FORMAT_R8G8B8A8_SRGB:
case VK_FORMAT_R10G10B10A2_UNORM:
case VK_FORMAT_R16_UNORM:
case VK_FORMAT_R16G16_UNORM:
case VK_FORMAT_R16G16B16_UNORM:
case VK_FORMAT_R16G16B16A16_UNORM:
case VK_FORMAT_BC1_RGB_UNORM:
case VK_FORMAT_BC1_RGB_SRGB:
case VK_FORMAT_BC1_RGBA_UNORM:
case VK_FORMAT_BC1_RGBA_SRGB:
case VK_FORMAT_BC2_UNORM:
case VK_FORMAT_BC2_SRGB:
case VK_FORMAT_BC3_UNORM:
case VK_FORMAT_BC3_SRGB:
case VK_FORMAT_BC4_UNORM:
case VK_FORMAT_BC5_UNORM:
case VK_FORMAT_BC7_UNORM:
case VK_FORMAT_BC7_SRGB:
case VK_FORMAT_BC6H_UFLOAT:
case VK_FORMAT_ETC2_R8G8B8_UNORM:
case VK_FORMAT_ETC2_R8G8B8_SRGB:
case VK_FORMAT_ETC2_R8G8B8A1_UNORM:
case VK_FORMAT_ETC2_R8G8B8A1_SRGB:
case VK_FORMAT_ETC2_R8G8B8A8_UNORM:
case VK_FORMAT_ETC2_R8G8B8A8_SRGB:
case VK_FORMAT_EAC_R11_UNORM:
case VK_FORMAT_EAC_R11G11_UNORM:
case VK_FORMAT_ASTC_4x4_UNORM:
case VK_FORMAT_ASTC_4x4_SRGB:
case VK_FORMAT_ASTC_5x4_UNORM:
case VK_FORMAT_ASTC_5x4_SRGB:
case VK_FORMAT_ASTC_5x5_UNORM:
case VK_FORMAT_ASTC_5x5_SRGB:
case VK_FORMAT_ASTC_6x5_UNORM:
case VK_FORMAT_ASTC_6x5_SRGB:
case VK_FORMAT_ASTC_6x6_UNORM:
case VK_FORMAT_ASTC_6x6_SRGB:
case VK_FORMAT_ASTC_8x5_UNORM:
case VK_FORMAT_ASTC_8x5_SRGB:
case VK_FORMAT_ASTC_8x6_UNORM:
case VK_FORMAT_ASTC_8x6_SRGB:
case VK_FORMAT_ASTC_8x8_UNORM:
case VK_FORMAT_ASTC_8x8_SRGB:
case VK_FORMAT_ASTC_10x5_UNORM:
case VK_FORMAT_ASTC_10x5_SRGB:
case VK_FORMAT_ASTC_10x6_UNORM:
case VK_FORMAT_ASTC_10x6_SRGB:
case VK_FORMAT_ASTC_10x8_UNORM:
case VK_FORMAT_ASTC_10x8_SRGB:
case VK_FORMAT_ASTC_10x10_UNORM:
case VK_FORMAT_ASTC_10x10_SRGB:
case VK_FORMAT_ASTC_12x10_UNORM:
case VK_FORMAT_ASTC_12x10_SRGB:
case VK_FORMAT_ASTC_12x12_UNORM:
case VK_FORMAT_ASTC_12x12_SRGB:
case VK_FORMAT_B4G4R4A4_UNORM:
case VK_FORMAT_B5G5R5A1_UNORM:
case VK_FORMAT_B5G6R5_UNORM:
case VK_FORMAT_B8G8R8_UNORM:
case VK_FORMAT_B8G8R8_SRGB:
case VK_FORMAT_B8G8R8A8_UNORM:
case VK_FORMAT_B8G8R8A8_SRGB:
case VK_FORMAT_B10G10R10A2_UNORM:
ret.compType = eCompType_UNorm;
break;
case VK_FORMAT_R8_SNORM:
case VK_FORMAT_R8G8_SNORM:
case VK_FORMAT_R8G8B8_SNORM:
case VK_FORMAT_R8G8B8A8_SNORM:
case VK_FORMAT_R10G10B10A2_SNORM:
case VK_FORMAT_R16_SNORM:
case VK_FORMAT_R16G16_SNORM:
case VK_FORMAT_R16G16B16_SNORM:
case VK_FORMAT_R16G16B16A16_SNORM:
case VK_FORMAT_BC4_SNORM:
case VK_FORMAT_BC5_SNORM:
case VK_FORMAT_BC6H_SFLOAT:
case VK_FORMAT_EAC_R11_SNORM:
case VK_FORMAT_EAC_R11G11_SNORM:
case VK_FORMAT_B8G8R8_SNORM:
case VK_FORMAT_B8G8R8A8_SNORM:
case VK_FORMAT_B10G10R10A2_SNORM:
ret.compType = eCompType_SNorm;
break;
case VK_FORMAT_R4G4_USCALED:
case VK_FORMAT_R4G4B4A4_USCALED:
case VK_FORMAT_R5G6B5_USCALED:
case VK_FORMAT_R5G5B5A1_USCALED:
case VK_FORMAT_R8_USCALED:
case VK_FORMAT_R8G8_USCALED:
case VK_FORMAT_R8G8B8_USCALED:
case VK_FORMAT_R8G8B8A8_USCALED:
case VK_FORMAT_R16_USCALED:
case VK_FORMAT_R16G16_USCALED:
case VK_FORMAT_R16G16B16_USCALED:
case VK_FORMAT_R16G16B16A16_USCALED:
case VK_FORMAT_R10G10B10A2_USCALED:
case VK_FORMAT_B5G6R5_USCALED:
case VK_FORMAT_B8G8R8_USCALED:
case VK_FORMAT_B8G8R8A8_USCALED:
case VK_FORMAT_B10G10R10A2_USCALED:
ret.compType = eCompType_UScaled;
break;
case VK_FORMAT_R8_SSCALED:
case VK_FORMAT_R8G8_SSCALED:
case VK_FORMAT_R8G8B8_SSCALED:
case VK_FORMAT_R8G8B8A8_SSCALED:
case VK_FORMAT_R10G10B10A2_SSCALED:
case VK_FORMAT_R16_SSCALED:
case VK_FORMAT_R16G16_SSCALED:
case VK_FORMAT_R16G16B16_SSCALED:
case VK_FORMAT_R16G16B16A16_SSCALED:
case VK_FORMAT_B8G8R8_SSCALED:
case VK_FORMAT_B8G8R8A8_SSCALED:
case VK_FORMAT_B10G10R10A2_SSCALED:
ret.compType = eCompType_SScaled;
break;
case VK_FORMAT_R8_UINT:
case VK_FORMAT_R8G8_UINT:
case VK_FORMAT_R8G8B8_UINT:
case VK_FORMAT_R8G8B8A8_UINT:
case VK_FORMAT_R8G8B8A8_SINT:
case VK_FORMAT_R10G10B10A2_UINT:
case VK_FORMAT_R16_UINT:
case VK_FORMAT_R16G16_UINT:
case VK_FORMAT_R16G16B16_UINT:
case VK_FORMAT_R16G16B16A16_UINT:
case VK_FORMAT_R32_UINT:
case VK_FORMAT_R32G32_UINT:
case VK_FORMAT_R32G32B32_UINT:
case VK_FORMAT_R32G32B32A32_UINT:
// Maybe S8 should be identified by something else?
case VK_FORMAT_S8_UINT:
case VK_FORMAT_B8G8R8_UINT:
case VK_FORMAT_B8G8R8A8_UINT:
case VK_FORMAT_B10G10R10A2_UINT:
ret.compType = eCompType_UInt;
break;
case VK_FORMAT_R8_SINT:
case VK_FORMAT_R8G8_SINT:
case VK_FORMAT_R8G8B8_SINT:
case VK_FORMAT_R10G10B10A2_SINT:
case VK_FORMAT_R16_SINT:
case VK_FORMAT_R16G16_SINT:
case VK_FORMAT_R16G16B16_SINT:
case VK_FORMAT_R16G16B16A16_SINT:
case VK_FORMAT_R32_SINT:
case VK_FORMAT_R32G32_SINT:
case VK_FORMAT_R32G32B32_SINT:
case VK_FORMAT_R32G32B32A32_SINT:
case VK_FORMAT_B8G8R8_SINT:
case VK_FORMAT_B8G8R8A8_SINT:
case VK_FORMAT_B10G10R10A2_SINT:
ret.compType = eCompType_SInt;
break;
case VK_FORMAT_R16_SFLOAT:
case VK_FORMAT_R16G16_SFLOAT:
case VK_FORMAT_R16G16B16_SFLOAT:
case VK_FORMAT_R16G16B16A16_SFLOAT:
case VK_FORMAT_R32_SFLOAT:
case VK_FORMAT_R32G32_SFLOAT:
case VK_FORMAT_R32G32B32_SFLOAT:
case VK_FORMAT_R32G32B32A32_SFLOAT:
case VK_FORMAT_R11G11B10_UFLOAT:
case VK_FORMAT_R9G9B9E5_UFLOAT:
ret.compType = eCompType_Float;
break;
case VK_FORMAT_R64_SFLOAT:
case VK_FORMAT_R64G64_SFLOAT:
case VK_FORMAT_R64G64B64_SFLOAT:
case VK_FORMAT_R64G64B64A64_SFLOAT:
ret.compType = eCompType_Double;
break;
case VK_FORMAT_D16_UNORM:
case VK_FORMAT_D24_UNORM:
case VK_FORMAT_D32_SFLOAT:
ret.compType = eCompType_Depth;
break;
default:
break;
}
switch(fmt)
{
case VK_FORMAT_R8_UNORM:
case VK_FORMAT_R8_SNORM:
case VK_FORMAT_R8_USCALED:
case VK_FORMAT_R8_SSCALED:
case VK_FORMAT_R8_UINT:
case VK_FORMAT_R8_SINT:
case VK_FORMAT_R8_SRGB:
case VK_FORMAT_R8G8_UNORM:
case VK_FORMAT_R8G8_SNORM:
case VK_FORMAT_R8G8_USCALED:
case VK_FORMAT_R8G8_SSCALED:
case VK_FORMAT_R8G8_UINT:
case VK_FORMAT_R8G8_SINT:
case VK_FORMAT_R8G8_SRGB:
case VK_FORMAT_R8G8B8_UNORM:
case VK_FORMAT_R8G8B8_SNORM:
case VK_FORMAT_R8G8B8_USCALED:
case VK_FORMAT_R8G8B8_SSCALED:
case VK_FORMAT_R8G8B8_UINT:
case VK_FORMAT_R8G8B8_SINT:
case VK_FORMAT_R8G8B8_SRGB:
case VK_FORMAT_R8G8B8A8_UNORM:
case VK_FORMAT_R8G8B8A8_SNORM:
case VK_FORMAT_R8G8B8A8_USCALED:
case VK_FORMAT_R8G8B8A8_SSCALED:
case VK_FORMAT_R8G8B8A8_UINT:
case VK_FORMAT_R8G8B8A8_SINT:
case VK_FORMAT_R8G8B8A8_SRGB:
case VK_FORMAT_S8_UINT:
case VK_FORMAT_B8G8R8_UNORM:
case VK_FORMAT_B8G8R8_SNORM:
case VK_FORMAT_B8G8R8_USCALED:
case VK_FORMAT_B8G8R8_SSCALED:
case VK_FORMAT_B8G8R8_UINT:
case VK_FORMAT_B8G8R8_SINT:
case VK_FORMAT_B8G8R8_SRGB:
case VK_FORMAT_B8G8R8A8_UNORM:
case VK_FORMAT_B8G8R8A8_SNORM:
case VK_FORMAT_B8G8R8A8_USCALED:
case VK_FORMAT_B8G8R8A8_SSCALED:
case VK_FORMAT_B8G8R8A8_UINT:
case VK_FORMAT_B8G8R8A8_SINT:
case VK_FORMAT_B8G8R8A8_SRGB:
ret.compByteWidth = 1;
break;
case VK_FORMAT_R16_UNORM:
case VK_FORMAT_R16_SNORM:
case VK_FORMAT_R16_USCALED:
case VK_FORMAT_R16_SSCALED:
case VK_FORMAT_R16_UINT:
case VK_FORMAT_R16_SINT:
case VK_FORMAT_R16_SFLOAT:
case VK_FORMAT_R16G16_UNORM:
case VK_FORMAT_R16G16_SNORM:
case VK_FORMAT_R16G16_USCALED:
case VK_FORMAT_R16G16_SSCALED:
case VK_FORMAT_R16G16_UINT:
case VK_FORMAT_R16G16_SINT:
case VK_FORMAT_R16G16_SFLOAT:
case VK_FORMAT_R16G16B16_UNORM:
case VK_FORMAT_R16G16B16_SNORM:
case VK_FORMAT_R16G16B16_USCALED:
case VK_FORMAT_R16G16B16_SSCALED:
case VK_FORMAT_R16G16B16_UINT:
case VK_FORMAT_R16G16B16_SINT:
case VK_FORMAT_R16G16B16_SFLOAT:
case VK_FORMAT_R16G16B16A16_UNORM:
case VK_FORMAT_R16G16B16A16_SNORM:
case VK_FORMAT_R16G16B16A16_USCALED:
case VK_FORMAT_R16G16B16A16_SSCALED:
case VK_FORMAT_R16G16B16A16_UINT:
case VK_FORMAT_R16G16B16A16_SINT:
case VK_FORMAT_R16G16B16A16_SFLOAT:
case VK_FORMAT_D16_UNORM:
ret.compByteWidth = 2;
break;
case VK_FORMAT_D24_UNORM:
ret.compByteWidth = 3;
break;
case VK_FORMAT_R32_UINT:
case VK_FORMAT_R32_SINT:
case VK_FORMAT_R32_SFLOAT:
case VK_FORMAT_R32G32_UINT:
case VK_FORMAT_R32G32_SINT:
case VK_FORMAT_R32G32_SFLOAT:
case VK_FORMAT_R32G32B32_UINT:
case VK_FORMAT_R32G32B32_SINT:
case VK_FORMAT_R32G32B32_SFLOAT:
case VK_FORMAT_R32G32B32A32_UINT:
case VK_FORMAT_R32G32B32A32_SINT:
case VK_FORMAT_R32G32B32A32_SFLOAT:
case VK_FORMAT_D32_SFLOAT:
ret.compByteWidth = 4;
break;
case VK_FORMAT_R64_SFLOAT:
case VK_FORMAT_R64G64_SFLOAT:
case VK_FORMAT_R64G64B64_SFLOAT:
case VK_FORMAT_R64G64B64A64_SFLOAT:
ret.compByteWidth = 8;
break;
default:
break;
}
return ret;
}
-2
View File
@@ -251,5 +251,3 @@ enum DescriptorSlotType
bool IsBlockFormat(VkFormat f);
bool IsDepthStencilFormat(VkFormat f);
ResourceFormat MakeResourceFormat(VkFormat fmt);