From 001005b3d56d4984399b4baf8e4b7348ecdb5062 Mon Sep 17 00:00:00 2001 From: gdkchan Date: Mon, 12 Apr 2021 22:09:42 -0300 Subject: Fix sub-image copies on intel GPUs (#2198) --- Ryujinx.Graphics.OpenGL/Image/TextureCopy.cs | 54 +++++++++++++++++++--------- 1 file changed, 38 insertions(+), 16 deletions(-) (limited to 'Ryujinx.Graphics.OpenGL/Image/TextureCopy.cs') diff --git a/Ryujinx.Graphics.OpenGL/Image/TextureCopy.cs b/Ryujinx.Graphics.OpenGL/Image/TextureCopy.cs index b27403b2..3c0546d2 100644 --- a/Ryujinx.Graphics.OpenGL/Image/TextureCopy.cs +++ b/Ryujinx.Graphics.OpenGL/Image/TextureCopy.cs @@ -205,22 +205,44 @@ namespace Ryujinx.Graphics.OpenGL.Image int copyWidth = sizeInBlocks ? BitUtils.DivRoundUp(width, blockWidth) : width; int copyHeight = sizeInBlocks ? BitUtils.DivRoundUp(height, blockHeight) : height; - GL.CopyImageSubData( - srcHandle, - srcInfo.Target.ConvertToImageTarget(), - srcLevel + level, - 0, - 0, - srcLayer, - dstHandle, - dstInfo.Target.ConvertToImageTarget(), - dstLevel + level, - 0, - 0, - dstLayer, - copyWidth, - copyHeight, - depth); + if (HwCapabilities.Vendor == HwCapabilities.GpuVendor.Intel) + { + GL.CopyImageSubData( + src.StorageHandle, + srcInfo.Target.ConvertToImageTarget(), + src.FirstLevel + srcLevel + level, + 0, + 0, + src.FirstLayer + srcLayer, + dst.StorageHandle, + dstInfo.Target.ConvertToImageTarget(), + dst.FirstLevel + dstLevel + level, + 0, + 0, + dst.FirstLayer + dstLayer, + copyWidth, + copyHeight, + depth); + } + else + { + GL.CopyImageSubData( + srcHandle, + srcInfo.Target.ConvertToImageTarget(), + srcLevel + level, + 0, + 0, + srcLayer, + dstHandle, + dstInfo.Target.ConvertToImageTarget(), + dstLevel + level, + 0, + 0, + dstLayer, + copyWidth, + copyHeight, + depth); + } } width = Math.Max(1, width >> 1); -- cgit v1.2.3