Resolve identity swizzles at VkImageView creation time
Bug: b/119620767
Change-Id: Ia00deb9b225f38b7faf8bf0fb41d02b0f8b36ebc
Reviewed-on: https://swiftshader-review.googlesource.com/c/SwiftShader/+/29849
Reviewed-by: Nicolas Capens <nicolascapens@google.com>
Kokoro-Presubmit: kokoro <noreply+kokoro@google.com>
Tested-by: Chris Forbes <chrisforbes@google.com>
diff --git a/src/Vulkan/VkImageView.cpp b/src/Vulkan/VkImageView.cpp
index 6e99bf7..5310acf 100644
--- a/src/Vulkan/VkImageView.cpp
+++ b/src/Vulkan/VkImageView.cpp
@@ -15,12 +15,25 @@
#include "VkImageView.hpp"
#include "VkImage.hpp"
+namespace
+{
+ VkComponentMapping ResolveIdentityMapping(VkComponentMapping m)
+ {
+ return {
+ (m.r == VK_COMPONENT_SWIZZLE_IDENTITY) ? VK_COMPONENT_SWIZZLE_R : m.r,
+ (m.g == VK_COMPONENT_SWIZZLE_IDENTITY) ? VK_COMPONENT_SWIZZLE_G : m.g,
+ (m.b == VK_COMPONENT_SWIZZLE_IDENTITY) ? VK_COMPONENT_SWIZZLE_B : m.b,
+ (m.a == VK_COMPONENT_SWIZZLE_IDENTITY) ? VK_COMPONENT_SWIZZLE_A : m.a,
+ };
+ }
+}
+
namespace vk
{
ImageView::ImageView(const VkImageViewCreateInfo* pCreateInfo, void* mem) :
image(Cast(pCreateInfo->image)), viewType(pCreateInfo->viewType), format(pCreateInfo->format),
- components(pCreateInfo->components), subresourceRange(pCreateInfo->subresourceRange)
+ components(ResolveIdentityMapping(pCreateInfo->components)), subresourceRange(pCreateInfo->subresourceRange)
{
}