From c8e36bd128a29654b2ec145038da9e132330581b Mon Sep 17 00:00:00 2001 From: jsmall-nvidia Date: Thu, 14 Mar 2019 16:21:03 -0400 Subject: 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 --- source/slang/core.meta.slang | 11 +++++++---- 1 file changed, 7 insertions(+), 4 deletions(-) (limited to 'source/slang/core.meta.slang') 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 "; 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 "; 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 "; -- cgit v1.2.3