diff options
| author | Yong He <yonghe@outlook.com> | 2020-08-05 10:32:52 -0700 |
|---|---|---|
| committer | GitHub <noreply@github.com> | 2020-08-05 10:32:52 -0700 |
| commit | 6fb2aa70a2681bffbac7e8de67e9598105389945 (patch) | |
| tree | f89cb433e7498bf74292bf460096f1129ef3ac13 /source/slang/slang-check-modifier.cpp | |
| parent | 092337a67e7ef8ec108cab9cb6679e59bb2ff791 (diff) | |
`AnyValue` based dynamic dispatch code gen (#1477)
* AnyValue based dynamic code gen
* Fix aarch64 build error
Diffstat (limited to 'source/slang/slang-check-modifier.cpp')
| -rw-r--r-- | source/slang/slang-check-modifier.cpp | 25 |
1 files changed, 25 insertions, 0 deletions
diff --git a/source/slang/slang-check-modifier.cpp b/source/slang/slang-check-modifier.cpp index d8877b9d1..9734df4db 100644 --- a/source/slang/slang-check-modifier.cpp +++ b/source/slang/slang-check-modifier.cpp @@ -284,6 +284,31 @@ namespace Slang numThreadsAttr->y = values[1]; numThreadsAttr->z = values[2]; } + else if (auto anyValueSizeAttr = as<AnyValueSizeAttribute>(attr)) + { + // This case handles GLSL-oriented layout attributes + // that take a single integer argument. + + if (attr->args.getCount() != 1) + { + return false; + } + + auto value = checkConstantIntVal(attr->args[0]); + if (value == nullptr) + { + return false; + } + + const IRIntegerValue kMaxAnyValueSize = 0x7FFF; + if (value->value > kMaxAnyValueSize) + { + getSink()->diagnose(anyValueSizeAttr->loc, Diagnostics::anyValueSizeExceedsLimit, kMaxAnyValueSize); + return false; + } + + anyValueSizeAttr->size = int32_t(value->value); + } else if (auto bindingAttr = as<GLSLBindingAttribute>(attr)) { // This must be vk::binding or gl::binding (as specified in core.meta.slang under vk_binding/gl_binding) |
