rendering: remove builtin authoring register annotations
This commit is contained in:
@@ -15,7 +15,7 @@
|
||||
#include <XCEngine/RHI/ShaderCompiler/SpirvShaderCompiler.h>
|
||||
|
||||
#include <fstream>
|
||||
#include <iostream>
|
||||
#include <regex>
|
||||
|
||||
using namespace XCEngine::Rendering::Pipelines;
|
||||
using namespace XCEngine::Rendering::Passes;
|
||||
@@ -24,6 +24,58 @@ using namespace XCEngine::Containers;
|
||||
using namespace XCEngine::Resources;
|
||||
using namespace XCEngine::RHI;
|
||||
|
||||
namespace {
|
||||
|
||||
std::string EscapeRegexLiteralForTest(const std::string& value) {
|
||||
std::string escaped;
|
||||
escaped.reserve(value.size() * 2u);
|
||||
for (const char ch : value) {
|
||||
switch (ch) {
|
||||
case '\\':
|
||||
case '^':
|
||||
case '$':
|
||||
case '.':
|
||||
case '|':
|
||||
case '?':
|
||||
case '*':
|
||||
case '+':
|
||||
case '(':
|
||||
case ')':
|
||||
case '[':
|
||||
case ']':
|
||||
case '{':
|
||||
case '}':
|
||||
escaped.push_back('\\');
|
||||
break;
|
||||
default:
|
||||
break;
|
||||
}
|
||||
|
||||
escaped.push_back(ch);
|
||||
}
|
||||
|
||||
return escaped;
|
||||
}
|
||||
|
||||
::testing::AssertionResult SourceContainsRegisterBinding(
|
||||
const std::string& source,
|
||||
const std::string& declaration,
|
||||
const std::string& registerClause) {
|
||||
const std::regex pattern(
|
||||
EscapeRegexLiteralForTest(declaration) + "\\s*:\\s*" +
|
||||
EscapeRegexLiteralForTest(registerClause),
|
||||
std::regex::ECMAScript);
|
||||
if (std::regex_search(source, pattern)) {
|
||||
return ::testing::AssertionSuccess();
|
||||
}
|
||||
|
||||
return ::testing::AssertionFailure()
|
||||
<< "Missing binding '" << declaration << " : " << registerClause << "' in source:\n"
|
||||
<< source;
|
||||
}
|
||||
|
||||
} // namespace
|
||||
|
||||
TEST(BuiltinForwardPipeline_Test, UsesFloat3PositionInputLayoutForStaticMeshVertices) {
|
||||
const InputLayoutDesc inputLayout = BuiltinForwardPipeline::BuildInputLayout();
|
||||
|
||||
@@ -81,6 +133,15 @@ TEST(BuiltinForwardPipeline_Test, BuiltinForwardShaderUsesUnityStyleSingleSource
|
||||
EXPECT_TRUE(pass->fixedFunctionState.depthWriteEnable);
|
||||
EXPECT_EQ(pass->fixedFunctionState.depthFunc, MaterialComparisonFunc::LessEqual);
|
||||
|
||||
const ShaderStageVariant* fragmentVariant = shader->FindVariant(
|
||||
"ForwardLit",
|
||||
XCEngine::Resources::ShaderType::Fragment,
|
||||
XCEngine::Resources::ShaderBackend::D3D12);
|
||||
ASSERT_NE(fragmentVariant, nullptr);
|
||||
EXPECT_EQ(
|
||||
std::string(fragmentVariant->sourceCode.CStr()).find("register("),
|
||||
std::string::npos);
|
||||
|
||||
delete shader;
|
||||
}
|
||||
|
||||
@@ -101,6 +162,15 @@ TEST(BuiltinForwardPipeline_Test, BuiltinUnlitShaderUsesUnityStyleSingleSourceSu
|
||||
EXPECT_TRUE(pass->fixedFunctionState.depthWriteEnable);
|
||||
EXPECT_EQ(pass->fixedFunctionState.depthFunc, MaterialComparisonFunc::LessEqual);
|
||||
|
||||
const ShaderStageVariant* fragmentVariant = shader->FindVariant(
|
||||
"Unlit",
|
||||
XCEngine::Resources::ShaderType::Fragment,
|
||||
XCEngine::Resources::ShaderBackend::D3D12);
|
||||
ASSERT_NE(fragmentVariant, nullptr);
|
||||
EXPECT_EQ(
|
||||
std::string(fragmentVariant->sourceCode.CStr()).find("register("),
|
||||
std::string::npos);
|
||||
|
||||
delete shader;
|
||||
}
|
||||
|
||||
@@ -129,9 +199,10 @@ TEST(BuiltinForwardPipeline_Test, BuiltinUnlitShaderBuildsVulkanRuntimeSourceWit
|
||||
XCEngine::Resources::ShaderBackend::Vulkan,
|
||||
*fragmentVariant);
|
||||
|
||||
EXPECT_NE(
|
||||
runtimeSource.find("cbuffer MaterialConstants : register(b0, space1)"),
|
||||
std::string::npos);
|
||||
EXPECT_TRUE(SourceContainsRegisterBinding(
|
||||
runtimeSource,
|
||||
"cbuffer MaterialConstants",
|
||||
"register(b0, space1)"));
|
||||
EXPECT_NE(runtimeSource.find("BaseColorTexture"), std::string::npos);
|
||||
EXPECT_NE(runtimeSource.find("space2"), std::string::npos);
|
||||
EXPECT_NE(runtimeSource.find("LinearClampSampler"), std::string::npos);
|
||||
@@ -167,10 +238,18 @@ TEST(BuiltinForwardPipeline_Test, VulkanRuntimeCompileDescRewritesUnityStyleUnli
|
||||
const std::string d3d12Source(
|
||||
reinterpret_cast<const char*>(d3d12CompileDesc.source.data()),
|
||||
d3d12CompileDesc.source.size());
|
||||
EXPECT_NE(d3d12Source.find("BaseColorTexture"), std::string::npos);
|
||||
EXPECT_NE(d3d12Source.find("LinearClampSampler"), std::string::npos);
|
||||
EXPECT_EQ(d3d12Source.find("space2"), std::string::npos);
|
||||
EXPECT_EQ(d3d12Source.find("space3"), std::string::npos);
|
||||
EXPECT_TRUE(SourceContainsRegisterBinding(
|
||||
d3d12Source,
|
||||
"cbuffer MaterialConstants",
|
||||
"register(b1)"));
|
||||
EXPECT_TRUE(SourceContainsRegisterBinding(
|
||||
d3d12Source,
|
||||
"Texture2D BaseColorTexture",
|
||||
"register(t0)"));
|
||||
EXPECT_TRUE(SourceContainsRegisterBinding(
|
||||
d3d12Source,
|
||||
"SamplerState LinearClampSampler",
|
||||
"register(s0)"));
|
||||
|
||||
const ShaderStageVariant* vulkanFragment = shader->FindVariant(
|
||||
"Unlit",
|
||||
@@ -187,7 +266,10 @@ TEST(BuiltinForwardPipeline_Test, VulkanRuntimeCompileDescRewritesUnityStyleUnli
|
||||
const std::string vulkanSource(
|
||||
reinterpret_cast<const char*>(vulkanCompileDesc.source.data()),
|
||||
vulkanCompileDesc.source.size());
|
||||
EXPECT_NE(vulkanSource.find("cbuffer MaterialConstants : register(b0, space1)"), std::string::npos);
|
||||
EXPECT_TRUE(SourceContainsRegisterBinding(
|
||||
vulkanSource,
|
||||
"cbuffer MaterialConstants",
|
||||
"register(b0, space1)"));
|
||||
EXPECT_NE(vulkanSource.find("BaseColorTexture"), std::string::npos);
|
||||
EXPECT_NE(vulkanSource.find("space2"), std::string::npos);
|
||||
EXPECT_NE(vulkanSource.find("LinearClampSampler"), std::string::npos);
|
||||
@@ -227,10 +309,40 @@ TEST(BuiltinForwardPipeline_Test, VulkanRuntimeCompileDescRewritesUnityStyleForw
|
||||
const std::string d3d12Source(
|
||||
reinterpret_cast<const char*>(d3d12CompileDesc.source.data()),
|
||||
d3d12CompileDesc.source.size());
|
||||
EXPECT_NE(d3d12Source.find("cbuffer LightingConstants : register(b1)"), std::string::npos);
|
||||
EXPECT_NE(d3d12Source.find("Texture2D ShadowMapTexture : register(t1)"), std::string::npos);
|
||||
EXPECT_TRUE(SourceContainsRegisterBinding(
|
||||
d3d12Source,
|
||||
"cbuffer PerObjectConstants",
|
||||
"register(b0)"));
|
||||
EXPECT_TRUE(SourceContainsRegisterBinding(
|
||||
d3d12Source,
|
||||
"cbuffer LightingConstants",
|
||||
"register(b1)"));
|
||||
EXPECT_TRUE(SourceContainsRegisterBinding(
|
||||
d3d12Source,
|
||||
"cbuffer MaterialConstants",
|
||||
"register(b2)"));
|
||||
EXPECT_TRUE(SourceContainsRegisterBinding(
|
||||
d3d12Source,
|
||||
"cbuffer ShadowReceiverConstants",
|
||||
"register(b3)"));
|
||||
EXPECT_TRUE(SourceContainsRegisterBinding(
|
||||
d3d12Source,
|
||||
"Texture2D BaseColorTexture",
|
||||
"register(t0)"));
|
||||
EXPECT_TRUE(SourceContainsRegisterBinding(
|
||||
d3d12Source,
|
||||
"SamplerState LinearClampSampler",
|
||||
"register(s0)"));
|
||||
EXPECT_TRUE(SourceContainsRegisterBinding(
|
||||
d3d12Source,
|
||||
"Texture2D ShadowMapTexture",
|
||||
"register(t1)"));
|
||||
EXPECT_TRUE(SourceContainsRegisterBinding(
|
||||
d3d12Source,
|
||||
"SamplerState ShadowMapSampler",
|
||||
"register(s1)"));
|
||||
EXPECT_EQ(d3d12Source.find("space0"), std::string::npos);
|
||||
EXPECT_EQ(d3d12Source.find("space1"), std::string::npos);
|
||||
EXPECT_EQ(d3d12Source.find("space6"), std::string::npos);
|
||||
|
||||
const ShaderStageVariant* vulkanFragment = shader->FindVariant(
|
||||
"ForwardLit",
|
||||
@@ -248,14 +360,38 @@ TEST(BuiltinForwardPipeline_Test, VulkanRuntimeCompileDescRewritesUnityStyleForw
|
||||
const std::string vulkanSource(
|
||||
reinterpret_cast<const char*>(vulkanCompileDesc.source.data()),
|
||||
vulkanCompileDesc.source.size());
|
||||
EXPECT_NE(vulkanSource.find("cbuffer PerObjectConstants : register(b0, space0)"), std::string::npos);
|
||||
EXPECT_NE(vulkanSource.find("cbuffer LightingConstants : register(b0, space1)"), std::string::npos);
|
||||
EXPECT_NE(vulkanSource.find("cbuffer MaterialConstants : register(b0, space2)"), std::string::npos);
|
||||
EXPECT_NE(vulkanSource.find("cbuffer ShadowReceiverConstants : register(b0, space3)"), std::string::npos);
|
||||
EXPECT_NE(vulkanSource.find("Texture2D BaseColorTexture : register(t0, space4)"), std::string::npos);
|
||||
EXPECT_NE(vulkanSource.find("SamplerState LinearClampSampler : register(s0, space5)"), std::string::npos);
|
||||
EXPECT_NE(vulkanSource.find("Texture2D ShadowMapTexture : register(t0, space6)"), std::string::npos);
|
||||
EXPECT_NE(vulkanSource.find("SamplerState ShadowMapSampler : register(s0, space7)"), std::string::npos);
|
||||
EXPECT_TRUE(SourceContainsRegisterBinding(
|
||||
vulkanSource,
|
||||
"cbuffer PerObjectConstants",
|
||||
"register(b0, space0)"));
|
||||
EXPECT_TRUE(SourceContainsRegisterBinding(
|
||||
vulkanSource,
|
||||
"cbuffer LightingConstants",
|
||||
"register(b0, space1)"));
|
||||
EXPECT_TRUE(SourceContainsRegisterBinding(
|
||||
vulkanSource,
|
||||
"cbuffer MaterialConstants",
|
||||
"register(b0, space2)"));
|
||||
EXPECT_TRUE(SourceContainsRegisterBinding(
|
||||
vulkanSource,
|
||||
"cbuffer ShadowReceiverConstants",
|
||||
"register(b0, space3)"));
|
||||
EXPECT_TRUE(SourceContainsRegisterBinding(
|
||||
vulkanSource,
|
||||
"Texture2D BaseColorTexture",
|
||||
"register(t0, space4)"));
|
||||
EXPECT_TRUE(SourceContainsRegisterBinding(
|
||||
vulkanSource,
|
||||
"SamplerState LinearClampSampler",
|
||||
"register(s0, space5)"));
|
||||
EXPECT_TRUE(SourceContainsRegisterBinding(
|
||||
vulkanSource,
|
||||
"Texture2D ShadowMapTexture",
|
||||
"register(t0, space6)"));
|
||||
EXPECT_TRUE(SourceContainsRegisterBinding(
|
||||
vulkanSource,
|
||||
"SamplerState ShadowMapSampler",
|
||||
"register(s0, space7)"));
|
||||
|
||||
delete shader;
|
||||
}
|
||||
@@ -664,11 +800,20 @@ TEST(BuiltinForwardPipeline_Test, VulkanRuntimeCompileDescRewritesUnityStyleFina
|
||||
const std::string d3d12Source(
|
||||
reinterpret_cast<const char*>(d3d12CompileDesc.source.data()),
|
||||
d3d12CompileDesc.source.size());
|
||||
EXPECT_NE(d3d12Source.find("cbuffer FinalColorConstants : register(b0)"), std::string::npos);
|
||||
EXPECT_NE(d3d12Source.find("Texture2D gSourceColorTexture : register(t0)"), std::string::npos);
|
||||
EXPECT_NE(d3d12Source.find("SamplerState gLinearClampSampler : register(s0)"), std::string::npos);
|
||||
EXPECT_TRUE(SourceContainsRegisterBinding(
|
||||
d3d12Source,
|
||||
"cbuffer FinalColorConstants",
|
||||
"register(b0)"));
|
||||
EXPECT_TRUE(SourceContainsRegisterBinding(
|
||||
d3d12Source,
|
||||
"Texture2D gSourceColorTexture",
|
||||
"register(t0)"));
|
||||
EXPECT_TRUE(SourceContainsRegisterBinding(
|
||||
d3d12Source,
|
||||
"SamplerState gLinearClampSampler",
|
||||
"register(s0)"));
|
||||
EXPECT_EQ(d3d12Source.find("space0"), std::string::npos);
|
||||
EXPECT_EQ(d3d12Source.find("space1"), std::string::npos);
|
||||
EXPECT_EQ(d3d12Source.find("space2"), std::string::npos);
|
||||
|
||||
const ShaderStageVariant* vulkanFragment = shader->FindVariant(
|
||||
"FinalColor",
|
||||
@@ -681,15 +826,18 @@ TEST(BuiltinForwardPipeline_Test, VulkanRuntimeCompileDescRewritesUnityStyleFina
|
||||
*pass,
|
||||
XCEngine::Resources::ShaderBackend::Vulkan,
|
||||
*vulkanFragment);
|
||||
EXPECT_NE(
|
||||
runtimeSource.find("cbuffer FinalColorConstants : register(b0, space0)"),
|
||||
std::string::npos);
|
||||
EXPECT_NE(
|
||||
runtimeSource.find("Texture2D gSourceColorTexture : register(t0, space1)"),
|
||||
std::string::npos);
|
||||
EXPECT_NE(
|
||||
runtimeSource.find("SamplerState gLinearClampSampler : register(s0, space2)"),
|
||||
std::string::npos);
|
||||
EXPECT_TRUE(SourceContainsRegisterBinding(
|
||||
runtimeSource,
|
||||
"cbuffer FinalColorConstants",
|
||||
"register(b0, space0)"));
|
||||
EXPECT_TRUE(SourceContainsRegisterBinding(
|
||||
runtimeSource,
|
||||
"Texture2D gSourceColorTexture",
|
||||
"register(t0, space1)"));
|
||||
EXPECT_TRUE(SourceContainsRegisterBinding(
|
||||
runtimeSource,
|
||||
"SamplerState gLinearClampSampler",
|
||||
"register(s0, space2)"));
|
||||
|
||||
ShaderCompileDesc vulkanCompileDesc = {};
|
||||
::XCEngine::Rendering::Detail::ApplyShaderStageVariant(
|
||||
@@ -778,11 +926,20 @@ TEST(BuiltinForwardPipeline_Test, VulkanRuntimeCompileDescRewritesUnityStyleColo
|
||||
const std::string d3d12Source(
|
||||
reinterpret_cast<const char*>(d3d12CompileDesc.source.data()),
|
||||
d3d12CompileDesc.source.size());
|
||||
EXPECT_NE(d3d12Source.find("cbuffer PostProcessConstants : register(b0)"), std::string::npos);
|
||||
EXPECT_NE(d3d12Source.find("Texture2D gSourceColorTexture : register(t0)"), std::string::npos);
|
||||
EXPECT_NE(d3d12Source.find("SamplerState gLinearClampSampler : register(s0)"), std::string::npos);
|
||||
EXPECT_TRUE(SourceContainsRegisterBinding(
|
||||
d3d12Source,
|
||||
"cbuffer PostProcessConstants",
|
||||
"register(b0)"));
|
||||
EXPECT_TRUE(SourceContainsRegisterBinding(
|
||||
d3d12Source,
|
||||
"Texture2D gSourceColorTexture",
|
||||
"register(t0)"));
|
||||
EXPECT_TRUE(SourceContainsRegisterBinding(
|
||||
d3d12Source,
|
||||
"SamplerState gLinearClampSampler",
|
||||
"register(s0)"));
|
||||
EXPECT_EQ(d3d12Source.find("space0"), std::string::npos);
|
||||
EXPECT_EQ(d3d12Source.find("space1"), std::string::npos);
|
||||
EXPECT_EQ(d3d12Source.find("space2"), std::string::npos);
|
||||
|
||||
const ShaderStageVariant* vulkanFragment = shader->FindVariant(
|
||||
"ColorScale",
|
||||
@@ -795,15 +952,18 @@ TEST(BuiltinForwardPipeline_Test, VulkanRuntimeCompileDescRewritesUnityStyleColo
|
||||
*pass,
|
||||
XCEngine::Resources::ShaderBackend::Vulkan,
|
||||
*vulkanFragment);
|
||||
EXPECT_NE(
|
||||
runtimeSource.find("cbuffer PostProcessConstants : register(b0, space0)"),
|
||||
std::string::npos);
|
||||
EXPECT_NE(
|
||||
runtimeSource.find("Texture2D gSourceColorTexture : register(t0, space1)"),
|
||||
std::string::npos);
|
||||
EXPECT_NE(
|
||||
runtimeSource.find("SamplerState gLinearClampSampler : register(s0, space2)"),
|
||||
std::string::npos);
|
||||
EXPECT_TRUE(SourceContainsRegisterBinding(
|
||||
runtimeSource,
|
||||
"cbuffer PostProcessConstants",
|
||||
"register(b0, space0)"));
|
||||
EXPECT_TRUE(SourceContainsRegisterBinding(
|
||||
runtimeSource,
|
||||
"Texture2D gSourceColorTexture",
|
||||
"register(t0, space1)"));
|
||||
EXPECT_TRUE(SourceContainsRegisterBinding(
|
||||
runtimeSource,
|
||||
"SamplerState gLinearClampSampler",
|
||||
"register(s0, space2)"));
|
||||
|
||||
ShaderCompileDesc vulkanCompileDesc = {};
|
||||
::XCEngine::Rendering::Detail::ApplyShaderStageVariant(
|
||||
|
||||
Reference in New Issue
Block a user