[Tests] Cover DCC metadata adopted from a texture request
Co-authored-by: Sekai <140012992+igettingit@users.noreply.github.com>
This commit is contained in:
parent
2295a55bd1
commit
3f8649449c
|
|
@ -196,6 +196,41 @@ public sealed partial class GuestImageCacheTests
|
|||
harness.Shutdown();
|
||||
}
|
||||
|
||||
[Fact]
|
||||
public void ATextureRequestWithDcc_GivesAnImageFoundWithoutMetadataItsDccMetadata()
|
||||
{
|
||||
if (!GatePrerequisites.Ready(_vulkan)) return;
|
||||
using var harness = new CacheHarness(_vulkan);
|
||||
const ulong SliceSize = 0x1000;
|
||||
var address = harness.MapBacked(0x20000, ReadWrite);
|
||||
var metadata = address + 0x10000;
|
||||
var plain = LinearRequest(address + 0xc000, 4, Format.R8G8B8A8Unorm, GuestPixelFormat.Bits8_8_8_8UNorm, GuestImageType.Color2D, new Extent3D(1, 1, 1), 1, 4, 1);
|
||||
var imageId = harness.Find(ref plain);
|
||||
var image = harness.Image(imageId);
|
||||
image.Description.TileMode = GuestTileMode.RenderTarget;
|
||||
Assert.Equal(MetadataKind.None, image.Description.Metadata.Kind);
|
||||
harness.Write(metadata, Enumerable.Repeat((byte)0x55, (int)SliceSize).ToArray());
|
||||
harness.Worker.Run(() =>
|
||||
{
|
||||
Assert.NotNull(harness.Cache.ObtainBuffer(metadata, SliceSize, isWritten: true).Buffer);
|
||||
harness.Cache.FillBuffer(metadata, SliceSize, 0, isGds: false);
|
||||
});
|
||||
Assert.True(harness.Cache.HasGpuDirtyBytes(metadata, SliceSize));
|
||||
|
||||
var compressed = plain;
|
||||
compressed.Description.TileMode = GuestTileMode.RenderTarget;
|
||||
compressed.Description.Metadata.Kind = MetadataKind.Dcc;
|
||||
compressed.Description.Metadata.Range = new GuestSpan(metadata, 0);
|
||||
Assert.Equal(imageId, harness.Find(ref compressed));
|
||||
Assert.Equal(MetadataKind.Dcc, image.Description.Metadata.Kind);
|
||||
Assert.Equal(metadata, image.Description.Metadata.Range.Address);
|
||||
Assert.Equal(SliceSize, image.Description.DccSliceSize);
|
||||
Assert.False(harness.Cache.HasGpuDirtyBytes(metadata, SliceSize));
|
||||
Assert.True(harness.Images.TryReadGuestDccClear(metadata, SliceSize, 0, out _, out var code));
|
||||
Assert.Equal(0x00, code);
|
||||
harness.Shutdown();
|
||||
}
|
||||
|
||||
[Fact]
|
||||
public void GuestDccClear_ReadsOnlyUniformClearSlices()
|
||||
{
|
||||
|
|
|
|||
Loading…
Reference in New Issue