Skip to content

Commit a4de176

Browse files
ccawley2011slouken
authored andcommitted
Use the correct pixel formats for Vulkan on big endian
1 parent 9b36a76 commit a4de176

File tree

1 file changed

+22
-6
lines changed

1 file changed

+22
-6
lines changed

src/render/vulkan/SDL_render_vulkan.c

Lines changed: 22 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -395,9 +395,11 @@ static bool VULKAN_UpdateTextureInternal(VULKAN_RenderData *rendererData, VkImag
395395
static 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

Comments
 (0)