Generalize the native fullscreen pass and descriptor plumbing so managed SRP can request shader-driven fullscreen stages without being locked to the ColorScale path. Keep ColorScale as a convenience descriptor mapped to the builtin color-scale shader, and add native fullscreen factory coverage for the new shader-vector path.
79 lines
3.0 KiB
C++
79 lines
3.0 KiB
C++
#include <gtest/gtest.h>
|
|
|
|
#include <XCEngine/Rendering/Passes/BuiltinVectorFullscreenPass.h>
|
|
#include <XCEngine/Rendering/Planning/FullscreenPassFactory.h>
|
|
#include <XCEngine/Resources/BuiltinResources.h>
|
|
|
|
namespace {
|
|
|
|
void ExpectVector4Eq(
|
|
const XCEngine::Math::Vector4& actual,
|
|
const XCEngine::Math::Vector4& expected) {
|
|
EXPECT_FLOAT_EQ(actual.x, expected.x);
|
|
EXPECT_FLOAT_EQ(actual.y, expected.y);
|
|
EXPECT_FLOAT_EQ(actual.z, expected.z);
|
|
EXPECT_FLOAT_EQ(actual.w, expected.w);
|
|
}
|
|
|
|
} // namespace
|
|
|
|
TEST(FullscreenPassFactory_Test, BuildsColorScaleDescriptorIntoBuiltinVectorFullscreenPass) {
|
|
const XCEngine::Math::Vector4 payload(1.1f, 0.95f, 0.9f, 1.0f);
|
|
const XCEngine::Rendering::FullscreenPassStack fullscreenPasses = {
|
|
XCEngine::Rendering::FullscreenPassDesc::MakeColorScale(payload)
|
|
};
|
|
|
|
std::unique_ptr<XCEngine::Rendering::RenderPassSequence> sequence =
|
|
XCEngine::Rendering::BuildFullscreenPassSequence(fullscreenPasses);
|
|
ASSERT_NE(sequence, nullptr);
|
|
ASSERT_EQ(sequence->GetPassCount(), 1u);
|
|
|
|
auto* pass = dynamic_cast<XCEngine::Rendering::Passes::BuiltinVectorFullscreenPass*>(
|
|
sequence->GetPass(0u));
|
|
ASSERT_NE(pass, nullptr);
|
|
ExpectVector4Eq(pass->GetVectorPayload(), payload);
|
|
EXPECT_EQ(
|
|
pass->GetShaderPath(),
|
|
XCEngine::Resources::GetBuiltinColorScalePostProcessShaderPath());
|
|
EXPECT_EQ(
|
|
pass->GetPreferredPassName(),
|
|
XCEngine::Containers::String("ColorScale"));
|
|
}
|
|
|
|
TEST(FullscreenPassFactory_Test, BuildsShaderVectorDescriptorIntoBuiltinVectorFullscreenPass) {
|
|
const XCEngine::Containers::String shaderPath(
|
|
"builtin://shaders/color-scale-post-process");
|
|
const XCEngine::Containers::String passName("ColorScale");
|
|
const XCEngine::Math::Vector4 payload(0.95f, 1.05f, 1.1f, 1.0f);
|
|
const XCEngine::Rendering::FullscreenPassStack fullscreenPasses = {
|
|
XCEngine::Rendering::FullscreenPassDesc::MakeShaderVector(
|
|
shaderPath,
|
|
payload,
|
|
passName)
|
|
};
|
|
|
|
std::unique_ptr<XCEngine::Rendering::RenderPassSequence> sequence =
|
|
XCEngine::Rendering::BuildFullscreenPassSequence(fullscreenPasses);
|
|
ASSERT_NE(sequence, nullptr);
|
|
ASSERT_EQ(sequence->GetPassCount(), 1u);
|
|
|
|
auto* pass = dynamic_cast<XCEngine::Rendering::Passes::BuiltinVectorFullscreenPass*>(
|
|
sequence->GetPass(0u));
|
|
ASSERT_NE(pass, nullptr);
|
|
ExpectVector4Eq(pass->GetVectorPayload(), payload);
|
|
EXPECT_EQ(pass->GetShaderPath(), shaderPath);
|
|
EXPECT_EQ(pass->GetPreferredPassName(), passName);
|
|
}
|
|
|
|
TEST(FullscreenPassFactory_Test, IgnoresInvalidShaderVectorDescriptor) {
|
|
XCEngine::Rendering::FullscreenPassStack fullscreenPasses = {
|
|
XCEngine::Rendering::FullscreenPassDesc::MakeShaderVector(
|
|
XCEngine::Containers::String(),
|
|
XCEngine::Math::Vector4::One())
|
|
};
|
|
|
|
std::unique_ptr<XCEngine::Rendering::RenderPassSequence> sequence =
|
|
XCEngine::Rendering::BuildFullscreenPassSequence(fullscreenPasses);
|
|
EXPECT_EQ(sequence, nullptr);
|
|
}
|