feat(render): unify physical residency accounting
This commit is contained in:
parent
1866ea0c6d
commit
3e18fc2730
25 changed files with 642 additions and 48 deletions
|
|
@ -1,6 +1,7 @@
|
|||
using System;
|
||||
using System.Collections.Generic;
|
||||
using AcDream.Content;
|
||||
using AcDream.App.Rendering.Residency;
|
||||
using AcDream.Core.Rendering;
|
||||
using DatReaderWriter;
|
||||
using Microsoft.Extensions.Logging;
|
||||
|
|
@ -108,7 +109,8 @@ public sealed class WbMeshAdapter : IDisposable, IWbMeshAdapter
|
|||
preparedAssets: null,
|
||||
logger,
|
||||
AcDream.App.Rendering.ImmediateGpuResourceRetirementQueue.Instance,
|
||||
ownsPreparedAssets: true)
|
||||
ownsPreparedAssets: true,
|
||||
ResidencyBudgetOptions.Default)
|
||||
{
|
||||
}
|
||||
|
||||
|
|
@ -123,21 +125,24 @@ public sealed class WbMeshAdapter : IDisposable, IWbMeshAdapter
|
|||
preparedAssets: null,
|
||||
logger,
|
||||
resourceRetirement,
|
||||
ownsPreparedAssets: true);
|
||||
ownsPreparedAssets: true,
|
||||
ResidencyBudgetOptions.Default);
|
||||
|
||||
internal WbMeshAdapter(
|
||||
GL gl,
|
||||
IDatReaderWriter dats,
|
||||
IPreparedAssetSource preparedAssets,
|
||||
ILogger<WbMeshAdapter> logger,
|
||||
AcDream.App.Rendering.IGpuResourceRetirementQueue resourceRetirement)
|
||||
AcDream.App.Rendering.IGpuResourceRetirementQueue resourceRetirement,
|
||||
ResidencyBudgetOptions? budgets = null)
|
||||
: this(
|
||||
gl,
|
||||
dats,
|
||||
preparedAssets,
|
||||
logger,
|
||||
resourceRetirement,
|
||||
ownsPreparedAssets: false)
|
||||
ownsPreparedAssets: false,
|
||||
budgets ?? ResidencyBudgetOptions.Default)
|
||||
{
|
||||
}
|
||||
|
||||
|
|
@ -147,11 +152,13 @@ public sealed class WbMeshAdapter : IDisposable, IWbMeshAdapter
|
|||
IPreparedAssetSource? preparedAssets,
|
||||
ILogger<WbMeshAdapter> logger,
|
||||
AcDream.App.Rendering.IGpuResourceRetirementQueue resourceRetirement,
|
||||
bool ownsPreparedAssets)
|
||||
bool ownsPreparedAssets,
|
||||
ResidencyBudgetOptions budgets)
|
||||
{
|
||||
ArgumentNullException.ThrowIfNull(gl);
|
||||
ArgumentNullException.ThrowIfNull(dats);
|
||||
ArgumentNullException.ThrowIfNull(logger);
|
||||
ArgumentNullException.ThrowIfNull(budgets);
|
||||
|
||||
_resourceRetirement = resourceRetirement;
|
||||
var resources = new AcDream.App.Rendering.ResourceCleanupGroup();
|
||||
|
|
@ -192,7 +199,8 @@ public sealed class WbMeshAdapter : IDisposable, IWbMeshAdapter
|
|||
meshManager = new ObjectMeshManager(
|
||||
graphicsDevice,
|
||||
resolvedPreparedAssets,
|
||||
new ConsoleErrorLogger<ObjectMeshManager>());
|
||||
new ConsoleErrorLogger<ObjectMeshManager>(),
|
||||
budgets);
|
||||
resources.Add("WB object mesh manager", meshManager.Dispose);
|
||||
resources.TransferAll();
|
||||
}
|
||||
|
|
@ -210,6 +218,26 @@ public sealed class WbMeshAdapter : IDisposable, IWbMeshAdapter
|
|||
: null;
|
||||
}
|
||||
|
||||
internal void RegisterResidencySources(ResidencyManager manager)
|
||||
{
|
||||
ArgumentNullException.ThrowIfNull(manager);
|
||||
ObjectMeshManager meshManager = _meshManager
|
||||
?? throw new InvalidOperationException(
|
||||
"An initialized mesh adapter is required for residency diagnostics.");
|
||||
manager.RegisterDomainSource(new DelegateResidencyDomainSource(
|
||||
ResidencyDomain.ObjectMeshes,
|
||||
meshManager.CaptureObjectMeshResidency));
|
||||
manager.RegisterDomainSource(new DelegateResidencyDomainSource(
|
||||
ResidencyDomain.PreparedMeshCpu,
|
||||
meshManager.CapturePreparedMeshResidency));
|
||||
manager.RegisterDomainSource(new DelegateResidencyDomainSource(
|
||||
ResidencyDomain.MeshStaging,
|
||||
meshManager.CaptureStagingResidency));
|
||||
manager.RegisterDomainSource(new DelegateResidencyDomainSource(
|
||||
ResidencyDomain.GlobalMeshArena,
|
||||
meshManager.CaptureGlobalArenaResidency));
|
||||
}
|
||||
|
||||
/// <summary>
|
||||
/// Minimal Console-backed logger that fires only on
|
||||
/// <see cref="LogLevel.Error"/> and above. Format:
|
||||
|
|
|
|||
Loading…
Add table
Add a link
Reference in a new issue