From 184dc5cd6998b6277881fae4a68d91de86e2d63f Mon Sep 17 00:00:00 2001 From: Tim Foley Date: Wed, 28 Mar 2018 08:17:48 -0700 Subject: Merge from v0.9.15 (#460) * Fix bug when subscripting a type that must be split (#396) The logic was creating a `PairPseudoExpr` as part of a subscript (`operator[]`) operation, but neglecting to fill in its `pairInfo` field, which led to a null-pointer crash further along. * Allow writes to UAV textures (#416) Work on #415 This issue is already fixed in the `v0.10.*` line, but I'm back-porting the fix to `v0.9.*`. The issue here was that the stdlib declarations for texture types were only including the `get` accessor for subscript operations, even if the texture was write-able. I've also included the fixes for other subscript accessors in the stdlib (notably that `OutputPatch` is readable, but not writable, despite what the name seems to imply). * Fix infinite loop in semantic parsing (#424) The code for parsing semantics was looking for a fixed set of tokens to terminate a semantic list, rather than assuming that whenever you don't see a `:` ahead, you probably are done with semantics. This meant that you could get into an infinite loop just with simple mistakes like leaving out a `;`. This change fixes the parser to note infinite loop in this case, and adds a test case to verify the fix. * Expose HLSL `shared` modifier through reflection. (#436) This is a request from Falcor, because the `shared` modifier can be used as a hint to optimize the grouping of parameters for binding. The intention is that `shared` marks shader parameters (including parameter blocks) that will us the same values across many draw calls (e.g., per-frame data, as opposed to per-model or per-instance). The mechanism I'm using here is to provide a general reflection API for exposing the `Modifier`s already attached to declarations. While the only modifier exposed is `shared`, and the only modifier information being exposed is presence/absence, this interface could be extended down the line. --- tools/slang-reflection-test/main.cpp | 18 +++++++++++++++++- 1 file changed, 17 insertions(+), 1 deletion(-) (limited to 'tools') diff --git a/tools/slang-reflection-test/main.cpp b/tools/slang-reflection-test/main.cpp index 90be8f5c7..b900f3f62 100644 --- a/tools/slang-reflection-test/main.cpp +++ b/tools/slang-reflection-test/main.cpp @@ -239,6 +239,16 @@ static void emitReflectionNameInfoJSON( write(writer, "\""); } +static void emitReflectionModifierInfoJSON( + PrettyWriter& writer, + slang::VariableReflection* var) +{ + if( var->findModifier(slang::Modifier::Shared) ) + { + write(writer, ",\n\"shared\": true"); + } +} + static void emitReflectionVarLayoutJSON( PrettyWriter& writer, slang::VariableLayoutReflection* var) @@ -252,6 +262,8 @@ static void emitReflectionVarLayoutJSON( write(writer, "\"type\": "); emitReflectionTypeLayoutJSON(writer, var->getTypeLayout()); + emitReflectionModifierInfoJSON(writer, var->getVariable()); + emitReflectionVarBindingInfoJSON(writer, var); dedent(writer); @@ -607,8 +619,10 @@ static void emitReflectionVarInfoJSON( slang::VariableReflection* var) { emitReflectionNameInfoJSON(writer, var->getName()); - write(writer, ",\n"); + emitReflectionModifierInfoJSON(writer, var); + + write(writer, ",\n"); write(writer, "\"type\": "); emitReflectionTypeJSON(writer, var->getType()); } @@ -622,6 +636,8 @@ static void emitReflectionParamJSON( emitReflectionNameInfoJSON(writer, param->getName()); + emitReflectionModifierInfoJSON(writer, param->getVariable()); + emitReflectionVarBindingInfoJSON(writer, param); write(writer, ",\n"); -- cgit v1.2.3