diff --git a/src/SharpEmu.Libs/Gpu/Images/ImageRequestBuilders.ColorTarget.cs b/src/SharpEmu.Libs/Gpu/Images/ImageRequestBuilders.ColorTarget.cs index 4834d58..12bac61 100644 --- a/src/SharpEmu.Libs/Gpu/Images/ImageRequestBuilders.ColorTarget.cs +++ b/src/SharpEmu.Libs/Gpu/Images/ImageRequestBuilders.ColorTarget.cs @@ -230,7 +230,9 @@ public static partial class ImageRequestBuilders } else { - pitch = width; + // A linear color buffer uses the same 256-byte row alignment as a linear texture of the same memory; + // an unaligned pitch made the target and a later texture view of it two different cached images. + pitch = TileGeometry.TexturePitch(transferFormat, width, GuestTileMode.Linear); } var mipSpans = new TileLevelSpan[TiledSurfaceLayout.MaxLevels]; diff --git a/tests/SharpEmu.Libs.Tests/Gpu/Images/ImageRequestBuildersTests.cs b/tests/SharpEmu.Libs.Tests/Gpu/Images/ImageRequestBuildersTests.cs index 64414f2..c2cbe0a 100644 --- a/tests/SharpEmu.Libs.Tests/Gpu/Images/ImageRequestBuildersTests.cs +++ b/tests/SharpEmu.Libs.Tests/Gpu/Images/ImageRequestBuildersTests.cs @@ -240,6 +240,21 @@ public sealed class ImageRequestBuildersTests : IClassFixture