From b34df1b5b785ed894fcfa13f80e9b8b417dc3ad1 Mon Sep 17 00:00:00 2001 From: baldurk Date: Tue, 1 Dec 2015 20:29:14 +0100 Subject: [PATCH] Add super hack to do BGRA swizzling the other way around on AMD --- renderdoc/driver/vulkan/vk_replay.cpp | 18 ++++++++++-------- 1 file changed, 10 insertions(+), 8 deletions(-) diff --git a/renderdoc/driver/vulkan/vk_replay.cpp b/renderdoc/driver/vulkan/vk_replay.cpp index 937354b47..9ce39359f 100644 --- a/renderdoc/driver/vulkan/vk_replay.cpp +++ b/renderdoc/driver/vulkan/vk_replay.cpp @@ -971,10 +971,11 @@ bool VulkanReplay::RenderTextureInternal(TextureDisplay cfg, VkRenderPassBeginIn viewInfo.channels.a = VK_CHANNEL_SWIZZLE_ZERO; } - // Only needed on AMD - does the wrong thing on nvidia - so commented for now while AMD - // drivers aren't on 0.9.2 - //if(iminfo.format == VK_FORMAT_B8G8R8A8_UNORM || iminfo.format == VK_FORMAT_B8G8R8A8_SRGB) - //std::swap(viewInfo.channels.r, viewInfo.channels.b); + // VKTODOHIGH super ultra mega and very very temporary hack of great justice + // channel swizzles aren't quite consistent between vendors yet. No "right" way + if(strstr(m_pDriver->GetDeviceProps().deviceName, "AMD")) + if(iminfo.format == VK_FORMAT_B8G8R8A8_UNORM || iminfo.format == VK_FORMAT_B8G8R8A8_SRGB) + std::swap(viewInfo.channels.r, viewInfo.channels.b); VkResult vkr = ObjDisp(dev)->CreateImageView(Unwrap(dev), &viewInfo, &iminfo.view); RDCASSERT(vkr == VK_SUCCESS); @@ -3307,10 +3308,11 @@ bool VulkanReplay::GetMinMax(ResourceId texid, uint32_t sliceFace, uint32_t mip, 0 }; - // Only needed on AMD - does the wrong thing on nvidia - so commented for now while AMD - // drivers aren't on 0.9.2 - //if(iminfo.format == VK_FORMAT_B8G8R8A8_UNORM || iminfo.format == VK_FORMAT_B8G8R8A8_SRGB) - //std::swap(viewInfo.channels.r, viewInfo.channels.b); + // VKTODOHIGH super ultra mega and very very temporary hack of great justice + // channel swizzles aren't quite consistent between vendors yet. No "right" way + if(strstr(m_pDriver->GetDeviceProps().deviceName, "AMD")) + if(iminfo.format == VK_FORMAT_B8G8R8A8_UNORM || iminfo.format == VK_FORMAT_B8G8R8A8_SRGB) + std::swap(viewInfo.channels.r, viewInfo.channels.b); VkResult vkr = ObjDisp(dev)->CreateImageView(Unwrap(dev), &viewInfo, &iminfo.view); RDCASSERT(vkr == VK_SUCCESS);