From 11f472acc681a7e893f915b651013559223d9404 Mon Sep 17 00:00:00 2001 From: InoriRus Date: Thu, 26 May 2022 18:33:27 +1000 Subject: [PATCH] fix gamma --- appveyor.yml | 2 +- source/CMakeLists.txt | 2 +- source/emulator/src/Graphics/Window.cpp | 35 +++++++++++++++++++------ 3 files changed, 29 insertions(+), 10 deletions(-) diff --git a/appveyor.yml b/appveyor.yml index 9a94746..9ecea4e 100644 --- a/appveyor.yml +++ b/appveyor.yml @@ -1,4 +1,4 @@ -version: 0.1.1.build-{build} +version: 0.1.2.build-{build} image: Visual Studio 2019 environment: matrix: diff --git a/source/CMakeLists.txt b/source/CMakeLists.txt index 6ff7cfe..e863571 100644 --- a/source/CMakeLists.txt +++ b/source/CMakeLists.txt @@ -82,7 +82,7 @@ if (KYTY_LINKER STREQUAL LD) set(KYTY_LD_OPTIONS "-Wl,--image-base=0x100000000000") endif() -project(Kyty${KYTY_PROJECT_NAME}${CMAKE_BUILD_TYPE}${KYTY_COMPILER} VERSION 0.1.1) +project(Kyty${KYTY_PROJECT_NAME}${CMAKE_BUILD_TYPE}${KYTY_COMPILER} VERSION 0.1.2) include(src_script.cmake) diff --git a/source/emulator/src/Graphics/Window.cpp b/source/emulator/src/Graphics/Window.cpp index 77b509e..09b9850 100644 --- a/source/emulator/src/Graphics/Window.cpp +++ b/source/emulator/src/Graphics/Window.cpp @@ -219,7 +219,8 @@ struct SurfaceCapabilities VkSurfaceCapabilitiesKHR capabilities {}; Vector formats; Vector present_modes; - bool format_srgb_bgra32 = false; + bool format_srgb_bgra32 = false; + bool format_unorm_bgra32 = false; }; struct WindowContext @@ -1270,6 +1271,11 @@ static void VulkanGetSurfaceCapabilities(VkPhysicalDevice physical_device, VkSur r->format_srgb_bgra32 = true; break; } + if (f.format == VK_FORMAT_B8G8R8A8_UNORM && f.colorSpace == VK_COLOR_SPACE_SRGB_NONLINEAR_KHR) + { + r->format_unorm_bgra32 = true; + break; + } } } @@ -1822,13 +1828,26 @@ static VKAPI_ATTR VkResult VKAPI_CALL VulkanCreateDebugUtilsMessengerEXT(VkInsta image_count = std::clamp(image_count, r->capabilities.minImageCount, r->capabilities.maxImageCount); VkSwapchainCreateInfoKHR create_info {}; - create_info.sType = VK_STRUCTURE_TYPE_SWAPCHAIN_CREATE_INFO_KHR; - create_info.pNext = nullptr; - create_info.flags = 0; - create_info.surface = surface; - create_info.minImageCount = image_count; - create_info.imageFormat = (r->format_srgb_bgra32 ? VK_FORMAT_B8G8R8A8_SRGB : r->formats.At(0).format); - create_info.imageColorSpace = (r->format_srgb_bgra32 ? VK_COLOR_SPACE_SRGB_NONLINEAR_KHR : r->formats.At(0).colorSpace); + create_info.sType = VK_STRUCTURE_TYPE_SWAPCHAIN_CREATE_INFO_KHR; + create_info.pNext = nullptr; + create_info.flags = 0; + create_info.surface = surface; + create_info.minImageCount = image_count; + + if (r->format_unorm_bgra32) + { + create_info.imageFormat = VK_FORMAT_B8G8R8A8_UNORM; + create_info.imageColorSpace = VK_COLOR_SPACE_SRGB_NONLINEAR_KHR; + } else if (r->format_srgb_bgra32) + { + create_info.imageFormat = VK_FORMAT_B8G8R8A8_SRGB; + create_info.imageColorSpace = VK_COLOR_SPACE_SRGB_NONLINEAR_KHR; + } else + { + create_info.imageFormat = r->formats.At(0).format; + create_info.imageColorSpace = r->formats.At(0).colorSpace; + } + create_info.imageExtent = extent; create_info.imageArrayLayers = 1; create_info.imageUsage = VK_IMAGE_USAGE_COLOR_ATTACHMENT_BIT | VK_IMAGE_USAGE_TRANSFER_DST_BIT;