summaryrefslogtreecommitdiff
path: root/source/slang/core.meta.slang
diff options
context:
space:
mode:
authorjsmall-nvidia <jsmall@nvidia.com>2019-03-14 16:21:03 -0400
committerGitHub <noreply@github.com>2019-03-14 16:21:03 -0400
commitc8e36bd128a29654b2ec145038da9e132330581b (patch)
tree950ce7c3bb1cc235f97ceb982643e99245c87e16 /source/slang/core.meta.slang
parent04416431993b1d5efa8eac759a16832d40c2a159 (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.slang11
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 ";