|
|
|
@ -417,7 +417,7 @@ constexpr VkBorderColor ConvertBorderColor(const std::array<float, 4>& color) { |
|
|
|
}; |
|
|
|
} |
|
|
|
|
|
|
|
[[nodiscard]] constexpr SwizzleSource ConvertGreenRed(SwizzleSource value) { |
|
|
|
[[nodiscard]] SwizzleSource ConvertGreenRed(SwizzleSource value) { |
|
|
|
switch (value) { |
|
|
|
case SwizzleSource::G: |
|
|
|
return SwizzleSource::R; |
|
|
|
@ -426,6 +426,17 @@ constexpr VkBorderColor ConvertBorderColor(const std::array<float, 4>& color) { |
|
|
|
} |
|
|
|
} |
|
|
|
|
|
|
|
[[nodiscard]] SwizzleSource SwapBlueRed(SwizzleSource value) { |
|
|
|
switch (value) { |
|
|
|
case SwizzleSource::R: |
|
|
|
return SwizzleSource::B; |
|
|
|
case SwizzleSource::B: |
|
|
|
return SwizzleSource::R; |
|
|
|
default: |
|
|
|
return value; |
|
|
|
} |
|
|
|
} |
|
|
|
|
|
|
|
void CopyBufferToImage(vk::CommandBuffer cmdbuf, VkBuffer src_buffer, VkImage image, |
|
|
|
VkImageAspectFlags aspect_mask, bool is_initialized, |
|
|
|
std::span<const VkBufferImageCopy> copies) { |
|
|
|
@ -543,6 +554,15 @@ void CopyBufferToImage(vk::CommandBuffer cmdbuf, VkBuffer src_buffer, VkImage im |
|
|
|
}; |
|
|
|
} |
|
|
|
|
|
|
|
[[nodiscard]] bool IsFormatFlipped(PixelFormat format) { |
|
|
|
switch (format) { |
|
|
|
case PixelFormat::A1B5G5R5_UNORM: |
|
|
|
return true; |
|
|
|
default: |
|
|
|
return false; |
|
|
|
} |
|
|
|
} |
|
|
|
|
|
|
|
struct RangedBarrierRange { |
|
|
|
u32 min_mip = std::numeric_limits<u32>::max(); |
|
|
|
u32 max_mip = std::numeric_limits<u32>::min(); |
|
|
|
@ -948,6 +968,9 @@ ImageView::ImageView(TextureCacheRuntime& runtime, const VideoCommon::ImageViewI |
|
|
|
}; |
|
|
|
if (!info.IsRenderTarget()) { |
|
|
|
swizzle = info.Swizzle(); |
|
|
|
if (IsFormatFlipped(format)) { |
|
|
|
std::ranges::transform(swizzle, swizzle.begin(), SwapBlueRed); |
|
|
|
} |
|
|
|
if ((aspect_mask & (VK_IMAGE_ASPECT_DEPTH_BIT | VK_IMAGE_ASPECT_STENCIL_BIT)) != 0) { |
|
|
|
std::ranges::transform(swizzle, swizzle.begin(), ConvertGreenRed); |
|
|
|
} |
|
|
|
|