summaryrefslogtreecommitdiff
path: root/source/slang/slang-check-modifier.cpp
diff options
context:
space:
mode:
authorYong He <yonghe@outlook.com>2020-08-05 10:32:52 -0700
committerGitHub <noreply@github.com>2020-08-05 10:32:52 -0700
commit6fb2aa70a2681bffbac7e8de67e9598105389945 (patch)
treef89cb433e7498bf74292bf460096f1129ef3ac13 /source/slang/slang-check-modifier.cpp
parent092337a67e7ef8ec108cab9cb6679e59bb2ff791 (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.cpp25
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)