diff options
| author | Yong He <yonghe@outlook.com> | 2021-05-25 10:24:38 -0700 |
|---|---|---|
| committer | GitHub <noreply@github.com> | 2021-05-25 10:24:38 -0700 |
| commit | ba24264275c640e0ac3732f0f5720e1f5816cded (patch) | |
| tree | 9413b919498c700afe89d498ff3434eea9cf3c89 /tools/render-test | |
| parent | fbf00dd54d787c6e22b0f1785a64dfb2fb1e300a (diff) | |
Allow overriding specialization args via `IShaderObject`. (#1854)
* Allow overriding specialization args via `IShaderObject`.
* Fixes.
Co-authored-by: T. Foley <tfoleyNV@users.noreply.github.com>
Diffstat (limited to 'tools/render-test')
| -rw-r--r-- | tools/render-test/render-test-main.cpp | 20 | ||||
| -rw-r--r-- | tools/render-test/shader-input-layout.cpp | 32 | ||||
| -rw-r--r-- | tools/render-test/shader-input-layout.h | 1 |
3 files changed, 53 insertions, 0 deletions
diff --git a/tools/render-test/render-test-main.cpp b/tools/render-test/render-test-main.cpp index c04d6db00..5c8011889 100644 --- a/tools/render-test/render-test-main.cpp +++ b/tools/render-test/render-test-main.cpp @@ -341,6 +341,26 @@ struct AssignValsFromLayoutContext SLANG_RETURN_ON_FAIL(assign(ShaderCursor(shaderObject), srcVal->contentVal)); + if (srcVal->specializationArgs.getCount()) + { + List<slang::SpecializationArg> args; + for (auto srcArg : srcVal->specializationArgs) + { + auto argType = slangReflection->findTypeByName(srcArg.getBuffer()); + if (argType) + { + slang::SpecializationArg arg = slang::SpecializationArg::fromType(argType); + args.add(arg); + } + else + { + StdWriters::getError().print( + "error: could not find shader type '%s'\n", srcArg.getBuffer()); + return SLANG_E_INVALID_ARG; + } + } + shaderObject->setSpecializationArgs(args.getBuffer(), args.getCount()); + } dstCursor.setObject(shaderObject); return SLANG_OK; } diff --git a/tools/render-test/shader-input-layout.cpp b/tools/render-test/shader-input-layout.cpp index 9362efb45..af15d5f9f 100644 --- a/tools/render-test/shader-input-layout.cpp +++ b/tools/render-test/shader-input-layout.cpp @@ -346,6 +346,37 @@ 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("="); @@ -511,6 +542,7 @@ namespace renderer_test } val->contentVal = parseValExpr(parser); + parseObjectAttributes(val, parser); return val; } else if( parser.AdvanceIf("out") ) diff --git a/tools/render-test/shader-input-layout.h b/tools/render-test/shader-input-layout.h index adb30c7ec..86e7641f0 100644 --- a/tools/render-test/shader-input-layout.h +++ b/tools/render-test/shader-input-layout.h @@ -248,6 +248,7 @@ public: Slang::String typeName; ValPtr contentVal; + Slang::List<Slang::String> specializationArgs; }; class ArrayVal : public ParentVal |
