From 89f67d9c626fa193dba4adafcb54e46b13aa5e98 Mon Sep 17 00:00:00 2001 From: Yong He Date: Tue, 25 May 2021 15:22:39 -0700 Subject: Rework shader object specialization control interface. (#1857) --- tools/render-test/shader-input-layout.cpp | 57 ++++++++++++++----------------- 1 file changed, 25 insertions(+), 32 deletions(-) (limited to 'tools/render-test/shader-input-layout.cpp') diff --git a/tools/render-test/shader-input-layout.cpp b/tools/render-test/shader-input-layout.cpp index af15d5f9f..3ab0366a5 100644 --- a/tools/render-test/shader-input-layout.cpp +++ b/tools/render-test/shader-input-layout.cpp @@ -346,37 +346,6 @@ namespace renderer_test return SLANG_OK; } - SlangResult parseObjectAttributes(ShaderInputLayout::ObjectVal* val, Misc::TokenReader& parser) - { - if (parser.AdvanceIf(":")) - { - while (!parser.IsEnd() && parser.NextToken().Type == Misc::TokenType::Identifier) - { - if (parser.AdvanceIf("specialization_args")) - { - parser.Read(Misc::TokenType::LParent); - while (!parser.IsEnd() && - parser.NextToken().Type != Misc::TokenType::RParent) - { - val->specializationArgs.add(parseTypeName(parser)); - if (!parser.AdvanceIf(",")) - break; - } - parser.Read(Misc::TokenType::RParent); - } - else - { - throw ShaderInputLayoutFormatException( - StringBuilder() << "Unknown attribute \'" << parser.NextToken().Content << "\' (" - << parser.NextToken().Position.Line << ")"); - - return SLANG_FAIL; - } - } - } - return SLANG_OK; - } - Format parseFormatOption(Misc::TokenReader& parser) { parser.Read("="); @@ -542,7 +511,6 @@ namespace renderer_test } val->contentVal = parseValExpr(parser); - parseObjectAttributes(val, parser); return val; } else if( parser.AdvanceIf("out") ) @@ -551,6 +519,31 @@ namespace renderer_test val->isOutput = true; return val; } + else if (parser.AdvanceIf("specialize")) + { + RefPtr val = + new ShaderInputLayout::SpecializeVal(); + + parser.Read(Misc::TokenType::LParent); + while (!parser.IsEnd() && + parser.NextToken().Type != Misc::TokenType::RParent) + { + val->typeArgs.add(parseTypeName(parser)); + if (!parser.AdvanceIf(",")) + break; + } + parser.Read(Misc::TokenType::RParent); + val->contentVal = parseValExpr(parser); + return val; + } + else if (parser.AdvanceIf("dynamic")) + { + RefPtr val = + new ShaderInputLayout::SpecializeVal(); + val->typeArgs.add("__Dynamic"); + val->contentVal = parseValExpr(parser); + return val; + } else { // We assume that any other word is introducing one of the other -- cgit v1.2.3