Align managed raster RenderGraph authoring with URP
This commit is contained in:
@@ -540,6 +540,12 @@ namespace XCEngine
|
||||
ulong rasterPassHandle,
|
||||
ref Rendering.FinalColorSettings settings);
|
||||
|
||||
[MethodImpl(MethodImplOptions.InternalCall)]
|
||||
internal static extern bool
|
||||
Rendering_ScriptableRenderContext_SetRasterPassManagedRenderFuncExecution(
|
||||
ulong nativeHandle,
|
||||
ulong rasterPassHandle);
|
||||
|
||||
[MethodImpl(MethodImplOptions.InternalCall)]
|
||||
internal static extern bool
|
||||
Rendering_ScriptableRenderContext_CommitRasterPass(
|
||||
|
||||
@@ -164,9 +164,9 @@ namespace XCEngine.Rendering
|
||||
name));
|
||||
}
|
||||
|
||||
// SRP v1 wrapper over managed fullscreen raster requests. Commit only
|
||||
// succeeds on fullscreen sequence stages and the execution kinds remain
|
||||
// limited to the built-in fullscreen pass family.
|
||||
// Public RenderGraph raster authoring entry point. Built-in fullscreen
|
||||
// kernels are internal URP implementation details, not public context
|
||||
// shortcuts.
|
||||
public RenderGraphRasterPassBuilder AddRasterPass(
|
||||
string passName)
|
||||
{
|
||||
|
||||
@@ -9,12 +9,24 @@ namespace XCEngine.Rendering
|
||||
None = 0,
|
||||
ColorScaleFullscreen = 1,
|
||||
ShaderVectorFullscreen = 2,
|
||||
FinalColorFullscreen = 3
|
||||
FinalColorFullscreen = 3,
|
||||
ManagedRenderFunc = 4
|
||||
}
|
||||
|
||||
// Managed SRP v1 raster recording is intentionally narrow: this builder
|
||||
// only describes fullscreen raster passes that map onto the built-in
|
||||
// ColorScale / ShaderVector / FinalColor executions.
|
||||
public sealed class RenderGraphRasterContext
|
||||
{
|
||||
internal RenderGraphRasterContext(
|
||||
CommandBuffer commandBuffer)
|
||||
{
|
||||
cmd = commandBuffer ?? new CommandBuffer();
|
||||
}
|
||||
|
||||
public CommandBuffer cmd { get; private set; }
|
||||
}
|
||||
|
||||
// Public raster pass authoring follows the RenderGraph shape: declare
|
||||
// resources, then provide a render func. Built-in fullscreen kernels are
|
||||
// kept as internal execution details for URP.
|
||||
public sealed class RenderGraphRasterPassBuilder
|
||||
{
|
||||
private struct TextureBindingRequest
|
||||
@@ -40,6 +52,7 @@ namespace XCEngine.Rendering
|
||||
private string m_shaderPath = string.Empty;
|
||||
private string m_shaderPassName = string.Empty;
|
||||
private FinalColorSettings m_finalColorSettings;
|
||||
private Action<RenderGraphRasterContext> m_renderFunc;
|
||||
private RenderGraphRasterPassExecutionKind m_executionKind;
|
||||
private bool m_finalized;
|
||||
|
||||
@@ -70,19 +83,6 @@ namespace XCEngine.Rendering
|
||||
return this;
|
||||
}
|
||||
|
||||
public RenderGraphRasterPassBuilder
|
||||
SetFinalColorFullscreenExecution(
|
||||
FinalColorSettings settings)
|
||||
{
|
||||
m_executionKind =
|
||||
RenderGraphRasterPassExecutionKind
|
||||
.FinalColorFullscreen;
|
||||
m_finalColorSettings = settings;
|
||||
m_shaderPath = string.Empty;
|
||||
m_shaderPassName = string.Empty;
|
||||
return this;
|
||||
}
|
||||
|
||||
public RenderGraphRasterPassBuilder UseTexture(
|
||||
RenderGraphTextureHandle texture)
|
||||
{
|
||||
@@ -150,7 +150,37 @@ namespace XCEngine.Rendering
|
||||
return this;
|
||||
}
|
||||
|
||||
public RenderGraphRasterPassBuilder
|
||||
public RenderGraphRasterPassBuilder SetRenderFunc(
|
||||
Action<RenderGraphRasterContext> renderFunc)
|
||||
{
|
||||
if (renderFunc == null)
|
||||
{
|
||||
throw new ArgumentNullException(nameof(renderFunc));
|
||||
}
|
||||
|
||||
m_executionKind =
|
||||
RenderGraphRasterPassExecutionKind.ManagedRenderFunc;
|
||||
m_renderFunc = renderFunc;
|
||||
m_shaderPath = string.Empty;
|
||||
m_shaderPassName = string.Empty;
|
||||
return this;
|
||||
}
|
||||
|
||||
internal RenderGraphRasterPassBuilder
|
||||
SetFinalColorFullscreenExecution(
|
||||
FinalColorSettings settings)
|
||||
{
|
||||
m_executionKind =
|
||||
RenderGraphRasterPassExecutionKind
|
||||
.FinalColorFullscreen;
|
||||
m_finalColorSettings = settings;
|
||||
m_renderFunc = null;
|
||||
m_shaderPath = string.Empty;
|
||||
m_shaderPassName = string.Empty;
|
||||
return this;
|
||||
}
|
||||
|
||||
internal RenderGraphRasterPassBuilder
|
||||
SetColorScaleFullscreenExecution(
|
||||
Vector4 colorScale)
|
||||
{
|
||||
@@ -158,12 +188,13 @@ namespace XCEngine.Rendering
|
||||
RenderGraphRasterPassExecutionKind
|
||||
.ColorScaleFullscreen;
|
||||
m_vectorPayload = colorScale;
|
||||
m_renderFunc = null;
|
||||
m_shaderPath = string.Empty;
|
||||
m_shaderPassName = string.Empty;
|
||||
return this;
|
||||
}
|
||||
|
||||
public RenderGraphRasterPassBuilder
|
||||
internal RenderGraphRasterPassBuilder
|
||||
SetShaderVectorFullscreenExecution(
|
||||
string shaderPath,
|
||||
Vector4 vectorPayload,
|
||||
@@ -180,6 +211,7 @@ namespace XCEngine.Rendering
|
||||
RenderGraphRasterPassExecutionKind
|
||||
.ShaderVectorFullscreen;
|
||||
m_vectorPayload = vectorPayload;
|
||||
m_renderFunc = null;
|
||||
m_shaderPath = shaderPath;
|
||||
m_shaderPassName = shaderPassName ?? string.Empty;
|
||||
return this;
|
||||
@@ -187,11 +219,9 @@ namespace XCEngine.Rendering
|
||||
|
||||
public bool Commit()
|
||||
{
|
||||
// Native bridge rejects raster pass recording outside the
|
||||
// fullscreen sequence stages.
|
||||
if (m_finalized ||
|
||||
!HasExecutionConfigured() ||
|
||||
!HasAnyColorAttachment())
|
||||
!HasRequiredAttachments())
|
||||
{
|
||||
return false;
|
||||
}
|
||||
@@ -341,6 +371,20 @@ namespace XCEngine.Rendering
|
||||
nativePassHandle,
|
||||
ref m_finalColorSettings);
|
||||
break;
|
||||
case RenderGraphRasterPassExecutionKind
|
||||
.ManagedRenderFunc:
|
||||
// Managed command buffers are not bridged into native
|
||||
// graph execution yet, so the render func is invoked
|
||||
// during recording while native records the declared IO.
|
||||
m_renderFunc(
|
||||
new RenderGraphRasterContext(
|
||||
new CommandBuffer(m_passName)));
|
||||
configuredExecution =
|
||||
InternalCalls
|
||||
.Rendering_ScriptableRenderContext_SetRasterPassManagedRenderFuncExecution(
|
||||
m_context.nativeHandle,
|
||||
nativePassHandle);
|
||||
break;
|
||||
default:
|
||||
configuredExecution = false;
|
||||
break;
|
||||
@@ -359,6 +403,18 @@ namespace XCEngine.Rendering
|
||||
RenderGraphRasterPassExecutionKind.None;
|
||||
}
|
||||
|
||||
private bool HasRequiredAttachments()
|
||||
{
|
||||
if (m_executionKind ==
|
||||
RenderGraphRasterPassExecutionKind.ManagedRenderFunc)
|
||||
{
|
||||
return HasAnyColorAttachment() ||
|
||||
m_depthAttachment.isValid;
|
||||
}
|
||||
|
||||
return HasAnyColorAttachment();
|
||||
}
|
||||
|
||||
private void AddReadTexture(
|
||||
RenderGraphTextureHandle texture,
|
||||
bool isDepth)
|
||||
|
||||
Reference in New Issue
Block a user