Fix missing srgb for compressed textures
This commit is contained in:
parent
f9d10fe9ff
commit
8c90d7b3d0
@ -291,7 +291,7 @@ bool GEVulkanTexture::createImage(VkImageUsageFlags usage)
|
|||||||
if (m_image_view_type == VK_IMAGE_VIEW_TYPE_CUBE ||
|
if (m_image_view_type == VK_IMAGE_VIEW_TYPE_CUBE ||
|
||||||
m_image_view_type == VK_IMAGE_VIEW_TYPE_CUBE_ARRAY)
|
m_image_view_type == VK_IMAGE_VIEW_TYPE_CUBE_ARRAY)
|
||||||
image_info.flags = VK_IMAGE_CREATE_CUBE_COMPATIBLE_BIT;
|
image_info.flags = VK_IMAGE_CREATE_CUBE_COMPATIBLE_BIT;
|
||||||
if (m_internal_format == VK_FORMAT_R8G8B8A8_UNORM)
|
if (m_internal_format != getSRGBformat(m_internal_format))
|
||||||
image_info.flags |= VK_IMAGE_CREATE_MUTABLE_FORMAT_BIT;
|
image_info.flags |= VK_IMAGE_CREATE_MUTABLE_FORMAT_BIT;
|
||||||
|
|
||||||
m_vma_info = {};
|
m_vma_info = {};
|
||||||
@ -449,10 +449,11 @@ bool GEVulkanTexture::createImageView(VkImageAspectFlags aspect_flags)
|
|||||||
{
|
{
|
||||||
image_view.get()->store(view_ptr);
|
image_view.get()->store(view_ptr);
|
||||||
m_image_view = image_view;
|
m_image_view = image_view;
|
||||||
if (m_internal_format == VK_FORMAT_R8G8B8A8_UNORM)
|
VkFormat srgb_format = getSRGBformat(m_internal_format);
|
||||||
|
if (m_internal_format != srgb_format)
|
||||||
{
|
{
|
||||||
image_view = std::make_shared<std::atomic<VkImageView> >();
|
image_view = std::make_shared<std::atomic<VkImageView> >();
|
||||||
view_info.format = VK_FORMAT_R8G8B8A8_SRGB;
|
view_info.format = srgb_format;
|
||||||
view_ptr = VK_NULL_HANDLE;
|
view_ptr = VK_NULL_HANDLE;
|
||||||
if (vkCreateImageView(m_vulkan_device, &view_info,
|
if (vkCreateImageView(m_vulkan_device, &view_info,
|
||||||
NULL, &view_ptr) == VK_SUCCESS)
|
NULL, &view_ptr) == VK_SUCCESS)
|
||||||
|
@ -67,6 +67,19 @@ protected:
|
|||||||
|
|
||||||
GEVulkanDriver* m_vk;
|
GEVulkanDriver* m_vk;
|
||||||
|
|
||||||
|
// ------------------------------------------------------------------------
|
||||||
|
VkFormat getSRGBformat(VkFormat format)
|
||||||
|
{
|
||||||
|
if (format == VK_FORMAT_R8G8B8A8_UNORM)
|
||||||
|
return VK_FORMAT_R8G8B8A8_SRGB;
|
||||||
|
else if (format == VK_FORMAT_ASTC_4x4_UNORM_BLOCK)
|
||||||
|
return VK_FORMAT_ASTC_4x4_SRGB_BLOCK;
|
||||||
|
else if (format == VK_FORMAT_BC7_UNORM_BLOCK)
|
||||||
|
return VK_FORMAT_BC7_SRGB_BLOCK;
|
||||||
|
else if (format == VK_FORMAT_BC3_UNORM_BLOCK)
|
||||||
|
return VK_FORMAT_BC3_SRGB_BLOCK;
|
||||||
|
return format;
|
||||||
|
}
|
||||||
// ------------------------------------------------------------------------
|
// ------------------------------------------------------------------------
|
||||||
bool createTextureImage(uint8_t* texture_data, bool generate_hq_mipmap);
|
bool createTextureImage(uint8_t* texture_data, bool generate_hq_mipmap);
|
||||||
// ------------------------------------------------------------------------
|
// ------------------------------------------------------------------------
|
||||||
|
Loading…
x
Reference in New Issue
Block a user