Support reciprocal ABGR sampled views

This commit is contained in:
nmzik
2026-07-17 12:55:33 +02:00
parent 0abe03af94
commit 1416131a0a
4 changed files with 26 additions and 4 deletions
+2 -1
View File
@@ -67,7 +67,7 @@ enum class VulkanImageType {
};
struct VulkanImage {
static constexpr int VIEW_MAX = 21;
static constexpr int VIEW_MAX = 22;
static constexpr int VIEW_DEFAULT = 0;
static constexpr int VIEW_BGRA = 1;
static constexpr int VIEW_DEPTH_TEXTURE = 2;
@@ -89,6 +89,7 @@ struct VulkanImage {
static constexpr int VIEW_STORAGE = 18;
static constexpr int VIEW_STORAGE_ARRAY = 19;
static constexpr int VIEW_BGRA_TO_RGBA = 20;
static constexpr int VIEW_ABGR = 21;
explicit VulkanImage(VulkanImageType type): type(type) {}
@@ -84,6 +84,10 @@ namespace Libs::Graphics {
default: break;
}
}
if (image_format == VK_FORMAT_R16G16B16A16_SFLOAT && view_format == image_format &&
swizzle == DstSel(7, 6, 5, 4)) {
return VulkanImage::VIEW_ABGR;
}
if (IsBgraToRgbaSampledView(image_format, view_format) && swizzle == DstSel(6, 5, 4, 7)) {
return VulkanImage::VIEW_BGRA_TO_RGBA;
}
@@ -1437,6 +1437,10 @@ VkImageView TextureCache::GetRenderTargetSampledView(GraphicContext* c
components = {VK_COMPONENT_SWIZZLE_B, VK_COMPONENT_SWIZZLE_G, VK_COMPONENT_SWIZZLE_R,
VK_COMPONENT_SWIZZLE_A};
break;
case VulkanImage::VIEW_ABGR:
components = {VK_COMPONENT_SWIZZLE_A, VK_COMPONENT_SWIZZLE_B, VK_COMPONENT_SWIZZLE_G,
VK_COMPONENT_SWIZZLE_R};
break;
default:
EXIT("TextureCache: unsupported render-target sampled view variant: %d\n", variant);
}