diff options
| author | Tim Foley <tfoleyNV@users.noreply.github.com> | 2017-07-17 10:08:22 -0700 |
|---|---|---|
| committer | GitHub <noreply@github.com> | 2017-07-17 10:08:22 -0700 |
| commit | c69060a75c20ee60b891622f0acd9ed598cb468e (patch) | |
| tree | 9fc05221b73181c906e37a62b0fd0da3552660fe /source | |
| parent | fdab35e93082d6da4f9dbb4b6ec7b4c6dbce831c (diff) | |
| parent | f881f52f6c34dbc2aa0a0701d6600467fae5a5ee (diff) | |
Merge pull request #107 from tfoleyNV/glsl-matrix-mult-bug
Add explicit operator overloads for scalar/matrix cases
Diffstat (limited to 'source')
| -rw-r--r-- | source/slang/slang-stdlib.cpp | 21 |
1 files changed, 21 insertions, 0 deletions
diff --git a/source/slang/slang-stdlib.cpp b/source/slang/slang-stdlib.cpp index 3450e72d7..d266c0560 100644 --- a/source/slang/slang-stdlib.cpp +++ b/source/slang/slang-stdlib.cpp @@ -1833,6 +1833,27 @@ namespace Slang sb << "__intrinsic_op(" << int(op.opCode) << ") matrix<" << resultType << ",N,M> operator" << op.opName << "(" << leftQual << "matrix<" << leftType << ",N,M> left, matrix<" << rightType << ",N,M> right);\n"; break; } + + // We are going to go ahead and explicitly define combined + // operations for the scalar-op-vector, etc. cases, rather + // than rely on promotion rules. + + // scalar-vector and scalar-matrix + if (!(op.flags & ASSIGNMENT)) + { + sb << "__generic<let N : int> "; + sb << "__intrinsic_op(" << int(op.opCode) << ") vector<" << resultType << ",N> operator" << op.opName << "(" << leftQual << leftType << " left, vector<" << rightType << ",N> right);\n"; + + sb << "__generic<let N : int, let M : int> "; + sb << "__intrinsic_op(" << int(op.opCode) << ") matrix<" << resultType << ",N,M> operator" << op.opName << "(" << leftQual << leftType << " left, matrix<" << rightType << ",N,M> right);\n"; + } + + // vector-scalar and matrix-scalar + sb << "__generic<let N : int> "; + sb << "__intrinsic_op(" << int(op.opCode) << ") vector<" << resultType << ",N> operator" << op.opName << "(" << leftQual << "vector<" << leftType << ",N> left, " << rightType << " right);\n"; + + sb << "__generic<let N : int, let M : int> "; + sb << "__intrinsic_op(" << int(op.opCode) << ") matrix<" << resultType << ",N,M> operator" << op.opName << "(" << leftQual << "matrix<" << leftType << ",N,M> left, " << rightType << " right);\n"; } } |
