|
@@ -78,10 +78,54 @@ typedef struct BlitPipelineCacheEntry
|
|
|
#define SDL_GPU_SWAPCHAINCOMPOSITION_MAX_ENUM_VALUE (SDL_GPU_SWAPCHAINCOMPOSITION_HDR10_ST2048 + 1)
|
|
|
#define SDL_GPU_PRESENTMODE_MAX_ENUM_VALUE (SDL_GPU_PRESENTMODE_MAILBOX + 1)
|
|
|
|
|
|
-static inline Sint32 Texture_GetBlockSize(
|
|
|
+static inline Sint32 Texture_GetBlockWidth(
|
|
|
SDL_GPUTextureFormat format)
|
|
|
{
|
|
|
switch (format) {
|
|
|
+ case SDL_GPU_TEXTUREFORMAT_ASTC_12x10_UNORM:
|
|
|
+ case SDL_GPU_TEXTUREFORMAT_ASTC_12x12_UNORM:
|
|
|
+ case SDL_GPU_TEXTUREFORMAT_ASTC_12x10_UNORM_SRGB:
|
|
|
+ case SDL_GPU_TEXTUREFORMAT_ASTC_12x12_UNORM_SRGB:
|
|
|
+ case SDL_GPU_TEXTUREFORMAT_ASTC_12x10_FLOAT:
|
|
|
+ case SDL_GPU_TEXTUREFORMAT_ASTC_12x12_FLOAT:
|
|
|
+ return 12;
|
|
|
+ case SDL_GPU_TEXTUREFORMAT_ASTC_10x5_UNORM:
|
|
|
+ case SDL_GPU_TEXTUREFORMAT_ASTC_10x6_UNORM:
|
|
|
+ case SDL_GPU_TEXTUREFORMAT_ASTC_10x8_UNORM:
|
|
|
+ case SDL_GPU_TEXTUREFORMAT_ASTC_10x10_UNORM:
|
|
|
+ case SDL_GPU_TEXTUREFORMAT_ASTC_10x5_UNORM_SRGB:
|
|
|
+ case SDL_GPU_TEXTUREFORMAT_ASTC_10x6_UNORM_SRGB:
|
|
|
+ case SDL_GPU_TEXTUREFORMAT_ASTC_10x8_UNORM_SRGB:
|
|
|
+ case SDL_GPU_TEXTUREFORMAT_ASTC_10x10_UNORM_SRGB:
|
|
|
+ case SDL_GPU_TEXTUREFORMAT_ASTC_10x5_FLOAT:
|
|
|
+ case SDL_GPU_TEXTUREFORMAT_ASTC_10x6_FLOAT:
|
|
|
+ case SDL_GPU_TEXTUREFORMAT_ASTC_10x8_FLOAT:
|
|
|
+ case SDL_GPU_TEXTUREFORMAT_ASTC_10x10_FLOAT:
|
|
|
+ return 10;
|
|
|
+ case SDL_GPU_TEXTUREFORMAT_ASTC_8x5_UNORM:
|
|
|
+ case SDL_GPU_TEXTUREFORMAT_ASTC_8x6_UNORM:
|
|
|
+ case SDL_GPU_TEXTUREFORMAT_ASTC_8x8_UNORM:
|
|
|
+ case SDL_GPU_TEXTUREFORMAT_ASTC_8x5_UNORM_SRGB:
|
|
|
+ case SDL_GPU_TEXTUREFORMAT_ASTC_8x6_UNORM_SRGB:
|
|
|
+ case SDL_GPU_TEXTUREFORMAT_ASTC_8x8_UNORM_SRGB:
|
|
|
+ case SDL_GPU_TEXTUREFORMAT_ASTC_8x5_FLOAT:
|
|
|
+ case SDL_GPU_TEXTUREFORMAT_ASTC_8x6_FLOAT:
|
|
|
+ case SDL_GPU_TEXTUREFORMAT_ASTC_8x8_FLOAT:
|
|
|
+ return 8;
|
|
|
+ case SDL_GPU_TEXTUREFORMAT_ASTC_6x5_UNORM:
|
|
|
+ case SDL_GPU_TEXTUREFORMAT_ASTC_6x6_UNORM:
|
|
|
+ case SDL_GPU_TEXTUREFORMAT_ASTC_6x5_UNORM_SRGB:
|
|
|
+ case SDL_GPU_TEXTUREFORMAT_ASTC_6x6_UNORM_SRGB:
|
|
|
+ case SDL_GPU_TEXTUREFORMAT_ASTC_6x5_FLOAT:
|
|
|
+ case SDL_GPU_TEXTUREFORMAT_ASTC_6x6_FLOAT:
|
|
|
+ return 6;
|
|
|
+ case SDL_GPU_TEXTUREFORMAT_ASTC_5x4_UNORM:
|
|
|
+ case SDL_GPU_TEXTUREFORMAT_ASTC_5x5_UNORM:
|
|
|
+ case SDL_GPU_TEXTUREFORMAT_ASTC_5x4_UNORM_SRGB:
|
|
|
+ case SDL_GPU_TEXTUREFORMAT_ASTC_5x5_UNORM_SRGB:
|
|
|
+ case SDL_GPU_TEXTUREFORMAT_ASTC_5x4_FLOAT:
|
|
|
+ case SDL_GPU_TEXTUREFORMAT_ASTC_5x5_FLOAT:
|
|
|
+ return 5;
|
|
|
case SDL_GPU_TEXTUREFORMAT_BC1_RGBA_UNORM:
|
|
|
case SDL_GPU_TEXTUREFORMAT_BC2_RGBA_UNORM:
|
|
|
case SDL_GPU_TEXTUREFORMAT_BC3_RGBA_UNORM:
|
|
@@ -93,6 +137,118 @@ static inline Sint32 Texture_GetBlockSize(
|
|
|
case SDL_GPU_TEXTUREFORMAT_BC1_RGBA_UNORM_SRGB:
|
|
|
case SDL_GPU_TEXTUREFORMAT_BC3_RGBA_UNORM_SRGB:
|
|
|
case SDL_GPU_TEXTUREFORMAT_BC7_RGBA_UNORM_SRGB:
|
|
|
+ case SDL_GPU_TEXTUREFORMAT_ASTC_4x4_UNORM:
|
|
|
+ case SDL_GPU_TEXTUREFORMAT_ASTC_4x4_UNORM_SRGB:
|
|
|
+ case SDL_GPU_TEXTUREFORMAT_ASTC_4x4_FLOAT:
|
|
|
+ return 4;
|
|
|
+ case SDL_GPU_TEXTUREFORMAT_R8G8B8A8_UNORM:
|
|
|
+ case SDL_GPU_TEXTUREFORMAT_B8G8R8A8_UNORM:
|
|
|
+ case SDL_GPU_TEXTUREFORMAT_B5G6R5_UNORM:
|
|
|
+ case SDL_GPU_TEXTUREFORMAT_B5G5R5A1_UNORM:
|
|
|
+ case SDL_GPU_TEXTUREFORMAT_B4G4R4A4_UNORM:
|
|
|
+ case SDL_GPU_TEXTUREFORMAT_R10G10B10A2_UNORM:
|
|
|
+ case SDL_GPU_TEXTUREFORMAT_R8G8_UNORM:
|
|
|
+ case SDL_GPU_TEXTUREFORMAT_R16G16_UNORM:
|
|
|
+ case SDL_GPU_TEXTUREFORMAT_R16G16B16A16_UNORM:
|
|
|
+ case SDL_GPU_TEXTUREFORMAT_R8_UNORM:
|
|
|
+ case SDL_GPU_TEXTUREFORMAT_R16_UNORM:
|
|
|
+ case SDL_GPU_TEXTUREFORMAT_A8_UNORM:
|
|
|
+ case SDL_GPU_TEXTUREFORMAT_R8_SNORM:
|
|
|
+ case SDL_GPU_TEXTUREFORMAT_R8G8_SNORM:
|
|
|
+ case SDL_GPU_TEXTUREFORMAT_R8G8B8A8_SNORM:
|
|
|
+ case SDL_GPU_TEXTUREFORMAT_R16_SNORM:
|
|
|
+ case SDL_GPU_TEXTUREFORMAT_R16G16_SNORM:
|
|
|
+ case SDL_GPU_TEXTUREFORMAT_R16G16B16A16_SNORM:
|
|
|
+ case SDL_GPU_TEXTUREFORMAT_R16_FLOAT:
|
|
|
+ case SDL_GPU_TEXTUREFORMAT_R16G16_FLOAT:
|
|
|
+ case SDL_GPU_TEXTUREFORMAT_R16G16B16A16_FLOAT:
|
|
|
+ case SDL_GPU_TEXTUREFORMAT_R32_FLOAT:
|
|
|
+ case SDL_GPU_TEXTUREFORMAT_R32G32_FLOAT:
|
|
|
+ case SDL_GPU_TEXTUREFORMAT_R32G32B32A32_FLOAT:
|
|
|
+ case SDL_GPU_TEXTUREFORMAT_R11G11B10_UFLOAT:
|
|
|
+ case SDL_GPU_TEXTUREFORMAT_R8_UINT:
|
|
|
+ case SDL_GPU_TEXTUREFORMAT_R8G8_UINT:
|
|
|
+ case SDL_GPU_TEXTUREFORMAT_R8G8B8A8_UINT:
|
|
|
+ case SDL_GPU_TEXTUREFORMAT_R16_UINT:
|
|
|
+ case SDL_GPU_TEXTUREFORMAT_R16G16_UINT:
|
|
|
+ case SDL_GPU_TEXTUREFORMAT_R16G16B16A16_UINT:
|
|
|
+ case SDL_GPU_TEXTUREFORMAT_R8_INT:
|
|
|
+ case SDL_GPU_TEXTUREFORMAT_R8G8_INT:
|
|
|
+ case SDL_GPU_TEXTUREFORMAT_R8G8B8A8_INT:
|
|
|
+ case SDL_GPU_TEXTUREFORMAT_R16_INT:
|
|
|
+ case SDL_GPU_TEXTUREFORMAT_R16G16_INT:
|
|
|
+ case SDL_GPU_TEXTUREFORMAT_R16G16B16A16_INT:
|
|
|
+ case SDL_GPU_TEXTUREFORMAT_R8G8B8A8_UNORM_SRGB:
|
|
|
+ case SDL_GPU_TEXTUREFORMAT_B8G8R8A8_UNORM_SRGB:
|
|
|
+ return 1;
|
|
|
+ default:
|
|
|
+ SDL_assert_release(!"Unrecognized TextureFormat!");
|
|
|
+ return 0;
|
|
|
+ }
|
|
|
+}
|
|
|
+
|
|
|
+static inline Sint32 Texture_GetBlockHeight(
|
|
|
+ SDL_GPUTextureFormat format)
|
|
|
+{
|
|
|
+ switch (format) {
|
|
|
+ case SDL_GPU_TEXTUREFORMAT_ASTC_12x12_UNORM:
|
|
|
+ case SDL_GPU_TEXTUREFORMAT_ASTC_12x12_UNORM_SRGB:
|
|
|
+ case SDL_GPU_TEXTUREFORMAT_ASTC_12x12_FLOAT:
|
|
|
+ return 12;
|
|
|
+ case SDL_GPU_TEXTUREFORMAT_ASTC_12x10_UNORM:
|
|
|
+ case SDL_GPU_TEXTUREFORMAT_ASTC_12x10_UNORM_SRGB:
|
|
|
+ case SDL_GPU_TEXTUREFORMAT_ASTC_12x10_FLOAT:
|
|
|
+ case SDL_GPU_TEXTUREFORMAT_ASTC_10x10_UNORM:
|
|
|
+ case SDL_GPU_TEXTUREFORMAT_ASTC_10x10_UNORM_SRGB:
|
|
|
+ case SDL_GPU_TEXTUREFORMAT_ASTC_10x10_FLOAT:
|
|
|
+ return 10;
|
|
|
+ case SDL_GPU_TEXTUREFORMAT_ASTC_10x8_UNORM:
|
|
|
+ case SDL_GPU_TEXTUREFORMAT_ASTC_10x8_UNORM_SRGB:
|
|
|
+ case SDL_GPU_TEXTUREFORMAT_ASTC_10x8_FLOAT:
|
|
|
+ case SDL_GPU_TEXTUREFORMAT_ASTC_8x8_UNORM:
|
|
|
+ case SDL_GPU_TEXTUREFORMAT_ASTC_8x8_UNORM_SRGB:
|
|
|
+ case SDL_GPU_TEXTUREFORMAT_ASTC_8x8_FLOAT:
|
|
|
+ return 8;
|
|
|
+ case SDL_GPU_TEXTUREFORMAT_ASTC_10x6_UNORM:
|
|
|
+ case SDL_GPU_TEXTUREFORMAT_ASTC_10x6_UNORM_SRGB:
|
|
|
+ case SDL_GPU_TEXTUREFORMAT_ASTC_10x6_FLOAT:
|
|
|
+ case SDL_GPU_TEXTUREFORMAT_ASTC_8x6_UNORM:
|
|
|
+ case SDL_GPU_TEXTUREFORMAT_ASTC_8x6_UNORM_SRGB:
|
|
|
+ case SDL_GPU_TEXTUREFORMAT_ASTC_8x6_FLOAT:
|
|
|
+ case SDL_GPU_TEXTUREFORMAT_ASTC_6x6_UNORM:
|
|
|
+ case SDL_GPU_TEXTUREFORMAT_ASTC_6x6_UNORM_SRGB:
|
|
|
+ case SDL_GPU_TEXTUREFORMAT_ASTC_6x6_FLOAT:
|
|
|
+ return 6;
|
|
|
+ case SDL_GPU_TEXTUREFORMAT_ASTC_10x5_UNORM:
|
|
|
+ case SDL_GPU_TEXTUREFORMAT_ASTC_10x5_UNORM_SRGB:
|
|
|
+ case SDL_GPU_TEXTUREFORMAT_ASTC_10x5_FLOAT:
|
|
|
+ case SDL_GPU_TEXTUREFORMAT_ASTC_8x5_UNORM:
|
|
|
+ case SDL_GPU_TEXTUREFORMAT_ASTC_8x5_UNORM_SRGB:
|
|
|
+ case SDL_GPU_TEXTUREFORMAT_ASTC_8x5_FLOAT:
|
|
|
+ case SDL_GPU_TEXTUREFORMAT_ASTC_6x5_UNORM:
|
|
|
+ case SDL_GPU_TEXTUREFORMAT_ASTC_6x5_UNORM_SRGB:
|
|
|
+ case SDL_GPU_TEXTUREFORMAT_ASTC_6x5_FLOAT:
|
|
|
+ case SDL_GPU_TEXTUREFORMAT_ASTC_5x5_UNORM:
|
|
|
+ case SDL_GPU_TEXTUREFORMAT_ASTC_5x5_UNORM_SRGB:
|
|
|
+ case SDL_GPU_TEXTUREFORMAT_ASTC_5x5_FLOAT:
|
|
|
+ return 5;
|
|
|
+ case SDL_GPU_TEXTUREFORMAT_BC1_RGBA_UNORM:
|
|
|
+ case SDL_GPU_TEXTUREFORMAT_BC2_RGBA_UNORM:
|
|
|
+ case SDL_GPU_TEXTUREFORMAT_BC3_RGBA_UNORM:
|
|
|
+ case SDL_GPU_TEXTUREFORMAT_BC4_R_UNORM:
|
|
|
+ case SDL_GPU_TEXTUREFORMAT_BC5_RG_UNORM:
|
|
|
+ case SDL_GPU_TEXTUREFORMAT_BC7_RGBA_UNORM:
|
|
|
+ case SDL_GPU_TEXTUREFORMAT_BC6H_RGB_FLOAT:
|
|
|
+ case SDL_GPU_TEXTUREFORMAT_BC6H_RGB_UFLOAT:
|
|
|
+ case SDL_GPU_TEXTUREFORMAT_BC1_RGBA_UNORM_SRGB:
|
|
|
+ case SDL_GPU_TEXTUREFORMAT_BC3_RGBA_UNORM_SRGB:
|
|
|
+ case SDL_GPU_TEXTUREFORMAT_BC7_RGBA_UNORM_SRGB:
|
|
|
+ case SDL_GPU_TEXTUREFORMAT_ASTC_5x4_UNORM:
|
|
|
+ case SDL_GPU_TEXTUREFORMAT_ASTC_5x4_UNORM_SRGB:
|
|
|
+ case SDL_GPU_TEXTUREFORMAT_ASTC_5x4_FLOAT:
|
|
|
+ case SDL_GPU_TEXTUREFORMAT_ASTC_4x4_UNORM:
|
|
|
+ case SDL_GPU_TEXTUREFORMAT_ASTC_4x4_UNORM_SRGB:
|
|
|
+ case SDL_GPU_TEXTUREFORMAT_ASTC_4x4_FLOAT:
|
|
|
return 4;
|
|
|
case SDL_GPU_TEXTUREFORMAT_R8G8B8A8_UNORM:
|
|
|
case SDL_GPU_TEXTUREFORMAT_B8G8R8A8_UNORM:
|
|
@@ -201,10 +357,8 @@ static inline Uint32 BytesPerRow(
|
|
|
Sint32 width,
|
|
|
SDL_GPUTextureFormat format)
|
|
|
{
|
|
|
- Uint32 blocksPerRow = width;
|
|
|
- Uint32 pixelRowsPerBlock = Texture_GetBlockSize(format);
|
|
|
-
|
|
|
- blocksPerRow = (width + pixelRowsPerBlock - 1) / pixelRowsPerBlock;
|
|
|
+ Uint32 blockWidth = Texture_GetBlockWidth(format);
|
|
|
+ Uint32 blocksPerRow = (width + blockWidth - 1) / blockWidth;
|
|
|
return blocksPerRow * SDL_GPUTextureFormatTexelBlockSize(format);
|
|
|
}
|
|
|
|
|
@@ -213,13 +367,10 @@ static inline Sint32 BytesPerImage(
|
|
|
Uint32 height,
|
|
|
SDL_GPUTextureFormat format)
|
|
|
{
|
|
|
- Uint32 blocksPerRow = width;
|
|
|
- Uint32 blocksPerColumn = height;
|
|
|
- Uint32 pixelRowsPerBlock = Texture_GetBlockSize(format);
|
|
|
- Uint32 pixelColumnsPerBlock = pixelRowsPerBlock;
|
|
|
-
|
|
|
- blocksPerRow = (width + pixelRowsPerBlock - 1) / pixelRowsPerBlock;
|
|
|
- blocksPerColumn = (height + pixelColumnsPerBlock - 1) / pixelColumnsPerBlock;
|
|
|
+ Uint32 blockWidth = Texture_GetBlockWidth(format);
|
|
|
+ Uint32 blockHeight = Texture_GetBlockHeight(format);
|
|
|
+ Uint32 blocksPerRow = (width + blockWidth - 1) / blockWidth;
|
|
|
+ Uint32 blocksPerColumn = (height + blockHeight - 1) / blockHeight;
|
|
|
return blocksPerRow * blocksPerColumn * SDL_GPUTextureFormatTexelBlockSize(format);
|
|
|
}
|
|
|
|