Multipass shaders

This commit is contained in:
Aiden
2026-05-12 17:08:35 +10:00
parent 1429b2e660
commit dfd49fd0e3
12 changed files with 392 additions and 72 deletions

View File

@@ -23,6 +23,8 @@ ShaderPackage MakeSinglePassPackage()
ShaderPassDefinition pass;
pass.id = "main";
pass.entryPoint = "mainImage";
pass.sourcePath = "shader.slang";
pass.outputName = "layerOutput";
shaderPackage.passes.push_back(pass);
return shaderPackage;
}
@@ -37,19 +39,35 @@ void SupportsSinglePassStatelessPackage()
Expect(result.reason.empty(), "supported packages should not report a rejection reason");
}
void RejectsMultipassPackage()
void SupportsStatelessNamedPassPackage()
{
ShaderPackage shaderPackage = MakeSinglePassPackage();
shaderPackage.passes.front().outputName = "generatedMask";
ShaderPassDefinition secondPass;
secondPass.id = "second";
secondPass.entryPoint = "mainImage";
secondPass.sourcePath = "shader.slang";
secondPass.inputNames.push_back("generatedMask");
secondPass.outputName = "layerOutput";
shaderPackage.passes.push_back(secondPass);
const RenderCadenceCompositor::ShaderSupportResult result =
RenderCadenceCompositor::CheckStatelessSinglePassShaderSupport(shaderPackage);
Expect(!result.supported, "multipass packages should be rejected");
Expect(result.reason.find("single-pass") != std::string::npos, "multipass rejection should explain the single-pass limit");
Expect(result.supported, "stateless named-pass packages should be supported");
Expect(result.reason.empty(), "supported named-pass packages should not report a rejection reason");
}
void RejectsUnknownPassInput()
{
ShaderPackage shaderPackage = MakeSinglePassPackage();
shaderPackage.passes.front().inputNames.push_back("missingIntermediate");
const RenderCadenceCompositor::ShaderSupportResult result =
RenderCadenceCompositor::CheckStatelessSinglePassShaderSupport(shaderPackage);
Expect(!result.supported, "packages with unknown pass inputs should be rejected");
Expect(result.reason.find("unknown input") != std::string::npos, "unknown input rejection should explain the missing named output");
}
void RejectsTemporalPackage()
@@ -97,7 +115,8 @@ void RejectsTextParameters()
int main()
{
SupportsSinglePassStatelessPackage();
RejectsMultipassPackage();
SupportsStatelessNamedPassPackage();
RejectsUnknownPassInput();
RejectsTemporalPackage();
RejectsTextureAssets();
RejectsTextParameters();