mirror of https://github.com/libsdl-org/SDL
GPU: Remove unnecessary texture format swizzles in Vulkan (#10693)
This commit is contained in:
parent
4123023d3e
commit
64f12bea4a
|
@ -196,96 +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
|
||||
{
|
||||
// R10G10B10A2
|
||||
VK_COMPONENT_SWIZZLE_R,
|
||||
VK_COMPONENT_SWIZZLE_G,
|
||||
VK_COMPONENT_SWIZZLE_B,
|
||||
VK_COMPONENT_SWIZZLE_A,
|
||||
},
|
||||
{
|
||||
// B5G6R5
|
||||
VK_COMPONENT_SWIZZLE_B,
|
||||
VK_COMPONENT_SWIZZLE_G,
|
||||
VK_COMPONENT_SWIZZLE_R,
|
||||
VK_COMPONENT_SWIZZLE_ONE,
|
||||
},
|
||||
{
|
||||
// B5G5R5A1
|
||||
VK_COMPONENT_SWIZZLE_B,
|
||||
VK_COMPONENT_SWIZZLE_G,
|
||||
VK_COMPONENT_SWIZZLE_R,
|
||||
VK_COMPONENT_SWIZZLE_A,
|
||||
},
|
||||
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
|
||||
{
|
||||
// R11G11B10_UFLOAT
|
||||
VK_COMPONENT_SWIZZLE_R,
|
||||
VK_COMPONENT_SWIZZLE_G,
|
||||
VK_COMPONENT_SWIZZLE_B,
|
||||
VK_COMPONENT_SWIZZLE_ONE,
|
||||
},
|
||||
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
|
||||
|
@ -6972,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;
|
||||
|
|
Loading…
Reference in New Issue