diff options
| author | Yong He <yonghe@outlook.com> | 2021-05-25 15:22:39 -0700 |
|---|---|---|
| committer | GitHub <noreply@github.com> | 2021-05-25 15:22:39 -0700 |
| commit | 89f67d9c626fa193dba4adafcb54e46b13aa5e98 (patch) | |
| tree | 769e11debb4194595a99e484d69af7b3704389c3 /tools/render-test/render-test-main.cpp | |
| parent | ba24264275c640e0ac3732f0f5720e1f5816cded (diff) | |
Rework shader object specialization control interface. (#1857)
Diffstat (limited to 'tools/render-test/render-test-main.cpp')
| -rw-r--r-- | tools/render-test/render-test-main.cpp | 38 |
1 files changed, 20 insertions, 18 deletions
diff --git a/tools/render-test/render-test-main.cpp b/tools/render-test/render-test-main.cpp index 5c8011889..ab73af5b5 100644 --- a/tools/render-test/render-test-main.cpp +++ b/tools/render-test/render-test-main.cpp @@ -340,29 +340,27 @@ struct AssignValsFromLayoutContext ComPtr<IShaderObject> shaderObject = device->createShaderObject(slangType); SLANG_RETURN_ON_FAIL(assign(ShaderCursor(shaderObject), srcVal->contentVal)); + dstCursor.setObject(shaderObject); + return SLANG_OK; + } - if (srcVal->specializationArgs.getCount()) + SlangResult assignValWithSpecializationArg( + ShaderCursor const& dstCursor, + ShaderInputLayout::SpecializeVal* srcVal) + { + assign(dstCursor, srcVal->contentVal); + List<slang::SpecializationArg> args; + for (auto& typeName : srcVal->typeArgs) { - List<slang::SpecializationArg> args; - for (auto srcArg : srcVal->specializationArgs) + auto slangType = slangReflection->findTypeByName(typeName.getBuffer()); + if (!slangType) { - 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; - } + StdWriters::getError().print("error: could not find shader type '%s'\n", typeName.getBuffer()); + return SLANG_E_INVALID_ARG; } - shaderObject->setSpecializationArgs(args.getBuffer(), args.getCount()); + args.add(slang::SpecializationArg::fromType(slangType)); } - dstCursor.setObject(shaderObject); - return SLANG_OK; + return dstCursor.setSpecializationArgs(args.getBuffer(), (uint32_t)args.getCount()); } SlangResult assignArray(ShaderCursor const& dstCursor, ShaderInputLayout::ArrayVal* srcVal) @@ -399,6 +397,10 @@ struct AssignValsFromLayoutContext case ShaderInputType::Object: return assignObject(dstCursor, (ShaderInputLayout::ObjectVal*) srcVal.Ptr()); + case ShaderInputType::Specialize: + return assignValWithSpecializationArg( + dstCursor, (ShaderInputLayout::SpecializeVal*)srcVal.Ptr()); + case ShaderInputType::Aggregate: return assignAggregate(dstCursor, (ShaderInputLayout::AggVal*) srcVal.Ptr()); |
