From 88023aea669f258d66e53eab10215337a7f72853 Mon Sep 17 00:00:00 2001 From: Tim Foley Date: Thu, 19 Oct 2017 11:49:16 -0700 Subject: 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. --- source/slang/type-layout.h | 8 ++++++++ 1 file changed, 8 insertions(+) (limited to 'source/slang/type-layout.h') diff --git a/source/slang/type-layout.h b/source/slang/type-layout.h index 971088aac..d078d9554 100644 --- a/source/slang/type-layout.h +++ b/source/slang/type-layout.h @@ -218,6 +218,7 @@ typedef unsigned int VarLayoutFlags; enum VarLayoutFlag : VarLayoutFlags { IsRedeclaration = 1 << 0, ///< This is a redeclaration of some shader parameter + HasSemantic = 1 << 1, }; // A reified layout for a particular variable, field, etc. @@ -241,6 +242,13 @@ public: String systemValueSemantic; int systemValueSemanticIndex; + // General cse semantic name and index + // TODO: this and the system-value field are redundant + // TODO: the `VarLayout` type is getting bloated; we need to not store this + // information unless actually required. + String semanticName; + int semanticIndex; + // The start register(s) for any resources struct ResourceInfo { -- cgit v1.2.3