Support compute-only shader authoring variants

This commit is contained in:
2026-04-11 00:24:55 +08:00
parent 107b320aa7
commit be5dabd820
5 changed files with 226 additions and 46 deletions

View File

@@ -362,6 +362,25 @@ ShaderPass BuildConcretePass(
const Containers::String variantSource =
BuildKeywordVariantSource(strippedCombinedSource, keywordSet);
if (!pass.computeEntryPoint.Empty()) {
ShaderStageVariant computeVariant = {};
computeVariant.stage = ShaderType::Compute;
computeVariant.backend = ShaderBackend::Generic;
computeVariant.language = ShaderLanguage::HLSL;
computeVariant.requiredKeywords = keywordSet;
computeVariant.entryPoint =
!pass.computeEntryPoint.Empty()
? pass.computeEntryPoint
: GetDefaultEntryPoint(ShaderLanguage::HLSL, ShaderType::Compute);
computeVariant.profile = GetDefaultProfile(
ShaderLanguage::HLSL,
ShaderBackend::Generic,
ShaderType::Compute);
computeVariant.sourceCode = variantSource;
shaderPass.variants.PushBack(computeVariant);
continue;
}
ShaderStageVariant vertexVariant = {};
vertexVariant.stage = ShaderType::Vertex;
vertexVariant.backend = ShaderBackend::Generic;
@@ -535,12 +554,12 @@ Containers::String GetDefaultProfile(
ShaderType stage) {
if (language == ShaderLanguage::HLSL) {
switch (stage) {
case ShaderType::Vertex: return "vs_5_0";
case ShaderType::Fragment: return "ps_5_0";
case ShaderType::Geometry: return "gs_5_0";
case ShaderType::Compute: return "cs_5_0";
case ShaderType::Hull: return "hs_5_0";
case ShaderType::Domain: return "ds_5_0";
case ShaderType::Vertex: return "vs_5_1";
case ShaderType::Fragment: return "ps_5_1";
case ShaderType::Geometry: return "gs_5_1";
case ShaderType::Compute: return "cs_5_1";
case ShaderType::Hull: return "hs_5_1";
case ShaderType::Domain: return "ds_5_1";
default: return Containers::String();
}
}