mirror of
https://gitlab.freedesktop.org/mesa/mesa.git
synced 2025-12-20 18:10:11 +01:00
pvr: split out pbe-details from main format-table
The PBE details here aren't relevant for all GPUs, so let's split them out to a separate table here. Acked-by: Ashish Chauhan <Ashish.Chauhan@imgtec.com> Acked-by: Frank Binns <frank.binns@imgtec.com> Part-of: <https://gitlab.freedesktop.org/mesa/mesa/-/merge_requests/38832>
This commit is contained in:
parent
c1da96affe
commit
283c6bb19e
1 changed files with 196 additions and 175 deletions
|
|
@ -48,14 +48,12 @@
|
||||||
#include "vk_log.h"
|
#include "vk_log.h"
|
||||||
#include "vk_util.h"
|
#include "vk_util.h"
|
||||||
|
|
||||||
#define FORMAT(vk, tex_fmt, pack_mode, accum_format) \
|
#define FORMAT(vk, tex_fmt) \
|
||||||
[VK_FORMAT_##vk] = { \
|
[VK_FORMAT_##vk] = { \
|
||||||
.tex_format = ROGUE_TEXSTATE_FORMAT_##tex_fmt, \
|
.tex_format = ROGUE_TEXSTATE_FORMAT_##tex_fmt, \
|
||||||
.depth_tex_format = ROGUE_TEXSTATE_FORMAT_INVALID, \
|
.depth_tex_format = ROGUE_TEXSTATE_FORMAT_INVALID, \
|
||||||
.stencil_tex_format = ROGUE_TEXSTATE_FORMAT_INVALID, \
|
.stencil_tex_format = ROGUE_TEXSTATE_FORMAT_INVALID, \
|
||||||
.pbe_packmode = ROGUE_PBESTATE_PACKMODE_##pack_mode, \
|
.supported = true, \
|
||||||
.pbe_accum_format = PVR_PBE_ACCUM_FORMAT_##accum_format, \
|
|
||||||
.supported = true, \
|
|
||||||
}
|
}
|
||||||
|
|
||||||
#define FORMAT_COMPRESSED(vk, tex_fmt) \
|
#define FORMAT_COMPRESSED(vk, tex_fmt) \
|
||||||
|
|
@ -63,190 +61,104 @@
|
||||||
.tex_format = ROGUE_TEXSTATE_FORMAT_COMPRESSED_##tex_fmt, \
|
.tex_format = ROGUE_TEXSTATE_FORMAT_COMPRESSED_##tex_fmt, \
|
||||||
.depth_tex_format = ROGUE_TEXSTATE_FORMAT_INVALID, \
|
.depth_tex_format = ROGUE_TEXSTATE_FORMAT_INVALID, \
|
||||||
.stencil_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, \
|
.supported = true, \
|
||||||
}
|
}
|
||||||
|
|
||||||
#define FORMAT_DEPTH_STENCIL(vk, combined_fmt, d_fmt, s_fmt) \
|
#define FORMAT_DEPTH_STENCIL(vk, combined_fmt, d_fmt, s_fmt) \
|
||||||
[VK_FORMAT_##vk] = { \
|
[VK_FORMAT_##vk] = { \
|
||||||
.tex_format = ROGUE_TEXSTATE_FORMAT_##combined_fmt, \
|
.tex_format = ROGUE_TEXSTATE_FORMAT_##combined_fmt, \
|
||||||
.depth_tex_format = ROGUE_TEXSTATE_FORMAT_##d_fmt, \
|
.depth_tex_format = ROGUE_TEXSTATE_FORMAT_##d_fmt, \
|
||||||
.stencil_tex_format = ROGUE_TEXSTATE_FORMAT_##s_fmt, \
|
.stencil_tex_format = ROGUE_TEXSTATE_FORMAT_##s_fmt, \
|
||||||
.pbe_packmode = ROGUE_PBESTATE_PACKMODE_##combined_fmt, \
|
.supported = true, \
|
||||||
.pbe_accum_format = PVR_PBE_ACCUM_FORMAT_INVALID, \
|
|
||||||
.supported = true, \
|
|
||||||
}
|
}
|
||||||
|
|
||||||
struct pvr_format {
|
struct pvr_format {
|
||||||
uint32_t tex_format;
|
uint32_t tex_format;
|
||||||
uint32_t depth_tex_format;
|
uint32_t depth_tex_format;
|
||||||
uint32_t stencil_tex_format;
|
uint32_t stencil_tex_format;
|
||||||
uint32_t pbe_packmode;
|
|
||||||
enum pvr_pbe_accum_format pbe_accum_format;
|
|
||||||
bool supported;
|
bool supported;
|
||||||
};
|
};
|
||||||
|
|
||||||
static const struct pvr_format pvr_format_table[] = {
|
static const struct pvr_format pvr_format_table[] = {
|
||||||
/* VK_FORMAT_B4G4R4A4_UNORM_PACK16 = 3. */
|
FORMAT(B4G4R4A4_UNORM_PACK16, A4R4G4B4),
|
||||||
FORMAT(B4G4R4A4_UNORM_PACK16, A4R4G4B4, A4R4G4B4, U8),
|
FORMAT(R5G6B5_UNORM_PACK16, R5G6B5),
|
||||||
/* VK_FORMAT_R5G6B5_UNORM_PACK16 = 4. */
|
FORMAT(A1R5G5B5_UNORM_PACK16, A1R5G5B5),
|
||||||
FORMAT(R5G6B5_UNORM_PACK16, R5G6B5, R5G6B5, U8),
|
FORMAT(R8_UNORM, U8),
|
||||||
/* VK_FORMAT_A1R5G5B5_UNORM_PACK16 = 8. */
|
FORMAT(R8_SNORM, S8),
|
||||||
FORMAT(A1R5G5B5_UNORM_PACK16, A1R5G5B5, A1R5G5B5, U8),
|
FORMAT(R8_UINT, U8),
|
||||||
/* VK_FORMAT_R8_UNORM = 9. */
|
FORMAT(R8_SINT, S8),
|
||||||
FORMAT(R8_UNORM, U8, U8, U8),
|
FORMAT(R8G8_UNORM, U8U8),
|
||||||
/* VK_FORMAT_R8_SNORM = 10. */
|
FORMAT(R8G8_SNORM, S8S8),
|
||||||
FORMAT(R8_SNORM, S8, S8, S8),
|
FORMAT(R8G8_SSCALED, S8S8),
|
||||||
/* VK_FORMAT_R8_UINT = 13. */
|
FORMAT(R8G8_UINT, U8U8),
|
||||||
FORMAT(R8_UINT, U8, U8, UINT8),
|
FORMAT(R8G8_SINT, S8S8),
|
||||||
/* VK_FORMAT_R8_SINT = 14. */
|
FORMAT(R8G8B8_UINT, U8U8U8),
|
||||||
FORMAT(R8_SINT, S8, S8, SINT8),
|
FORMAT(R8G8B8A8_UNORM, U8U8U8U8),
|
||||||
/* VK_FORMAT_R8G8_UNORM = 16. */
|
FORMAT(R8G8B8A8_SNORM, S8S8S8S8),
|
||||||
FORMAT(R8G8_UNORM, U8U8, U8U8, U8),
|
FORMAT(R8G8B8A8_UINT, U8U8U8U8),
|
||||||
/* VK_FORMAT_R8G8_SNORM = 17. */
|
FORMAT(R8G8B8A8_SINT, S8S8S8S8),
|
||||||
FORMAT(R8G8_SNORM, S8S8, S8S8, S8),
|
FORMAT(R8G8B8A8_SRGB, U8U8U8U8),
|
||||||
/* VK_FORMAT_R8G8_SSCALED = 19. */
|
FORMAT(B8G8R8A8_UNORM, U8U8U8U8),
|
||||||
FORMAT(R8G8_SSCALED, S8S8, S8S8, INVALID),
|
FORMAT(B8G8R8A8_SRGB, U8U8U8U8),
|
||||||
/* VK_FORMAT_R8G8_UINT = 20. */
|
FORMAT(A8B8G8R8_UNORM_PACK32, U8U8U8U8),
|
||||||
FORMAT(R8G8_UINT, U8U8, U8U8, UINT8),
|
FORMAT(A8B8G8R8_SNORM_PACK32, S8S8S8S8),
|
||||||
/* VK_FORMAT_R8G8_SINT = 21. */
|
FORMAT(A8B8G8R8_UINT_PACK32, U8U8U8U8),
|
||||||
FORMAT(R8G8_SINT, S8S8, S8S8, SINT8),
|
FORMAT(A8B8G8R8_SINT_PACK32, S8S8S8S8),
|
||||||
/* VK_FORMAT_R8G8B8_UINT = 27. */
|
FORMAT(A8B8G8R8_SRGB_PACK32, U8U8U8U8),
|
||||||
FORMAT(R8G8B8_UINT, U8U8U8, U8U8U8, UINT8),
|
FORMAT(A2R10G10B10_USCALED_PACK32, INVALID),
|
||||||
/* VK_FORMAT_R8G8B8A8_UNORM = 37. */
|
FORMAT(A2R10G10B10_SSCALED_PACK32, INVALID),
|
||||||
FORMAT(R8G8B8A8_UNORM, U8U8U8U8, U8U8U8U8, U8),
|
FORMAT(A2B10G10R10_UNORM_PACK32, A2R10B10G10),
|
||||||
/* VK_FORMAT_R8G8B8A8_SNORM = 38. */
|
FORMAT(A2B10G10R10_SNORM_PACK32, A2R10B10G10),
|
||||||
FORMAT(R8G8B8A8_SNORM, S8S8S8S8, S8S8S8S8, S8),
|
FORMAT(A2B10G10R10_USCALED_PACK32, INVALID),
|
||||||
/* VK_FORMAT_R8G8B8A8_UINT = 41. */
|
FORMAT(A2B10G10R10_SSCALED_PACK32, INVALID),
|
||||||
FORMAT(R8G8B8A8_UINT, U8U8U8U8, U8U8U8U8, UINT8),
|
FORMAT(A2B10G10R10_UINT_PACK32, A2R10B10G10),
|
||||||
/* VK_FORMAT_R8G8B8A8_SINT = 42. */
|
FORMAT(R16_UNORM, U16),
|
||||||
FORMAT(R8G8B8A8_SINT, S8S8S8S8, S8S8S8S8, SINT8),
|
FORMAT(R16_SNORM, S16),
|
||||||
/* VK_FORMAT_R8G8B8A8_SRGB = 43. */
|
FORMAT(R16_UINT, U16),
|
||||||
FORMAT(R8G8B8A8_SRGB, U8U8U8U8, U8U8U8U8, F16),
|
FORMAT(R16_SINT, S16),
|
||||||
/* VK_FORMAT_B8G8R8A8_UNORM = 44. */
|
FORMAT(R16_SFLOAT, F16),
|
||||||
FORMAT(B8G8R8A8_UNORM, U8U8U8U8, U8U8U8U8, U8),
|
FORMAT(R16G16_UNORM, U16U16),
|
||||||
/* VK_FORMAT_B8G8R8A8_SRGB = 50. */
|
FORMAT(R16G16_SNORM, S16S16),
|
||||||
FORMAT(B8G8R8A8_SRGB, U8U8U8U8, U8U8U8U8, F16),
|
FORMAT(R16G16_UINT, U16U16),
|
||||||
/* VK_FORMAT_A8B8G8R8_UNORM_PACK32 = 51. */
|
FORMAT(R16G16_SINT, S16S16),
|
||||||
FORMAT(A8B8G8R8_UNORM_PACK32, U8U8U8U8, U8U8U8U8, U8),
|
FORMAT(R16G16_SFLOAT, F16F16),
|
||||||
/* VK_FORMAT_A8B8G8R8_SNORM_PACK32 = 52. */
|
FORMAT(R16G16B16_SNORM, S16S16S16),
|
||||||
FORMAT(A8B8G8R8_SNORM_PACK32, S8S8S8S8, S8S8S8S8, S8),
|
FORMAT(R16G16B16_UINT, U16U16U16),
|
||||||
/* VK_FORMAT_A8B8G8R8_UINT_PACK32 = 55. */
|
FORMAT(R16G16B16_SINT, S16S16S16),
|
||||||
FORMAT(A8B8G8R8_UINT_PACK32, U8U8U8U8, U8U8U8U8, UINT8),
|
FORMAT(R16G16B16A16_UNORM, U16U16U16U16),
|
||||||
/* VK_FORMAT_A8B8G8R8_SINT_PACK32 = 56. */
|
FORMAT(R16G16B16A16_SNORM, S16S16S16S16),
|
||||||
FORMAT(A8B8G8R8_SINT_PACK32, S8S8S8S8, S8S8S8S8, SINT8),
|
FORMAT(R16G16B16A16_UINT, U16U16U16U16),
|
||||||
/* VK_FORMAT_A8B8G8R8_SRGB_PACK32 = 57. */
|
FORMAT(R16G16B16A16_SINT, S16S16S16S16),
|
||||||
FORMAT(A8B8G8R8_SRGB_PACK32, U8U8U8U8, U8U8U8U8, F16),
|
FORMAT(R16G16B16A16_SFLOAT, F16F16F16F16),
|
||||||
/* VK_FORMAT_A2R10G10B10_USCALED_PACK32 = 60. */
|
FORMAT(R32_UINT, U32),
|
||||||
FORMAT(A2R10G10B10_USCALED_PACK32, INVALID, INVALID, INVALID),
|
FORMAT(R32_SINT, S32),
|
||||||
/* VK_FORMAT_A2R10G10B10_SSCALED_PACK32 = 61. */
|
FORMAT(R32_SFLOAT, F32),
|
||||||
FORMAT(A2R10G10B10_SSCALED_PACK32, INVALID, INVALID, INVALID),
|
FORMAT(R32G32_UINT, U32U32),
|
||||||
/* VK_FORMAT_A2B10G10R10_UNORM_PACK32 = 64. */
|
FORMAT(R32G32_SINT, S32S32),
|
||||||
FORMAT(A2B10G10R10_UNORM_PACK32, A2R10B10G10, A2R10B10G10, F16),
|
FORMAT(R32G32_SFLOAT, F32F32),
|
||||||
/* VK_FORMAT_A2B10G10R10_SNORM_PACK32 = 65. */
|
FORMAT(R32G32B32_UINT, U32U32U32),
|
||||||
FORMAT(A2B10G10R10_SNORM_PACK32, A2R10B10G10, A2R10B10G10, F16),
|
FORMAT(R32G32B32_SINT, S32S32S32),
|
||||||
/* VK_FORMAT_A2B10G10R10_USCALED_PACK32 = 66. */
|
FORMAT(R32G32B32_SFLOAT, F32F32F32),
|
||||||
FORMAT(A2B10G10R10_USCALED_PACK32, INVALID, INVALID, INVALID),
|
FORMAT(R32G32B32A32_UINT, U32U32U32U32),
|
||||||
/* VK_FORMAT_A2B10G10R10_SSCALED_PACK32 = 67. */
|
FORMAT(R32G32B32A32_SINT, S32S32S32S32),
|
||||||
FORMAT(A2B10G10R10_SSCALED_PACK32, INVALID, INVALID, INVALID),
|
FORMAT(R32G32B32A32_SFLOAT, F32F32F32F32),
|
||||||
/* VK_FORMAT_A2B10G10R10_UINT_PACK32 = 68. */
|
FORMAT(B10G11R11_UFLOAT_PACK32, F10F11F11),
|
||||||
FORMAT(A2B10G10R10_UINT_PACK32, A2R10B10G10, U32, U1010102),
|
FORMAT(E5B9G9R9_UFLOAT_PACK32, SE9995),
|
||||||
/* 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_DEPTH_STENCIL(D16_UNORM, U16, U16, INVALID),
|
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),
|
FORMAT_DEPTH_STENCIL(X8_D24_UNORM_PACK32, X8U24, X8U24, INVALID),
|
||||||
/* VK_FORMAT_D32_SFLOAT = 126. */
|
|
||||||
FORMAT_DEPTH_STENCIL(D32_SFLOAT, F32, F32, INVALID),
|
FORMAT_DEPTH_STENCIL(D32_SFLOAT, F32, F32, INVALID),
|
||||||
/* VK_FORMAT_S8_UINT = 127. */
|
|
||||||
FORMAT_DEPTH_STENCIL(S8_UINT, U8, INVALID, U8),
|
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),
|
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),
|
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),
|
FORMAT_COMPRESSED(ETC2_R8G8B8_UNORM_BLOCK, ETC2_RGB),
|
||||||
/* VK_FORMAT_ETC2_R8G8B8_SRGB_BLOCK = 148. */
|
|
||||||
FORMAT_COMPRESSED(ETC2_R8G8B8_SRGB_BLOCK, ETC2_RGB),
|
FORMAT_COMPRESSED(ETC2_R8G8B8_SRGB_BLOCK, ETC2_RGB),
|
||||||
/* VK_FORMAT_ETC2_R8G8B8A1_UNORM_BLOCK = 149. */
|
|
||||||
FORMAT_COMPRESSED(ETC2_R8G8B8A1_UNORM_BLOCK, ETC2_PUNCHTHROUGHA),
|
FORMAT_COMPRESSED(ETC2_R8G8B8A1_UNORM_BLOCK, ETC2_PUNCHTHROUGHA),
|
||||||
/* VK_FORMAT_ETC2_R8G8B8A1_SRGB_BLOCK = 150. */
|
|
||||||
FORMAT_COMPRESSED(ETC2_R8G8B8A1_SRGB_BLOCK, ETC2_PUNCHTHROUGHA),
|
FORMAT_COMPRESSED(ETC2_R8G8B8A1_SRGB_BLOCK, ETC2_PUNCHTHROUGHA),
|
||||||
/* VK_FORMAT_ETC2_R8G8B8A8_UNORM_BLOCK = 150. */
|
|
||||||
FORMAT_COMPRESSED(ETC2_R8G8B8A8_UNORM_BLOCK, ETC2A_RGBA),
|
FORMAT_COMPRESSED(ETC2_R8G8B8A8_UNORM_BLOCK, ETC2A_RGBA),
|
||||||
/* VK_FORMAT_ETC2_R8G8B8A8_SRGB_BLOCK = 152. */
|
|
||||||
FORMAT_COMPRESSED(ETC2_R8G8B8A8_SRGB_BLOCK, ETC2A_RGBA),
|
FORMAT_COMPRESSED(ETC2_R8G8B8A8_SRGB_BLOCK, ETC2A_RGBA),
|
||||||
/* VK_FORMAT_EAC_R11_UNORM_BLOCK = 153. */
|
|
||||||
FORMAT_COMPRESSED(EAC_R11_UNORM_BLOCK, EAC_R11_UNSIGNED),
|
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),
|
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),
|
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),
|
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_DEPTH_STENCIL
|
||||||
#undef FORMAT_COMPRESSED
|
#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)
|
static inline const struct pvr_format *pvr_get_format(VkFormat vk_format)
|
||||||
{
|
{
|
||||||
if (vk_format < ARRAY_SIZE(pvr_format_table) &&
|
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;
|
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)
|
uint32_t pvr_get_tex_format(VkFormat vk_format)
|
||||||
{
|
{
|
||||||
const struct pvr_format *pvr_format = pvr_get_format(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)
|
uint32_t pvr_get_pbe_packmode(VkFormat vk_format)
|
||||||
{
|
{
|
||||||
const struct pvr_format *pvr_format = pvr_get_format(vk_format);
|
return pvr_get_pbe_format(vk_format)->packmode;
|
||||||
if (pvr_format)
|
|
||||||
return pvr_format->pbe_packmode;
|
|
||||||
|
|
||||||
return ROGUE_PBESTATE_PACKMODE_INVALID;
|
|
||||||
}
|
}
|
||||||
|
|
||||||
uint32_t pvr_get_pbe_accum_format(VkFormat vk_format)
|
uint32_t pvr_get_pbe_accum_format(VkFormat vk_format)
|
||||||
{
|
{
|
||||||
const struct pvr_format *pvr_format = pvr_get_format(vk_format);
|
return pvr_get_pbe_format(vk_format)->accum_format;
|
||||||
if (pvr_format)
|
|
||||||
return pvr_format->pbe_accum_format;
|
|
||||||
|
|
||||||
return PVR_PBE_ACCUM_FORMAT_INVALID;
|
|
||||||
}
|
}
|
||||||
|
|
||||||
uint32_t pvr_get_pbe_accum_format_size_in_bytes(VkFormat vk_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 &&
|
if ((info->flags & VK_IMAGE_CREATE_EXTENDED_USAGE_BIT) == 0 &&
|
||||||
usage & (VK_IMAGE_USAGE_INPUT_ATTACHMENT_BIT |
|
usage & (VK_IMAGE_USAGE_INPUT_ATTACHMENT_BIT |
|
||||||
VK_IMAGE_USAGE_COLOR_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);
|
result = vk_error(pdevice, VK_ERROR_FORMAT_NOT_SUPPORTED);
|
||||||
goto err_unsupported_format;
|
goto err_unsupported_format;
|
||||||
}
|
}
|
||||||
|
|
|
||||||
Loading…
Add table
Reference in a new issue