Browse Source

[GPU] Added ASTC texture format support (#11116)

Delta 6 months ago
parent
commit
8e6ead2f7b

+ 46 - 1
include/SDL3/SDL_gpu.h

@@ -588,7 +588,52 @@ typedef enum SDL_GPUTextureFormat
     SDL_GPU_TEXTUREFORMAT_D24_UNORM,
     SDL_GPU_TEXTUREFORMAT_D32_FLOAT,
     SDL_GPU_TEXTUREFORMAT_D24_UNORM_S8_UINT,
-    SDL_GPU_TEXTUREFORMAT_D32_FLOAT_S8_UINT
+    SDL_GPU_TEXTUREFORMAT_D32_FLOAT_S8_UINT,
+    /* Compressed ASTC Normalized Float Color Formats*/
+    SDL_GPU_TEXTUREFORMAT_ASTC_4x4_UNORM,
+    SDL_GPU_TEXTUREFORMAT_ASTC_5x4_UNORM,
+    SDL_GPU_TEXTUREFORMAT_ASTC_5x5_UNORM,
+    SDL_GPU_TEXTUREFORMAT_ASTC_6x5_UNORM,
+    SDL_GPU_TEXTUREFORMAT_ASTC_6x6_UNORM,
+    SDL_GPU_TEXTUREFORMAT_ASTC_8x5_UNORM,
+    SDL_GPU_TEXTUREFORMAT_ASTC_8x6_UNORM,
+    SDL_GPU_TEXTUREFORMAT_ASTC_8x8_UNORM,
+    SDL_GPU_TEXTUREFORMAT_ASTC_10x5_UNORM,
+    SDL_GPU_TEXTUREFORMAT_ASTC_10x6_UNORM,
+    SDL_GPU_TEXTUREFORMAT_ASTC_10x8_UNORM,
+    SDL_GPU_TEXTUREFORMAT_ASTC_10x10_UNORM,
+    SDL_GPU_TEXTUREFORMAT_ASTC_12x10_UNORM,
+    SDL_GPU_TEXTUREFORMAT_ASTC_12x12_UNORM,
+    /* Compressed SRGB ASTC Normalized Float Color Formats*/
+    SDL_GPU_TEXTUREFORMAT_ASTC_4x4_UNORM_SRGB,
+    SDL_GPU_TEXTUREFORMAT_ASTC_5x4_UNORM_SRGB,
+    SDL_GPU_TEXTUREFORMAT_ASTC_5x5_UNORM_SRGB,
+    SDL_GPU_TEXTUREFORMAT_ASTC_6x5_UNORM_SRGB,
+    SDL_GPU_TEXTUREFORMAT_ASTC_6x6_UNORM_SRGB,
+    SDL_GPU_TEXTUREFORMAT_ASTC_8x5_UNORM_SRGB,
+    SDL_GPU_TEXTUREFORMAT_ASTC_8x6_UNORM_SRGB,
+    SDL_GPU_TEXTUREFORMAT_ASTC_8x8_UNORM_SRGB,
+    SDL_GPU_TEXTUREFORMAT_ASTC_10x5_UNORM_SRGB,
+    SDL_GPU_TEXTUREFORMAT_ASTC_10x6_UNORM_SRGB,
+    SDL_GPU_TEXTUREFORMAT_ASTC_10x8_UNORM_SRGB,
+    SDL_GPU_TEXTUREFORMAT_ASTC_10x10_UNORM_SRGB,
+    SDL_GPU_TEXTUREFORMAT_ASTC_12x10_UNORM_SRGB,
+    SDL_GPU_TEXTUREFORMAT_ASTC_12x12_UNORM_SRGB,
+    /* Compressed ASTC Signed Float Color Formats*/
+    SDL_GPU_TEXTUREFORMAT_ASTC_4x4_FLOAT,
+    SDL_GPU_TEXTUREFORMAT_ASTC_5x4_FLOAT,
+    SDL_GPU_TEXTUREFORMAT_ASTC_5x5_FLOAT,
+    SDL_GPU_TEXTUREFORMAT_ASTC_6x5_FLOAT,
+    SDL_GPU_TEXTUREFORMAT_ASTC_6x6_FLOAT,
+    SDL_GPU_TEXTUREFORMAT_ASTC_8x5_FLOAT,
+    SDL_GPU_TEXTUREFORMAT_ASTC_8x6_FLOAT,
+    SDL_GPU_TEXTUREFORMAT_ASTC_8x8_FLOAT,
+    SDL_GPU_TEXTUREFORMAT_ASTC_10x5_FLOAT,
+    SDL_GPU_TEXTUREFORMAT_ASTC_10x6_FLOAT,
+    SDL_GPU_TEXTUREFORMAT_ASTC_10x8_FLOAT,
+    SDL_GPU_TEXTUREFORMAT_ASTC_10x10_FLOAT,
+    SDL_GPU_TEXTUREFORMAT_ASTC_12x10_FLOAT,
+    SDL_GPU_TEXTUREFORMAT_ASTC_12x12_FLOAT
 } SDL_GPUTextureFormat;
 
 /**

+ 43 - 0
src/gpu/SDL_gpu.c

@@ -642,6 +642,49 @@ Uint32 SDL_GPUTextureFormatTexelBlockSize(
         return 8;
     case SDL_GPU_TEXTUREFORMAT_R32G32B32A32_FLOAT:
         return 16;
+    case SDL_GPU_TEXTUREFORMAT_ASTC_4x4_UNORM:
+    case SDL_GPU_TEXTUREFORMAT_ASTC_5x4_UNORM:
+    case SDL_GPU_TEXTUREFORMAT_ASTC_5x5_UNORM:
+    case SDL_GPU_TEXTUREFORMAT_ASTC_6x5_UNORM:
+    case SDL_GPU_TEXTUREFORMAT_ASTC_6x6_UNORM:
+    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_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_12x10_UNORM:
+    case SDL_GPU_TEXTUREFORMAT_ASTC_12x12_UNORM:
+    case SDL_GPU_TEXTUREFORMAT_ASTC_4x4_UNORM_SRGB:
+    case SDL_GPU_TEXTUREFORMAT_ASTC_5x4_UNORM_SRGB:
+    case SDL_GPU_TEXTUREFORMAT_ASTC_5x5_UNORM_SRGB:
+    case SDL_GPU_TEXTUREFORMAT_ASTC_6x5_UNORM_SRGB:
+    case SDL_GPU_TEXTUREFORMAT_ASTC_6x6_UNORM_SRGB:
+    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_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_12x10_UNORM_SRGB:
+    case SDL_GPU_TEXTUREFORMAT_ASTC_12x12_UNORM_SRGB:
+    case SDL_GPU_TEXTUREFORMAT_ASTC_4x4_FLOAT:
+    case SDL_GPU_TEXTUREFORMAT_ASTC_5x4_FLOAT:
+    case SDL_GPU_TEXTUREFORMAT_ASTC_5x5_FLOAT:
+    case SDL_GPU_TEXTUREFORMAT_ASTC_6x5_FLOAT:
+    case SDL_GPU_TEXTUREFORMAT_ASTC_6x6_FLOAT:
+    case SDL_GPU_TEXTUREFORMAT_ASTC_8x5_FLOAT:
+    case SDL_GPU_TEXTUREFORMAT_ASTC_8x6_FLOAT:
+    case SDL_GPU_TEXTUREFORMAT_ASTC_8x8_FLOAT:
+    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:
+    case SDL_GPU_TEXTUREFORMAT_ASTC_12x10_FLOAT:
+    case SDL_GPU_TEXTUREFORMAT_ASTC_12x12_FLOAT:
+        return 16;
     default:
         SDL_assert_release(!"Unrecognized TextureFormat!");
         return 0;

+ 1 - 1
src/gpu/SDL_sysgpu.h

@@ -69,7 +69,7 @@ typedef struct BlitPipelineCacheEntry
 
 // Internal Helper Utilities
 
-#define SDL_GPU_TEXTUREFORMAT_MAX_ENUM_VALUE        (SDL_GPU_TEXTUREFORMAT_D32_FLOAT_S8_UINT + 1)
+#define SDL_GPU_TEXTUREFORMAT_MAX_ENUM_VALUE        (SDL_GPU_TEXTUREFORMAT_ASTC_12x12_FLOAT + 1)
 #define SDL_GPU_VERTEXELEMENTFORMAT_MAX_ENUM_VALUE  (SDL_GPU_VERTEXELEMENTFORMAT_HALF4 + 1)
 #define SDL_GPU_COMPAREOP_MAX_ENUM_VALUE            (SDL_GPU_COMPAREOP_ALWAYS + 1)
 #define SDL_GPU_STENCILOP_MAX_ENUM_VALUE            (SDL_GPU_STENCILOP_DECREMENT_AND_WRAP + 1)

+ 42 - 0
src/gpu/d3d11/SDL_gpu_d3d11.c

@@ -237,6 +237,48 @@ static DXGI_FORMAT SDLToD3D11_TextureFormat[] = {
     DXGI_FORMAT_D32_FLOAT,            // D32_FLOAT
     DXGI_FORMAT_D24_UNORM_S8_UINT,    // D24_UNORM_S8_UINT
     DXGI_FORMAT_D32_FLOAT_S8X24_UINT, // D32_FLOAT_S8_UINT
+    DXGI_FORMAT_UNKNOWN,              // SDL_GPU_TEXTUREFORMAT_ASTC_4x4_UNORM
+    DXGI_FORMAT_UNKNOWN,              // SDL_GPU_TEXTUREFORMAT_ASTC_5x4_UNORM
+    DXGI_FORMAT_UNKNOWN,              // SDL_GPU_TEXTUREFORMAT_ASTC_5x5_UNORM
+    DXGI_FORMAT_UNKNOWN,              // SDL_GPU_TEXTUREFORMAT_ASTC_6x5_UNORM
+    DXGI_FORMAT_UNKNOWN,              // SDL_GPU_TEXTUREFORMAT_ASTC_6x6_UNORM
+    DXGI_FORMAT_UNKNOWN,              // SDL_GPU_TEXTUREFORMAT_ASTC_8x5_UNORM
+    DXGI_FORMAT_UNKNOWN,              // SDL_GPU_TEXTUREFORMAT_ASTC_8x6_UNORM
+    DXGI_FORMAT_UNKNOWN,              // SDL_GPU_TEXTUREFORMAT_ASTC_8x8_UNORM
+    DXGI_FORMAT_UNKNOWN,              // SDL_GPU_TEXTUREFORMAT_ASTC_10x5_UNORM
+    DXGI_FORMAT_UNKNOWN,              // SDL_GPU_TEXTUREFORMAT_ASTC_10x6_UNORM
+    DXGI_FORMAT_UNKNOWN,              // SDL_GPU_TEXTUREFORMAT_ASTC_10x8_UNORM
+    DXGI_FORMAT_UNKNOWN,              // SDL_GPU_TEXTUREFORMAT_ASTC_10x10_UNORM
+    DXGI_FORMAT_UNKNOWN,              // SDL_GPU_TEXTUREFORMAT_ASTC_12x10_UNORM
+    DXGI_FORMAT_UNKNOWN,              // SDL_GPU_TEXTUREFORMAT_ASTC_12x12_UNORM
+    DXGI_FORMAT_UNKNOWN,              // SDL_GPU_TEXTUREFORMAT_ASTC_4x4_UNORM_SRGB
+    DXGI_FORMAT_UNKNOWN,              // SDL_GPU_TEXTUREFORMAT_ASTC_5x4_UNORM_SRGB
+    DXGI_FORMAT_UNKNOWN,              // SDL_GPU_TEXTUREFORMAT_ASTC_5x5_UNORM_SRGB
+    DXGI_FORMAT_UNKNOWN,              // SDL_GPU_TEXTUREFORMAT_ASTC_6x5_UNORM_SRGB
+    DXGI_FORMAT_UNKNOWN,              // SDL_GPU_TEXTUREFORMAT_ASTC_6x6_UNORM_SRGB
+    DXGI_FORMAT_UNKNOWN,              // SDL_GPU_TEXTUREFORMAT_ASTC_8x5_UNORM_SRGB
+    DXGI_FORMAT_UNKNOWN,              // SDL_GPU_TEXTUREFORMAT_ASTC_8x6_UNORM_SRGB
+    DXGI_FORMAT_UNKNOWN,              // SDL_GPU_TEXTUREFORMAT_ASTC_8x8_UNORM_SRGB
+    DXGI_FORMAT_UNKNOWN,              // SDL_GPU_TEXTUREFORMAT_ASTC_10x5_UNORM_SRGB
+    DXGI_FORMAT_UNKNOWN,              // SDL_GPU_TEXTUREFORMAT_ASTC_10x6_UNORM_SRGB
+    DXGI_FORMAT_UNKNOWN,              // SDL_GPU_TEXTUREFORMAT_ASTC_10x8_UNORM_SRGB
+    DXGI_FORMAT_UNKNOWN,              // SDL_GPU_TEXTUREFORMAT_ASTC_10x10_UNORM_SRGB
+    DXGI_FORMAT_UNKNOWN,              // SDL_GPU_TEXTUREFORMAT_ASTC_12x10_UNORM_SRGB
+    DXGI_FORMAT_UNKNOWN,              // SDL_GPU_TEXTUREFORMAT_ASTC_12x12_UNORM_SRGB
+    DXGI_FORMAT_UNKNOWN,              // SDL_GPU_TEXTUREFORMAT_ASTC_4x4_FLOAT
+    DXGI_FORMAT_UNKNOWN,              // SDL_GPU_TEXTUREFORMAT_ASTC_5x4_FLOAT
+    DXGI_FORMAT_UNKNOWN,              // SDL_GPU_TEXTUREFORMAT_ASTC_5x5_FLOAT
+    DXGI_FORMAT_UNKNOWN,              // SDL_GPU_TEXTUREFORMAT_ASTC_6x5_FLOAT
+    DXGI_FORMAT_UNKNOWN,              // SDL_GPU_TEXTUREFORMAT_ASTC_6x6_FLOAT
+    DXGI_FORMAT_UNKNOWN,              // SDL_GPU_TEXTUREFORMAT_ASTC_8x5_FLOAT
+    DXGI_FORMAT_UNKNOWN,              // SDL_GPU_TEXTUREFORMAT_ASTC_8x6_FLOAT
+    DXGI_FORMAT_UNKNOWN,              // SDL_GPU_TEXTUREFORMAT_ASTC_8x8_FLOAT
+    DXGI_FORMAT_UNKNOWN,              // SDL_GPU_TEXTUREFORMAT_ASTC_10x5_FLOAT
+    DXGI_FORMAT_UNKNOWN,              // SDL_GPU_TEXTUREFORMAT_ASTC_10x6_FLOAT
+    DXGI_FORMAT_UNKNOWN,              // SDL_GPU_TEXTUREFORMAT_ASTC_10x8_FLOAT
+    DXGI_FORMAT_UNKNOWN,              // SDL_GPU_TEXTUREFORMAT_ASTC_10x10_FLOAT
+    DXGI_FORMAT_UNKNOWN,              // SDL_GPU_TEXTUREFORMAT_ASTC_12x10_FLOAT
+    DXGI_FORMAT_UNKNOWN,              // SDL_GPU_TEXTUREFORMAT_ASTC_12x12_FLOAT
 };
 SDL_COMPILE_TIME_ASSERT(SDLToD3D11_TextureFormat, SDL_arraysize(SDLToD3D11_TextureFormat) == SDL_GPU_TEXTUREFORMAT_MAX_ENUM_VALUE);
 

+ 42 - 0
src/gpu/d3d12/SDL_gpu_d3d12.c

@@ -312,6 +312,48 @@ static DXGI_FORMAT SDLToD3D12_TextureFormat[] = {
     DXGI_FORMAT_D32_FLOAT,            // D32_FLOAT
     DXGI_FORMAT_D24_UNORM_S8_UINT,    // D24_UNORM_S8_UINT
     DXGI_FORMAT_D32_FLOAT_S8X24_UINT, // D32_FLOAT_S8_UINT
+    DXGI_FORMAT_UNKNOWN,              // SDL_GPU_TEXTUREFORMAT_ASTC_4x4_UNORM
+    DXGI_FORMAT_UNKNOWN,              // SDL_GPU_TEXTUREFORMAT_ASTC_5x4_UNORM
+    DXGI_FORMAT_UNKNOWN,              // SDL_GPU_TEXTUREFORMAT_ASTC_5x5_UNORM
+    DXGI_FORMAT_UNKNOWN,              // SDL_GPU_TEXTUREFORMAT_ASTC_6x5_UNORM
+    DXGI_FORMAT_UNKNOWN,              // SDL_GPU_TEXTUREFORMAT_ASTC_6x6_UNORM
+    DXGI_FORMAT_UNKNOWN,              // SDL_GPU_TEXTUREFORMAT_ASTC_8x5_UNORM
+    DXGI_FORMAT_UNKNOWN,              // SDL_GPU_TEXTUREFORMAT_ASTC_8x6_UNORM
+    DXGI_FORMAT_UNKNOWN,              // SDL_GPU_TEXTUREFORMAT_ASTC_8x8_UNORM
+    DXGI_FORMAT_UNKNOWN,              // SDL_GPU_TEXTUREFORMAT_ASTC_10x5_UNORM
+    DXGI_FORMAT_UNKNOWN,              // SDL_GPU_TEXTUREFORMAT_ASTC_10x6_UNORM
+    DXGI_FORMAT_UNKNOWN,              // SDL_GPU_TEXTUREFORMAT_ASTC_10x8_UNORM
+    DXGI_FORMAT_UNKNOWN,              // SDL_GPU_TEXTUREFORMAT_ASTC_10x10_UNORM
+    DXGI_FORMAT_UNKNOWN,              // SDL_GPU_TEXTUREFORMAT_ASTC_12x10_UNORM
+    DXGI_FORMAT_UNKNOWN,              // SDL_GPU_TEXTUREFORMAT_ASTC_12x12_UNORM
+    DXGI_FORMAT_UNKNOWN,              // SDL_GPU_TEXTUREFORMAT_ASTC_4x4_UNORM_SRGB
+    DXGI_FORMAT_UNKNOWN,              // SDL_GPU_TEXTUREFORMAT_ASTC_5x4_UNORM_SRGB
+    DXGI_FORMAT_UNKNOWN,              // SDL_GPU_TEXTUREFORMAT_ASTC_5x5_UNORM_SRGB
+    DXGI_FORMAT_UNKNOWN,              // SDL_GPU_TEXTUREFORMAT_ASTC_6x5_UNORM_SRGB
+    DXGI_FORMAT_UNKNOWN,              // SDL_GPU_TEXTUREFORMAT_ASTC_6x6_UNORM_SRGB
+    DXGI_FORMAT_UNKNOWN,              // SDL_GPU_TEXTUREFORMAT_ASTC_8x5_UNORM_SRGB
+    DXGI_FORMAT_UNKNOWN,              // SDL_GPU_TEXTUREFORMAT_ASTC_8x6_UNORM_SRGB
+    DXGI_FORMAT_UNKNOWN,              // SDL_GPU_TEXTUREFORMAT_ASTC_8x8_UNORM_SRGB
+    DXGI_FORMAT_UNKNOWN,              // SDL_GPU_TEXTUREFORMAT_ASTC_10x5_UNORM_SRGB
+    DXGI_FORMAT_UNKNOWN,              // SDL_GPU_TEXTUREFORMAT_ASTC_10x6_UNORM_SRGB
+    DXGI_FORMAT_UNKNOWN,              // SDL_GPU_TEXTUREFORMAT_ASTC_10x8_UNORM_SRGB
+    DXGI_FORMAT_UNKNOWN,              // SDL_GPU_TEXTUREFORMAT_ASTC_10x10_UNORM_SRGB
+    DXGI_FORMAT_UNKNOWN,              // SDL_GPU_TEXTUREFORMAT_ASTC_12x10_UNORM_SRGB
+    DXGI_FORMAT_UNKNOWN,              // SDL_GPU_TEXTUREFORMAT_ASTC_12x12_UNORM_SRGB
+    DXGI_FORMAT_UNKNOWN,              // SDL_GPU_TEXTUREFORMAT_ASTC_4x4_FLOAT
+    DXGI_FORMAT_UNKNOWN,              // SDL_GPU_TEXTUREFORMAT_ASTC_5x4_FLOAT
+    DXGI_FORMAT_UNKNOWN,              // SDL_GPU_TEXTUREFORMAT_ASTC_5x5_FLOAT
+    DXGI_FORMAT_UNKNOWN,              // SDL_GPU_TEXTUREFORMAT_ASTC_6x5_FLOAT
+    DXGI_FORMAT_UNKNOWN,              // SDL_GPU_TEXTUREFORMAT_ASTC_6x6_FLOAT
+    DXGI_FORMAT_UNKNOWN,              // SDL_GPU_TEXTUREFORMAT_ASTC_8x5_FLOAT
+    DXGI_FORMAT_UNKNOWN,              // SDL_GPU_TEXTUREFORMAT_ASTC_8x6_FLOAT
+    DXGI_FORMAT_UNKNOWN,              // SDL_GPU_TEXTUREFORMAT_ASTC_8x8_FLOAT
+    DXGI_FORMAT_UNKNOWN,              // SDL_GPU_TEXTUREFORMAT_ASTC_10x5_FLOAT
+    DXGI_FORMAT_UNKNOWN,              // SDL_GPU_TEXTUREFORMAT_ASTC_10x6_FLOAT
+    DXGI_FORMAT_UNKNOWN,              // SDL_GPU_TEXTUREFORMAT_ASTC_10x8_FLOAT
+    DXGI_FORMAT_UNKNOWN,              // SDL_GPU_TEXTUREFORMAT_ASTC_10x10_FLOAT
+    DXGI_FORMAT_UNKNOWN,              // SDL_GPU_TEXTUREFORMAT_ASTC_12x10_FLOAT
+    DXGI_FORMAT_UNKNOWN,              // SDL_GPU_TEXTUREFORMAT_ASTC_12x12_FLOAT
 };
 SDL_COMPILE_TIME_ASSERT(SDLToD3D12_TextureFormat, SDL_arraysize(SDLToD3D12_TextureFormat) == SDL_GPU_TEXTUREFORMAT_MAX_ENUM_VALUE);
 

+ 94 - 1
src/gpu/metal/SDL_gpu_metal.m

@@ -166,6 +166,48 @@ static MTLPixelFormat SDLToMetal_SurfaceFormat[] = {
     MTLPixelFormatInvalid, // D24_UNORM_S8_UINT
 #endif
     MTLPixelFormatDepth32Float_Stencil8, // D32_FLOAT_S8_UINT
+    MTLPixelFormatASTC_4x4_LDR,    // SDL_GPU_TEXTUREFORMAT_ASTC_4x4_UNORM
+    MTLPixelFormatASTC_5x4_LDR,    // SDL_GPU_TEXTUREFORMAT_ASTC_5x4_UNORM
+    MTLPixelFormatASTC_5x5_LDR,    // SDL_GPU_TEXTUREFORMAT_ASTC_5x5_UNORM
+    MTLPixelFormatASTC_6x5_LDR,    // SDL_GPU_TEXTUREFORMAT_ASTC_6x5_UNORM
+    MTLPixelFormatASTC_6x6_LDR,    // SDL_GPU_TEXTUREFORMAT_ASTC_6x6_UNORM
+    MTLPixelFormatASTC_8x5_LDR,    // SDL_GPU_TEXTUREFORMAT_ASTC_8x5_UNORM
+    MTLPixelFormatASTC_8x6_LDR,    // SDL_GPU_TEXTUREFORMAT_ASTC_8x6_UNORM
+    MTLPixelFormatASTC_8x8_LDR,    // SDL_GPU_TEXTUREFORMAT_ASTC_8x8_UNORM
+    MTLPixelFormatASTC_10x5_LDR,   // SDL_GPU_TEXTUREFORMAT_ASTC_10x5_UNORM
+    MTLPixelFormatASTC_10x6_LDR,   // SDL_GPU_TEXTUREFORMAT_ASTC_10x6_UNORM
+    MTLPixelFormatASTC_10x8_LDR,   // SDL_GPU_TEXTUREFORMAT_ASTC_10x8_UNORM
+    MTLPixelFormatASTC_10x10_LDR,  // SDL_GPU_TEXTUREFORMAT_ASTC_10x10_UNORM
+    MTLPixelFormatASTC_12x10_LDR,  // SDL_GPU_TEXTUREFORMAT_ASTC_12x10_UNORM
+    MTLPixelFormatASTC_12x12_LDR,  // SDL_GPU_TEXTUREFORMAT_ASTC_12x12_UNORM
+    MTLPixelFormatASTC_4x4_sRGB,   // SDL_GPU_TEXTUREFORMAT_ASTC_4x4_UNORM_SRGB
+    MTLPixelFormatASTC_5x4_sRGB,   // SDL_GPU_TEXTUREFORMAT_ASTC_5x4_UNORM_SRGB
+    MTLPixelFormatASTC_5x5_sRGB,   // SDL_GPU_TEXTUREFORMAT_ASTC_5x5_UNORM_SRGB
+    MTLPixelFormatASTC_6x5_sRGB,   // SDL_GPU_TEXTUREFORMAT_ASTC_6x5_UNORM_SRGB
+    MTLPixelFormatASTC_6x6_sRGB,   // SDL_GPU_TEXTUREFORMAT_ASTC_6x6_UNORM_SRGB
+    MTLPixelFormatASTC_8x5_sRGB,   // SDL_GPU_TEXTUREFORMAT_ASTC_8x5_UNORM_SRGB
+    MTLPixelFormatASTC_8x6_sRGB,   // SDL_GPU_TEXTUREFORMAT_ASTC_8x6_UNORM_SRGB
+    MTLPixelFormatASTC_8x8_sRGB,   // SDL_GPU_TEXTUREFORMAT_ASTC_8x8_UNORM_SRGB
+    MTLPixelFormatASTC_10x5_sRGB,  // SDL_GPU_TEXTUREFORMAT_ASTC_10x5_UNORM_SRGB
+    MTLPixelFormatASTC_10x6_sRGB,  // SDL_GPU_TEXTUREFORMAT_ASTC_10x6_UNORM_SRGB
+    MTLPixelFormatASTC_10x8_sRGB,  // SDL_GPU_TEXTUREFORMAT_ASTC_10x8_UNORM_SRGB
+    MTLPixelFormatASTC_10x10_sRGB, // SDL_GPU_TEXTUREFORMAT_ASTC_10x10_UNORM_SRGB
+    MTLPixelFormatASTC_12x10_sRGB, // SDL_GPU_TEXTUREFORMAT_ASTC_12x10_UNORM_SRGB
+    MTLPixelFormatASTC_12x12_sRGB, // SDL_GPU_TEXTUREFORMAT_ASTC_12x12_UNORM_SRGB
+    MTLPixelFormatASTC_4x4_HDR,    // SDL_GPU_TEXTUREFORMAT_ASTC_4x4_FLOAT
+    MTLPixelFormatASTC_5x4_HDR,    // SDL_GPU_TEXTUREFORMAT_ASTC_5x4_FLOAT
+    MTLPixelFormatASTC_5x5_HDR,    // SDL_GPU_TEXTUREFORMAT_ASTC_5x5_FLOAT
+    MTLPixelFormatASTC_6x5_HDR,    // SDL_GPU_TEXTUREFORMAT_ASTC_6x5_FLOAT
+    MTLPixelFormatASTC_6x6_HDR,    // SDL_GPU_TEXTUREFORMAT_ASTC_6x6_FLOAT
+    MTLPixelFormatASTC_8x5_HDR,    // SDL_GPU_TEXTUREFORMAT_ASTC_8x5_FLOAT
+    MTLPixelFormatASTC_8x6_HDR,    // SDL_GPU_TEXTUREFORMAT_ASTC_8x6_FLOAT
+    MTLPixelFormatASTC_8x8_HDR,    // SDL_GPU_TEXTUREFORMAT_ASTC_8x8_FLOAT
+    MTLPixelFormatASTC_10x5_HDR,   // SDL_GPU_TEXTUREFORMAT_ASTC_10x5_FLOAT
+    MTLPixelFormatASTC_10x6_HDR,   // SDL_GPU_TEXTUREFORMAT_ASTC_10x6_FLOAT
+    MTLPixelFormatASTC_10x8_HDR,   // SDL_GPU_TEXTUREFORMAT_ASTC_10x8_FLOAT
+    MTLPixelFormatASTC_10x10_HDR,  // SDL_GPU_TEXTUREFORMAT_ASTC_10x10_FLOAT
+    MTLPixelFormatASTC_12x10_HDR,  // SDL_GPU_TEXTUREFORMAT_ASTC_12x10_FLOAT
+    MTLPixelFormatASTC_12x12_HDR   // SDL_GPU_TEXTUREFORMAT_ASTC_12x12_FLOAT
 };
 SDL_COMPILE_TIME_ASSERT(SDLToMetal_SurfaceFormat, SDL_arraysize(SDLToMetal_SurfaceFormat) == SDL_GPU_TEXTUREFORMAT_MAX_ENUM_VALUE);
 
@@ -3877,7 +3919,58 @@ static bool METAL_SupportsTextureFormat(
 #else
             return false;
 #endif
-
+        case SDL_GPU_TEXTUREFORMAT_ASTC_4x4_UNORM:
+        case SDL_GPU_TEXTUREFORMAT_ASTC_5x4_UNORM:
+        case SDL_GPU_TEXTUREFORMAT_ASTC_5x5_UNORM:
+        case SDL_GPU_TEXTUREFORMAT_ASTC_6x5_UNORM:
+        case SDL_GPU_TEXTUREFORMAT_ASTC_6x6_UNORM:
+        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_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_12x10_UNORM:
+        case SDL_GPU_TEXTUREFORMAT_ASTC_12x12_UNORM:
+        case SDL_GPU_TEXTUREFORMAT_ASTC_4x4_UNORM_SRGB:
+        case SDL_GPU_TEXTUREFORMAT_ASTC_5x4_UNORM_SRGB:
+        case SDL_GPU_TEXTUREFORMAT_ASTC_5x5_UNORM_SRGB:
+        case SDL_GPU_TEXTUREFORMAT_ASTC_6x5_UNORM_SRGB:
+        case SDL_GPU_TEXTUREFORMAT_ASTC_6x6_UNORM_SRGB:
+        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_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_12x10_UNORM_SRGB:
+        case SDL_GPU_TEXTUREFORMAT_ASTC_12x12_UNORM_SRGB:
+#ifdef SDL_PLATFORM_MACOS
+            return [renderer->device supportsFamily:MTLGPUFamilyApple7];
+#else
+            return true;
+#endif
+        case SDL_GPU_TEXTUREFORMAT_ASTC_4x4_FLOAT:
+        case SDL_GPU_TEXTUREFORMAT_ASTC_5x4_FLOAT:
+        case SDL_GPU_TEXTUREFORMAT_ASTC_5x5_FLOAT:
+        case SDL_GPU_TEXTUREFORMAT_ASTC_6x5_FLOAT:
+        case SDL_GPU_TEXTUREFORMAT_ASTC_6x6_FLOAT:
+        case SDL_GPU_TEXTUREFORMAT_ASTC_8x5_FLOAT:
+        case SDL_GPU_TEXTUREFORMAT_ASTC_8x6_FLOAT:
+        case SDL_GPU_TEXTUREFORMAT_ASTC_8x8_FLOAT:
+        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:
+        case SDL_GPU_TEXTUREFORMAT_ASTC_12x10_FLOAT:
+        case SDL_GPU_TEXTUREFORMAT_ASTC_12x12_FLOAT:
+#ifdef SDL_PLATFORM_MACOS
+            return [renderer->device supportsFamily:MTLGPUFamilyApple7];
+#else
+            return [renderer->device supportsFamily:MTLGPUFamilyApple6];
+#endif
         default:
             return true;
         }

+ 111 - 65
src/gpu/vulkan/SDL_gpu_vulkan.c

@@ -60,6 +60,8 @@ typedef struct VulkanExtensions
     Uint8 EXT_vertex_attribute_divisor;
     // Only required for special implementations (i.e. MoltenVK)
     Uint8 KHR_portability_subset;
+    // Only required for decoding HDR ASTC textures
+    Uint8 EXT_texture_compression_astc_hdr;
 } VulkanExtensions;
 
 // Defines
@@ -135,69 +137,111 @@ static VkPresentModeKHR SDLToVK_PresentMode[] = {
 };
 
 static VkFormat SDLToVK_TextureFormat[] = {
-    VK_FORMAT_UNDEFINED,                // INVALID
-    VK_FORMAT_R8_UNORM,                 // A8_UNORM
-    VK_FORMAT_R8_UNORM,                 // R8_UNORM
-    VK_FORMAT_R8G8_UNORM,               // R8G8_UNORM
-    VK_FORMAT_R8G8B8A8_UNORM,           // R8G8B8A8_UNORM
-    VK_FORMAT_R16_UNORM,                // R16_UNORM
-    VK_FORMAT_R16G16_UNORM,             // R16G16_UNORM
-    VK_FORMAT_R16G16B16A16_UNORM,       // R16G16B16A16_UNORM
-    VK_FORMAT_A2B10G10R10_UNORM_PACK32, // R10G10B10A2_UNORM
-    VK_FORMAT_R5G6B5_UNORM_PACK16,      // B5G6R5_UNORM
-    VK_FORMAT_A1R5G5B5_UNORM_PACK16,    // B5G5R5A1_UNORM
-    VK_FORMAT_B4G4R4A4_UNORM_PACK16,    // B4G4R4A4_UNORM
-    VK_FORMAT_B8G8R8A8_UNORM,           // B8G8R8A8_UNORM
-    VK_FORMAT_BC1_RGBA_UNORM_BLOCK,     // BC1_UNORM
-    VK_FORMAT_BC2_UNORM_BLOCK,          // BC2_UNORM
-    VK_FORMAT_BC3_UNORM_BLOCK,          // BC3_UNORM
-    VK_FORMAT_BC4_UNORM_BLOCK,          // BC4_UNORM
-    VK_FORMAT_BC5_UNORM_BLOCK,          // BC5_UNORM
-    VK_FORMAT_BC7_UNORM_BLOCK,          // BC7_UNORM
-    VK_FORMAT_BC6H_SFLOAT_BLOCK,        // BC6H_FLOAT
-    VK_FORMAT_BC6H_UFLOAT_BLOCK,        // BC6H_UFLOAT
-    VK_FORMAT_R8_SNORM,                 // R8_SNORM
-    VK_FORMAT_R8G8_SNORM,               // R8G8_SNORM
-    VK_FORMAT_R8G8B8A8_SNORM,           // R8G8B8A8_SNORM
-    VK_FORMAT_R16_SNORM,                // R16_SNORM
-    VK_FORMAT_R16G16_SNORM,             // R16G16_SNORM
-    VK_FORMAT_R16G16B16A16_SNORM,       // R16G16B16A16_SNORM
-    VK_FORMAT_R16_SFLOAT,               // R16_FLOAT
-    VK_FORMAT_R16G16_SFLOAT,            // R16G16_FLOAT
-    VK_FORMAT_R16G16B16A16_SFLOAT,      // R16G16B16A16_FLOAT
-    VK_FORMAT_R32_SFLOAT,               // R32_FLOAT
-    VK_FORMAT_R32G32_SFLOAT,            // R32G32_FLOAT
-    VK_FORMAT_R32G32B32A32_SFLOAT,      // R32G32B32A32_FLOAT
-    VK_FORMAT_B10G11R11_UFLOAT_PACK32,  // R11G11B10_UFLOAT
-    VK_FORMAT_R8_UINT,                  // R8_UINT
-    VK_FORMAT_R8G8_UINT,                // R8G8_UINT
-    VK_FORMAT_R8G8B8A8_UINT,            // R8G8B8A8_UINT
-    VK_FORMAT_R16_UINT,                 // R16_UINT
-    VK_FORMAT_R16G16_UINT,              // R16G16_UINT
-    VK_FORMAT_R16G16B16A16_UINT,        // R16G16B16A16_UINT
-    VK_FORMAT_R32_UINT,                 // R32_UINT
-    VK_FORMAT_R32G32_UINT,              // R32G32_UINT
-    VK_FORMAT_R32G32B32A32_UINT,        // R32G32B32A32_UINT
-    VK_FORMAT_R8_SINT,                  // R8_INT
-    VK_FORMAT_R8G8_SINT,                // R8G8_INT
-    VK_FORMAT_R8G8B8A8_SINT,            // R8G8B8A8_INT
-    VK_FORMAT_R16_SINT,                 // R16_INT
-    VK_FORMAT_R16G16_SINT,              // R16G16_INT
-    VK_FORMAT_R16G16B16A16_SINT,        // R16G16B16A16_INT
-    VK_FORMAT_R32_SINT,                 // R32_INT
-    VK_FORMAT_R32G32_SINT,              // R32G32_INT
-    VK_FORMAT_R32G32B32A32_SINT,        // R32G32B32A32_INT
-    VK_FORMAT_R8G8B8A8_SRGB,            // R8G8B8A8_UNORM_SRGB
-    VK_FORMAT_B8G8R8A8_SRGB,            // B8G8R8A8_UNORM_SRGB
-    VK_FORMAT_BC1_RGBA_SRGB_BLOCK,      // BC1_UNORM_SRGB
-    VK_FORMAT_BC2_SRGB_BLOCK,           // BC3_UNORM_SRGB
-    VK_FORMAT_BC3_SRGB_BLOCK,           // BC3_UNORM_SRGB
-    VK_FORMAT_BC7_SRGB_BLOCK,           // BC7_UNORM_SRGB
-    VK_FORMAT_D16_UNORM,                // D16_UNORM
-    VK_FORMAT_X8_D24_UNORM_PACK32,      // D24_UNORM
-    VK_FORMAT_D32_SFLOAT,               // D32_FLOAT
-    VK_FORMAT_D24_UNORM_S8_UINT,        // D24_UNORM_S8_UINT
-    VK_FORMAT_D32_SFLOAT_S8_UINT,       // D32_FLOAT_S8_UINT
+    VK_FORMAT_UNDEFINED,                   // INVALID
+    VK_FORMAT_R8_UNORM,                    // A8_UNORM
+    VK_FORMAT_R8_UNORM,                    // R8_UNORM
+    VK_FORMAT_R8G8_UNORM,                  // R8G8_UNORM
+    VK_FORMAT_R8G8B8A8_UNORM,              // R8G8B8A8_UNORM
+    VK_FORMAT_R16_UNORM,                   // R16_UNORM
+    VK_FORMAT_R16G16_UNORM,                // R16G16_UNORM
+    VK_FORMAT_R16G16B16A16_UNORM,          // R16G16B16A16_UNORM
+    VK_FORMAT_A2B10G10R10_UNORM_PACK32,    // R10G10B10A2_UNORM
+    VK_FORMAT_R5G6B5_UNORM_PACK16,         // B5G6R5_UNORM
+    VK_FORMAT_A1R5G5B5_UNORM_PACK16,       // B5G5R5A1_UNORM
+    VK_FORMAT_B4G4R4A4_UNORM_PACK16,       // B4G4R4A4_UNORM
+    VK_FORMAT_B8G8R8A8_UNORM,              // B8G8R8A8_UNORM
+    VK_FORMAT_BC1_RGBA_UNORM_BLOCK,        // BC1_UNORM
+    VK_FORMAT_BC2_UNORM_BLOCK,             // BC2_UNORM
+    VK_FORMAT_BC3_UNORM_BLOCK,             // BC3_UNORM
+    VK_FORMAT_BC4_UNORM_BLOCK,             // BC4_UNORM
+    VK_FORMAT_BC5_UNORM_BLOCK,             // BC5_UNORM
+    VK_FORMAT_BC7_UNORM_BLOCK,             // BC7_UNORM
+    VK_FORMAT_BC6H_SFLOAT_BLOCK,           // BC6H_FLOAT
+    VK_FORMAT_BC6H_UFLOAT_BLOCK,           // BC6H_UFLOAT
+    VK_FORMAT_R8_SNORM,                    // R8_SNORM
+    VK_FORMAT_R8G8_SNORM,                  // R8G8_SNORM
+    VK_FORMAT_R8G8B8A8_SNORM,              // R8G8B8A8_SNORM
+    VK_FORMAT_R16_SNORM,                   // R16_SNORM
+    VK_FORMAT_R16G16_SNORM,                // R16G16_SNORM
+    VK_FORMAT_R16G16B16A16_SNORM,          // R16G16B16A16_SNORM
+    VK_FORMAT_R16_SFLOAT,                  // R16_FLOAT
+    VK_FORMAT_R16G16_SFLOAT,               // R16G16_FLOAT
+    VK_FORMAT_R16G16B16A16_SFLOAT,         // R16G16B16A16_FLOAT
+    VK_FORMAT_R32_SFLOAT,                  // R32_FLOAT
+    VK_FORMAT_R32G32_SFLOAT,               // R32G32_FLOAT
+    VK_FORMAT_R32G32B32A32_SFLOAT,         // R32G32B32A32_FLOAT
+    VK_FORMAT_B10G11R11_UFLOAT_PACK32,     // R11G11B10_UFLOAT
+    VK_FORMAT_R8_UINT,                     // R8_UINT
+    VK_FORMAT_R8G8_UINT,                   // R8G8_UINT
+    VK_FORMAT_R8G8B8A8_UINT,               // R8G8B8A8_UINT
+    VK_FORMAT_R16_UINT,                    // R16_UINT
+    VK_FORMAT_R16G16_UINT,                 // R16G16_UINT
+    VK_FORMAT_R16G16B16A16_UINT,           // R16G16B16A16_UINT
+    VK_FORMAT_R32_UINT,                    // R32_UINT
+    VK_FORMAT_R32G32_UINT,                 // R32G32_UINT
+    VK_FORMAT_R32G32B32A32_UINT,           // R32G32B32A32_UINT
+    VK_FORMAT_R8_SINT,                     // R8_INT
+    VK_FORMAT_R8G8_SINT,                   // R8G8_INT
+    VK_FORMAT_R8G8B8A8_SINT,               // R8G8B8A8_INT
+    VK_FORMAT_R16_SINT,                    // R16_INT
+    VK_FORMAT_R16G16_SINT,                 // R16G16_INT
+    VK_FORMAT_R16G16B16A16_SINT,           // R16G16B16A16_INT
+    VK_FORMAT_R32_SINT,                    // R32_INT
+    VK_FORMAT_R32G32_SINT,                 // R32G32_INT
+    VK_FORMAT_R32G32B32A32_SINT,           // R32G32B32A32_INT
+    VK_FORMAT_R8G8B8A8_SRGB,               // R8G8B8A8_UNORM_SRGB
+    VK_FORMAT_B8G8R8A8_SRGB,               // B8G8R8A8_UNORM_SRGB
+    VK_FORMAT_BC1_RGBA_SRGB_BLOCK,         // BC1_UNORM_SRGB
+    VK_FORMAT_BC2_SRGB_BLOCK,              // BC3_UNORM_SRGB
+    VK_FORMAT_BC3_SRGB_BLOCK,              // BC3_UNORM_SRGB
+    VK_FORMAT_BC7_SRGB_BLOCK,              // BC7_UNORM_SRGB
+    VK_FORMAT_D16_UNORM,                   // D16_UNORM
+    VK_FORMAT_X8_D24_UNORM_PACK32,         // D24_UNORM
+    VK_FORMAT_D32_SFLOAT,                  // D32_FLOAT
+    VK_FORMAT_D24_UNORM_S8_UINT,           // D24_UNORM_S8_UINT
+    VK_FORMAT_D32_SFLOAT_S8_UINT,          // D32_FLOAT_S8_UINT
+    VK_FORMAT_ASTC_5x4_UNORM_BLOCK,        // SDL_GPU_TEXTUREFORMAT_ASTC_4x4_UNORM
+    VK_FORMAT_ASTC_4x4_UNORM_BLOCK,        // SDL_GPU_TEXTUREFORMAT_ASTC_5x4_UNORM
+    VK_FORMAT_ASTC_5x5_UNORM_BLOCK,        // SDL_GPU_TEXTUREFORMAT_ASTC_5x5_UNORM
+    VK_FORMAT_ASTC_6x5_UNORM_BLOCK,        // SDL_GPU_TEXTUREFORMAT_ASTC_6x5_UNORM
+    VK_FORMAT_ASTC_6x6_UNORM_BLOCK,        // SDL_GPU_TEXTUREFORMAT_ASTC_6x6_UNORM
+    VK_FORMAT_ASTC_8x5_UNORM_BLOCK,        // SDL_GPU_TEXTUREFORMAT_ASTC_8x5_UNORM
+    VK_FORMAT_ASTC_8x6_UNORM_BLOCK,        // SDL_GPU_TEXTUREFORMAT_ASTC_8x6_UNORM
+    VK_FORMAT_ASTC_8x8_UNORM_BLOCK,        // SDL_GPU_TEXTUREFORMAT_ASTC_8x8_UNORM
+    VK_FORMAT_ASTC_10x5_UNORM_BLOCK,       // SDL_GPU_TEXTUREFORMAT_ASTC_10x5_UNORM
+    VK_FORMAT_ASTC_10x6_UNORM_BLOCK,       // SDL_GPU_TEXTUREFORMAT_ASTC_10x6_UNORM
+    VK_FORMAT_ASTC_10x8_UNORM_BLOCK,       // SDL_GPU_TEXTUREFORMAT_ASTC_10x8_UNORM
+    VK_FORMAT_ASTC_10x10_UNORM_BLOCK,      // SDL_GPU_TEXTUREFORMAT_ASTC_10x10_UNORM
+    VK_FORMAT_ASTC_12x10_UNORM_BLOCK,      // SDL_GPU_TEXTUREFORMAT_ASTC_12x10_UNORM
+    VK_FORMAT_ASTC_12x12_UNORM_BLOCK,      // SDL_GPU_TEXTUREFORMAT_ASTC_12x12_UNORM
+    VK_FORMAT_ASTC_4x4_SRGB_BLOCK,         // SDL_GPU_TEXTUREFORMAT_ASTC_4x4_UNORM_SRGB
+    VK_FORMAT_ASTC_5x4_SRGB_BLOCK,         // SDL_GPU_TEXTUREFORMAT_ASTC_5x4_UNORM_SRGB
+    VK_FORMAT_ASTC_5x5_SRGB_BLOCK,         // SDL_GPU_TEXTUREFORMAT_ASTC_5x5_UNORM_SRGB
+    VK_FORMAT_ASTC_6x5_SRGB_BLOCK,         // SDL_GPU_TEXTUREFORMAT_ASTC_6x5_UNORM_SRGB
+    VK_FORMAT_ASTC_6x6_SRGB_BLOCK,         // SDL_GPU_TEXTUREFORMAT_ASTC_6x6_UNORM_SRGB
+    VK_FORMAT_ASTC_8x5_SRGB_BLOCK,         // SDL_GPU_TEXTUREFORMAT_ASTC_8x5_UNORM_SRGB
+    VK_FORMAT_ASTC_8x6_SRGB_BLOCK,         // SDL_GPU_TEXTUREFORMAT_ASTC_8x6_UNORM_SRGB
+    VK_FORMAT_ASTC_8x8_SRGB_BLOCK,         // SDL_GPU_TEXTUREFORMAT_ASTC_8x8_UNORM_SRGB
+    VK_FORMAT_ASTC_10x5_SRGB_BLOCK,        // SDL_GPU_TEXTUREFORMAT_ASTC_10x5_UNORM_SRGB
+    VK_FORMAT_ASTC_10x6_SRGB_BLOCK,        // SDL_GPU_TEXTUREFORMAT_ASTC_10x6_UNORM_SRGB
+    VK_FORMAT_ASTC_10x8_SRGB_BLOCK,        // SDL_GPU_TEXTUREFORMAT_ASTC_10x8_UNORM_SRGB
+    VK_FORMAT_ASTC_10x10_SRGB_BLOCK,       // SDL_GPU_TEXTUREFORMAT_ASTC_10x10_UNORM_SRGB
+    VK_FORMAT_ASTC_12x10_SRGB_BLOCK,       // SDL_GPU_TEXTUREFORMAT_ASTC_12x10_UNORM_SRGB
+    VK_FORMAT_ASTC_12x12_SRGB_BLOCK,       // SDL_GPU_TEXTUREFORMAT_ASTC_12x12_UNORM_SRGB
+    VK_FORMAT_ASTC_4x4_SFLOAT_BLOCK_EXT,   // SDL_GPU_TEXTUREFORMAT_ASTC_4x4_FLOAT
+    VK_FORMAT_ASTC_5x4_SFLOAT_BLOCK_EXT,   // SDL_GPU_TEXTUREFORMAT_ASTC_5x4_FLOAT
+    VK_FORMAT_ASTC_5x5_SFLOAT_BLOCK_EXT,   // SDL_GPU_TEXTUREFORMAT_ASTC_5x5_FLOAT
+    VK_FORMAT_ASTC_6x5_SFLOAT_BLOCK_EXT,   // SDL_GPU_TEXTUREFORMAT_ASTC_6x5_FLOAT
+    VK_FORMAT_ASTC_6x6_SFLOAT_BLOCK_EXT,   // SDL_GPU_TEXTUREFORMAT_ASTC_6x6_FLOAT
+    VK_FORMAT_ASTC_8x5_SFLOAT_BLOCK_EXT,   // SDL_GPU_TEXTUREFORMAT_ASTC_8x5_FLOAT
+    VK_FORMAT_ASTC_8x6_SFLOAT_BLOCK_EXT,   // SDL_GPU_TEXTUREFORMAT_ASTC_8x6_FLOAT
+    VK_FORMAT_ASTC_8x8_SFLOAT_BLOCK_EXT,   // SDL_GPU_TEXTUREFORMAT_ASTC_8x8_FLOAT
+    VK_FORMAT_ASTC_10x5_SFLOAT_BLOCK_EXT,  // SDL_GPU_TEXTUREFORMAT_ASTC_10x5_FLOAT
+    VK_FORMAT_ASTC_10x6_SFLOAT_BLOCK_EXT,  // SDL_GPU_TEXTUREFORMAT_ASTC_10x6_FLOAT
+    VK_FORMAT_ASTC_10x8_SFLOAT_BLOCK_EXT,  // SDL_GPU_TEXTUREFORMAT_ASTC_10x8_FLOAT
+    VK_FORMAT_ASTC_10x10_SFLOAT_BLOCK_EXT, // SDL_GPU_TEXTUREFORMAT_ASTC_10x10_FLOAT
+    VK_FORMAT_ASTC_12x10_SFLOAT_BLOCK_EXT, // SDL_GPU_TEXTUREFORMAT_ASTC_12x10_FLOAT
+    VK_FORMAT_ASTC_12x12_SFLOAT_BLOCK      // SDL_GPU_TEXTUREFORMAT_ASTC_12x12_FLOAT
 };
 SDL_COMPILE_TIME_ASSERT(SDLToVK_TextureFormat, SDL_arraysize(SDLToVK_TextureFormat) == SDL_GPU_TEXTUREFORMAT_MAX_ENUM_VALUE);
 
@@ -10568,7 +10612,7 @@ static inline Uint8 CheckDeviceExtensions(
         supports->ext = 1;                   \
     }
         CHECK(KHR_swapchain)
-        else CHECK(KHR_maintenance1) else CHECK(KHR_driver_properties) else CHECK(EXT_vertex_attribute_divisor) else CHECK(KHR_portability_subset)
+        else CHECK(KHR_maintenance1) else CHECK(KHR_driver_properties) else CHECK(EXT_vertex_attribute_divisor) else CHECK(KHR_portability_subset) else CHECK(EXT_texture_compression_astc_hdr)
 #undef CHECK
     }
 
@@ -10583,7 +10627,8 @@ static inline Uint32 GetDeviceExtensionCount(VulkanExtensions *supports)
         supports->KHR_maintenance1 +
         supports->KHR_driver_properties +
         supports->EXT_vertex_attribute_divisor +
-        supports->KHR_portability_subset);
+        supports->KHR_portability_subset +
+        supports->EXT_texture_compression_astc_hdr);
 }
 
 static inline void CreateDeviceExtensionArray(
@@ -10600,6 +10645,7 @@ static inline void CreateDeviceExtensionArray(
     CHECK(KHR_driver_properties)
     CHECK(EXT_vertex_attribute_divisor)
     CHECK(KHR_portability_subset)
+    CHECK(EXT_texture_compression_astc_hdr)
 #undef CHECK
 }