refactor(srp): move urp final color execution into managed feature
This commit is contained in:
@@ -17,6 +17,7 @@
|
||||
#include "Rendering/Graph/RenderGraphRecordingContext.h"
|
||||
#include "Rendering/GraphicsSettingsState.h"
|
||||
#include "Rendering/Internal/RenderPipelineFactory.h"
|
||||
#include "Rendering/Passes/BuiltinFinalColorPass.h"
|
||||
#include "Rendering/Passes/BuiltinVectorFullscreenPass.h"
|
||||
#include "Rendering/Planning/FullscreenPassDesc.h"
|
||||
#include "Rendering/Planning/SceneRenderRequestPlanner.h"
|
||||
@@ -1238,6 +1239,25 @@ bool TryUnboxManagedFinalColorSettings(
|
||||
return true;
|
||||
}
|
||||
|
||||
Rendering::FinalColorSettings BuildManagedFinalColorSettings(
|
||||
const ManagedFinalColorSettingsData& managedSettings) {
|
||||
Rendering::FinalColorSettings settings = {};
|
||||
settings.exposureValue = 1.0f;
|
||||
settings.finalColorScale = XCEngine::Math::Vector4::One();
|
||||
settings.outputTransferMode =
|
||||
ResolveManagedFinalColorOutputTransferMode(
|
||||
managedSettings.outputTransferMode);
|
||||
settings.exposureMode =
|
||||
ResolveManagedFinalColorExposureMode(
|
||||
managedSettings.exposureMode);
|
||||
settings.exposureValue = managedSettings.exposureValue;
|
||||
settings.toneMappingMode =
|
||||
ResolveManagedFinalColorToneMappingMode(
|
||||
managedSettings.toneMappingMode);
|
||||
settings.finalColorScale = managedSettings.finalColorScale;
|
||||
return settings;
|
||||
}
|
||||
|
||||
bool SupportsManagedRenderPipelineStageGraphRecording(
|
||||
Rendering::CameraFrameStage stage) {
|
||||
return Rendering::SupportsCameraFramePipelineGraphRecording(stage) ||
|
||||
@@ -1253,19 +1273,19 @@ Rendering::RenderPass* ConfigureManagedFullscreenPass(
|
||||
}
|
||||
|
||||
std::unique_ptr<Rendering::RenderPass>& passSlot = passPool[passIndex];
|
||||
Rendering::Passes::BuiltinVectorFullscreenPass* fullscreenPass =
|
||||
dynamic_cast<Rendering::Passes::BuiltinVectorFullscreenPass*>(
|
||||
passSlot.get());
|
||||
if (fullscreenPass == nullptr) {
|
||||
passSlot =
|
||||
std::make_unique<Rendering::Passes::BuiltinVectorFullscreenPass>();
|
||||
fullscreenPass =
|
||||
static_cast<Rendering::Passes::BuiltinVectorFullscreenPass*>(
|
||||
passSlot.get());
|
||||
}
|
||||
|
||||
switch (passDesc.type) {
|
||||
case Rendering::FullscreenPassType::ColorScale: {
|
||||
Rendering::Passes::BuiltinVectorFullscreenPass* fullscreenPass =
|
||||
dynamic_cast<Rendering::Passes::BuiltinVectorFullscreenPass*>(
|
||||
passSlot.get());
|
||||
if (fullscreenPass == nullptr) {
|
||||
passSlot =
|
||||
std::make_unique<Rendering::Passes::BuiltinVectorFullscreenPass>();
|
||||
fullscreenPass =
|
||||
static_cast<Rendering::Passes::BuiltinVectorFullscreenPass*>(
|
||||
passSlot.get());
|
||||
}
|
||||
fullscreenPass->SetShaderPath(
|
||||
Resources::GetBuiltinColorScalePostProcessShaderPath());
|
||||
fullscreenPass->SetPreferredPassName("ColorScale");
|
||||
@@ -1273,11 +1293,38 @@ Rendering::RenderPass* ConfigureManagedFullscreenPass(
|
||||
return fullscreenPass;
|
||||
}
|
||||
case Rendering::FullscreenPassType::ShaderVector: {
|
||||
Rendering::Passes::BuiltinVectorFullscreenPass* fullscreenPass =
|
||||
dynamic_cast<Rendering::Passes::BuiltinVectorFullscreenPass*>(
|
||||
passSlot.get());
|
||||
if (fullscreenPass == nullptr) {
|
||||
passSlot =
|
||||
std::make_unique<Rendering::Passes::BuiltinVectorFullscreenPass>();
|
||||
fullscreenPass =
|
||||
static_cast<Rendering::Passes::BuiltinVectorFullscreenPass*>(
|
||||
passSlot.get());
|
||||
}
|
||||
fullscreenPass->SetShaderPath(passDesc.shaderVector.shaderPath);
|
||||
fullscreenPass->SetPreferredPassName(passDesc.shaderVector.passName);
|
||||
fullscreenPass->SetVectorPayload(passDesc.shaderVector.vectorPayload);
|
||||
return fullscreenPass;
|
||||
}
|
||||
case Rendering::FullscreenPassType::FinalColor: {
|
||||
Rendering::Passes::BuiltinFinalColorPass* finalColorPass =
|
||||
dynamic_cast<Rendering::Passes::BuiltinFinalColorPass*>(
|
||||
passSlot.get());
|
||||
if (finalColorPass == nullptr) {
|
||||
passSlot =
|
||||
std::make_unique<Rendering::Passes::BuiltinFinalColorPass>();
|
||||
finalColorPass =
|
||||
static_cast<Rendering::Passes::BuiltinFinalColorPass*>(
|
||||
passSlot.get());
|
||||
}
|
||||
|
||||
finalColorPass->SetShaderPath(
|
||||
Resources::GetBuiltinFinalColorShaderPath());
|
||||
finalColorPass->SetSettings(passDesc.finalColor.settings);
|
||||
return finalColorPass;
|
||||
}
|
||||
default:
|
||||
return nullptr;
|
||||
}
|
||||
@@ -4909,6 +4956,32 @@ InternalCall_Rendering_ScriptableRenderContext_SetRasterPassShaderVectorFullscre
|
||||
: 0;
|
||||
}
|
||||
|
||||
mono_bool
|
||||
InternalCall_Rendering_ScriptableRenderContext_SetRasterPassFinalColorFullscreenExecution(
|
||||
uint64_t nativeHandle,
|
||||
uint64_t rasterPassHandle,
|
||||
ManagedFinalColorSettingsData* settingsData) {
|
||||
ManagedScriptableRenderContextState* const state =
|
||||
FindManagedScriptableRenderContextState(nativeHandle);
|
||||
ManagedScriptableRenderContextState::RasterPassRecordRequest*
|
||||
const request =
|
||||
FindPendingManagedRasterPassRecordRequest(
|
||||
state,
|
||||
rasterPassHandle);
|
||||
if (request == nullptr ||
|
||||
settingsData == nullptr) {
|
||||
return 0;
|
||||
}
|
||||
|
||||
request->passDesc =
|
||||
Rendering::FullscreenPassDesc::MakeFinalColor(
|
||||
BuildManagedFinalColorSettings(
|
||||
*settingsData));
|
||||
return request->passDesc.IsValid()
|
||||
? 1
|
||||
: 0;
|
||||
}
|
||||
|
||||
mono_bool InternalCall_Rendering_ScriptableRenderContext_CommitRasterPass(
|
||||
uint64_t nativeHandle,
|
||||
uint64_t rasterPassHandle) {
|
||||
@@ -5805,6 +5878,18 @@ void InternalCall_Rendering_ScriptableRenderPipelinePlanningContext_ClearFullscr
|
||||
state->plan->ClearFullscreenStage(resolvedStage, true);
|
||||
}
|
||||
|
||||
mono_bool
|
||||
InternalCall_Rendering_ScriptableRenderPipelinePlanningContext_GetHasFinalColorProcessing(
|
||||
uint64_t nativeHandle) {
|
||||
const ManagedScriptableRenderPipelinePlanningContextState* const state =
|
||||
FindManagedScriptableRenderPipelinePlanningContextState(nativeHandle);
|
||||
return state != nullptr &&
|
||||
state->plan != nullptr &&
|
||||
state->plan->finalColorPolicy.RequiresProcessing()
|
||||
? 1
|
||||
: 0;
|
||||
}
|
||||
|
||||
void RegisterInternalCalls() {
|
||||
if (GetInternalCallRegistrationState()) {
|
||||
return;
|
||||
@@ -5947,6 +6032,7 @@ void RegisterInternalCalls() {
|
||||
mono_add_internal_call("XCEngine.InternalCalls::Rendering_ScriptableRenderContext_SetRasterPassColorAttachment", reinterpret_cast<const void*>(&InternalCall_Rendering_ScriptableRenderContext_SetRasterPassColorAttachment));
|
||||
mono_add_internal_call("XCEngine.InternalCalls::Rendering_ScriptableRenderContext_SetRasterPassColorScaleFullscreenExecution", reinterpret_cast<const void*>(&InternalCall_Rendering_ScriptableRenderContext_SetRasterPassColorScaleFullscreenExecution));
|
||||
mono_add_internal_call("XCEngine.InternalCalls::Rendering_ScriptableRenderContext_SetRasterPassShaderVectorFullscreenExecution", reinterpret_cast<const void*>(&InternalCall_Rendering_ScriptableRenderContext_SetRasterPassShaderVectorFullscreenExecution));
|
||||
mono_add_internal_call("XCEngine.InternalCalls::Rendering_ScriptableRenderContext_SetRasterPassFinalColorFullscreenExecution", reinterpret_cast<const void*>(&InternalCall_Rendering_ScriptableRenderContext_SetRasterPassFinalColorFullscreenExecution));
|
||||
mono_add_internal_call("XCEngine.InternalCalls::Rendering_ScriptableRenderContext_CommitRasterPass", reinterpret_cast<const void*>(&InternalCall_Rendering_ScriptableRenderContext_CommitRasterPass));
|
||||
mono_add_internal_call("XCEngine.InternalCalls::Rendering_ScriptableRenderContext_GetStageColorSource", reinterpret_cast<const void*>(&InternalCall_Rendering_ScriptableRenderContext_GetStageColorSource));
|
||||
mono_add_internal_call("XCEngine.InternalCalls::Rendering_ScriptableRenderContext_GetStageUsesGraphManagedOutputColor", reinterpret_cast<const void*>(&InternalCall_Rendering_ScriptableRenderContext_GetStageUsesGraphManagedOutputColor));
|
||||
@@ -6008,6 +6094,7 @@ void RegisterInternalCalls() {
|
||||
mono_add_internal_call("XCEngine.InternalCalls::Rendering_ScriptableRenderPipelinePlanningContext_GetStageUsesGraphManagedOutputColor", reinterpret_cast<const void*>(&InternalCall_Rendering_ScriptableRenderPipelinePlanningContext_GetStageUsesGraphManagedOutputColor));
|
||||
mono_add_internal_call("XCEngine.InternalCalls::Rendering_ScriptableRenderPipelinePlanningContext_RequestFullscreenStage", reinterpret_cast<const void*>(&InternalCall_Rendering_ScriptableRenderPipelinePlanningContext_RequestFullscreenStage));
|
||||
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_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));
|
||||
mono_add_internal_call("XCEngine.InternalCalls::Rendering_CameraRenderRequestContext_GetCameraGameObjectUUID", reinterpret_cast<const void*>(&InternalCall_Rendering_CameraRenderRequestContext_GetCameraGameObjectUUID));
|
||||
|
||||
Reference in New Issue
Block a user