summaryrefslogtreecommitdiff
path: root/slang.h
diff options
context:
space:
mode:
authorTim Foley <tfoleyNV@users.noreply.github.com>2017-10-19 11:49:16 -0700
committerGitHub <noreply@github.com>2017-10-19 11:49:16 -0700
commit88023aea669f258d66e53eab10215337a7f72853 (patch)
tree630d2f89a201283307ebc3ae1ccd3ce3d28876bb /slang.h
parent5995b7a47b2b65025410b9d558dfe1820e4c42e0 (diff)
Reflection: allow querying of semantics on varying input/output (#224)
This is functionality required to support a Falcor bug fix. Most of the code to compute the right semantic name/index for a parameter was already present. This change adds: - Storage for semantic name/index on every `VarLayout` - Note: this is wasteful and should be optimized later - A public API to query the semantic name/index - The contract is that this API returns `NULL` if the parameter had no semantic - A bit of work in `parameter-binding.cpp` to attach semantics to varying input/output when traversing varying parameters. - Note: this is intentionally set up so that it associates semantics even with non-leaf parameters, so that an API user can query the semantic of a `struct` parameter and know that its members will be assigned sequential semantic indices from its starting value. - Support for dumping this information in reflection tests One notable thing that I did *not* change here is that the reflection test fixture doesn't report information on the output of an entry point, even though it really should. That should be fixed in a separate change, though, because it would affect many of the expected outputs.
Diffstat (limited to 'slang.h')
-rw-r--r--slang.h13
1 files changed, 13 insertions, 0 deletions
diff --git a/slang.h b/slang.h
index ff79d698b..11b34053c 100644
--- a/slang.h
+++ b/slang.h
@@ -627,6 +627,9 @@ extern "C"
SLANG_API size_t spReflectionVariableLayout_GetOffset(SlangReflectionVariableLayout* var, SlangParameterCategory category);
SLANG_API size_t spReflectionVariableLayout_GetSpace(SlangReflectionVariableLayout* var, SlangParameterCategory category);
+ SLANG_API char const* spReflectionVariableLayout_GetSemanticName(SlangReflectionVariableLayout* var);
+ SLANG_API size_t spReflectionVariableLayout_GetSemanticIndex(SlangReflectionVariableLayout* var);
+
// Shader Parameter Reflection
typedef SlangReflectionVariableLayout SlangReflectionParameter;
@@ -989,6 +992,16 @@ namespace slang
{
return spReflectionVariableLayout_GetSpace((SlangReflectionVariableLayout*) this, category);
}
+
+ char const* getSemanticName()
+ {
+ return spReflectionVariableLayout_GetSemanticName((SlangReflectionVariableLayout*) this);
+ }
+
+ size_t getSemanticIndex()
+ {
+ return spReflectionVariableLayout_GetSemanticIndex((SlangReflectionVariableLayout*) this);
+ }
};
struct EntryPointReflection