Added new RHI abstraction layer;
Added new console debug page to UnitTest;
This commit is contained in:
@@ -1,6 +1,4 @@
|
||||
using Ghost.Core;
|
||||
using Ghost.Graphics.Data;
|
||||
using System.Collections.Immutable;
|
||||
using Win32;
|
||||
using Win32.Graphics.Direct3D;
|
||||
using Win32.Graphics.Direct3D12;
|
||||
@@ -8,6 +6,12 @@ using Win32.Graphics.Dxgi;
|
||||
|
||||
namespace Ghost.Graphics.D3D12;
|
||||
|
||||
/// <summary>
|
||||
/// Legacy D3D12 GraphicsDevice - DEPRECATED
|
||||
/// Use D3D12RenderDevice instead for new code
|
||||
/// This class remains for compatibility during migration
|
||||
/// </summary>
|
||||
[Obsolete("Use D3D12RenderDevice instead")]
|
||||
internal unsafe class GraphicsDevice
|
||||
{
|
||||
private ComPtr<IDXGIFactory7> _dxgiFactory;
|
||||
@@ -15,14 +19,8 @@ internal unsafe class GraphicsDevice
|
||||
private ComPtr<IDXGIAdapter1> _adapter;
|
||||
private ComPtr<ID3D12CommandQueue> _commandQueue;
|
||||
|
||||
private ImmutableArray<Renderer> _initializeQueue;
|
||||
private ImmutableArray<Renderer> _renderers;
|
||||
|
||||
private bool _disposed;
|
||||
|
||||
public ReadOnlySpan<Renderer> InitializeQueue => _initializeQueue.AsSpan();
|
||||
public ReadOnlySpan<Renderer> Renderers => _renderers.AsSpan();
|
||||
|
||||
public ConstPtr<ID3D12Device14> NativeDevice => new(_device.Get());
|
||||
public ConstPtr<IDXGIFactory7> DXGIFactory => new(_dxgiFactory.Get());
|
||||
public ConstPtr<IDXGIAdapter1> Adapter => new(_adapter.Get());
|
||||
@@ -32,9 +30,6 @@ internal unsafe class GraphicsDevice
|
||||
{
|
||||
InitializeDevice();
|
||||
InitializeCommandQueue();
|
||||
|
||||
_initializeQueue = ImmutableArray<Renderer>.Empty;
|
||||
_renderers = ImmutableArray<Renderer>.Empty;
|
||||
}
|
||||
|
||||
private void InitializeDevice()
|
||||
@@ -88,48 +83,6 @@ internal unsafe class GraphicsDevice
|
||||
}
|
||||
}
|
||||
|
||||
public Renderer CreateRenderer(in SwapChainPresenter presenter)
|
||||
{
|
||||
var renderView = new Renderer(this, in presenter);
|
||||
ImmutableInterlocked.Update(ref _initializeQueue, old => old.Add(renderView));
|
||||
|
||||
return renderView;
|
||||
}
|
||||
|
||||
public void RemoveRenderer(Renderer renderer)
|
||||
{
|
||||
if (renderer is Renderer dx12RenderView)
|
||||
{
|
||||
dx12RenderView.Dispose();
|
||||
|
||||
var index = _initializeQueue.IndexOf(dx12RenderView);
|
||||
if (index > -1)
|
||||
{
|
||||
ImmutableInterlocked.Update(ref _initializeQueue, old => old.RemoveAt(index));
|
||||
}
|
||||
else
|
||||
{
|
||||
ImmutableInterlocked.Update(ref _renderers, old => old.Remove(dx12RenderView));
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
public void InitializePendingRenderers()
|
||||
{
|
||||
if (_initializeQueue.IsEmpty)
|
||||
{
|
||||
return;
|
||||
}
|
||||
|
||||
foreach (var renderer in _initializeQueue.AsSpan())
|
||||
{
|
||||
renderer.Initialize();
|
||||
}
|
||||
|
||||
ImmutableInterlocked.Update(ref _renderers, old => old.AddRange(_initializeQueue));
|
||||
_initializeQueue = _initializeQueue.Clear();
|
||||
}
|
||||
|
||||
public void Dispose()
|
||||
{
|
||||
if (_disposed)
|
||||
@@ -137,11 +90,6 @@ internal unsafe class GraphicsDevice
|
||||
return;
|
||||
}
|
||||
|
||||
foreach (var renderer in _renderers)
|
||||
{
|
||||
renderer.Dispose();
|
||||
}
|
||||
|
||||
_commandQueue.Dispose();
|
||||
_device.Reset();
|
||||
_dxgiFactory.Dispose();
|
||||
|
||||
Reference in New Issue
Block a user