Formalize chained fullscreen post-process execution
This commit is contained in:
@@ -57,6 +57,9 @@ struct MockShadowAllocationState {
|
||||
int createTextureCalls = 0;
|
||||
int shutdownTextureCalls = 0;
|
||||
int destroyTextureCalls = 0;
|
||||
int createRenderTargetViewCalls = 0;
|
||||
int shutdownRenderTargetViewCalls = 0;
|
||||
int destroyRenderTargetViewCalls = 0;
|
||||
int createDepthViewCalls = 0;
|
||||
int shutdownDepthViewCalls = 0;
|
||||
int destroyDepthViewCalls = 0;
|
||||
@@ -66,6 +69,7 @@ struct MockShadowAllocationState {
|
||||
uint32_t lastTextureWidth = 0;
|
||||
uint32_t lastTextureHeight = 0;
|
||||
XCEngine::RHI::Format lastTextureFormat = XCEngine::RHI::Format::Unknown;
|
||||
XCEngine::RHI::Format lastRenderTargetViewFormat = XCEngine::RHI::Format::Unknown;
|
||||
XCEngine::RHI::Format lastDepthViewFormat = XCEngine::RHI::Format::Unknown;
|
||||
XCEngine::RHI::Format lastShaderViewFormat = XCEngine::RHI::Format::Unknown;
|
||||
};
|
||||
@@ -128,6 +132,8 @@ public:
|
||||
~MockShadowView() override {
|
||||
if (m_viewType == XCEngine::RHI::ResourceViewType::ShaderResource) {
|
||||
++m_state->destroyShaderViewCalls;
|
||||
} else if (m_viewType == XCEngine::RHI::ResourceViewType::RenderTarget) {
|
||||
++m_state->destroyRenderTargetViewCalls;
|
||||
} else {
|
||||
++m_state->destroyDepthViewCalls;
|
||||
}
|
||||
@@ -136,6 +142,8 @@ public:
|
||||
void Shutdown() override {
|
||||
if (m_viewType == XCEngine::RHI::ResourceViewType::ShaderResource) {
|
||||
++m_state->shutdownShaderViewCalls;
|
||||
} else if (m_viewType == XCEngine::RHI::ResourceViewType::RenderTarget) {
|
||||
++m_state->shutdownRenderTargetViewCalls;
|
||||
} else {
|
||||
++m_state->shutdownDepthViewCalls;
|
||||
}
|
||||
@@ -221,7 +229,15 @@ public:
|
||||
const XCEngine::RHI::ResourceViewDesc&) override { return nullptr; }
|
||||
XCEngine::RHI::RHIResourceView* CreateRenderTargetView(
|
||||
XCEngine::RHI::RHITexture*,
|
||||
const XCEngine::RHI::ResourceViewDesc&) override { return nullptr; }
|
||||
const XCEngine::RHI::ResourceViewDesc& desc) override {
|
||||
++m_state->createRenderTargetViewCalls;
|
||||
m_state->lastRenderTargetViewFormat = static_cast<XCEngine::RHI::Format>(desc.format);
|
||||
return new MockShadowView(
|
||||
m_state,
|
||||
XCEngine::RHI::ResourceViewType::RenderTarget,
|
||||
static_cast<XCEngine::RHI::Format>(desc.format),
|
||||
desc.dimension);
|
||||
}
|
||||
|
||||
XCEngine::RHI::RHIResourceView* CreateDepthStencilView(
|
||||
XCEngine::RHI::RHITexture*,
|
||||
@@ -395,6 +411,7 @@ public:
|
||||
lastSourceSurfaceWidth = context.sourceSurface->GetRenderAreaWidth();
|
||||
lastSourceSurfaceHeight = context.sourceSurface->GetRenderAreaHeight();
|
||||
}
|
||||
lastSourceColorView = context.sourceColorView;
|
||||
return m_executeResult;
|
||||
}
|
||||
|
||||
@@ -412,6 +429,7 @@ public:
|
||||
bool lastHasSourceSurface = false;
|
||||
uint32_t lastSourceSurfaceWidth = 0;
|
||||
uint32_t lastSourceSurfaceHeight = 0;
|
||||
XCEngine::RHI::RHIResourceView* lastSourceColorView = nullptr;
|
||||
|
||||
private:
|
||||
std::shared_ptr<MockPipelineState> m_state;
|
||||
@@ -451,6 +469,7 @@ public:
|
||||
lastSourceSurfaceWidth = context.sourceSurface->GetRenderAreaWidth();
|
||||
lastSourceSurfaceHeight = context.sourceSurface->GetRenderAreaHeight();
|
||||
}
|
||||
lastSourceColorView = context.sourceColorView;
|
||||
return m_executeResult;
|
||||
}
|
||||
|
||||
@@ -470,6 +489,7 @@ public:
|
||||
bool lastHasSourceSurface = false;
|
||||
uint32_t lastSourceSurfaceWidth = 0;
|
||||
uint32_t lastSourceSurfaceHeight = 0;
|
||||
XCEngine::RHI::RHIResourceView* lastSourceColorView = nullptr;
|
||||
};
|
||||
|
||||
RenderContext CreateValidContext() {
|
||||
@@ -507,11 +527,13 @@ TEST(CameraRenderRequest_Test, ReportsFormalFrameStageContract) {
|
||||
|
||||
request.postProcess.sourceSurface = RenderSurface(256, 128);
|
||||
request.postProcess.sourceSurface.SetColorAttachment(reinterpret_cast<XCEngine::RHI::RHIResourceView*>(2));
|
||||
request.postProcess.sourceColorView = reinterpret_cast<XCEngine::RHI::RHIResourceView*>(20);
|
||||
request.postProcess.destinationSurface = RenderSurface(512, 256);
|
||||
request.postProcess.destinationSurface.SetColorAttachment(reinterpret_cast<XCEngine::RHI::RHIResourceView*>(3));
|
||||
|
||||
request.finalOutput.sourceSurface = RenderSurface(512, 256);
|
||||
request.finalOutput.sourceSurface.SetColorAttachment(reinterpret_cast<XCEngine::RHI::RHIResourceView*>(4));
|
||||
request.finalOutput.sourceColorView = reinterpret_cast<XCEngine::RHI::RHIResourceView*>(40);
|
||||
request.finalOutput.destinationSurface = RenderSurface(640, 360);
|
||||
request.finalOutput.destinationSurface.SetColorAttachment(reinterpret_cast<XCEngine::RHI::RHIResourceView*>(5));
|
||||
|
||||
@@ -563,8 +585,14 @@ TEST(CameraRenderRequest_Test, ReportsFormalFrameStageContract) {
|
||||
EXPECT_EQ(request.GetOutputSurface(CameraFrameStage::PostProcess)->GetRenderAreaWidth(), 512u);
|
||||
ASSERT_NE(request.GetSourceSurface(CameraFrameStage::PostProcess), nullptr);
|
||||
EXPECT_EQ(request.GetSourceSurface(CameraFrameStage::PostProcess)->GetRenderAreaWidth(), 256u);
|
||||
EXPECT_EQ(
|
||||
request.GetSourceColorView(CameraFrameStage::PostProcess),
|
||||
reinterpret_cast<XCEngine::RHI::RHIResourceView*>(20));
|
||||
ASSERT_NE(request.GetSourceSurface(CameraFrameStage::FinalOutput), nullptr);
|
||||
EXPECT_EQ(request.GetSourceSurface(CameraFrameStage::FinalOutput)->GetRenderAreaWidth(), 512u);
|
||||
EXPECT_EQ(
|
||||
request.GetSourceColorView(CameraFrameStage::FinalOutput),
|
||||
reinterpret_cast<XCEngine::RHI::RHIResourceView*>(40));
|
||||
}
|
||||
|
||||
TEST(CameraRenderer_Test, UsesOverrideCameraAndSurfaceSizeWhenSubmittingScene) {
|
||||
@@ -699,9 +727,7 @@ TEST(CameraRenderer_Test, ExecutesInjectedPreAndPostPassSequencesAroundPipelineR
|
||||
"pre",
|
||||
"pipeline",
|
||||
"init:post",
|
||||
"post",
|
||||
"shutdown:post",
|
||||
"shutdown:pre" }));
|
||||
"post" }));
|
||||
}
|
||||
|
||||
TEST(CameraRenderer_Test, ExecutesObjectIdPassBetweenPipelineAndPostPassesWhenRequested) {
|
||||
@@ -744,9 +770,7 @@ TEST(CameraRenderer_Test, ExecutesObjectIdPassBetweenPipelineAndPostPassesWhenRe
|
||||
"pipeline",
|
||||
"objectId",
|
||||
"init:post",
|
||||
"post",
|
||||
"shutdown:post",
|
||||
"shutdown:pre" }));
|
||||
"post" }));
|
||||
}
|
||||
|
||||
TEST(CameraRenderer_Test, RoutesSceneColorThroughPostProcessAndFinalOutputStages) {
|
||||
@@ -780,11 +804,13 @@ TEST(CameraRenderer_Test, RoutesSceneColorThroughPostProcessAndFinalOutputStages
|
||||
|
||||
request.postProcess.sourceSurface = RenderSurface(256, 128);
|
||||
request.postProcess.sourceSurface.SetColorAttachment(reinterpret_cast<XCEngine::RHI::RHIResourceView*>(2));
|
||||
request.postProcess.sourceColorView = reinterpret_cast<XCEngine::RHI::RHIResourceView*>(20);
|
||||
request.postProcess.destinationSurface = RenderSurface(512, 256);
|
||||
request.postProcess.destinationSurface.SetColorAttachment(reinterpret_cast<XCEngine::RHI::RHIResourceView*>(3));
|
||||
request.postProcess.passes = &postProcessPasses;
|
||||
|
||||
request.finalOutput.sourceSurface = request.postProcess.destinationSurface;
|
||||
request.finalOutput.sourceColorView = reinterpret_cast<XCEngine::RHI::RHIResourceView*>(30);
|
||||
request.finalOutput.destinationSurface = request.surface;
|
||||
request.finalOutput.passes = &finalOutputPasses;
|
||||
|
||||
@@ -797,12 +823,18 @@ TEST(CameraRenderer_Test, RoutesSceneColorThroughPostProcessAndFinalOutputStages
|
||||
EXPECT_TRUE(postProcessPassRaw->lastHasSourceSurface);
|
||||
EXPECT_EQ(postProcessPassRaw->lastSourceSurfaceWidth, 256u);
|
||||
EXPECT_EQ(postProcessPassRaw->lastSourceSurfaceHeight, 128u);
|
||||
EXPECT_EQ(
|
||||
postProcessPassRaw->lastSourceColorView,
|
||||
reinterpret_cast<XCEngine::RHI::RHIResourceView*>(20));
|
||||
EXPECT_EQ(postProcessPassRaw->lastSurfaceWidth, 512u);
|
||||
EXPECT_EQ(postProcessPassRaw->lastSurfaceHeight, 256u);
|
||||
ASSERT_NE(finalOutputPassRaw, nullptr);
|
||||
EXPECT_TRUE(finalOutputPassRaw->lastHasSourceSurface);
|
||||
EXPECT_EQ(finalOutputPassRaw->lastSourceSurfaceWidth, 512u);
|
||||
EXPECT_EQ(finalOutputPassRaw->lastSourceSurfaceHeight, 256u);
|
||||
EXPECT_EQ(
|
||||
finalOutputPassRaw->lastSourceColorView,
|
||||
reinterpret_cast<XCEngine::RHI::RHIResourceView*>(30));
|
||||
EXPECT_EQ(finalOutputPassRaw->lastSurfaceWidth, 800u);
|
||||
EXPECT_EQ(finalOutputPassRaw->lastSurfaceHeight, 600u);
|
||||
EXPECT_EQ(
|
||||
@@ -812,9 +844,214 @@ TEST(CameraRenderer_Test, RoutesSceneColorThroughPostProcessAndFinalOutputStages
|
||||
"init:postProcess",
|
||||
"postProcess",
|
||||
"init:finalOutput",
|
||||
"finalOutput",
|
||||
"shutdown:finalOutput",
|
||||
"shutdown:postProcess" }));
|
||||
"finalOutput" }));
|
||||
}
|
||||
|
||||
TEST(CameraRenderer_Test, ChainsMultiPassPostProcessThroughIntermediateSurface) {
|
||||
Scene scene("CameraRendererMultiPassPostProcessScene");
|
||||
|
||||
GameObject* cameraObject = scene.CreateGameObject("Camera");
|
||||
auto* camera = cameraObject->AddComponent<CameraComponent>();
|
||||
camera->SetPrimary(true);
|
||||
camera->SetDepth(4.0f);
|
||||
|
||||
auto pipelineState = std::make_shared<MockPipelineState>();
|
||||
auto allocationState = std::make_shared<MockShadowAllocationState>();
|
||||
MockShadowDevice device(allocationState);
|
||||
CameraRenderer renderer(std::make_unique<MockPipeline>(pipelineState));
|
||||
|
||||
auto firstPass = std::make_unique<MockScenePass>(pipelineState, "postProcessTint");
|
||||
MockScenePass* firstPassRaw = firstPass.get();
|
||||
auto secondPass = std::make_unique<MockScenePass>(pipelineState, "postProcessComposite");
|
||||
MockScenePass* secondPassRaw = secondPass.get();
|
||||
RenderPassSequence postProcessPasses;
|
||||
postProcessPasses.AddPass(std::move(firstPass));
|
||||
postProcessPasses.AddPass(std::move(secondPass));
|
||||
|
||||
auto* sourceColorAttachment = new MockShadowView(
|
||||
allocationState,
|
||||
XCEngine::RHI::ResourceViewType::RenderTarget,
|
||||
XCEngine::RHI::Format::R8G8B8A8_UNorm,
|
||||
XCEngine::RHI::ResourceViewDimension::Texture2D);
|
||||
auto* sourceColorShaderView = new MockShadowView(
|
||||
allocationState,
|
||||
XCEngine::RHI::ResourceViewType::ShaderResource,
|
||||
XCEngine::RHI::Format::R8G8B8A8_UNorm,
|
||||
XCEngine::RHI::ResourceViewDimension::Texture2D);
|
||||
auto* destinationColorAttachment = new MockShadowView(
|
||||
allocationState,
|
||||
XCEngine::RHI::ResourceViewType::RenderTarget,
|
||||
XCEngine::RHI::Format::R8G8B8A8_UNorm,
|
||||
XCEngine::RHI::ResourceViewDimension::Texture2D);
|
||||
|
||||
RenderContext context = CreateValidContext();
|
||||
context.device = &device;
|
||||
|
||||
CameraRenderRequest request;
|
||||
request.scene = &scene;
|
||||
request.camera = camera;
|
||||
request.context = context;
|
||||
request.surface = RenderSurface(512, 256);
|
||||
request.surface.SetColorAttachment(destinationColorAttachment);
|
||||
request.cameraDepth = camera->GetDepth();
|
||||
request.postProcess.sourceSurface = RenderSurface(256, 128);
|
||||
request.postProcess.sourceSurface.SetColorAttachment(sourceColorAttachment);
|
||||
request.postProcess.sourceColorView = sourceColorShaderView;
|
||||
request.postProcess.destinationSurface = RenderSurface(512, 256);
|
||||
request.postProcess.destinationSurface.SetColorAttachment(destinationColorAttachment);
|
||||
request.postProcess.passes = &postProcessPasses;
|
||||
|
||||
ASSERT_TRUE(renderer.Render(request));
|
||||
|
||||
ASSERT_NE(firstPassRaw, nullptr);
|
||||
EXPECT_TRUE(firstPassRaw->lastHasSourceSurface);
|
||||
EXPECT_EQ(firstPassRaw->lastSourceSurfaceWidth, 256u);
|
||||
EXPECT_EQ(firstPassRaw->lastSourceSurfaceHeight, 128u);
|
||||
EXPECT_EQ(firstPassRaw->lastSourceColorView, sourceColorShaderView);
|
||||
EXPECT_EQ(firstPassRaw->lastSurfaceWidth, 512u);
|
||||
EXPECT_EQ(firstPassRaw->lastSurfaceHeight, 256u);
|
||||
|
||||
ASSERT_NE(secondPassRaw, nullptr);
|
||||
EXPECT_TRUE(secondPassRaw->lastHasSourceSurface);
|
||||
EXPECT_EQ(secondPassRaw->lastSourceSurfaceWidth, 512u);
|
||||
EXPECT_EQ(secondPassRaw->lastSourceSurfaceHeight, 256u);
|
||||
EXPECT_NE(secondPassRaw->lastSourceColorView, nullptr);
|
||||
EXPECT_NE(secondPassRaw->lastSourceColorView, sourceColorShaderView);
|
||||
EXPECT_EQ(secondPassRaw->lastSurfaceWidth, 512u);
|
||||
EXPECT_EQ(secondPassRaw->lastSurfaceHeight, 256u);
|
||||
|
||||
EXPECT_EQ(allocationState->createTextureCalls, 1);
|
||||
EXPECT_EQ(allocationState->createRenderTargetViewCalls, 1);
|
||||
EXPECT_EQ(allocationState->createShaderViewCalls, 1);
|
||||
EXPECT_EQ(
|
||||
pipelineState->eventLog,
|
||||
(std::vector<std::string>{
|
||||
"pipeline",
|
||||
"init:postProcessTint",
|
||||
"init:postProcessComposite",
|
||||
"postProcessTint",
|
||||
"postProcessComposite" }));
|
||||
|
||||
delete destinationColorAttachment;
|
||||
delete sourceColorShaderView;
|
||||
delete sourceColorAttachment;
|
||||
}
|
||||
|
||||
TEST(CameraRenderer_Test, KeepsPostProcessAndFinalOutputScratchSurfacesIndependentPerStage) {
|
||||
Scene scene("CameraRendererIndependentFullscreenStagesScene");
|
||||
|
||||
GameObject* cameraObject = scene.CreateGameObject("Camera");
|
||||
auto* camera = cameraObject->AddComponent<CameraComponent>();
|
||||
camera->SetPrimary(true);
|
||||
camera->SetDepth(5.0f);
|
||||
|
||||
auto pipelineState = std::make_shared<MockPipelineState>();
|
||||
auto allocationState = std::make_shared<MockShadowAllocationState>();
|
||||
MockShadowDevice device(allocationState);
|
||||
CameraRenderer renderer(std::make_unique<MockPipeline>(pipelineState));
|
||||
|
||||
auto postFirstPass = std::make_unique<MockScenePass>(pipelineState, "postA");
|
||||
auto postSecondPass = std::make_unique<MockScenePass>(pipelineState, "postB");
|
||||
MockScenePass* postSecondPassRaw = postSecondPass.get();
|
||||
RenderPassSequence postProcessPasses;
|
||||
postProcessPasses.AddPass(std::move(postFirstPass));
|
||||
postProcessPasses.AddPass(std::move(postSecondPass));
|
||||
|
||||
auto finalFirstPass = std::make_unique<MockScenePass>(pipelineState, "finalA");
|
||||
MockScenePass* finalFirstPassRaw = finalFirstPass.get();
|
||||
auto finalSecondPass = std::make_unique<MockScenePass>(pipelineState, "finalB");
|
||||
MockScenePass* finalSecondPassRaw = finalSecondPass.get();
|
||||
RenderPassSequence finalOutputPasses;
|
||||
finalOutputPasses.AddPass(std::move(finalFirstPass));
|
||||
finalOutputPasses.AddPass(std::move(finalSecondPass));
|
||||
|
||||
auto* sourceColorAttachment = new MockShadowView(
|
||||
allocationState,
|
||||
XCEngine::RHI::ResourceViewType::RenderTarget,
|
||||
XCEngine::RHI::Format::R8G8B8A8_UNorm,
|
||||
XCEngine::RHI::ResourceViewDimension::Texture2D);
|
||||
auto* sourceColorShaderView = new MockShadowView(
|
||||
allocationState,
|
||||
XCEngine::RHI::ResourceViewType::ShaderResource,
|
||||
XCEngine::RHI::Format::R8G8B8A8_UNorm,
|
||||
XCEngine::RHI::ResourceViewDimension::Texture2D);
|
||||
auto* postProcessDestination = new MockShadowView(
|
||||
allocationState,
|
||||
XCEngine::RHI::ResourceViewType::RenderTarget,
|
||||
XCEngine::RHI::Format::R8G8B8A8_UNorm,
|
||||
XCEngine::RHI::ResourceViewDimension::Texture2D);
|
||||
auto* finalOutputSource = new MockShadowView(
|
||||
allocationState,
|
||||
XCEngine::RHI::ResourceViewType::ShaderResource,
|
||||
XCEngine::RHI::Format::R8G8B8A8_UNorm,
|
||||
XCEngine::RHI::ResourceViewDimension::Texture2D);
|
||||
auto* finalOutputDestination = new MockShadowView(
|
||||
allocationState,
|
||||
XCEngine::RHI::ResourceViewType::RenderTarget,
|
||||
XCEngine::RHI::Format::R8G8B8A8_UNorm,
|
||||
XCEngine::RHI::ResourceViewDimension::Texture2D);
|
||||
|
||||
RenderContext context = CreateValidContext();
|
||||
context.device = &device;
|
||||
|
||||
CameraRenderRequest request;
|
||||
request.scene = &scene;
|
||||
request.camera = camera;
|
||||
request.context = context;
|
||||
request.surface = RenderSurface(800, 600);
|
||||
request.surface.SetColorAttachment(finalOutputDestination);
|
||||
request.cameraDepth = camera->GetDepth();
|
||||
request.postProcess.sourceSurface = RenderSurface(256, 128);
|
||||
request.postProcess.sourceSurface.SetColorAttachment(sourceColorAttachment);
|
||||
request.postProcess.sourceColorView = sourceColorShaderView;
|
||||
request.postProcess.destinationSurface = RenderSurface(512, 256);
|
||||
request.postProcess.destinationSurface.SetColorAttachment(postProcessDestination);
|
||||
request.postProcess.passes = &postProcessPasses;
|
||||
request.finalOutput.sourceSurface = request.postProcess.destinationSurface;
|
||||
request.finalOutput.sourceColorView = finalOutputSource;
|
||||
request.finalOutput.destinationSurface = RenderSurface(800, 600);
|
||||
request.finalOutput.destinationSurface.SetColorAttachment(finalOutputDestination);
|
||||
request.finalOutput.passes = &finalOutputPasses;
|
||||
|
||||
ASSERT_TRUE(renderer.Render(request));
|
||||
|
||||
ASSERT_NE(postSecondPassRaw, nullptr);
|
||||
EXPECT_EQ(postSecondPassRaw->lastSourceSurfaceWidth, 512u);
|
||||
EXPECT_EQ(postSecondPassRaw->lastSourceSurfaceHeight, 256u);
|
||||
ASSERT_NE(finalFirstPassRaw, nullptr);
|
||||
EXPECT_EQ(finalFirstPassRaw->lastSourceSurfaceWidth, 512u);
|
||||
EXPECT_EQ(finalFirstPassRaw->lastSourceSurfaceHeight, 256u);
|
||||
EXPECT_EQ(finalFirstPassRaw->lastSourceColorView, finalOutputSource);
|
||||
ASSERT_NE(finalSecondPassRaw, nullptr);
|
||||
EXPECT_EQ(finalSecondPassRaw->lastSourceSurfaceWidth, 800u);
|
||||
EXPECT_EQ(finalSecondPassRaw->lastSourceSurfaceHeight, 600u);
|
||||
EXPECT_NE(finalSecondPassRaw->lastSourceColorView, nullptr);
|
||||
EXPECT_NE(finalSecondPassRaw->lastSourceColorView, finalOutputSource);
|
||||
|
||||
EXPECT_EQ(allocationState->createTextureCalls, 2);
|
||||
EXPECT_EQ(allocationState->createRenderTargetViewCalls, 2);
|
||||
EXPECT_EQ(allocationState->createShaderViewCalls, 2);
|
||||
EXPECT_EQ(allocationState->shutdownTextureCalls, 0);
|
||||
EXPECT_EQ(allocationState->shutdownRenderTargetViewCalls, 0);
|
||||
EXPECT_EQ(allocationState->shutdownShaderViewCalls, 0);
|
||||
EXPECT_EQ(
|
||||
pipelineState->eventLog,
|
||||
(std::vector<std::string>{
|
||||
"pipeline",
|
||||
"init:postA",
|
||||
"init:postB",
|
||||
"postA",
|
||||
"postB",
|
||||
"init:finalA",
|
||||
"init:finalB",
|
||||
"finalA",
|
||||
"finalB" }));
|
||||
|
||||
delete finalOutputDestination;
|
||||
delete finalOutputSource;
|
||||
delete postProcessDestination;
|
||||
delete sourceColorShaderView;
|
||||
delete sourceColorAttachment;
|
||||
}
|
||||
|
||||
TEST(CameraRenderer_Test, ExecutesFormalFrameStagesInDocumentedOrder) {
|
||||
@@ -869,9 +1106,11 @@ TEST(CameraRenderer_Test, ExecutesFormalFrameStagesInDocumentedOrder) {
|
||||
request.depthOnly.surface.SetDepthAttachment(reinterpret_cast<XCEngine::RHI::RHIResourceView*>(2));
|
||||
request.postProcess.sourceSurface = RenderSurface(256, 128);
|
||||
request.postProcess.sourceSurface.SetColorAttachment(reinterpret_cast<XCEngine::RHI::RHIResourceView*>(4));
|
||||
request.postProcess.sourceColorView = reinterpret_cast<XCEngine::RHI::RHIResourceView*>(40);
|
||||
request.postProcess.destinationSurface = RenderSurface(320, 180);
|
||||
request.postProcess.destinationSurface.SetColorAttachment(reinterpret_cast<XCEngine::RHI::RHIResourceView*>(5));
|
||||
request.finalOutput.sourceSurface = request.postProcess.destinationSurface;
|
||||
request.finalOutput.sourceColorView = reinterpret_cast<XCEngine::RHI::RHIResourceView*>(50);
|
||||
request.finalOutput.destinationSurface = request.surface;
|
||||
request.objectId.surface = RenderSurface(320, 180);
|
||||
request.objectId.surface.SetColorAttachment(reinterpret_cast<XCEngine::RHI::RHIResourceView*>(6));
|
||||
@@ -896,12 +1135,7 @@ TEST(CameraRenderer_Test, ExecutesFormalFrameStagesInDocumentedOrder) {
|
||||
"init:post",
|
||||
"post",
|
||||
"init:overlay",
|
||||
"overlay",
|
||||
"shutdown:overlay",
|
||||
"shutdown:post",
|
||||
"shutdown:finalOutput",
|
||||
"shutdown:postProcess",
|
||||
"shutdown:pre" }));
|
||||
"overlay" }));
|
||||
}
|
||||
|
||||
TEST(CameraRenderer_Test, ExecutesShadowCasterAndDepthOnlyRequestsBeforeMainPipeline) {
|
||||
@@ -1253,7 +1487,7 @@ TEST(CameraRenderer_Test, ShutsDownInitializedPassesWhenPipelineRenderFails) {
|
||||
EXPECT_FALSE(renderer.Render(request));
|
||||
EXPECT_EQ(
|
||||
state->eventLog,
|
||||
(std::vector<std::string>{ "init:pre", "pre", "pipeline", "shutdown:pre" }));
|
||||
(std::vector<std::string>{ "init:pre", "pre", "pipeline" }));
|
||||
}
|
||||
|
||||
TEST(CameraRenderer_Test, StopsRenderingWhenObjectIdPassFails) {
|
||||
@@ -1290,7 +1524,7 @@ TEST(CameraRenderer_Test, StopsRenderingWhenObjectIdPassFails) {
|
||||
EXPECT_FALSE(renderer.Render(request));
|
||||
EXPECT_EQ(
|
||||
state->eventLog,
|
||||
(std::vector<std::string>{ "init:pre", "pre", "pipeline", "objectId", "shutdown:pre" }));
|
||||
(std::vector<std::string>{ "init:pre", "pre", "pipeline", "objectId" }));
|
||||
}
|
||||
|
||||
TEST(CameraRenderer_Test, ShutsDownSequencesWhenPostPassInitializationFails) {
|
||||
@@ -1327,8 +1561,7 @@ TEST(CameraRenderer_Test, ShutsDownSequencesWhenPostPassInitializationFails) {
|
||||
"pre",
|
||||
"pipeline",
|
||||
"init:post",
|
||||
"shutdown:post",
|
||||
"shutdown:pre" }));
|
||||
"shutdown:post" }));
|
||||
}
|
||||
|
||||
TEST(SceneRenderer_Test, BuildsSortedRequestsForAllUsableCamerasAndHonorsOverrideCamera) {
|
||||
|
||||
Reference in New Issue
Block a user