Tighten URP pass queue snapshot ownership
This commit is contained in:
@@ -67,6 +67,10 @@ Unity 兼容的公开命名、对象所有权和扩展点。
|
||||
resource versions 必须保持一致。
|
||||
- 修改 renderer-index 行为时,要一起更新 `CameraRenderRequest.rendererIndex`、stage support contexts、
|
||||
`RendererRecordingContext`、managed probes 和 Mono bridge calls。
|
||||
- 修改 URP stage planning、stage support 或 recording 行为时,要保持 `CameraFramePlan.framePlanId`、
|
||||
`RenderPipelineStageSupportContext.framePlanId`、`RenderPipelineStageRenderGraphContext.framePlanId`、
|
||||
`ScriptableRenderPipelinePlanningContext.framePlanId` 和 `ScriptableRenderContext.framePlanId` 同步。
|
||||
`framePlanId` 是 per-camera-frame plan 的托管快照键,不是 renderer 或 camera 的长期身份。
|
||||
- 新增 public managed rendering type 时,将它加入 `managed/CMakeLists.txt`,并在对应 managed probe
|
||||
里覆盖 API presence。
|
||||
|
||||
@@ -213,6 +217,12 @@ package。
|
||||
- URP stage planning 以 `ScriptableRenderer` 的 active pass queue 为最终事实源。`ConfigureCameraFramePlan`
|
||||
仍是兼容和高级策略 hook,但它不能单独声明 shadow、depth、post 或 final-output stage;没有被 pass queue
|
||||
覆盖到的 side/fullscreen stage 必须在最终 plan 中清掉。
|
||||
- `ConfigurePassQueueCameraFramePlanInstance` 必须在 planning 阶段为当前 renderer 和 `framePlanId`
|
||||
生成一次 per-stage pass queue 快照,并用该快照派生 stage manifest。`SupportsStageRenderGraph`
|
||||
和 `RecordStageRenderGraph` 在 `framePlanId != 0` 时必须消费这个快照,不得重新运行
|
||||
feature `SetupRenderPasses`、feature `AddRenderPasses` 或 renderer-owned `AddRenderPasses` 来重建队列。
|
||||
找不到匹配 `framePlanId` 和 renderer index 的快照时必须返回不支持或 record 失败,让上层暴露错误;
|
||||
不要退回 legacy queue rebuild 或 built-in fallback。
|
||||
- `RendererBlock` 将 pass events 映射到 camera stages:shadow caster、depth prepass、main opaque、main
|
||||
skybox、main transparent、post process 和 final output。
|
||||
- `UniversalRenderer` 拥有具体 blocks:
|
||||
@@ -329,8 +339,9 @@ Scene data 每个 camera frame 提取一次,然后由 pipeline 调整。
|
||||
RenderGraph。
|
||||
- URP 现在已有 renderer data、renderer features、renderer pass queueing、renderer blocks、renderer-index
|
||||
resolution 和 per-stage recording。
|
||||
- URP stage planning 已收口到 renderer active pass queue 派生的 stage manifest,关闭了 feature planning hook
|
||||
与实际 pass queue 分离的重复事实源。
|
||||
- URP stage planning 已收口到 renderer active pass queue 派生的 per-`framePlanId` 快照和 stage manifest。
|
||||
Stage support 和 stage recording 现在消费 planning 阶段保存的快照,关闭了 feature planning hook、
|
||||
support probe 和 recording 各自重建 pass queue 的重复事实源。
|
||||
- Public managed RenderGraph raster authoring 已存在;internal fullscreen kernels 仍是 URP implementation
|
||||
details。
|
||||
- Public `ScriptableRenderPass.RecordRenderGraph(RenderGraph, ContextContainer)` 通过 `RenderingData`、
|
||||
|
||||
@@ -4,6 +4,7 @@
|
||||
#include <XCEngine/Rendering/Execution/CameraFrameStage.h>
|
||||
#include <XCEngine/Rendering/Planning/CameraRenderRequest.h>
|
||||
|
||||
#include <cstdint>
|
||||
#include <memory>
|
||||
|
||||
namespace XCEngine {
|
||||
@@ -33,6 +34,7 @@ struct CameraFramePlan {
|
||||
static RenderSurface BuildCameraDepthOnlySurfaceTemplate(
|
||||
const RenderSurface& surface);
|
||||
|
||||
uint64_t framePlanId = 0u;
|
||||
CameraRenderRequest request = {};
|
||||
ShadowCasterRenderRequest shadowCaster = {};
|
||||
DirectionalShadowRenderPlan directionalShadow = {};
|
||||
|
||||
@@ -15,6 +15,7 @@
|
||||
|
||||
#include <memory>
|
||||
#include <array>
|
||||
#include <cstdint>
|
||||
#include <vector>
|
||||
|
||||
namespace XCEngine {
|
||||
@@ -59,11 +60,13 @@ struct RenderPipelineStageRenderGraphContext {
|
||||
bool usesGraphManagedOutputColor = false;
|
||||
DirectionalShadowRenderPlan directionalShadowPlan = {};
|
||||
int32_t rendererIndex = -1;
|
||||
uint64_t framePlanId = 0u;
|
||||
};
|
||||
|
||||
struct RenderPipelineStageSupportContext {
|
||||
CameraFrameStage stage = CameraFrameStage::MainScene;
|
||||
int32_t rendererIndex = -1;
|
||||
uint64_t framePlanId = 0u;
|
||||
};
|
||||
|
||||
class RenderPipelineBackend;
|
||||
|
||||
Reference in New Issue
Block a user