feat(graphics): improve rendering pipeline and docs

- Refactor D3D12 backend and RenderGraph module
- Update graphics RHI and core rendering components
- Add Random.hlsl shader include
- Regenerate API documentation and update user guides
This commit is contained in:
2026-03-27 22:23:44 +09:00
parent 0a2eb619eb
commit d8a7b07624
495 changed files with 51961 additions and 892 deletions

View File

@@ -68,7 +68,7 @@ public class RenderSystem : IDisposable
[UnscopedRef]
public ref UnsafeList<RenderRequest> RenderRequests => ref _renderRequests;
public void Dispose()
public void Dispose()
{
CpuReadyEvent.Dispose();
GpuReadyEvent.Dispose();
@@ -87,6 +87,7 @@ public class RenderSystem : IDisposable
private readonly IGraphicsEngine _graphicsEngine;
private readonly ResourceManager _resourceManager;
private readonly SwapChainManager _swapChainManager;
private readonly FrameResource[] _frameResources;
private readonly Thread _renderThread;
@@ -104,6 +105,8 @@ public class RenderSystem : IDisposable
private bool _isRunning;
private bool _disposed;
internal SwapChainManager SwapChainManager => _swapChainManager;
public IGraphicsEngine GraphicsEngine => _graphicsEngine;
public ResourceManager ResourceManager => _resourceManager;
public bool IsRunning => _isRunning;
@@ -161,6 +164,7 @@ public class RenderSystem : IDisposable
}
_resourceManager = new ResourceManager(_graphicsEngine.ResourceAllocator, _graphicsEngine.ResourceDatabase);
_swapChainManager = new SwapChainManager(_graphicsEngine);
// Create frame resources for synchronization
_frameResources = new FrameResource[desc.FrameBufferCount];
@@ -280,6 +284,7 @@ public class RenderSystem : IDisposable
// TODO: How can we support async compute and async copy?
var cmd = _graphicsEngine.GetPooledCommandBuffer(CommandBufferType.Graphics);
ref var renderRequests = ref frameResource.RenderRequests;
try
{
@@ -290,8 +295,8 @@ public class RenderSystem : IDisposable
CommandBuffer = cmd
};
ref var renderRequests = ref frameResource.RenderRequests;
_renderPipeline.Render(renderCtx, renderRequests.AsSpan());
_swapChainManager.TransitionToPresent(cmd);
// End recording commands and submit
r = cmd.End();
@@ -302,6 +307,11 @@ public class RenderSystem : IDisposable
}
_graphicsEngine.Device.GraphicsQueue.Submit(cmd);
_swapChainManager.PresentAll(cmd);
}
finally
{
_graphicsEngine.ReturnPooledCommandBuffer(cmd);
for (var i = 0; i < renderRequests.Count; i++)
{
@@ -310,10 +320,6 @@ public class RenderSystem : IDisposable
renderRequests.Clear();
}
finally
{
_graphicsEngine.ReturnPooledCommandBuffer(cmd);
}
// End the frame and present
_resourceManager.EndFrame(_cpuFenceValue);
@@ -325,9 +331,6 @@ public class RenderSystem : IDisposable
break;
}
// TODO: Present here.
// Prepare for the next frame.
_gpuFenceValue++;
@@ -415,13 +418,15 @@ public class RenderSystem : IDisposable
Stop();
for (int i = 0; i < _frameResources.Length; i++)
for (var i = 0; i < _frameResources.Length; i++)
{
ref var frameResource = ref _frameResources[i];
frameResource.Dispose();
}
_renderPipeline.Dispose();
_swapChainManager.Dispose();
_resourceManager.Dispose();
_graphicsEngine.Dispose();
_shutdownEvent.Dispose();