[Profile] Count DCC metadata synchronizations and their outcome
This commit is contained in:
parent
e5c2755789
commit
d4276d89f8
|
|
@ -11,6 +11,14 @@ namespace SharpEmu.Libs.Gpu.Images;
|
|||
// Surface metadata (HTile, DCC, CMask, FMask) keyed by its guest address.
|
||||
public sealed partial class GuestImageCache
|
||||
{
|
||||
private static long _dccSyncs;
|
||||
private static long _dccSlicesUndecodable;
|
||||
private static long _dccSlicesMixed;
|
||||
private static long _dccSlicesCleared;
|
||||
|
||||
public static string TakeDccReport() => FormattableString.Invariant(
|
||||
$"[PERF][DCC_SYNC] gpu_syncs={Interlocked.Exchange(ref _dccSyncs, 0)} cleared={Interlocked.Exchange(ref _dccSlicesCleared, 0)} mixed={Interlocked.Exchange(ref _dccSlicesMixed, 0)} undecodable={Interlocked.Exchange(ref _dccSlicesUndecodable, 0)}");
|
||||
|
||||
private unsafe void MaterializeDccClear(
|
||||
ResourceSlotIdentifier imageIdentifier,
|
||||
in ImageRequest request,
|
||||
|
|
@ -96,6 +104,7 @@ public sealed partial class GuestImageCache
|
|||
allowClearToRegister: request.Role == ImageRole.ColorTarget,
|
||||
out var clear))
|
||||
{
|
||||
Interlocked.Increment(ref _dccSlicesUndecodable);
|
||||
continue;
|
||||
}
|
||||
|
||||
|
|
@ -126,9 +135,12 @@ public sealed partial class GuestImageCache
|
|||
|
||||
if (!uniform)
|
||||
{
|
||||
Interlocked.Increment(ref _dccSlicesMixed);
|
||||
continue;
|
||||
}
|
||||
|
||||
Interlocked.Increment(ref _dccSlicesCleared);
|
||||
|
||||
using (var held = _lock.Hold())
|
||||
{
|
||||
if (_slots.TryGet(imageIdentifier) == null)
|
||||
|
|
@ -423,6 +435,7 @@ public sealed partial class GuestImageCache
|
|||
var size = (ulong)layerCount * sliceSize;
|
||||
if (IsValidRange(address, size) && _bufferCache.HasGpuDirtyBytes(address, size))
|
||||
{
|
||||
Interlocked.Increment(ref _dccSyncs);
|
||||
_ = _bufferCache.TrySynchronizeCpuRead(address, size);
|
||||
}
|
||||
}
|
||||
|
|
|
|||
|
|
@ -472,6 +472,7 @@ internal static class RenderPhaseProfile
|
|||
Console.Error.WriteLine(SharpEmu.Libs.Gpu.Buffers.GuestBufferCache.TakeAsyncReadbackReport());
|
||||
Console.Error.WriteLine(SharpEmu.Libs.Gpu.Vulkan.GpuSyncProfile.TakeReport());
|
||||
Console.Error.WriteLine(SharpEmu.Libs.Gpu.Images.GuestImageCache.TakeLookupReport());
|
||||
Console.Error.WriteLine(SharpEmu.Libs.Gpu.Images.GuestImageCache.TakeDccReport());
|
||||
SharpEmu.ShaderCompiler.Resources.ResourceMaterializationProfile.WriteReport();
|
||||
SharpEmu.Libs.Diagnostics.AgcRegisterPacketProfile.WriteReport();
|
||||
SharpEmu.HLE.GpuMemory.GpuMemoryAccessProfile.WriteReport();
|
||||
|
|
|
|||
Loading…
Reference in New Issue