refactor(srp): enable managed standalone shadow and depth stages

This commit is contained in:
2026-04-21 16:22:26 +08:00
parent 2c49ac58d9
commit 1a6aacb636
18 changed files with 449 additions and 51 deletions

View File

@@ -1261,7 +1261,14 @@ Rendering::FinalColorSettings BuildManagedFinalColorSettings(
bool SupportsManagedRenderPipelineStageGraphRecording(
Rendering::CameraFrameStage stage) {
return Rendering::SupportsCameraFramePipelineGraphRecording(stage) ||
Rendering::IsCameraFrameFullscreenSequenceStage(stage);
Rendering::IsCameraFrameFullscreenSequenceStage(stage) ||
Rendering::IsCameraFrameScenePassRequestStage(stage);
}
bool SupportsManagedScriptableRenderContextSceneRecordingStage(
Rendering::CameraFrameStage stage) {
return stage == Rendering::CameraFrameStage::MainScene ||
Rendering::IsCameraFrameScenePassRequestStage(stage);
}
Rendering::RenderPass* ConfigureManagedFullscreenPass(
@@ -5532,7 +5539,8 @@ InternalCall_Rendering_ScriptableRenderContext_RecordScenePhase(
if (state == nullptr ||
state->graphContext == nullptr ||
state->sceneRecorder == nullptr ||
state->stage != Rendering::CameraFrameStage::MainScene) {
!SupportsManagedScriptableRenderContextSceneRecordingStage(
state->stage)) {
return 0;
}
@@ -5599,7 +5607,8 @@ InternalCall_Rendering_ScriptableRenderContext_DrawRenderersByDesc(
if (state == nullptr ||
state->graphContext == nullptr ||
state->sceneRecorder == nullptr ||
state->stage != Rendering::CameraFrameStage::MainScene ||
!SupportsManagedScriptableRenderContextSceneRecordingStage(
state->stage) ||
rendererListDescData == nullptr) {
return 0;
}
@@ -5905,6 +5914,29 @@ void InternalCall_Rendering_ScriptableRenderPipelinePlanningContext_ClearShadowC
state->plan->ClearShadowCasterStage(true);
}
mono_bool
InternalCall_Rendering_ScriptableRenderPipelinePlanningContext_RequestDepthOnlyStage(
uint64_t nativeHandle) {
ManagedScriptableRenderPipelinePlanningContextState* const state =
FindManagedScriptableRenderPipelinePlanningContextState(nativeHandle);
return state != nullptr &&
state->plan != nullptr &&
state->plan->RequestDepthOnlyStage(true)
? 1
: 0;
}
void InternalCall_Rendering_ScriptableRenderPipelinePlanningContext_ClearDepthOnlyStage(
uint64_t nativeHandle) {
ManagedScriptableRenderPipelinePlanningContextState* const state =
FindManagedScriptableRenderPipelinePlanningContextState(nativeHandle);
if (state == nullptr || state->plan == nullptr) {
return;
}
state->plan->ClearDepthOnlyStage(true);
}
mono_bool
InternalCall_Rendering_ScriptableRenderPipelinePlanningContext_GetHasFinalColorProcessing(
uint64_t nativeHandle) {
@@ -6123,6 +6155,8 @@ void RegisterInternalCalls() {
mono_add_internal_call("XCEngine.InternalCalls::Rendering_ScriptableRenderPipelinePlanningContext_ClearFullscreenStage", reinterpret_cast<const void*>(&InternalCall_Rendering_ScriptableRenderPipelinePlanningContext_ClearFullscreenStage));
mono_add_internal_call("XCEngine.InternalCalls::Rendering_ScriptableRenderPipelinePlanningContext_RequestShadowCasterStage", reinterpret_cast<const void*>(&InternalCall_Rendering_ScriptableRenderPipelinePlanningContext_RequestShadowCasterStage));
mono_add_internal_call("XCEngine.InternalCalls::Rendering_ScriptableRenderPipelinePlanningContext_ClearShadowCasterStage", reinterpret_cast<const void*>(&InternalCall_Rendering_ScriptableRenderPipelinePlanningContext_ClearShadowCasterStage));
mono_add_internal_call("XCEngine.InternalCalls::Rendering_ScriptableRenderPipelinePlanningContext_RequestDepthOnlyStage", reinterpret_cast<const void*>(&InternalCall_Rendering_ScriptableRenderPipelinePlanningContext_RequestDepthOnlyStage));
mono_add_internal_call("XCEngine.InternalCalls::Rendering_ScriptableRenderPipelinePlanningContext_ClearDepthOnlyStage", reinterpret_cast<const void*>(&InternalCall_Rendering_ScriptableRenderPipelinePlanningContext_ClearDepthOnlyStage));
mono_add_internal_call("XCEngine.InternalCalls::Rendering_ScriptableRenderPipelinePlanningContext_GetHasFinalColorProcessing", reinterpret_cast<const void*>(&InternalCall_Rendering_ScriptableRenderPipelinePlanningContext_GetHasFinalColorProcessing));
mono_add_internal_call("XCEngine.InternalCalls::Rendering_CameraRenderRequestContext_GetRenderedBaseCameraCount", reinterpret_cast<const void*>(&InternalCall_Rendering_CameraRenderRequestContext_GetRenderedBaseCameraCount));
mono_add_internal_call("XCEngine.InternalCalls::Rendering_CameraRenderRequestContext_GetRenderedRequestCount", reinterpret_cast<const void*>(&InternalCall_Rendering_CameraRenderRequestContext_GetRenderedRequestCount));