diff options
| author | jsmall-nvidia <jsmall@nvidia.com> | 2019-03-14 16:21:03 -0400 |
|---|---|---|
| committer | GitHub <noreply@github.com> | 2019-03-14 16:21:03 -0400 |
| commit | c8e36bd128a29654b2ec145038da9e132330581b (patch) | |
| tree | 950ce7c3bb1cc235f97ceb982643e99245c87e16 /source/slang/core.meta.slang | |
| parent | 04416431993b1d5efa8eac759a16832d40c2a159 (diff) | |
Hotfix/bool fix (#907)
* * Handle ! for bool vector in glsl
* Handle operators that have a boolean return value
* || or && take bool
* * Add comment in bool-op.slang test about doing || or && on vector types not supported for GLSL targets
Diffstat (limited to 'source/slang/core.meta.slang')
| -rw-r--r-- | source/slang/core.meta.slang | 11 |
1 files changed, 7 insertions, 4 deletions
diff --git a/source/slang/core.meta.slang b/source/slang/core.meta.slang index f3e57b90b..e42669822 100644 --- a/source/slang/core.meta.slang +++ b/source/slang/core.meta.slang @@ -1103,22 +1103,25 @@ for (auto op : unaryOps) if ((type.flags & op.flags) == 0) continue; + char const* resultType = type.name; + if (op.flags & BOOL_RESULT) resultType = "bool"; + char const* fixity = (op.flags & POSTFIX) != 0 ? "__postfix " : "__prefix "; char const* qual = (op.flags & ASSIGNMENT) != 0 ? "in out " : ""; // scalar version sb << fixity; - sb << "__intrinsic_op(" << int(op.opCode) << ") " << type.name << " operator" << op.opName << "(" << qual << type.name << " value);\n"; + sb << "__intrinsic_op(" << int(op.opCode) << ") " << resultType << " operator" << op.opName << "(" << qual << type.name << " value);\n"; // vector version sb << "__generic<let N : int> "; sb << fixity; - sb << "__intrinsic_op(" << int(op.opCode) << ") vector<" << type.name << ",N> operator" << op.opName << "(" << qual << "vector<" << type.name << ",N> value);\n"; + sb << "__intrinsic_op(" << int(op.opCode) << ") vector<" << resultType << ",N> operator" << op.opName << "(" << qual << "vector<" << type.name << ",N> value);\n"; // matrix version sb << "__generic<let N : int, let M : int> "; sb << fixity; - sb << "__intrinsic_op(" << int(op.opCode) << ") matrix<" << type.name << ",N,M> operator" << op.opName << "(" << qual << "matrix<" << type.name << ",N,M> value);\n"; + sb << "__intrinsic_op(" << int(op.opCode) << ") matrix<" << resultType << ",N,M> operator" << op.opName << "(" << qual << "matrix<" << type.name << ",N,M> value);\n"; } } @@ -1133,7 +1136,7 @@ for (auto op : binaryOps) char const* rightType = leftType; char const* resultType = leftType; - if (op.flags & COMPARISON) resultType = "bool"; + if (op.flags & BOOL_RESULT) resultType = "bool"; char const* leftQual = ""; if(op.flags & ASSIGNMENT) leftQual = "in out "; |
