summaryrefslogtreecommitdiffstats
path: root/source/slang/emit.cpp
diff options
context:
space:
mode:
authorTim Foley <tfoley@nvidia.com>2017-07-17 08:58:47 -0700
committerTim Foley <tfoley@nvidia.com>2017-07-17 08:58:47 -0700
commit15aba2fe81fea44969e036e181a4cf252ff41963 (patch)
tree489534f470b3d2dcbb61660458bf473e0a2c0552 /source/slang/emit.cpp
parenteecb6c56da5792010e88f2a0d6d1503244b081a4 (diff)
Handle `flat` interpolation cases in cross compilation
Fixes #104 - Map HLSL `nointerpolation` to GLSL `flat` - When lowering a `struct` type varying input/output, look for interpolation modifiers along the "chain" from the leaf field up to the original shader input variable (and take the first one found) - Not sure if this is strictly needed, but it seems like a reasonable policy - Add `flat` to varying input of integer type, with no other interpolation modifier - Note: I do *not* do anything to ignore a manually imposed interpolation modifier that might be incorrect
Diffstat (limited to 'source/slang/emit.cpp')
-rw-r--r--source/slang/emit.cpp5
1 files changed, 3 insertions, 2 deletions
diff --git a/source/slang/emit.cpp b/source/slang/emit.cpp
index 88b80589a..7ffce2acd 100644
--- a/source/slang/emit.cpp
+++ b/source/slang/emit.cpp
@@ -2667,11 +2667,12 @@ struct EmitVisitor
else if(auto mod_##TYPE = mod.As<TYPE>()) Emit(#KEYWORD " ")
#define CASE2(TYPE, HLSL_NAME, GLSL_NAME) \
- else if(auto mod_##TYPE = mod.As<TYPE>()) Emit((context->shared->target == CodeGenTarget::GLSL) ? GLSL_NAME : HLSL_NAME)
+ else if(auto mod_##TYPE = mod.As<TYPE>()) Emit((context->shared->target == CodeGenTarget::GLSL) ? (#GLSL_NAME " ") : (#HLSL_NAME " "))
CASE(RowMajorLayoutModifier, row_major);
CASE(ColumnMajorLayoutModifier, column_major);
- CASE(HLSLNoInterpolationModifier, nointerpolation);
+
+ CASE2(HLSLNoInterpolationModifier, nointerpolation, flat);
CASE(HLSLPreciseModifier, precise);
CASE(HLSLEffectSharedModifier, shared);
CASE(HLSLGroupSharedModifier, groupshared);