diff --git a/src/imagination/vulkan/pvr_formats.c b/src/imagination/vulkan/pvr_formats.c index 610cc6f8306..2ca4dbfe9bd 100644 --- a/src/imagination/vulkan/pvr_formats.c +++ b/src/imagination/vulkan/pvr_formats.c @@ -48,14 +48,12 @@ #include "vk_log.h" #include "vk_util.h" -#define FORMAT(vk, tex_fmt, pack_mode, accum_format) \ - [VK_FORMAT_##vk] = { \ - .tex_format = ROGUE_TEXSTATE_FORMAT_##tex_fmt, \ - .depth_tex_format = ROGUE_TEXSTATE_FORMAT_INVALID, \ - .stencil_tex_format = ROGUE_TEXSTATE_FORMAT_INVALID, \ - .pbe_packmode = ROGUE_PBESTATE_PACKMODE_##pack_mode, \ - .pbe_accum_format = PVR_PBE_ACCUM_FORMAT_##accum_format, \ - .supported = true, \ +#define FORMAT(vk, tex_fmt) \ + [VK_FORMAT_##vk] = { \ + .tex_format = ROGUE_TEXSTATE_FORMAT_##tex_fmt, \ + .depth_tex_format = ROGUE_TEXSTATE_FORMAT_INVALID, \ + .stencil_tex_format = ROGUE_TEXSTATE_FORMAT_INVALID, \ + .supported = true, \ } #define FORMAT_COMPRESSED(vk, tex_fmt) \ @@ -63,190 +61,104 @@ .tex_format = ROGUE_TEXSTATE_FORMAT_COMPRESSED_##tex_fmt, \ .depth_tex_format = ROGUE_TEXSTATE_FORMAT_INVALID, \ .stencil_tex_format = ROGUE_TEXSTATE_FORMAT_INVALID, \ - .pbe_packmode = ROGUE_PBESTATE_PACKMODE_INVALID, \ - .pbe_accum_format = PVR_PBE_ACCUM_FORMAT_INVALID, \ .supported = true, \ } -#define FORMAT_DEPTH_STENCIL(vk, combined_fmt, d_fmt, s_fmt) \ - [VK_FORMAT_##vk] = { \ - .tex_format = ROGUE_TEXSTATE_FORMAT_##combined_fmt, \ - .depth_tex_format = ROGUE_TEXSTATE_FORMAT_##d_fmt, \ - .stencil_tex_format = ROGUE_TEXSTATE_FORMAT_##s_fmt, \ - .pbe_packmode = ROGUE_PBESTATE_PACKMODE_##combined_fmt, \ - .pbe_accum_format = PVR_PBE_ACCUM_FORMAT_INVALID, \ - .supported = true, \ +#define FORMAT_DEPTH_STENCIL(vk, combined_fmt, d_fmt, s_fmt) \ + [VK_FORMAT_##vk] = { \ + .tex_format = ROGUE_TEXSTATE_FORMAT_##combined_fmt, \ + .depth_tex_format = ROGUE_TEXSTATE_FORMAT_##d_fmt, \ + .stencil_tex_format = ROGUE_TEXSTATE_FORMAT_##s_fmt, \ + .supported = true, \ } struct pvr_format { uint32_t tex_format; uint32_t depth_tex_format; uint32_t stencil_tex_format; - uint32_t pbe_packmode; - enum pvr_pbe_accum_format pbe_accum_format; bool supported; }; static const struct pvr_format pvr_format_table[] = { - /* VK_FORMAT_B4G4R4A4_UNORM_PACK16 = 3. */ - FORMAT(B4G4R4A4_UNORM_PACK16, A4R4G4B4, A4R4G4B4, U8), - /* VK_FORMAT_R5G6B5_UNORM_PACK16 = 4. */ - FORMAT(R5G6B5_UNORM_PACK16, R5G6B5, R5G6B5, U8), - /* VK_FORMAT_A1R5G5B5_UNORM_PACK16 = 8. */ - FORMAT(A1R5G5B5_UNORM_PACK16, A1R5G5B5, A1R5G5B5, U8), - /* VK_FORMAT_R8_UNORM = 9. */ - FORMAT(R8_UNORM, U8, U8, U8), - /* VK_FORMAT_R8_SNORM = 10. */ - FORMAT(R8_SNORM, S8, S8, S8), - /* VK_FORMAT_R8_UINT = 13. */ - FORMAT(R8_UINT, U8, U8, UINT8), - /* VK_FORMAT_R8_SINT = 14. */ - FORMAT(R8_SINT, S8, S8, SINT8), - /* VK_FORMAT_R8G8_UNORM = 16. */ - FORMAT(R8G8_UNORM, U8U8, U8U8, U8), - /* VK_FORMAT_R8G8_SNORM = 17. */ - FORMAT(R8G8_SNORM, S8S8, S8S8, S8), - /* VK_FORMAT_R8G8_SSCALED = 19. */ - FORMAT(R8G8_SSCALED, S8S8, S8S8, INVALID), - /* VK_FORMAT_R8G8_UINT = 20. */ - FORMAT(R8G8_UINT, U8U8, U8U8, UINT8), - /* VK_FORMAT_R8G8_SINT = 21. */ - FORMAT(R8G8_SINT, S8S8, S8S8, SINT8), - /* VK_FORMAT_R8G8B8_UINT = 27. */ - FORMAT(R8G8B8_UINT, U8U8U8, U8U8U8, UINT8), - /* VK_FORMAT_R8G8B8A8_UNORM = 37. */ - FORMAT(R8G8B8A8_UNORM, U8U8U8U8, U8U8U8U8, U8), - /* VK_FORMAT_R8G8B8A8_SNORM = 38. */ - FORMAT(R8G8B8A8_SNORM, S8S8S8S8, S8S8S8S8, S8), - /* VK_FORMAT_R8G8B8A8_UINT = 41. */ - FORMAT(R8G8B8A8_UINT, U8U8U8U8, U8U8U8U8, UINT8), - /* VK_FORMAT_R8G8B8A8_SINT = 42. */ - FORMAT(R8G8B8A8_SINT, S8S8S8S8, S8S8S8S8, SINT8), - /* VK_FORMAT_R8G8B8A8_SRGB = 43. */ - FORMAT(R8G8B8A8_SRGB, U8U8U8U8, U8U8U8U8, F16), - /* VK_FORMAT_B8G8R8A8_UNORM = 44. */ - FORMAT(B8G8R8A8_UNORM, U8U8U8U8, U8U8U8U8, U8), - /* VK_FORMAT_B8G8R8A8_SRGB = 50. */ - FORMAT(B8G8R8A8_SRGB, U8U8U8U8, U8U8U8U8, F16), - /* VK_FORMAT_A8B8G8R8_UNORM_PACK32 = 51. */ - FORMAT(A8B8G8R8_UNORM_PACK32, U8U8U8U8, U8U8U8U8, U8), - /* VK_FORMAT_A8B8G8R8_SNORM_PACK32 = 52. */ - FORMAT(A8B8G8R8_SNORM_PACK32, S8S8S8S8, S8S8S8S8, S8), - /* VK_FORMAT_A8B8G8R8_UINT_PACK32 = 55. */ - FORMAT(A8B8G8R8_UINT_PACK32, U8U8U8U8, U8U8U8U8, UINT8), - /* VK_FORMAT_A8B8G8R8_SINT_PACK32 = 56. */ - FORMAT(A8B8G8R8_SINT_PACK32, S8S8S8S8, S8S8S8S8, SINT8), - /* VK_FORMAT_A8B8G8R8_SRGB_PACK32 = 57. */ - FORMAT(A8B8G8R8_SRGB_PACK32, U8U8U8U8, U8U8U8U8, F16), - /* VK_FORMAT_A2R10G10B10_USCALED_PACK32 = 60. */ - FORMAT(A2R10G10B10_USCALED_PACK32, INVALID, INVALID, INVALID), - /* VK_FORMAT_A2R10G10B10_SSCALED_PACK32 = 61. */ - FORMAT(A2R10G10B10_SSCALED_PACK32, INVALID, INVALID, INVALID), - /* VK_FORMAT_A2B10G10R10_UNORM_PACK32 = 64. */ - FORMAT(A2B10G10R10_UNORM_PACK32, A2R10B10G10, A2R10B10G10, F16), - /* VK_FORMAT_A2B10G10R10_SNORM_PACK32 = 65. */ - FORMAT(A2B10G10R10_SNORM_PACK32, A2R10B10G10, A2R10B10G10, F16), - /* VK_FORMAT_A2B10G10R10_USCALED_PACK32 = 66. */ - FORMAT(A2B10G10R10_USCALED_PACK32, INVALID, INVALID, INVALID), - /* VK_FORMAT_A2B10G10R10_SSCALED_PACK32 = 67. */ - FORMAT(A2B10G10R10_SSCALED_PACK32, INVALID, INVALID, INVALID), - /* VK_FORMAT_A2B10G10R10_UINT_PACK32 = 68. */ - FORMAT(A2B10G10R10_UINT_PACK32, A2R10B10G10, U32, U1010102), - /* VK_FORMAT_R16_UNORM = 70. */ - FORMAT(R16_UNORM, U16, U16, U16), - /* VK_FORMAT_R16_SNORM = 71. */ - FORMAT(R16_SNORM, S16, S16, S16), - /* VK_FORMAT_R16_UINT = 74. */ - FORMAT(R16_UINT, U16, U16, UINT16), - /* VK_FORMAT_R16_SINT = 75. */ - FORMAT(R16_SINT, S16, S16, SINT16), - /* VK_FORMAT_R16_SFLOAT = 76. */ - FORMAT(R16_SFLOAT, F16, F16, F16), - /* VK_FORMAT_R16G16_UNORM = 77. */ - FORMAT(R16G16_UNORM, U16U16, U16U16, U16), - /* VK_FORMAT_R16G16_SNORM = 78. */ - FORMAT(R16G16_SNORM, S16S16, S16S16, S16), - /* VK_FORMAT_R16G16_UINT = 81. */ - FORMAT(R16G16_UINT, U16U16, U16U16, UINT16), - /* VK_FORMAT_R16G16_SINT = 82. */ - FORMAT(R16G16_SINT, S16S16, S16S16, SINT16), - /* VK_FORMAT_R16G16_SFLOAT = 83. */ - FORMAT(R16G16_SFLOAT, F16F16, F16F16, F16), - /* VK_FORMAT_R16G16B16_SNORM = 85. */ - FORMAT(R16G16B16_SNORM, S16S16S16, S16S16S16, S16), - /* VK_FORMAT_R16G16B16_UINT = 88. */ - FORMAT(R16G16B16_UINT, U16U16U16, U16U16U16, UINT16), - /* VK_FORMAT_R16G16B16_SINT = 89. */ - FORMAT(R16G16B16_SINT, S16S16S16, S16S16S16, SINT16), - /* VK_FORMAT_R16G16B16A16_UNORM = 91. */ - FORMAT(R16G16B16A16_UNORM, U16U16U16U16, U16U16U16U16, U16), - /* VK_FORMAT_R16G16B16A16_SNORM = 92. */ - FORMAT(R16G16B16A16_SNORM, S16S16S16S16, S16S16S16S16, S16), - /* VK_FORMAT_R16G16B16A16_UINT = 95. */ - FORMAT(R16G16B16A16_UINT, U16U16U16U16, U16U16U16U16, UINT16), - /* VK_FORMAT_R16G16B16A16_SINT = 96 */ - FORMAT(R16G16B16A16_SINT, S16S16S16S16, S16S16S16S16, SINT16), - /* VK_FORMAT_R16G16B16A16_SFLOAT = 97. */ - FORMAT(R16G16B16A16_SFLOAT, F16F16F16F16, F16F16F16F16, F16), - /* VK_FORMAT_R32_UINT = 98. */ - FORMAT(R32_UINT, U32, U32, UINT32), - /* VK_FORMAT_R32_SINT = 99. */ - FORMAT(R32_SINT, S32, S32, SINT32), - /* VK_FORMAT_R32_SFLOAT = 100. */ - FORMAT(R32_SFLOAT, F32, F32, F32), - /* VK_FORMAT_R32G32_UINT = 101. */ - FORMAT(R32G32_UINT, U32U32, U32U32, UINT32), - /* VK_FORMAT_R32G32_SINT = 102. */ - FORMAT(R32G32_SINT, S32S32, S32S32, SINT32), - /* VK_FORMAT_R32G32_SFLOAT = 103. */ - FORMAT(R32G32_SFLOAT, F32F32, F32F32, F32), - /* VK_FORMAT_R32G32B32_UINT = 104. */ - FORMAT(R32G32B32_UINT, U32U32U32, U32U32U32, UINT32), - /* VK_FORMAT_R32G32B32_SINT = 105. */ - FORMAT(R32G32B32_SINT, S32S32S32, S32S32S32, SINT32), - /* VK_FORMAT_R32G32B32_SFLOAT = 106. */ - FORMAT(R32G32B32_SFLOAT, F32F32F32, F32F32F32, F32), - /* VK_FORMAT_R32G32B32A32_UINT = 107. */ - FORMAT(R32G32B32A32_UINT, U32U32U32U32, U32U32U32U32, UINT32), - /* VK_FORMAT_R32G32B32A32_SINT = 108. */ - FORMAT(R32G32B32A32_SINT, S32S32S32S32, S32S32S32S32, SINT32), - /* VK_FORMAT_R32G32B32A32_SFLOAT = 109. */ - FORMAT(R32G32B32A32_SFLOAT, F32F32F32F32, F32F32F32F32, F32), - /* VK_FORMAT_B10G11R11_UFLOAT_PACK32 = 122. */ - FORMAT(B10G11R11_UFLOAT_PACK32, F10F11F11, F10F11F11, F16), - /* VK_FORMAT_E5B9G9R9_UFLOAT_PACK32 = 123. */ - FORMAT(E5B9G9R9_UFLOAT_PACK32, SE9995, SE9995, INVALID), - /* VK_FORMAT_D16_UNORM = 124. */ + FORMAT(B4G4R4A4_UNORM_PACK16, A4R4G4B4), + FORMAT(R5G6B5_UNORM_PACK16, R5G6B5), + FORMAT(A1R5G5B5_UNORM_PACK16, A1R5G5B5), + FORMAT(R8_UNORM, U8), + FORMAT(R8_SNORM, S8), + FORMAT(R8_UINT, U8), + FORMAT(R8_SINT, S8), + FORMAT(R8G8_UNORM, U8U8), + FORMAT(R8G8_SNORM, S8S8), + FORMAT(R8G8_SSCALED, S8S8), + FORMAT(R8G8_UINT, U8U8), + FORMAT(R8G8_SINT, S8S8), + FORMAT(R8G8B8_UINT, U8U8U8), + FORMAT(R8G8B8A8_UNORM, U8U8U8U8), + FORMAT(R8G8B8A8_SNORM, S8S8S8S8), + FORMAT(R8G8B8A8_UINT, U8U8U8U8), + FORMAT(R8G8B8A8_SINT, S8S8S8S8), + FORMAT(R8G8B8A8_SRGB, U8U8U8U8), + FORMAT(B8G8R8A8_UNORM, U8U8U8U8), + FORMAT(B8G8R8A8_SRGB, U8U8U8U8), + FORMAT(A8B8G8R8_UNORM_PACK32, U8U8U8U8), + FORMAT(A8B8G8R8_SNORM_PACK32, S8S8S8S8), + FORMAT(A8B8G8R8_UINT_PACK32, U8U8U8U8), + FORMAT(A8B8G8R8_SINT_PACK32, S8S8S8S8), + FORMAT(A8B8G8R8_SRGB_PACK32, U8U8U8U8), + FORMAT(A2R10G10B10_USCALED_PACK32, INVALID), + FORMAT(A2R10G10B10_SSCALED_PACK32, INVALID), + FORMAT(A2B10G10R10_UNORM_PACK32, A2R10B10G10), + FORMAT(A2B10G10R10_SNORM_PACK32, A2R10B10G10), + FORMAT(A2B10G10R10_USCALED_PACK32, INVALID), + FORMAT(A2B10G10R10_SSCALED_PACK32, INVALID), + FORMAT(A2B10G10R10_UINT_PACK32, A2R10B10G10), + FORMAT(R16_UNORM, U16), + FORMAT(R16_SNORM, S16), + FORMAT(R16_UINT, U16), + FORMAT(R16_SINT, S16), + FORMAT(R16_SFLOAT, F16), + FORMAT(R16G16_UNORM, U16U16), + FORMAT(R16G16_SNORM, S16S16), + FORMAT(R16G16_UINT, U16U16), + FORMAT(R16G16_SINT, S16S16), + FORMAT(R16G16_SFLOAT, F16F16), + FORMAT(R16G16B16_SNORM, S16S16S16), + FORMAT(R16G16B16_UINT, U16U16U16), + FORMAT(R16G16B16_SINT, S16S16S16), + FORMAT(R16G16B16A16_UNORM, U16U16U16U16), + FORMAT(R16G16B16A16_SNORM, S16S16S16S16), + FORMAT(R16G16B16A16_UINT, U16U16U16U16), + FORMAT(R16G16B16A16_SINT, S16S16S16S16), + FORMAT(R16G16B16A16_SFLOAT, F16F16F16F16), + FORMAT(R32_UINT, U32), + FORMAT(R32_SINT, S32), + FORMAT(R32_SFLOAT, F32), + FORMAT(R32G32_UINT, U32U32), + FORMAT(R32G32_SINT, S32S32), + FORMAT(R32G32_SFLOAT, F32F32), + FORMAT(R32G32B32_UINT, U32U32U32), + FORMAT(R32G32B32_SINT, S32S32S32), + FORMAT(R32G32B32_SFLOAT, F32F32F32), + FORMAT(R32G32B32A32_UINT, U32U32U32U32), + FORMAT(R32G32B32A32_SINT, S32S32S32S32), + FORMAT(R32G32B32A32_SFLOAT, F32F32F32F32), + FORMAT(B10G11R11_UFLOAT_PACK32, F10F11F11), + FORMAT(E5B9G9R9_UFLOAT_PACK32, SE9995), FORMAT_DEPTH_STENCIL(D16_UNORM, U16, U16, INVALID), - /* VK_FORMAT_X8_D24_UNORM_PACK32 = 125. */ FORMAT_DEPTH_STENCIL(X8_D24_UNORM_PACK32, X8U24, X8U24, INVALID), - /* VK_FORMAT_D32_SFLOAT = 126. */ FORMAT_DEPTH_STENCIL(D32_SFLOAT, F32, F32, INVALID), - /* VK_FORMAT_S8_UINT = 127. */ FORMAT_DEPTH_STENCIL(S8_UINT, U8, INVALID, U8), - /* VK_FORMAT_D24_UNORM_S8_UINT = 129. */ FORMAT_DEPTH_STENCIL(D24_UNORM_S8_UINT, ST8U24, X8U24, U8X24), - /* VK_FORMAT_D32_SFLOAT_S8_UINT = 130 */ FORMAT_DEPTH_STENCIL(D32_SFLOAT_S8_UINT, X24U8F32, X24X8F32, X24G8X32), - /* VK_FORMAT_ETC2_R8G8B8_UNORM_BLOCK = 147. */ FORMAT_COMPRESSED(ETC2_R8G8B8_UNORM_BLOCK, ETC2_RGB), - /* VK_FORMAT_ETC2_R8G8B8_SRGB_BLOCK = 148. */ FORMAT_COMPRESSED(ETC2_R8G8B8_SRGB_BLOCK, ETC2_RGB), - /* VK_FORMAT_ETC2_R8G8B8A1_UNORM_BLOCK = 149. */ FORMAT_COMPRESSED(ETC2_R8G8B8A1_UNORM_BLOCK, ETC2_PUNCHTHROUGHA), - /* VK_FORMAT_ETC2_R8G8B8A1_SRGB_BLOCK = 150. */ FORMAT_COMPRESSED(ETC2_R8G8B8A1_SRGB_BLOCK, ETC2_PUNCHTHROUGHA), - /* VK_FORMAT_ETC2_R8G8B8A8_UNORM_BLOCK = 150. */ FORMAT_COMPRESSED(ETC2_R8G8B8A8_UNORM_BLOCK, ETC2A_RGBA), - /* VK_FORMAT_ETC2_R8G8B8A8_SRGB_BLOCK = 152. */ FORMAT_COMPRESSED(ETC2_R8G8B8A8_SRGB_BLOCK, ETC2A_RGBA), - /* VK_FORMAT_EAC_R11_UNORM_BLOCK = 153. */ FORMAT_COMPRESSED(EAC_R11_UNORM_BLOCK, EAC_R11_UNSIGNED), - /* VK_FORMAT_EAC_R11_SNORM_BLOCK = 154. */ FORMAT_COMPRESSED(EAC_R11_SNORM_BLOCK, EAC_R11_SIGNED), - /* VK_FORMAT_EAC_R11G11_UNORM_BLOCK = 155. */ FORMAT_COMPRESSED(EAC_R11G11_UNORM_BLOCK, EAC_RG11_UNSIGNED), - /* VK_FORMAT_EAC_R11G11_SNORM_BLOCK = 156. */ FORMAT_COMPRESSED(EAC_R11G11_SNORM_BLOCK, EAC_RG11_SIGNED), }; @@ -254,6 +166,116 @@ static const struct pvr_format pvr_format_table[] = { #undef FORMAT_DEPTH_STENCIL #undef FORMAT_COMPRESSED +#define FORMAT(vk, pack_mode_, accum_format_) \ + [VK_FORMAT_##vk] = { \ + .packmode = ROGUE_PBESTATE_PACKMODE_##pack_mode_, \ + .accum_format = PVR_PBE_ACCUM_FORMAT_##accum_format_, \ + } + +#define FORMAT_COMPRESSED(vk) \ + [VK_FORMAT_##vk] = { \ + .packmode = ROGUE_PBESTATE_PACKMODE_INVALID, \ + .accum_format = PVR_PBE_ACCUM_FORMAT_INVALID, \ + } + +#define FORMAT_DEPTH_STENCIL(vk, combined_fmt) \ + [VK_FORMAT_##vk] = { \ + .packmode = ROGUE_PBESTATE_PACKMODE_##combined_fmt, \ + .accum_format = PVR_PBE_ACCUM_FORMAT_INVALID, \ + } + +struct pvr_pbe_format { + uint32_t packmode; + enum pvr_pbe_accum_format accum_format; +}; + +static const struct pvr_pbe_format pvr_pbe_format_table[] = { + FORMAT(B4G4R4A4_UNORM_PACK16, A4R4G4B4, U8), + FORMAT(R5G6B5_UNORM_PACK16, R5G6B5, U8), + FORMAT(A1R5G5B5_UNORM_PACK16, A1R5G5B5, U8), + FORMAT(R8_UNORM, U8, U8), + FORMAT(R8_SNORM, S8, S8), + FORMAT(R8_UINT, U8, UINT8), + FORMAT(R8_SINT, S8, SINT8), + FORMAT(R8G8_UNORM, U8U8, U8), + FORMAT(R8G8_SNORM, S8S8, S8), + FORMAT(R8G8_SSCALED, S8S8, INVALID), + FORMAT(R8G8_UINT, U8U8, UINT8), + FORMAT(R8G8_SINT, S8S8, SINT8), + FORMAT(R8G8B8_UINT, U8U8U8, UINT8), + FORMAT(R8G8B8A8_UNORM, U8U8U8U8, U8), + FORMAT(R8G8B8A8_SNORM, S8S8S8S8, S8), + FORMAT(R8G8B8A8_UINT, U8U8U8U8, UINT8), + FORMAT(R8G8B8A8_SINT, S8S8S8S8, SINT8), + FORMAT(R8G8B8A8_SRGB, U8U8U8U8, F16), + FORMAT(B8G8R8A8_UNORM, U8U8U8U8, U8), + FORMAT(B8G8R8A8_SRGB, U8U8U8U8, F16), + FORMAT(A8B8G8R8_UNORM_PACK32, U8U8U8U8, U8), + FORMAT(A8B8G8R8_SNORM_PACK32, S8S8S8S8, S8), + FORMAT(A8B8G8R8_UINT_PACK32, U8U8U8U8, UINT8), + FORMAT(A8B8G8R8_SINT_PACK32, S8S8S8S8, SINT8), + FORMAT(A8B8G8R8_SRGB_PACK32, U8U8U8U8, F16), + FORMAT(A2R10G10B10_USCALED_PACK32, INVALID, INVALID), + FORMAT(A2R10G10B10_SSCALED_PACK32, INVALID, INVALID), + FORMAT(A2B10G10R10_UNORM_PACK32, A2R10B10G10, F16), + FORMAT(A2B10G10R10_SNORM_PACK32, A2R10B10G10, F16), + FORMAT(A2B10G10R10_USCALED_PACK32, INVALID, INVALID), + FORMAT(A2B10G10R10_SSCALED_PACK32, INVALID, INVALID), + FORMAT(A2B10G10R10_UINT_PACK32, U32, U1010102), + FORMAT(R16_UNORM, U16, U16), + FORMAT(R16_SNORM, S16, S16), + FORMAT(R16_UINT, U16, UINT16), + FORMAT(R16_SINT, S16, SINT16), + FORMAT(R16_SFLOAT, F16, F16), + FORMAT(R16G16_UNORM, U16U16, U16), + FORMAT(R16G16_SNORM, S16S16, S16), + FORMAT(R16G16_UINT, U16U16, UINT16), + FORMAT(R16G16_SINT, S16S16, SINT16), + FORMAT(R16G16_SFLOAT, F16F16, F16), + FORMAT(R16G16B16_SNORM, S16S16S16, S16), + FORMAT(R16G16B16_UINT, U16U16U16, UINT16), + FORMAT(R16G16B16_SINT, S16S16S16, SINT16), + FORMAT(R16G16B16A16_UNORM, U16U16U16U16, U16), + FORMAT(R16G16B16A16_SNORM, S16S16S16S16, S16), + FORMAT(R16G16B16A16_UINT, U16U16U16U16, UINT16), + FORMAT(R16G16B16A16_SINT, S16S16S16S16, SINT16), + FORMAT(R16G16B16A16_SFLOAT, F16F16F16F16, F16), + FORMAT(R32_UINT, U32, UINT32), + FORMAT(R32_SINT, S32, SINT32), + FORMAT(R32_SFLOAT, F32, F32), + FORMAT(R32G32_UINT, U32U32, UINT32), + FORMAT(R32G32_SINT, S32S32, SINT32), + FORMAT(R32G32_SFLOAT, F32F32, F32), + FORMAT(R32G32B32_UINT, U32U32U32, UINT32), + FORMAT(R32G32B32_SINT, S32S32S32, SINT32), + FORMAT(R32G32B32_SFLOAT, F32F32F32, F32), + FORMAT(R32G32B32A32_UINT, U32U32U32U32, UINT32), + FORMAT(R32G32B32A32_SINT, S32S32S32S32, SINT32), + FORMAT(R32G32B32A32_SFLOAT, F32F32F32F32, F32), + FORMAT(B10G11R11_UFLOAT_PACK32, F10F11F11, F16), + FORMAT(E5B9G9R9_UFLOAT_PACK32, SE9995, INVALID), + FORMAT_DEPTH_STENCIL(D16_UNORM, U16), + FORMAT_DEPTH_STENCIL(X8_D24_UNORM_PACK32, X8U24), + FORMAT_DEPTH_STENCIL(D32_SFLOAT, F32), + FORMAT_DEPTH_STENCIL(S8_UINT, U8), + FORMAT_DEPTH_STENCIL(D24_UNORM_S8_UINT, ST8U24), + FORMAT_DEPTH_STENCIL(D32_SFLOAT_S8_UINT, X24U8F32), + FORMAT_COMPRESSED(ETC2_R8G8B8_UNORM_BLOCK), + FORMAT_COMPRESSED(ETC2_R8G8B8_SRGB_BLOCK), + FORMAT_COMPRESSED(ETC2_R8G8B8A1_UNORM_BLOCK), + FORMAT_COMPRESSED(ETC2_R8G8B8A1_SRGB_BLOCK), + FORMAT_COMPRESSED(ETC2_R8G8B8A8_UNORM_BLOCK), + FORMAT_COMPRESSED(ETC2_R8G8B8A8_SRGB_BLOCK), + FORMAT_COMPRESSED(EAC_R11_UNORM_BLOCK), + FORMAT_COMPRESSED(EAC_R11_SNORM_BLOCK), + FORMAT_COMPRESSED(EAC_R11G11_UNORM_BLOCK), + FORMAT_COMPRESSED(EAC_R11G11_SNORM_BLOCK), +}; + +#undef FORMAT +#undef FORMAT_DEPTH_STENCIL +#undef FORMAT_COMPRESSED + static inline const struct pvr_format *pvr_get_format(VkFormat vk_format) { if (vk_format < ARRAY_SIZE(pvr_format_table) && @@ -268,6 +290,13 @@ static inline const struct pvr_format *pvr_get_format(VkFormat vk_format) return NULL; } +static inline const struct pvr_pbe_format * +pvr_get_pbe_format(VkFormat vk_format) +{ + assert(vk_format < ARRAY_SIZE(pvr_pbe_format_table)); + return &pvr_pbe_format_table[vk_format]; +} + uint32_t pvr_get_tex_format(VkFormat vk_format) { const struct pvr_format *pvr_format = pvr_get_format(vk_format); @@ -296,20 +325,12 @@ uint32_t pvr_get_tex_format_aspect(VkFormat vk_format, uint32_t pvr_get_pbe_packmode(VkFormat vk_format) { - const struct pvr_format *pvr_format = pvr_get_format(vk_format); - if (pvr_format) - return pvr_format->pbe_packmode; - - return ROGUE_PBESTATE_PACKMODE_INVALID; + return pvr_get_pbe_format(vk_format)->packmode; } uint32_t pvr_get_pbe_accum_format(VkFormat vk_format) { - const struct pvr_format *pvr_format = pvr_get_format(vk_format); - if (pvr_format) - return pvr_format->pbe_accum_format; - - return PVR_PBE_ACCUM_FORMAT_INVALID; + return pvr_get_pbe_format(vk_format)->accum_format; } uint32_t pvr_get_pbe_accum_format_size_in_bytes(VkFormat vk_format) @@ -809,7 +830,7 @@ pvr_get_image_format_properties(struct pvr_physical_device *pdevice, if ((info->flags & VK_IMAGE_CREATE_EXTENDED_USAGE_BIT) == 0 && usage & (VK_IMAGE_USAGE_INPUT_ATTACHMENT_BIT | VK_IMAGE_USAGE_COLOR_ATTACHMENT_BIT) && - pvr_format->pbe_accum_format == PVR_PBE_ACCUM_FORMAT_INVALID) { + pvr_get_pbe_accum_format(info->format) == PVR_PBE_ACCUM_FORMAT_INVALID) { result = vk_error(pdevice, VK_ERROR_FORMAT_NOT_SUPPORTED); goto err_unsupported_format; }