Separate logical ownership, render publication, and GPU retirement across live entities, landblocks, particles, textures, mesh arenas, portal/UI teardown, and per-frame scratch storage. Add bounded DAT/texture caches, upload budgets, three-frame fence retirement, exact-incarnation appearance reconciliation, frame pacing, and extensive lifetime conformance coverage.\n\nThe seven-destination connected route now cuts peak working/private memory roughly in half, returns Caul to 125-153 FPS locally, and produces no WER or AMD reset.\n\nCo-authored-by: OpenAI Codex <codex@openai.com>
57 lines
2.1 KiB
C#
57 lines
2.1 KiB
C#
namespace AcDream.App.Rendering.Wb;
|
|
|
|
/// <summary>
|
|
/// Reports the physical outcome when a mesh-reference callback cannot provide
|
|
/// the normal strong exception guarantee. <see cref="MutationCommitted"/> lets
|
|
/// a transactional owner reconcile its marker without guessing whether a
|
|
/// throwing backend already changed the reference count.
|
|
/// </summary>
|
|
public sealed class MeshReferenceMutationException : Exception
|
|
{
|
|
public MeshReferenceMutationException(
|
|
string message,
|
|
bool mutationCommitted,
|
|
Exception innerException)
|
|
: base(message, innerException)
|
|
{
|
|
MutationCommitted = mutationCommitted;
|
|
}
|
|
|
|
public bool MutationCommitted { get; }
|
|
}
|
|
|
|
/// <summary>
|
|
/// Mockable interface over <see cref="WbMeshAdapter"/> so adapters that
|
|
/// drive ref-count lifecycle (e.g. LandblockSpawnAdapter, EntitySpawnAdapter)
|
|
/// can be unit-tested without a real WB pipeline behind them.
|
|
/// </summary>
|
|
public interface IWbMeshAdapter
|
|
{
|
|
/// <summary>
|
|
/// Acquires one logical reference. A normal exception guarantees that no
|
|
/// reference was acquired; <see cref="MeshReferenceMutationException"/>
|
|
/// explicitly reports the exceptional backend case where it was committed.
|
|
/// </summary>
|
|
void IncrementRefCount(ulong id);
|
|
|
|
/// <summary>
|
|
/// Releases one logical reference under the same committed-outcome contract
|
|
/// as <see cref="IncrementRefCount"/>.
|
|
/// </summary>
|
|
void DecrementRefCount(ulong id);
|
|
|
|
/// <summary>
|
|
/// Pins render data whose CPU preparation is owned by a specialized
|
|
/// pipeline (for example synthetic EnvCell geometry). Unlike ordinary
|
|
/// registration, production implementations must not start a generic
|
|
/// GfxObj decode for this id.
|
|
/// </summary>
|
|
void PinPreparedRenderData(ulong id) => IncrementRefCount(id);
|
|
|
|
/// <summary>
|
|
/// True once the mesh has crossed the render-thread upload barrier and is
|
|
/// available to draw. The default keeps lifecycle-only test doubles
|
|
/// source-compatible; production adapters override it.
|
|
/// </summary>
|
|
bool IsRenderDataReady(ulong id) => true;
|
|
}
|