Improve the usability of Result<T, E> and add new job schedule method to EntityQuery.

Added implicate conversion to Result<T, E> and RefResult<T, E>;
Added new ScheduleChunkParallel in EntityQuery;
Remove Ghost.SparseEntity from solution file. It's now completlty replaced by Ghost.Entities;
This commit is contained in:
2025-12-09 21:43:12 +09:00
parent 97d1118caa
commit 99c1a1980e
29 changed files with 646 additions and 553 deletions

View File

@@ -130,7 +130,7 @@ internal unsafe class D3D12CommandBuffer : ICommandBuffer
#if DEBUG
[DoesNotReturn]
#endif
private void RecordError(string cmdName, ResultStatus status)
private void RecordError(string cmdName, ErrorStatus status)
{
#if DEBUG
throw new InvalidOperationException($"Error at {cmdName} with {status}");
@@ -183,7 +183,7 @@ internal unsafe class D3D12CommandBuffer : ICommandBuffer
_commandList.Get()->Close();
_isRecording = false;
if (_lastError.Status != ResultStatus.Success)
if (_lastError.Status != ErrorStatus.None)
{
return Result.Failure($"Command buffer ended with errors at {_lastError.CommandIndex}, command '{_lastError.CommandName}': {_lastError.Status}");
}
@@ -220,21 +220,21 @@ internal unsafe class D3D12CommandBuffer : ICommandBuffer
if (!desc.Resource.IsValid)
{
RecordError(nameof(ResourceBarrier), ResultStatus.InvalidArgument);
RecordError(nameof(ResourceBarrier), ErrorStatus.InvalidArgument);
continue;
}
var recordResult = _resourceDatabase.GetResourceRecord(desc.Resource);
if (recordResult.Status != ResultStatus.Success)
if (recordResult.Error != ErrorStatus.None)
{
RecordError(nameof(ResourceBarrier), recordResult.Status);
RecordError(nameof(ResourceBarrier), recordResult.Error);
continue;
}
ref var record = ref recordResult.Value;
if (record.state != desc.StateBefore)
{
RecordError(nameof(ResourceBarrier), ResultStatus.InvalidState);
RecordError(nameof(ResourceBarrier), ErrorStatus.InvalidState);
continue;
}
@@ -263,9 +263,9 @@ internal unsafe class D3D12CommandBuffer : ICommandBuffer
}
var recordResult = _resourceDatabase.GetResourceRecord(resource);
if (recordResult.Status != ResultStatus.Success)
if (recordResult.Error != ErrorStatus.None)
{
RecordError(nameof(ResourceBarrier), recordResult.Status);
RecordError(nameof(ResourceBarrier), recordResult.Error);
return;
}
@@ -284,9 +284,9 @@ internal unsafe class D3D12CommandBuffer : ICommandBuffer
IncrementCommandCount();
var recordResult = _resourceDatabase.GetResourceRecord(resource);
if (recordResult.Status != ResultStatus.Success)
if (recordResult.Error != ErrorStatus.None)
{
RecordError(nameof(ResourceBarrier), recordResult.Status);
RecordError(nameof(ResourceBarrier), recordResult.Error);
return;
}
@@ -316,14 +316,14 @@ internal unsafe class D3D12CommandBuffer : ICommandBuffer
var handle = renderTargets[i];
if (!handle.IsValid)
{
RecordError(nameof(SetRenderTargets), ResultStatus.InvalidArgument);
RecordError(nameof(SetRenderTargets), ErrorStatus.InvalidArgument);
continue;
}
var recordResult = _resourceDatabase.GetResourceRecord(handle.AsResource());
if (recordResult.Status != ResultStatus.Success)
if (recordResult.Error != ErrorStatus.None)
{
RecordError(nameof(SetRenderTargets), recordResult.Status);
RecordError(nameof(SetRenderTargets), recordResult.Error);
continue;
}
@@ -337,9 +337,9 @@ internal unsafe class D3D12CommandBuffer : ICommandBuffer
if (pDsvHandle != null)
{
var recordResult = _resourceDatabase.GetResourceRecord(depthTarget.AsResource());
if (recordResult.Status != ResultStatus.Success)
if (recordResult.Error != ErrorStatus.None)
{
RecordError(nameof(SetRenderTargets), recordResult.Status);
RecordError(nameof(SetRenderTargets), recordResult.Error);
return;
}
@@ -362,14 +362,14 @@ internal unsafe class D3D12CommandBuffer : ICommandBuffer
var rtDesc = rtDescs[i];
if (!rtDesc.Texture.IsValid)
{
RecordError(nameof(BeginRenderPass), ResultStatus.InvalidArgument);
RecordError(nameof(BeginRenderPass), ErrorStatus.InvalidArgument);
continue;
}
var recordResult = _resourceDatabase.GetResourceRecord(rtDesc.Texture.AsResource());
if (recordResult.Status != ResultStatus.Success)
if (recordResult.Error != ErrorStatus.None)
{
RecordError(nameof(BeginRenderPass), recordResult.Status);
RecordError(nameof(BeginRenderPass), recordResult.Error);
continue;
}
@@ -402,9 +402,9 @@ internal unsafe class D3D12CommandBuffer : ICommandBuffer
if (pDsvDesc != null)
{
var recordResult = _resourceDatabase.GetResourceRecord(depthDesc.Texture.AsResource());
if (recordResult.Status != ResultStatus.Success)
if (recordResult.Error != ErrorStatus.None)
{
RecordError(nameof(BeginRenderPass), recordResult.Status);
RecordError(nameof(BeginRenderPass), recordResult.Error);
return;
}
@@ -458,10 +458,10 @@ internal unsafe class D3D12CommandBuffer : ICommandBuffer
IncrementCommandCount();
var psor = _pipelineLibrary.GetGraphicsPSO(pipelineKey);
if (psor.Status != ResultStatus.Success)
if (psor.Error != ErrorStatus.None)
{
#if DEBUG || GHOST_EDITOR
Logger.LogError($"Failed to get graphics pipeline state object for key {pipelineKey}: {psor.Status}");
Logger.LogError($"Failed to get graphics pipeline state object for key {pipelineKey}: {psor.Error}");
#endif
return;
}
@@ -487,9 +487,9 @@ internal unsafe class D3D12CommandBuffer : ICommandBuffer
IncrementCommandCount();
var recordResult = _resourceDatabase.GetResourceRecord(buffer.AsResource());
if (recordResult.Status != ResultStatus.Success)
if (recordResult.Error != ErrorStatus.None)
{
RecordError(nameof(BeginRenderPass), recordResult.Status);
RecordError(nameof(BeginRenderPass), recordResult.Error);
return;
}
@@ -657,7 +657,7 @@ internal unsafe class D3D12CommandBuffer : ICommandBuffer
var pSrcResource = _resourceDatabase.GetResource(src.AsResource());
if (pSrcResource == null || pDestResource == null)
{
RecordError(nameof(CopyBuffer), ResultStatus.InvalidArgument);
RecordError(nameof(CopyBuffer), ErrorStatus.InvalidArgument);
return;
}