summaryrefslogtreecommitdiff
path: root/tools/render-test
diff options
context:
space:
mode:
authorYong He <yonghe@outlook.com>2021-05-25 10:24:38 -0700
committerGitHub <noreply@github.com>2021-05-25 10:24:38 -0700
commitba24264275c640e0ac3732f0f5720e1f5816cded (patch)
tree9413b919498c700afe89d498ff3434eea9cf3c89 /tools/render-test
parentfbf00dd54d787c6e22b0f1785a64dfb2fb1e300a (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.cpp20
-rw-r--r--tools/render-test/shader-input-layout.cpp32
-rw-r--r--tools/render-test/shader-input-layout.h1
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