Formalize builtin fullscreen shaders
This commit is contained in:
@@ -2117,6 +2117,160 @@ TEST(ShaderLoader, LoadBuiltinShadowCasterShaderBuildsUnityStyleSingleSourceVari
|
||||
delete shader;
|
||||
}
|
||||
|
||||
TEST(ShaderLoader, LoadBuiltinFinalColorShaderBuildsUnityStyleSingleSourceVariants) {
|
||||
ShaderLoader loader;
|
||||
LoadResult result = loader.Load(GetBuiltinFinalColorShaderPath());
|
||||
ASSERT_TRUE(result);
|
||||
ASSERT_NE(result.resource, nullptr);
|
||||
|
||||
Shader* shader = static_cast<Shader*>(result.resource);
|
||||
ASSERT_NE(shader, nullptr);
|
||||
ASSERT_TRUE(shader->IsValid());
|
||||
|
||||
const ShaderPass* pass = shader->FindPass("FinalColor");
|
||||
ASSERT_NE(pass, nullptr);
|
||||
ASSERT_EQ(shader->GetProperties().Size(), 4u);
|
||||
ASSERT_EQ(pass->variants.Size(), 2u);
|
||||
ASSERT_EQ(pass->tags.Size(), 1u);
|
||||
EXPECT_TRUE(pass->resources.Empty());
|
||||
EXPECT_TRUE(pass->hasFixedFunctionState);
|
||||
EXPECT_EQ(pass->fixedFunctionState.cullMode, MaterialCullMode::None);
|
||||
EXPECT_FALSE(pass->fixedFunctionState.depthWriteEnable);
|
||||
EXPECT_EQ(pass->fixedFunctionState.depthFunc, MaterialComparisonFunc::Always);
|
||||
EXPECT_EQ(pass->tags[0].name, "LightMode");
|
||||
EXPECT_EQ(pass->tags[0].value, "FinalOutput");
|
||||
|
||||
const ShaderPropertyDesc* colorScaleProperty = shader->FindProperty("_ColorScale");
|
||||
ASSERT_NE(colorScaleProperty, nullptr);
|
||||
EXPECT_EQ(colorScaleProperty->type, ShaderPropertyType::Color);
|
||||
|
||||
const ShaderPropertyDesc* exposureProperty = shader->FindProperty("_Exposure");
|
||||
ASSERT_NE(exposureProperty, nullptr);
|
||||
EXPECT_EQ(exposureProperty->type, ShaderPropertyType::Float);
|
||||
|
||||
const ShaderPropertyDesc* outputTransferProperty = shader->FindProperty("_OutputTransferMode");
|
||||
ASSERT_NE(outputTransferProperty, nullptr);
|
||||
EXPECT_EQ(outputTransferProperty->type, ShaderPropertyType::Float);
|
||||
|
||||
const ShaderPropertyDesc* toneMappingProperty = shader->FindProperty("_ToneMappingMode");
|
||||
ASSERT_NE(toneMappingProperty, nullptr);
|
||||
EXPECT_EQ(toneMappingProperty->type, ShaderPropertyType::Float);
|
||||
|
||||
EXPECT_NE(shader->FindVariant("FinalColor", ShaderType::Vertex, ShaderBackend::D3D12), nullptr);
|
||||
EXPECT_NE(shader->FindVariant("FinalColor", ShaderType::Fragment, ShaderBackend::D3D12), nullptr);
|
||||
EXPECT_NE(shader->FindVariant("FinalColor", ShaderType::Vertex, ShaderBackend::OpenGL), nullptr);
|
||||
EXPECT_NE(shader->FindVariant("FinalColor", ShaderType::Fragment, ShaderBackend::OpenGL), nullptr);
|
||||
EXPECT_NE(shader->FindVariant("FinalColor", ShaderType::Vertex, ShaderBackend::Vulkan), nullptr);
|
||||
EXPECT_NE(shader->FindVariant("FinalColor", ShaderType::Fragment, ShaderBackend::Vulkan), nullptr);
|
||||
|
||||
const ShaderStageVariant* d3d12Vertex = shader->FindVariant(
|
||||
"FinalColor",
|
||||
ShaderType::Vertex,
|
||||
ShaderBackend::D3D12);
|
||||
ASSERT_NE(d3d12Vertex, nullptr);
|
||||
EXPECT_EQ(d3d12Vertex->backend, ShaderBackend::Generic);
|
||||
EXPECT_EQ(d3d12Vertex->language, ShaderLanguage::HLSL);
|
||||
EXPECT_EQ(d3d12Vertex->entryPoint, "MainVS");
|
||||
EXPECT_EQ(d3d12Vertex->profile, "vs_5_0");
|
||||
EXPECT_NE(std::string(d3d12Vertex->sourceCode.CStr()).find("UNITY_UV_STARTS_AT_TOP"), std::string::npos);
|
||||
|
||||
const ShaderStageVariant* openglFragment = shader->FindVariant(
|
||||
"FinalColor",
|
||||
ShaderType::Fragment,
|
||||
ShaderBackend::OpenGL);
|
||||
ASSERT_NE(openglFragment, nullptr);
|
||||
EXPECT_EQ(openglFragment->backend, ShaderBackend::Generic);
|
||||
EXPECT_EQ(openglFragment->language, ShaderLanguage::HLSL);
|
||||
EXPECT_EQ(openglFragment->entryPoint, "MainPS");
|
||||
EXPECT_EQ(openglFragment->profile, "ps_5_0");
|
||||
EXPECT_NE(std::string(openglFragment->sourceCode.CStr()).find("gSourceColorTexture.Sample"), std::string::npos);
|
||||
|
||||
const ShaderStageVariant* vulkanFragment = shader->FindVariant(
|
||||
"FinalColor",
|
||||
ShaderType::Fragment,
|
||||
ShaderBackend::Vulkan);
|
||||
ASSERT_NE(vulkanFragment, nullptr);
|
||||
EXPECT_EQ(vulkanFragment->backend, ShaderBackend::Generic);
|
||||
EXPECT_EQ(vulkanFragment->language, ShaderLanguage::HLSL);
|
||||
EXPECT_EQ(vulkanFragment->entryPoint, "MainPS");
|
||||
EXPECT_EQ(vulkanFragment->profile, "ps_5_0");
|
||||
EXPECT_NE(std::string(vulkanFragment->sourceCode.CStr()).find("ApplyToneMapping"), std::string::npos);
|
||||
EXPECT_NE(std::string(vulkanFragment->sourceCode.CStr()).find("gFinalColorParams"), std::string::npos);
|
||||
|
||||
delete shader;
|
||||
}
|
||||
|
||||
TEST(ShaderLoader, LoadBuiltinColorScalePostProcessShaderBuildsUnityStyleSingleSourceVariants) {
|
||||
ShaderLoader loader;
|
||||
LoadResult result = loader.Load(GetBuiltinColorScalePostProcessShaderPath());
|
||||
ASSERT_TRUE(result);
|
||||
ASSERT_NE(result.resource, nullptr);
|
||||
|
||||
Shader* shader = static_cast<Shader*>(result.resource);
|
||||
ASSERT_NE(shader, nullptr);
|
||||
ASSERT_TRUE(shader->IsValid());
|
||||
|
||||
const ShaderPass* pass = shader->FindPass("ColorScale");
|
||||
ASSERT_NE(pass, nullptr);
|
||||
ASSERT_EQ(shader->GetProperties().Size(), 1u);
|
||||
ASSERT_EQ(pass->variants.Size(), 2u);
|
||||
ASSERT_EQ(pass->tags.Size(), 1u);
|
||||
EXPECT_TRUE(pass->resources.Empty());
|
||||
EXPECT_TRUE(pass->hasFixedFunctionState);
|
||||
EXPECT_EQ(pass->fixedFunctionState.cullMode, MaterialCullMode::None);
|
||||
EXPECT_FALSE(pass->fixedFunctionState.depthWriteEnable);
|
||||
EXPECT_EQ(pass->fixedFunctionState.depthFunc, MaterialComparisonFunc::Always);
|
||||
EXPECT_EQ(pass->tags[0].name, "LightMode");
|
||||
EXPECT_EQ(pass->tags[0].value, "PostProcess");
|
||||
|
||||
const ShaderPropertyDesc* colorScaleProperty = shader->FindProperty("_ColorScale");
|
||||
ASSERT_NE(colorScaleProperty, nullptr);
|
||||
EXPECT_EQ(colorScaleProperty->type, ShaderPropertyType::Color);
|
||||
|
||||
EXPECT_NE(shader->FindVariant("ColorScale", ShaderType::Vertex, ShaderBackend::D3D12), nullptr);
|
||||
EXPECT_NE(shader->FindVariant("ColorScale", ShaderType::Fragment, ShaderBackend::D3D12), nullptr);
|
||||
EXPECT_NE(shader->FindVariant("ColorScale", ShaderType::Vertex, ShaderBackend::OpenGL), nullptr);
|
||||
EXPECT_NE(shader->FindVariant("ColorScale", ShaderType::Fragment, ShaderBackend::OpenGL), nullptr);
|
||||
EXPECT_NE(shader->FindVariant("ColorScale", ShaderType::Vertex, ShaderBackend::Vulkan), nullptr);
|
||||
EXPECT_NE(shader->FindVariant("ColorScale", ShaderType::Fragment, ShaderBackend::Vulkan), nullptr);
|
||||
|
||||
const ShaderStageVariant* d3d12Vertex = shader->FindVariant(
|
||||
"ColorScale",
|
||||
ShaderType::Vertex,
|
||||
ShaderBackend::D3D12);
|
||||
ASSERT_NE(d3d12Vertex, nullptr);
|
||||
EXPECT_EQ(d3d12Vertex->backend, ShaderBackend::Generic);
|
||||
EXPECT_EQ(d3d12Vertex->language, ShaderLanguage::HLSL);
|
||||
EXPECT_EQ(d3d12Vertex->entryPoint, "MainVS");
|
||||
EXPECT_EQ(d3d12Vertex->profile, "vs_5_0");
|
||||
EXPECT_NE(std::string(d3d12Vertex->sourceCode.CStr()).find("UNITY_UV_STARTS_AT_TOP"), std::string::npos);
|
||||
|
||||
const ShaderStageVariant* openglFragment = shader->FindVariant(
|
||||
"ColorScale",
|
||||
ShaderType::Fragment,
|
||||
ShaderBackend::OpenGL);
|
||||
ASSERT_NE(openglFragment, nullptr);
|
||||
EXPECT_EQ(openglFragment->backend, ShaderBackend::Generic);
|
||||
EXPECT_EQ(openglFragment->language, ShaderLanguage::HLSL);
|
||||
EXPECT_EQ(openglFragment->entryPoint, "MainPS");
|
||||
EXPECT_EQ(openglFragment->profile, "ps_5_0");
|
||||
EXPECT_NE(std::string(openglFragment->sourceCode.CStr()).find("gSourceColorTexture.Sample"), std::string::npos);
|
||||
|
||||
const ShaderStageVariant* vulkanFragment = shader->FindVariant(
|
||||
"ColorScale",
|
||||
ShaderType::Fragment,
|
||||
ShaderBackend::Vulkan);
|
||||
ASSERT_NE(vulkanFragment, nullptr);
|
||||
EXPECT_EQ(vulkanFragment->backend, ShaderBackend::Generic);
|
||||
EXPECT_EQ(vulkanFragment->language, ShaderLanguage::HLSL);
|
||||
EXPECT_EQ(vulkanFragment->entryPoint, "MainPS");
|
||||
EXPECT_EQ(vulkanFragment->profile, "ps_5_0");
|
||||
EXPECT_NE(std::string(vulkanFragment->sourceCode.CStr()).find("gColorScale"), std::string::npos);
|
||||
EXPECT_NE(std::string(vulkanFragment->sourceCode.CStr()).find("gSourceColorTexture.Sample"), std::string::npos);
|
||||
|
||||
delete shader;
|
||||
}
|
||||
|
||||
TEST(ShaderLoader, ResourceManagerLazilyLoadsBuiltinForwardLitShader) {
|
||||
ResourceManager& manager = ResourceManager::Get();
|
||||
manager.Shutdown();
|
||||
|
||||
Reference in New Issue
Block a user