|
@@ -395,9 +395,11 @@ static bool VULKAN_UpdateTextureInternal(VULKAN_RenderData *rendererData, VkImag
|
|
|
static SDL_PixelFormat VULKAN_VkFormatToSDLPixelFormat(VkFormat vkFormat)
|
|
static SDL_PixelFormat VULKAN_VkFormatToSDLPixelFormat(VkFormat vkFormat)
|
|
|
{
|
|
{
|
|
|
switch (vkFormat) {
|
|
switch (vkFormat) {
|
|
|
- case VK_FORMAT_B8G8R8A8_UNORM:
|
|
|
|
|
- return SDL_PIXELFORMAT_ARGB8888;
|
|
|
|
|
case VK_FORMAT_R8G8B8A8_UNORM:
|
|
case VK_FORMAT_R8G8B8A8_UNORM:
|
|
|
|
|
+ return SDL_PIXELFORMAT_RGBA32;
|
|
|
|
|
+ case VK_FORMAT_B8G8R8A8_UNORM:
|
|
|
|
|
+ return SDL_PIXELFORMAT_BGRA32;
|
|
|
|
|
+ case VK_FORMAT_A8B8G8R8_UNORM_PACK32:
|
|
|
return SDL_PIXELFORMAT_ABGR8888;
|
|
return SDL_PIXELFORMAT_ABGR8888;
|
|
|
case VK_FORMAT_A2R10G10B10_UNORM_PACK32:
|
|
case VK_FORMAT_A2R10G10B10_UNORM_PACK32:
|
|
|
return SDL_PIXELFORMAT_ABGR2101010;
|
|
return SDL_PIXELFORMAT_ABGR2101010;
|
|
@@ -430,8 +432,12 @@ static VkDeviceSize VULKAN_GetBytesPerPixel(VkFormat vkFormat, int plane)
|
|
|
return 2;
|
|
return 2;
|
|
|
case VK_FORMAT_R16G16_UNORM:
|
|
case VK_FORMAT_R16G16_UNORM:
|
|
|
return 4;
|
|
return 4;
|
|
|
|
|
+ case VK_FORMAT_R8G8B8A8_SRGB:
|
|
|
|
|
+ case VK_FORMAT_R8G8B8A8_UNORM:
|
|
|
case VK_FORMAT_B8G8R8A8_SRGB:
|
|
case VK_FORMAT_B8G8R8A8_SRGB:
|
|
|
case VK_FORMAT_B8G8R8A8_UNORM:
|
|
case VK_FORMAT_B8G8R8A8_UNORM:
|
|
|
|
|
+ case VK_FORMAT_A8B8G8R8_SRGB_PACK32:
|
|
|
|
|
+ case VK_FORMAT_A8B8G8R8_UNORM_PACK32:
|
|
|
case VK_FORMAT_A2R10G10B10_UNORM_PACK32:
|
|
case VK_FORMAT_A2R10G10B10_UNORM_PACK32:
|
|
|
return 4;
|
|
return 4;
|
|
|
case VK_FORMAT_R16G16B16A16_SFLOAT:
|
|
case VK_FORMAT_R16G16B16A16_SFLOAT:
|
|
@@ -454,16 +460,23 @@ static VkFormat SDLPixelFormatToVkTextureFormat(Uint32 format, Uint32 output_col
|
|
|
return VK_FORMAT_R16G16B16A16_SFLOAT;
|
|
return VK_FORMAT_R16G16B16A16_SFLOAT;
|
|
|
case SDL_PIXELFORMAT_ABGR2101010:
|
|
case SDL_PIXELFORMAT_ABGR2101010:
|
|
|
return VK_FORMAT_A2B10G10R10_UNORM_PACK32;
|
|
return VK_FORMAT_A2B10G10R10_UNORM_PACK32;
|
|
|
- case SDL_PIXELFORMAT_ARGB8888:
|
|
|
|
|
|
|
+ case SDL_PIXELFORMAT_RGBA32:
|
|
|
|
|
+ if (output_colorspace == SDL_COLORSPACE_SRGB_LINEAR) {
|
|
|
|
|
+ return VK_FORMAT_R8G8B8A8_SRGB;
|
|
|
|
|
+ }
|
|
|
|
|
+ return VK_FORMAT_R8G8B8A8_UNORM;
|
|
|
|
|
+ case SDL_PIXELFORMAT_BGRA32:
|
|
|
if (output_colorspace == SDL_COLORSPACE_SRGB_LINEAR) {
|
|
if (output_colorspace == SDL_COLORSPACE_SRGB_LINEAR) {
|
|
|
return VK_FORMAT_B8G8R8A8_SRGB;
|
|
return VK_FORMAT_B8G8R8A8_SRGB;
|
|
|
}
|
|
}
|
|
|
return VK_FORMAT_B8G8R8A8_UNORM;
|
|
return VK_FORMAT_B8G8R8A8_UNORM;
|
|
|
|
|
+#if SDL_BYTEORDER == SDL_BIG_ENDIAN
|
|
|
case SDL_PIXELFORMAT_ABGR8888:
|
|
case SDL_PIXELFORMAT_ABGR8888:
|
|
|
if (output_colorspace == SDL_COLORSPACE_SRGB_LINEAR) {
|
|
if (output_colorspace == SDL_COLORSPACE_SRGB_LINEAR) {
|
|
|
- return VK_FORMAT_R8G8B8A8_SRGB;
|
|
|
|
|
|
|
+ return VK_FORMAT_A8B8G8R8_SRGB_PACK32;
|
|
|
}
|
|
}
|
|
|
- return VK_FORMAT_R8G8B8A8_UNORM;
|
|
|
|
|
|
|
+ return VK_FORMAT_A8B8G8R8_UNORM_PACK32;
|
|
|
|
|
+#endif
|
|
|
case SDL_PIXELFORMAT_INDEX8:
|
|
case SDL_PIXELFORMAT_INDEX8:
|
|
|
return VK_FORMAT_R8_UNORM;
|
|
return VK_FORMAT_R8_UNORM;
|
|
|
case SDL_PIXELFORMAT_YUY2:
|
|
case SDL_PIXELFORMAT_YUY2:
|
|
@@ -4553,8 +4566,11 @@ static bool VULKAN_CreateRenderer(SDL_Renderer *renderer, SDL_Window *window, SD
|
|
|
VULKAN_InvalidateCachedState(renderer);
|
|
VULKAN_InvalidateCachedState(renderer);
|
|
|
|
|
|
|
|
renderer->name = VULKAN_RenderDriver.name;
|
|
renderer->name = VULKAN_RenderDriver.name;
|
|
|
- SDL_AddSupportedTextureFormat(renderer, SDL_PIXELFORMAT_ARGB8888);
|
|
|
|
|
|
|
+ SDL_AddSupportedTextureFormat(renderer, SDL_PIXELFORMAT_BGRA32); // SDL_PIXELFORMAT_ARGB8888 on little endian systems
|
|
|
|
|
+ SDL_AddSupportedTextureFormat(renderer, SDL_PIXELFORMAT_RGBA32);
|
|
|
|
|
+#if SDL_BYTEORDER == SDL_BIG_ENDIAN
|
|
|
SDL_AddSupportedTextureFormat(renderer, SDL_PIXELFORMAT_ABGR8888);
|
|
SDL_AddSupportedTextureFormat(renderer, SDL_PIXELFORMAT_ABGR8888);
|
|
|
|
|
+#endif
|
|
|
SDL_AddSupportedTextureFormat(renderer, SDL_PIXELFORMAT_ABGR2101010);
|
|
SDL_AddSupportedTextureFormat(renderer, SDL_PIXELFORMAT_ABGR2101010);
|
|
|
SDL_AddSupportedTextureFormat(renderer, SDL_PIXELFORMAT_RGBA64_FLOAT);
|
|
SDL_AddSupportedTextureFormat(renderer, SDL_PIXELFORMAT_RGBA64_FLOAT);
|
|
|
SDL_AddSupportedTextureFormat(renderer, SDL_PIXELFORMAT_INDEX8);
|
|
SDL_AddSupportedTextureFormat(renderer, SDL_PIXELFORMAT_INDEX8);
|