refactor(rendering/srp): unify managed fullscreen raster recording

This commit is contained in:
2026-04-20 18:26:47 +08:00
parent 3e32f82e37
commit b521616e27
5 changed files with 1426 additions and 67 deletions

View File

@@ -11,12 +11,17 @@
#include "Input/InputManager.h"
#include "Physics/PhysicsWorld.h"
#include "Rendering/Execution/CameraFramePlan.h"
#include "Rendering/Execution/CameraFrameRenderGraphFrameData.h"
#include "Rendering/Execution/Internal/CameraFrameGraph/SurfaceUtils.h"
#include "Rendering/Graph/RenderGraph.h"
#include "Rendering/Graph/RenderGraphRecordingContext.h"
#include "Rendering/GraphicsSettingsState.h"
#include "Rendering/Internal/RenderPipelineFactory.h"
#include "Rendering/Passes/BuiltinVectorFullscreenPass.h"
#include "Rendering/Planning/FullscreenPassDesc.h"
#include "Rendering/Pipelines/NativeSceneRecorder.h"
#include "Rendering/Pipelines/ManagedScriptableRenderPipelineAsset.h"
#include "Rendering/RenderPassGraphContract.h"
#include "Rendering/RenderPipelineStageGraphContract.h"
#include "Resources/BuiltinResources.h"
#include "Scene/Scene.h"
@@ -101,7 +106,17 @@ struct ManagedScriptableRenderContextState {
Rendering::CameraFrameStage stage = Rendering::CameraFrameStage::MainScene;
const Rendering::RenderPipelineStageRenderGraphContext* graphContext = nullptr;
Rendering::Pipelines::NativeSceneRecorder* sceneRecorder = nullptr;
std::vector<Rendering::FullscreenPassDesc> queuedFullscreenPasses = {};
struct RasterPassRecordRequest {
Containers::String passName = {};
Rendering::FullscreenPassDesc passDesc = {};
Rendering::RenderGraphTextureHandle sourceColorTexture = {};
std::vector<Rendering::RenderGraphTextureHandle> readTextures = {};
std::vector<Rendering::RenderGraphTextureHandle> colorTargets = {};
};
uint64_t nextPendingRasterPassHandle = 1u;
std::unordered_map<uint64_t, RasterPassRecordRequest>
pendingRasterPassRequests = {};
std::vector<RasterPassRecordRequest> rasterPassRequests = {};
};
struct ManagedCameraRenderRequestContextState {
@@ -135,6 +150,21 @@ ManagedScriptableRenderContextState* FindManagedScriptableRenderContextState(
: nullptr;
}
ManagedScriptableRenderContextState::RasterPassRecordRequest*
FindPendingManagedRasterPassRecordRequest(
ManagedScriptableRenderContextState* state,
uint64_t rasterPassHandle) {
if (state == nullptr || rasterPassHandle == 0u) {
return nullptr;
}
const auto it =
state->pendingRasterPassRequests.find(rasterPassHandle);
return it != state->pendingRasterPassRequests.end()
? &it->second
: nullptr;
}
uint64_t RegisterManagedScriptableRenderContextState(
ManagedScriptableRenderContextState& state) {
uint64_t handle = GetManagedScriptableRenderContextNextHandle()++;
@@ -220,6 +250,205 @@ bool ResolveManagedScriptableRenderContextUsesGraphManagedOutputColor(
state->graphContext->usesGraphManagedOutputColor;
}
int32_t EncodeManagedRenderGraphTextureHandle(
Rendering::RenderGraphTextureHandle handle) {
return handle.IsValid()
? static_cast<int32_t>(handle.index)
: -1;
}
Rendering::RenderGraphTextureHandle
DecodeManagedRenderGraphTextureHandle(
int32_t handleValue) {
Rendering::RenderGraphTextureHandle handle = {};
if (handleValue < 0) {
return handle;
}
handle.index = static_cast<Core::uint32>(handleValue);
return handle;
}
Rendering::RenderGraphTextureHandle
ResolveManagedScriptableRenderContextSourceColorTexture(
const ManagedScriptableRenderContextState* state) {
if (state == nullptr ||
state->graphContext == nullptr) {
return {};
}
if (state->graphContext->sourceColorTexture.IsValid()) {
return state->graphContext->sourceColorTexture;
}
const Rendering::CameraFrameRenderGraphResources* const resources =
Rendering::TryGetCameraFrameRenderGraphResources(
state->graphContext->blackboard);
if (resources == nullptr) {
return {};
}
switch (state->stage) {
case Rendering::CameraFrameStage::PostProcess:
return resources->mainScene.color;
case Rendering::CameraFrameStage::FinalOutput:
return resources->postProcess.color.IsValid()
? resources->postProcess.color
: resources->mainScene.color;
default:
return {};
}
}
Rendering::RenderGraphTextureHandle
ResolveManagedPrimaryColorTarget(
const std::vector<Rendering::RenderGraphTextureHandle>& colorTargets) {
const auto it =
std::find_if(
colorTargets.begin(),
colorTargets.end(),
[](Rendering::RenderGraphTextureHandle handle) {
return handle.IsValid();
});
return it != colorTargets.end()
? *it
: Rendering::RenderGraphTextureHandle{};
}
Rendering::RenderGraphTextureHandle
ResolveManagedScriptableRenderContextPrimaryColorTarget(
const ManagedScriptableRenderContextState* state) {
if (state == nullptr ||
state->graphContext == nullptr) {
return {};
}
return ResolveManagedPrimaryColorTarget(
state->graphContext->colorTargets);
}
Rendering::RenderGraphTextureHandle
ResolveManagedScriptableRenderContextDepthTarget(
const ManagedScriptableRenderContextState* state) {
return state != nullptr &&
state->graphContext != nullptr
? state->graphContext->depthTarget
: Rendering::RenderGraphTextureHandle{};
}
Rendering::RenderGraphTextureDesc
BuildManagedFullscreenTransientDepthTextureDesc(
const Rendering::RenderSurface& surface) {
Rendering::RenderGraphTextureDesc desc = {};
desc.width =
surface.GetWidth() > 0u
? surface.GetWidth()
: surface.GetRenderAreaWidth();
desc.height =
surface.GetHeight() > 0u
? surface.GetHeight()
: surface.GetRenderAreaHeight();
desc.format = static_cast<Core::uint32>(
RHI::Format::D24_UNorm_S8_UInt);
desc.textureType = static_cast<Core::uint32>(
RHI::TextureType::Texture2D);
desc.sampleCount = 1u;
desc.sampleQuality = 0u;
return desc;
}
Rendering::RenderGraphRecordingSourceBinding
BuildManagedScriptableRenderContextSourceBinding(
const Rendering::RenderPipelineStageRenderGraphContext& context,
Rendering::RenderGraphTextureHandle sourceColorTexture) {
if (!sourceColorTexture.IsValid()) {
return {};
}
Rendering::RenderGraphRecordingSourceBinding binding =
Rendering::MakeRenderGraphRecordingSourceBinding(
context.sourceSurface,
context.sourceColorView,
context.sourceColorState,
sourceColorTexture);
const bool usesContextSource =
context.sourceColorTexture.IsValid() &&
context.sourceColorTexture.index == sourceColorTexture.index;
if (!usesContextSource) {
binding.sourceColorView = nullptr;
binding.sourceColorState =
RHI::ResourceStates::PixelShaderResource;
}
if (binding.sourceSurface == nullptr) {
binding.sourceSurface = &context.surfaceTemplate;
}
return binding;
}
bool RecordManagedFullscreenRasterPass(
const Rendering::RenderPipelineStageRenderGraphContext& stageContext,
Rendering::RenderPass& pass,
Rendering::RenderGraphTextureHandle sourceColorTexture,
std::vector<Rendering::RenderGraphTextureHandle> colorTargets,
std::vector<Rendering::RenderGraphTextureHandle> additionalReadTextures,
const Containers::String& passName) {
if (!Rendering::IsCameraFrameFullscreenSequenceStage(stageContext.stage) ||
!sourceColorTexture.IsValid() ||
!ResolveManagedPrimaryColorTarget(colorTargets).IsValid()) {
return false;
}
const Rendering::RenderGraphRecordingContext baseContext =
Rendering::BuildRenderGraphRecordingContext(
stageContext);
Rendering::RenderGraphRecordingContextBuildParams params = {};
if (!passName.Empty()) {
params.passName = &passName;
}
params.overrideSourceBinding = true;
params.sourceBinding =
BuildManagedScriptableRenderContextSourceBinding(
stageContext,
sourceColorTexture);
params.overrideColorTargets = true;
params.colorTargets = std::move(colorTargets);
params.overrideDepthTarget = true;
params.depthTarget = {};
const Rendering::RenderGraphRecordingContext recordingContext =
Rendering::BuildRenderGraphRecordingContext(
baseContext,
std::move(params));
const Rendering::RenderPassRenderGraphContext renderGraphContext =
Rendering::BuildRenderPassRenderGraphContext(recordingContext);
Rendering::RenderPass* const passPtr = &pass;
return Rendering::RecordCallbackRasterRenderPass(
renderGraphContext,
Rendering::BuildSourceColorFullscreenRasterPassGraphIO(),
[passPtr](const Rendering::RenderPassContext& passContext) {
return passPtr != nullptr &&
passPtr->Execute(passContext);
},
std::move(additionalReadTextures));
}
bool RecordManagedFullscreenPassToTexture(
const Rendering::RenderPipelineStageRenderGraphContext& stageContext,
Rendering::RenderPass& pass,
Rendering::RenderGraphTextureHandle sourceColorTexture,
Rendering::RenderGraphTextureHandle outputColorTexture,
const Containers::String& passName) {
return RecordManagedFullscreenRasterPass(
stageContext,
pass,
sourceColorTexture,
{ outputColorTexture },
{},
passName);
}
const Rendering::DirectionalShadowRenderPlan&
ResolveManagedScriptableRenderContextDirectionalShadowPlan(
const ManagedScriptableRenderContextState* state) {
@@ -686,6 +915,20 @@ static_assert(
sizeof(Rendering::FinalColorSettings),
"Managed final color bridge layout must match native FinalColorSettings.");
struct ManagedRenderGraphTextureDescData {
uint32_t width = 0u;
uint32_t height = 0u;
uint32_t format = 0u;
uint32_t textureType = 0u;
uint32_t sampleCount = 0u;
uint32_t sampleQuality = 0u;
};
static_assert(
sizeof(ManagedRenderGraphTextureDescData) ==
sizeof(Rendering::RenderGraphTextureDesc),
"Managed render graph texture desc bridge layout must match native RenderGraphTextureDesc.");
Rendering::FinalColorOutputTransferMode ResolveManagedFinalColorOutputTransferMode(
uint8_t value) {
switch (value) {
@@ -1007,7 +1250,7 @@ public:
return false;
}
return FlushManagedFullscreenPasses(
return FlushManagedRasterPasses(
context,
managedContextState);
}
@@ -1063,36 +1306,86 @@ private:
return m_recordStageMethod;
}
bool FlushManagedFullscreenPasses(
bool FlushManagedRasterPasses(
const Rendering::RenderPipelineStageRenderGraphContext& context,
const ManagedScriptableRenderContextState& managedContextState) {
if (managedContextState.queuedFullscreenPasses.empty()) {
if (managedContextState.rasterPassRequests.empty()) {
return true;
}
if (!Rendering::IsCameraFrameFullscreenSequenceStage(context.stage)) {
return false;
}
std::vector<Rendering::RenderPass*> passes = {};
passes.reserve(
managedContextState.queuedFullscreenPasses.size());
Rendering::RenderGraphTextureHandle currentSourceColor =
ResolveManagedScriptableRenderContextSourceColorTexture(
&managedContextState);
const Rendering::RenderGraphTextureHandle finalOutputColor =
ResolveManagedScriptableRenderContextPrimaryColorTarget(
&managedContextState);
if (!currentSourceColor.IsValid() ||
!finalOutputColor.IsValid()) {
return false;
}
for (size_t passIndex = 0u;
passIndex < managedContextState.queuedFullscreenPasses.size();
passIndex < managedContextState.rasterPassRequests.size();
++passIndex) {
const ManagedScriptableRenderContextState::RasterPassRecordRequest&
request = managedContextState.rasterPassRequests[passIndex];
Rendering::RenderPass* const pass =
ConfigureManagedFullscreenPass(
m_fullscreenPassPool,
passIndex,
managedContextState.queuedFullscreenPasses[passIndex]);
request.passDesc);
if (pass == nullptr) {
return false;
}
passes.push_back(pass);
const Containers::String resolvedPassName =
!request.passName.Empty()
? request.passName
: managedContextState.rasterPassRequests.size() == 1u
? context.passName
: Rendering::BuildRenderGraphSequencePassName(
context.passName,
passIndex);
const Rendering::RenderGraphTextureHandle resolvedSourceColor =
request.sourceColorTexture.IsValid()
? request.sourceColorTexture
: currentSourceColor;
std::vector<Rendering::RenderGraphTextureHandle>
resolvedColorTargets =
request.colorTargets;
if (!ResolveManagedPrimaryColorTarget(resolvedColorTargets)
.IsValid()) {
const bool isLastPass =
passIndex + 1u ==
managedContextState.rasterPassRequests.size();
const Rendering::RenderGraphTextureHandle resolvedOutputColor =
isLastPass
? finalOutputColor
: context.graphBuilder.CreateTransientTexture(
resolvedPassName + ".Color",
Rendering::BuildFullscreenTransientTextureDesc(
context.surfaceTemplate));
resolvedColorTargets = { resolvedOutputColor };
}
if (!RecordManagedFullscreenRasterPass(
context,
*pass,
resolvedSourceColor,
resolvedColorTargets,
request.readTextures,
resolvedPassName)) {
return false;
}
currentSourceColor =
ResolveManagedPrimaryColorTarget(
resolvedColorTargets);
}
return Rendering::RecordRenderPipelineStageFullscreenPassSequence(
context,
passes);
return true;
}
Rendering::NativeSceneRenderer* ResolveSceneRenderer() {
@@ -3414,6 +3707,308 @@ int32_t InternalCall_Rendering_ScriptableRenderContext_GetStage(
: static_cast<int32_t>(Rendering::CameraFrameStage::MainScene);
}
int32_t InternalCall_Rendering_ScriptableRenderContext_GetSourceColorTextureHandle(
uint64_t nativeHandle) {
const ManagedScriptableRenderContextState* const state =
FindManagedScriptableRenderContextState(nativeHandle);
return EncodeManagedRenderGraphTextureHandle(
ResolveManagedScriptableRenderContextSourceColorTexture(
state));
}
int32_t InternalCall_Rendering_ScriptableRenderContext_GetPrimaryColorTargetHandle(
uint64_t nativeHandle) {
const ManagedScriptableRenderContextState* const state =
FindManagedScriptableRenderContextState(nativeHandle);
return EncodeManagedRenderGraphTextureHandle(
ResolveManagedScriptableRenderContextPrimaryColorTarget(
state));
}
int32_t InternalCall_Rendering_ScriptableRenderContext_GetDepthTargetHandle(
uint64_t nativeHandle) {
const ManagedScriptableRenderContextState* const state =
FindManagedScriptableRenderContextState(nativeHandle);
return EncodeManagedRenderGraphTextureHandle(
ResolveManagedScriptableRenderContextDepthTarget(
state));
}
int32_t InternalCall_Rendering_ScriptableRenderContext_CreateTransientTexture(
uint64_t nativeHandle,
MonoString* name,
ManagedRenderGraphTextureDescData* descData) {
ManagedScriptableRenderContextState* const state =
FindManagedScriptableRenderContextState(nativeHandle);
if (state == nullptr ||
state->graphContext == nullptr ||
descData == nullptr) {
return -1;
}
const auto* const desc =
reinterpret_cast<const Rendering::RenderGraphTextureDesc*>(
descData);
if (!desc->IsValid()) {
return -1;
}
const Rendering::RenderGraphTextureHandle handle =
state->graphContext->graphBuilder.CreateTransientTexture(
Containers::String(MonoStringToUtf8(name).c_str()),
*desc);
return EncodeManagedRenderGraphTextureHandle(handle);
}
int32_t
InternalCall_Rendering_ScriptableRenderContext_CreateFullscreenTransientColorTexture(
uint64_t nativeHandle,
MonoString* name) {
ManagedScriptableRenderContextState* const state =
FindManagedScriptableRenderContextState(nativeHandle);
if (state == nullptr ||
state->graphContext == nullptr) {
return -1;
}
const Rendering::RenderGraphTextureHandle handle =
state->graphContext->graphBuilder.CreateTransientTexture(
Containers::String(MonoStringToUtf8(name).c_str()),
Rendering::BuildFullscreenTransientTextureDesc(
state->graphContext->surfaceTemplate));
return EncodeManagedRenderGraphTextureHandle(handle);
}
int32_t
InternalCall_Rendering_ScriptableRenderContext_CreateFullscreenTransientDepthTexture(
uint64_t nativeHandle,
MonoString* name) {
ManagedScriptableRenderContextState* const state =
FindManagedScriptableRenderContextState(nativeHandle);
if (state == nullptr ||
state->graphContext == nullptr) {
return -1;
}
const Rendering::RenderGraphTextureHandle handle =
state->graphContext->graphBuilder.CreateTransientTexture(
Containers::String(MonoStringToUtf8(name).c_str()),
BuildManagedFullscreenTransientDepthTextureDesc(
state->graphContext->surfaceTemplate));
return EncodeManagedRenderGraphTextureHandle(handle);
}
uint64_t InternalCall_Rendering_ScriptableRenderContext_BeginRasterPass(
uint64_t nativeHandle,
MonoString* passName) {
ManagedScriptableRenderContextState* const state =
FindManagedScriptableRenderContextState(nativeHandle);
if (state == nullptr ||
state->graphContext == nullptr ||
!Rendering::IsCameraFrameFullscreenSequenceStage(state->stage)) {
return 0u;
}
const Containers::String passNameString(
MonoStringToUtf8(passName).c_str());
if (passNameString.Empty()) {
return 0u;
}
uint64_t rasterPassHandle =
state->nextPendingRasterPassHandle++;
if (rasterPassHandle == 0u) {
rasterPassHandle =
state->nextPendingRasterPassHandle++;
}
ManagedScriptableRenderContextState::RasterPassRecordRequest
request = {};
request.passName = passNameString;
state->pendingRasterPassRequests[rasterPassHandle] =
std::move(request);
return rasterPassHandle;
}
mono_bool
InternalCall_Rendering_ScriptableRenderContext_SetRasterPassSourceColorTexture(
uint64_t nativeHandle,
uint64_t rasterPassHandle,
int32_t sourceTextureHandle) {
ManagedScriptableRenderContextState* const state =
FindManagedScriptableRenderContextState(nativeHandle);
ManagedScriptableRenderContextState::RasterPassRecordRequest*
const request =
FindPendingManagedRasterPassRecordRequest(
state,
rasterPassHandle);
if (request == nullptr) {
return 0;
}
const Rendering::RenderGraphTextureHandle sourceColorTexture =
DecodeManagedRenderGraphTextureHandle(
sourceTextureHandle);
if (!sourceColorTexture.IsValid()) {
return 0;
}
request->sourceColorTexture = sourceColorTexture;
return 1;
}
mono_bool
InternalCall_Rendering_ScriptableRenderContext_AddRasterPassReadTexture(
uint64_t nativeHandle,
uint64_t rasterPassHandle,
int32_t textureHandle) {
ManagedScriptableRenderContextState* const state =
FindManagedScriptableRenderContextState(nativeHandle);
ManagedScriptableRenderContextState::RasterPassRecordRequest*
const request =
FindPendingManagedRasterPassRecordRequest(
state,
rasterPassHandle);
if (request == nullptr) {
return 0;
}
const Rendering::RenderGraphTextureHandle readTexture =
DecodeManagedRenderGraphTextureHandle(
textureHandle);
if (!readTexture.IsValid()) {
return 0;
}
request->readTextures.push_back(readTexture);
return 1;
}
mono_bool
InternalCall_Rendering_ScriptableRenderContext_SetRasterPassColorAttachment(
uint64_t nativeHandle,
uint64_t rasterPassHandle,
int32_t colorAttachmentIndex,
int32_t textureHandle) {
ManagedScriptableRenderContextState* const state =
FindManagedScriptableRenderContextState(nativeHandle);
ManagedScriptableRenderContextState::RasterPassRecordRequest*
const request =
FindPendingManagedRasterPassRecordRequest(
state,
rasterPassHandle);
if (request == nullptr ||
colorAttachmentIndex < 0) {
return 0;
}
const Rendering::RenderGraphTextureHandle colorAttachment =
DecodeManagedRenderGraphTextureHandle(
textureHandle);
if (!colorAttachment.IsValid()) {
return 0;
}
if (request->colorTargets.size() <=
static_cast<size_t>(colorAttachmentIndex)) {
request->colorTargets.resize(
static_cast<size_t>(colorAttachmentIndex) + 1u);
}
request->colorTargets[static_cast<size_t>(colorAttachmentIndex)] =
colorAttachment;
return 1;
}
mono_bool
InternalCall_Rendering_ScriptableRenderContext_SetRasterPassColorScaleFullscreenExecution(
uint64_t nativeHandle,
uint64_t rasterPassHandle,
XCEngine::Math::Vector4* vectorPayload) {
ManagedScriptableRenderContextState* const state =
FindManagedScriptableRenderContextState(nativeHandle);
ManagedScriptableRenderContextState::RasterPassRecordRequest*
const request =
FindPendingManagedRasterPassRecordRequest(
state,
rasterPassHandle);
if (request == nullptr ||
vectorPayload == nullptr) {
return 0;
}
request->passDesc =
Rendering::FullscreenPassDesc::MakeColorScale(
*vectorPayload);
return 1;
}
mono_bool
InternalCall_Rendering_ScriptableRenderContext_SetRasterPassShaderVectorFullscreenExecution(
uint64_t nativeHandle,
uint64_t rasterPassHandle,
MonoString* shaderPath,
MonoString* shaderPassName,
XCEngine::Math::Vector4* vectorPayload) {
ManagedScriptableRenderContextState* const state =
FindManagedScriptableRenderContextState(nativeHandle);
ManagedScriptableRenderContextState::RasterPassRecordRequest*
const request =
FindPendingManagedRasterPassRecordRequest(
state,
rasterPassHandle);
if (request == nullptr ||
vectorPayload == nullptr) {
return 0;
}
const Containers::String shaderPathString(
MonoStringToUtf8(shaderPath).c_str());
if (shaderPathString.Empty()) {
return 0;
}
request->passDesc =
Rendering::FullscreenPassDesc::MakeShaderVector(
shaderPathString,
*vectorPayload,
Containers::String(MonoStringToUtf8(shaderPassName).c_str()));
return request->passDesc.IsValid()
? 1
: 0;
}
mono_bool InternalCall_Rendering_ScriptableRenderContext_CommitRasterPass(
uint64_t nativeHandle,
uint64_t rasterPassHandle) {
ManagedScriptableRenderContextState* const state =
FindManagedScriptableRenderContextState(nativeHandle);
if (state == nullptr ||
state->graphContext == nullptr ||
!Rendering::IsCameraFrameFullscreenSequenceStage(state->stage)) {
return 0;
}
auto it =
state->pendingRasterPassRequests.find(
rasterPassHandle);
if (it == state->pendingRasterPassRequests.end()) {
return 0;
}
ManagedScriptableRenderContextState::RasterPassRecordRequest
request = std::move(it->second);
state->pendingRasterPassRequests.erase(it);
if (!request.passDesc.IsValid() ||
!ResolveManagedPrimaryColorTarget(request.colorTargets)
.IsValid()) {
return 0;
}
state->rasterPassRequests.push_back(std::move(request));
return 1;
}
int32_t InternalCall_Rendering_ScriptableRenderContext_GetStageColorSource(
uint64_t nativeHandle) {
const ManagedScriptableRenderContextState* const state =
@@ -3974,50 +4569,6 @@ InternalCall_Rendering_ScriptableRenderContext_RecordSceneInjectionPoint(
: 0;
}
mono_bool
InternalCall_Rendering_ScriptableRenderContext_RecordFullscreenPass(
uint64_t nativeHandle,
int32_t passType,
MonoString* shaderPath,
MonoString* passName,
XCEngine::Math::Vector4* vectorPayload) {
ManagedScriptableRenderContextState* const state =
FindManagedScriptableRenderContextState(nativeHandle);
if (state == nullptr ||
state->graphContext == nullptr ||
!Rendering::IsCameraFrameFullscreenSequenceStage(state->stage)) {
return 0;
}
Rendering::FullscreenPassDesc passDesc = {};
switch (static_cast<Rendering::FullscreenPassType>(passType)) {
case Rendering::FullscreenPassType::ColorScale:
if (vectorPayload == nullptr) {
return 0;
}
passDesc =
Rendering::FullscreenPassDesc::MakeColorScale(*vectorPayload);
break;
case Rendering::FullscreenPassType::ShaderVector:
if (vectorPayload == nullptr) {
return 0;
}
passDesc = Rendering::FullscreenPassDesc::MakeShaderVector(
Containers::String(MonoStringToUtf8(shaderPath).c_str()),
*vectorPayload,
Containers::String(MonoStringToUtf8(passName).c_str()));
if (!passDesc.IsValid()) {
return 0;
}
break;
default:
return 0;
}
state->queuedFullscreenPasses.push_back(passDesc);
return 1;
}
int32_t
InternalCall_Rendering_CameraRenderRequestContext_GetRenderedBaseCameraCount(
uint64_t nativeHandle) {
@@ -4299,6 +4850,19 @@ void RegisterInternalCalls() {
mono_add_internal_call("XCEngine.InternalCalls::Rendering_SetRenderPipelineAsset", reinterpret_cast<const void*>(&InternalCall_Rendering_SetRenderPipelineAsset));
mono_add_internal_call("XCEngine.InternalCalls::Rendering_GetRenderPipelineAsset", reinterpret_cast<const void*>(&InternalCall_Rendering_GetRenderPipelineAsset));
mono_add_internal_call("XCEngine.InternalCalls::Rendering_ScriptableRenderContext_GetStage", reinterpret_cast<const void*>(&InternalCall_Rendering_ScriptableRenderContext_GetStage));
mono_add_internal_call("XCEngine.InternalCalls::Rendering_ScriptableRenderContext_GetSourceColorTextureHandle", reinterpret_cast<const void*>(&InternalCall_Rendering_ScriptableRenderContext_GetSourceColorTextureHandle));
mono_add_internal_call("XCEngine.InternalCalls::Rendering_ScriptableRenderContext_GetPrimaryColorTargetHandle", reinterpret_cast<const void*>(&InternalCall_Rendering_ScriptableRenderContext_GetPrimaryColorTargetHandle));
mono_add_internal_call("XCEngine.InternalCalls::Rendering_ScriptableRenderContext_GetDepthTargetHandle", reinterpret_cast<const void*>(&InternalCall_Rendering_ScriptableRenderContext_GetDepthTargetHandle));
mono_add_internal_call("XCEngine.InternalCalls::Rendering_ScriptableRenderContext_CreateTransientTexture", reinterpret_cast<const void*>(&InternalCall_Rendering_ScriptableRenderContext_CreateTransientTexture));
mono_add_internal_call("XCEngine.InternalCalls::Rendering_ScriptableRenderContext_CreateFullscreenTransientColorTexture", reinterpret_cast<const void*>(&InternalCall_Rendering_ScriptableRenderContext_CreateFullscreenTransientColorTexture));
mono_add_internal_call("XCEngine.InternalCalls::Rendering_ScriptableRenderContext_CreateFullscreenTransientDepthTexture", reinterpret_cast<const void*>(&InternalCall_Rendering_ScriptableRenderContext_CreateFullscreenTransientDepthTexture));
mono_add_internal_call("XCEngine.InternalCalls::Rendering_ScriptableRenderContext_BeginRasterPass", reinterpret_cast<const void*>(&InternalCall_Rendering_ScriptableRenderContext_BeginRasterPass));
mono_add_internal_call("XCEngine.InternalCalls::Rendering_ScriptableRenderContext_SetRasterPassSourceColorTexture", reinterpret_cast<const void*>(&InternalCall_Rendering_ScriptableRenderContext_SetRasterPassSourceColorTexture));
mono_add_internal_call("XCEngine.InternalCalls::Rendering_ScriptableRenderContext_AddRasterPassReadTexture", reinterpret_cast<const void*>(&InternalCall_Rendering_ScriptableRenderContext_AddRasterPassReadTexture));
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_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));
mono_add_internal_call("XCEngine.InternalCalls::Rendering_ScriptableRenderContext_GetMainDirectionalShadowEnabled", reinterpret_cast<const void*>(&InternalCall_Rendering_ScriptableRenderContext_GetMainDirectionalShadowEnabled));
@@ -4352,7 +4916,6 @@ void RegisterInternalCalls() {
mono_add_internal_call("XCEngine.InternalCalls::Rendering_ScriptableRenderContext_RecordScene", reinterpret_cast<const void*>(&InternalCall_Rendering_ScriptableRenderContext_RecordScene));
mono_add_internal_call("XCEngine.InternalCalls::Rendering_ScriptableRenderContext_RecordScenePhase", reinterpret_cast<const void*>(&InternalCall_Rendering_ScriptableRenderContext_RecordScenePhase));
mono_add_internal_call("XCEngine.InternalCalls::Rendering_ScriptableRenderContext_RecordSceneInjectionPoint", reinterpret_cast<const void*>(&InternalCall_Rendering_ScriptableRenderContext_RecordSceneInjectionPoint));
mono_add_internal_call("XCEngine.InternalCalls::Rendering_ScriptableRenderContext_RecordFullscreenPass", reinterpret_cast<const void*>(&InternalCall_Rendering_ScriptableRenderContext_RecordFullscreenPass));
mono_add_internal_call("XCEngine.InternalCalls::Rendering_ScriptableRenderPipelinePlanningContext_IsStageRequested", reinterpret_cast<const void*>(&InternalCall_Rendering_ScriptableRenderPipelinePlanningContext_IsStageRequested));
mono_add_internal_call("XCEngine.InternalCalls::Rendering_ScriptableRenderPipelinePlanningContext_GetStageColorSource", reinterpret_cast<const void*>(&InternalCall_Rendering_ScriptableRenderPipelinePlanningContext_GetStageColorSource));
mono_add_internal_call("XCEngine.InternalCalls::Rendering_ScriptableRenderPipelinePlanningContext_GetStageUsesGraphManagedOutputColor", reinterpret_cast<const void*>(&InternalCall_Rendering_ScriptableRenderPipelinePlanningContext_GetStageUsesGraphManagedOutputColor));