Serialize managed SRP asset graphs
This commit is contained in:
@@ -109,7 +109,8 @@ Unity 兼容的公开命名、对象所有权和扩展点。
|
||||
|
||||
- `GraphicsSettings.renderPipelineAsset == null` 表示 renderer 使用 engine default native pipeline selection。
|
||||
- `GraphicsSettings.renderPipelineAsset != null` 表示 renderer 使用 render-pipeline asset reference selection path。
|
||||
`AssetRef` 是长期选择身份;managed descriptor/handle 只是运行时 materialization cache 和过渡 fallback。
|
||||
`AssetRef` 是长期选择身份;managed descriptor 中的 serialized ScriptableObject graph 和 handle 只是运行时
|
||||
materialization cache 和过渡 fallback。
|
||||
- Runtime startup 不应静默指定 project default SRP asset。Project 或 editor policy 可以显式选择一个,
|
||||
但 active rendering mode 必须能通过 `GraphicsSettings.renderPipelineAsset` 观察到。
|
||||
- `GraphicsSettingsState` 同时保存 configured render-pipeline asset `AssetRef` 和
|
||||
@@ -198,11 +199,16 @@ Native passes 仍用于 backend fallback、工具和 built-in rendering。
|
||||
Managed SRP assets 通过 `GraphicsSettings.renderPipelineAsset` 选择,并通过
|
||||
`ManagedScriptableRenderPipelineAsset` bridge。
|
||||
|
||||
- `ManagedRenderPipelineAssetDescriptor` 标识 managed asset assembly、namespace、class、retained managed
|
||||
object handle 和可选 `AssetRef`。它不再是 configured pipeline 的唯一身份;`GraphicsSettingsState` 中的
|
||||
configured `AssetRef` 才是 Unity 风格 asset selection root。
|
||||
- Descriptor-only selection 仍保留给测试、legacy runtime fallback 和尚未接入 asset serialization 的路径。
|
||||
一旦已有 configured `AssetRef`,不要把 managed object handle 或 descriptor 当作长期 asset identity。
|
||||
- `ManagedRenderPipelineAssetDescriptor` 标识 managed asset assembly、namespace、class、可选 `AssetRef`、
|
||||
serialized ScriptableObject asset graph 和 retained managed object handle。它不再是 configured pipeline
|
||||
的唯一身份;`GraphicsSettingsState` 中的 configured `AssetRef` 才是 Unity 风格 asset selection root。
|
||||
- Descriptor-only selection 仍保留给测试、legacy runtime fallback 和尚未接入 asset import 的路径。没有
|
||||
`serializedAssetGraph` 时才允许按 class 默认构造 materialize;一旦 snapshot 存在,缺失或失效的
|
||||
managed object handle 必须从 snapshot 重建,不能退回 code-created default asset。
|
||||
- `GraphicsSettings.renderPipelineAsset = asset` 必须把当前 managed SRP asset graph snapshot 收进 descriptor。
|
||||
该 snapshot 覆盖 `UniversalRenderPipelineAsset -> ScriptableRendererData -> ScriptableRendererFeature`
|
||||
以及 public/`[SerializeField]` serializable settings。Runtime cache 更新可以替换 handle,但不得丢失
|
||||
snapshot 或 configured `AssetRef`。
|
||||
- `ManagedScriptableRenderPipelineAsset` 解析 `ManagedRenderPipelineAssetRuntime`,创建
|
||||
`ScriptableRenderPipelineHost`,并把 request/plan/final-color policy calls 转发给 managed code。
|
||||
- `ScriptableRenderPipelineHost` 组合 native backend asset 和可选 managed stage recorder。当 managed recorder
|
||||
@@ -339,8 +345,8 @@ Scene data 每个 camera frame 提取一次,然后由 pipeline 调整。
|
||||
authoring 还未公开。
|
||||
- `UniversalPostProcessBlock` 仍保留 post-process source promotion helper;实际 post-process stage 由
|
||||
active pass queue 中的 features/passes 声明。
|
||||
- Render-pipeline selection 已切到 `AssetRef` 作为根身份,但 `UniversalRendererData`、features 和
|
||||
`ScriptableObject` 字段/子资产仍是 code-created objects,还不是完整 Unity 风格 serialized asset pipeline。
|
||||
- Render-pipeline selection 已切到 `AssetRef` 作为根身份,并且 managed SRP descriptor 已保存
|
||||
ScriptableObject graph snapshot;完整 editor/importer `.asset` 持久化和 sub-asset authoring 仍未完成。
|
||||
- 当前 shadow support 是单个 main directional shadow path,没有 cascades。
|
||||
- Graph compiler/executor 当前没有实现 pass culling 或 transient aliasing。
|
||||
|
||||
@@ -354,6 +360,9 @@ Scene data 每个 camera frame 提取一次,然后由 pipeline 调整。
|
||||
`GraphicsSettingsState` 选择 managed SRP assets。
|
||||
- Render-pipeline asset selection 已从 descriptor/managed handle 切到 `AssetRef` 根身份;descriptor 保留为
|
||||
assembly/type/handle runtime cache,managed materialization 更新 cache 时保留 configured asset reference。
|
||||
- Managed SRP descriptor 已接入 serialized ScriptableObject graph snapshot。`GraphicsSettings` setter 保存
|
||||
当前 asset/data/features 图,getter 和 `MonoManagedRenderPipelineAssetRuntime` 在 handle 缺失或失效时按
|
||||
snapshot 重建;无 snapshot 的 descriptor-only selection 才保留 class 默认构造 fallback。
|
||||
- Managed SRP execution 由 `ScriptableRenderPipelineHost` 承载,它组合 native backend 和可选 managed
|
||||
stage recorder。
|
||||
- Mono-backed SRP assets 使用 `DefaultNativeBackend` 做 scene drawing,并把 managed stages 记录到 native
|
||||
|
||||
@@ -33,6 +33,7 @@ struct ManagedRenderPipelineAssetDescriptor {
|
||||
std::string className;
|
||||
uint32_t managedAssetHandle = 0u;
|
||||
Resources::AssetRef assetRef = {};
|
||||
std::string serializedAssetGraph;
|
||||
|
||||
bool IsValid() const {
|
||||
return !assemblyName.empty() && !className.empty();
|
||||
@@ -46,6 +47,10 @@ struct ManagedRenderPipelineAssetDescriptor {
|
||||
return assetRef.IsValid();
|
||||
}
|
||||
|
||||
bool HasSerializedAssetGraph() const {
|
||||
return !serializedAssetGraph.empty();
|
||||
}
|
||||
|
||||
std::string GetFullName() const {
|
||||
return namespaceName.empty()
|
||||
? className
|
||||
|
||||
@@ -103,6 +103,12 @@ public:
|
||||
const char* passName,
|
||||
uint64_t commandBufferHandle);
|
||||
bool IsScriptableRenderPipelineAssetObject(MonoObject* managedObject) const;
|
||||
bool TrySerializeManagedRenderPipelineAssetGraph(
|
||||
MonoObject* managedObject,
|
||||
std::string& outSerializedGraph);
|
||||
bool TryCreateManagedRenderPipelineAssetFromSerializedGraph(
|
||||
const std::string& serializedGraph,
|
||||
uint32_t& outHandle);
|
||||
bool TryEnsureManagedRenderPipelineAssetHandle(
|
||||
Rendering::Pipelines::ManagedRenderPipelineAssetDescriptor& ioDescriptor);
|
||||
|
||||
@@ -266,6 +272,9 @@ private:
|
||||
bool CreateExternalManagedObject(
|
||||
MonoClass* monoClass,
|
||||
uint32_t& outHandle);
|
||||
bool TryDeserializeManagedRenderPipelineAssetGraph(
|
||||
const std::string& serializedGraph,
|
||||
MonoObject*& outAsset);
|
||||
uint32_t RetainExternalManagedObject(MonoObject* instance);
|
||||
void DestroyExternalManagedObject(uint32_t gcHandle);
|
||||
MonoObject* CreateManagedScriptableRenderContext(uint64_t nativeHandle);
|
||||
|
||||
Reference in New Issue
Block a user