Skip to content

Commit

Permalink
GPU vulkan: replace swizzle array with function; add swizzle for BGRA4
Browse files Browse the repository at this point in the history
  • Loading branch information
Akaricchi committed Sep 11, 2024
1 parent 5a151d2 commit daa2551
Showing 1 changed file with 26 additions and 67 deletions.
93 changes: 26 additions & 67 deletions src/gpu/vulkan/SDL_gpu_vulkan.c
Original file line number Diff line number Diff line change
Expand Up @@ -196,72 +196,31 @@ static VkFormat SDLToVK_SurfaceFormat[] = {
};
SDL_COMPILE_TIME_ASSERT(SDLToVK_SurfaceFormat, SDL_arraysize(SDLToVK_SurfaceFormat) == SDL_GPU_TEXTUREFORMAT_MAX_ENUM_VALUE);

static VkComponentMapping SDLToVK_SurfaceSwizzle[] = {
IDENTITY_SWIZZLE,
{
// A8
VK_COMPONENT_SWIZZLE_ZERO,
VK_COMPONENT_SWIZZLE_ZERO,
VK_COMPONENT_SWIZZLE_ZERO,
VK_COMPONENT_SWIZZLE_R,
},
IDENTITY_SWIZZLE, // R8
IDENTITY_SWIZZLE, // R8G8
IDENTITY_SWIZZLE, // R8G8B8A8
IDENTITY_SWIZZLE, // R16
IDENTITY_SWIZZLE, // R16G16
IDENTITY_SWIZZLE, // R16G16B16A16
IDENTITY_SWIZZLE, // R10G10B10A2
IDENTITY_SWIZZLE, // B5G6R5
IDENTITY_SWIZZLE, // B5G5R5A1
IDENTITY_SWIZZLE, // B4G4R4A4
IDENTITY_SWIZZLE, // B8G8R8A8
IDENTITY_SWIZZLE, // BC1
IDENTITY_SWIZZLE, // BC2
IDENTITY_SWIZZLE, // BC3
IDENTITY_SWIZZLE, // BC4
IDENTITY_SWIZZLE, // BC5
IDENTITY_SWIZZLE, // BC7
IDENTITY_SWIZZLE, // BC6H_FLOAT
IDENTITY_SWIZZLE, // BC6H_UFLOAT
IDENTITY_SWIZZLE, // R8_SNORM
IDENTITY_SWIZZLE, // R8G8_SNORM
IDENTITY_SWIZZLE, // R8G8B8A8_SNORM
IDENTITY_SWIZZLE, // R16_SNORM
IDENTITY_SWIZZLE, // R16G16_SNORM
IDENTITY_SWIZZLE, // R16G16B16A16_SNORM
IDENTITY_SWIZZLE, // R16_SFLOAT
IDENTITY_SWIZZLE, // R16G16_SFLOAT
IDENTITY_SWIZZLE, // R16G16B16A16_SFLOAT
IDENTITY_SWIZZLE, // R32_SFLOAT
IDENTITY_SWIZZLE, // R32G32_SFLOAT
IDENTITY_SWIZZLE, // R32G32B32A32_SFLOAT
IDENTITY_SWIZZLE, // R11G11B10_UFLOAT
IDENTITY_SWIZZLE, // R8_UINT
IDENTITY_SWIZZLE, // R8G8_UINT
IDENTITY_SWIZZLE, // R8G8B8A8_UINT
IDENTITY_SWIZZLE, // R16_UINT
IDENTITY_SWIZZLE, // R16G16_UINT
IDENTITY_SWIZZLE, // R16G16B16A16_UINT
IDENTITY_SWIZZLE, // R8_INT
IDENTITY_SWIZZLE, // R8G8_INT
IDENTITY_SWIZZLE, // R8G8B8A8_INT
IDENTITY_SWIZZLE, // R16_INT
IDENTITY_SWIZZLE, // R16G16_INT
IDENTITY_SWIZZLE, // R16G16B16A16_INT
IDENTITY_SWIZZLE, // R8G8B8A8_SRGB
IDENTITY_SWIZZLE, // B8G8R8A8_SRGB
IDENTITY_SWIZZLE, // BC1_SRGB
IDENTITY_SWIZZLE, // BC2_SRGB
IDENTITY_SWIZZLE, // BC3_SRGB
IDENTITY_SWIZZLE, // BC7_SRGB
IDENTITY_SWIZZLE, // D16_UNORM
IDENTITY_SWIZZLE, // D24_UNORM
IDENTITY_SWIZZLE, // D32_SFLOAT
IDENTITY_SWIZZLE, // D24_UNORM_S8_UINT
IDENTITY_SWIZZLE, // D32_SFLOAT_S8_UINT
};
SDL_COMPILE_TIME_ASSERT(SDLToVK_SurfaceSwizzle, SDL_arraysize(SDLToVK_SurfaceSwizzle) == SDL_GPU_TEXTUREFORMAT_MAX_ENUM_VALUE);
static VkComponentMapping SwizzleForSDLFormat(SDL_GPUTextureFormat format)
{
if (format == SDL_GPU_TEXTUREFORMAT_A8_UNORM) {
// TODO: use VK_FORMAT_A8_UNORM_KHR from VK_KHR_maintenance5 when available
return (VkComponentMapping){
VK_COMPONENT_SWIZZLE_ZERO,
VK_COMPONENT_SWIZZLE_ZERO,
VK_COMPONENT_SWIZZLE_ZERO,
VK_COMPONENT_SWIZZLE_R,
};
}

if (format == SDL_GPU_TEXTUREFORMAT_B4G4R4A4_UNORM) {
// ARGB -> BGRA
// TODO: use VK_FORMAT_A4R4G4B4_UNORM_PACK16_EXT from VK_EXT_4444_formats when available
return (VkComponentMapping){
VK_COMPONENT_SWIZZLE_G,
VK_COMPONENT_SWIZZLE_R,
VK_COMPONENT_SWIZZLE_A,
VK_COMPONENT_SWIZZLE_B,
};
}

return (VkComponentMapping)IDENTITY_SWIZZLE;
}

static VkFormat SwapchainCompositionToFormat[] = {
VK_FORMAT_B8G8R8A8_UNORM, // SDR
Expand Down Expand Up @@ -6948,7 +6907,7 @@ static SDL_GPUTexture *VULKAN_CreateTexture(
VulkanTextureHandle *textureHandle;

format = SDLToVK_SurfaceFormat[createinfo->format];
swizzle = SDLToVK_SurfaceSwizzle[createinfo->format];
swizzle = SwizzleForSDLFormat(createinfo->format);

if (isDepthFormat) {
imageAspectFlags = VK_IMAGE_ASPECT_DEPTH_BIT;
Expand Down

0 comments on commit daa2551

Please sign in to comment.