early-access version 1631

This commit is contained in:
pineappleEA 2021-04-25 09:04:36 +02:00
parent dafcd22813
commit f809d2eba8
2 changed files with 25 additions and 2 deletions

View file

@ -1,7 +1,7 @@
yuzu emulator early access yuzu emulator early access
============= =============
This is the source code for early-access 1630. This is the source code for early-access 1631.
## Legal Notice ## Legal Notice

View file

@ -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) { switch (value) {
case SwizzleSource::G: case SwizzleSource::G:
return SwizzleSource::R; 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, void CopyBufferToImage(vk::CommandBuffer cmdbuf, VkBuffer src_buffer, VkImage image,
VkImageAspectFlags aspect_mask, bool is_initialized, VkImageAspectFlags aspect_mask, bool is_initialized,
std::span<const VkBufferImageCopy> copies) { 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 { struct RangedBarrierRange {
u32 min_mip = std::numeric_limits<u32>::max(); u32 min_mip = std::numeric_limits<u32>::max();
u32 max_mip = std::numeric_limits<u32>::min(); u32 max_mip = std::numeric_limits<u32>::min();
@ -948,6 +968,9 @@ ImageView::ImageView(TextureCacheRuntime& runtime, const VideoCommon::ImageViewI
}; };
if (!info.IsRenderTarget()) { if (!info.IsRenderTarget()) {
swizzle = info.Swizzle(); 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) { if ((aspect_mask & (VK_IMAGE_ASPECT_DEPTH_BIT | VK_IMAGE_ASPECT_STENCIL_BIT)) != 0) {
std::ranges::transform(swizzle, swizzle.begin(), ConvertGreenRed); std::ranges::transform(swizzle, swizzle.begin(), ConvertGreenRed);
} }