@@ -395,9 +395,11 @@ static bool VULKAN_UpdateTextureInternal(VULKAN_RenderData *rendererData, VkImag
395395static SDL_PixelFormat VULKAN_VkFormatToSDLPixelFormat (VkFormat vkFormat )
396396{
397397 switch (vkFormat ) {
398- case VK_FORMAT_B8G8R8A8_UNORM :
399- return SDL_PIXELFORMAT_ARGB8888 ;
400398 case VK_FORMAT_R8G8B8A8_UNORM :
399+ return SDL_PIXELFORMAT_RGBA32 ;
400+ case VK_FORMAT_B8G8R8A8_UNORM :
401+ return SDL_PIXELFORMAT_BGRA32 ;
402+ case VK_FORMAT_A8B8G8R8_UNORM_PACK32 :
401403 return SDL_PIXELFORMAT_ABGR8888 ;
402404 case VK_FORMAT_A2R10G10B10_UNORM_PACK32 :
403405 return SDL_PIXELFORMAT_ABGR2101010 ;
@@ -430,8 +432,12 @@ static VkDeviceSize VULKAN_GetBytesPerPixel(VkFormat vkFormat, int plane)
430432 return 2 ;
431433 case VK_FORMAT_R16G16_UNORM :
432434 return 4 ;
435+ case VK_FORMAT_R8G8B8A8_SRGB :
436+ case VK_FORMAT_R8G8B8A8_UNORM :
433437 case VK_FORMAT_B8G8R8A8_SRGB :
434438 case VK_FORMAT_B8G8R8A8_UNORM :
439+ case VK_FORMAT_A8B8G8R8_SRGB_PACK32 :
440+ case VK_FORMAT_A8B8G8R8_UNORM_PACK32 :
435441 case VK_FORMAT_A2R10G10B10_UNORM_PACK32 :
436442 return 4 ;
437443 case VK_FORMAT_R16G16B16A16_SFLOAT :
@@ -454,16 +460,23 @@ static VkFormat SDLPixelFormatToVkTextureFormat(Uint32 format, Uint32 output_col
454460 return VK_FORMAT_R16G16B16A16_SFLOAT ;
455461 case SDL_PIXELFORMAT_ABGR2101010 :
456462 return VK_FORMAT_A2B10G10R10_UNORM_PACK32 ;
457- case SDL_PIXELFORMAT_ARGB8888 :
463+ case SDL_PIXELFORMAT_RGBA32 :
464+ if (output_colorspace == SDL_COLORSPACE_SRGB_LINEAR ) {
465+ return VK_FORMAT_R8G8B8A8_SRGB ;
466+ }
467+ return VK_FORMAT_R8G8B8A8_UNORM ;
468+ case SDL_PIXELFORMAT_BGRA32 :
458469 if (output_colorspace == SDL_COLORSPACE_SRGB_LINEAR ) {
459470 return VK_FORMAT_B8G8R8A8_SRGB ;
460471 }
461472 return VK_FORMAT_B8G8R8A8_UNORM ;
473+ #if SDL_BYTEORDER == SDL_BIG_ENDIAN
462474 case SDL_PIXELFORMAT_ABGR8888 :
463475 if (output_colorspace == SDL_COLORSPACE_SRGB_LINEAR ) {
464- return VK_FORMAT_R8G8B8A8_SRGB ;
476+ return VK_FORMAT_A8B8G8R8_SRGB_PACK32 ;
465477 }
466- return VK_FORMAT_R8G8B8A8_UNORM ;
478+ return VK_FORMAT_A8B8G8R8_UNORM_PACK32 ;
479+ #endif
467480 case SDL_PIXELFORMAT_INDEX8 :
468481 return VK_FORMAT_R8_UNORM ;
469482 case SDL_PIXELFORMAT_YUY2 :
@@ -4553,8 +4566,11 @@ static bool VULKAN_CreateRenderer(SDL_Renderer *renderer, SDL_Window *window, SD
45534566 VULKAN_InvalidateCachedState (renderer );
45544567
45554568 renderer -> name = VULKAN_RenderDriver .name ;
4556- SDL_AddSupportedTextureFormat (renderer , SDL_PIXELFORMAT_ARGB8888 );
4569+ SDL_AddSupportedTextureFormat (renderer , SDL_PIXELFORMAT_BGRA32 ); // SDL_PIXELFORMAT_ARGB8888 on little endian systems
4570+ SDL_AddSupportedTextureFormat (renderer , SDL_PIXELFORMAT_RGBA32 );
4571+ #if SDL_BYTEORDER == SDL_BIG_ENDIAN
45574572 SDL_AddSupportedTextureFormat (renderer , SDL_PIXELFORMAT_ABGR8888 );
4573+ #endif
45584574 SDL_AddSupportedTextureFormat (renderer , SDL_PIXELFORMAT_ABGR2101010 );
45594575 SDL_AddSupportedTextureFormat (renderer , SDL_PIXELFORMAT_RGBA64_FLOAT );
45604576 SDL_AddSupportedTextureFormat (renderer , SDL_PIXELFORMAT_INDEX8 );
0 commit comments