mirror of
				https://git.tardis.systems/mirrors/yuzu
				synced 2025-10-31 10:44:49 +01:00 
			
		
		
		
	Merge pull request #6238 from ameerj/vk-bgr-fix
vk_texture_cache: Swap R and B channels of color flipped format
This commit is contained in:
		
						commit
						2ff39f6fdc
					
				| @ -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); | ||||
|         } | ||||
|  | ||||
		Loading…
	
		Reference in New Issue
	
	Block a user