Fix sub-image copies on intel GPUs (#2198)

This commit is contained in:
gdkchan 2021-04-12 22:09:42 -03:00 committed by GitHub
parent b662a26c7e
commit 001005b3d5
No known key found for this signature in database
GPG key ID: 4AEE18F83AFDEB23
5 changed files with 47 additions and 19 deletions

View file

@ -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);