diff options
Diffstat (limited to 'source/slang')
| -rw-r--r-- | source/slang/slang-check-conversion.cpp | 6 | ||||
| -rw-r--r-- | source/slang/slang-emit-spirv.cpp | 13 |
2 files changed, 17 insertions, 2 deletions
diff --git a/source/slang/slang-check-conversion.cpp b/source/slang/slang-check-conversion.cpp index 6456dbe98..3ace9f999 100644 --- a/source/slang/slang-check-conversion.cpp +++ b/source/slang/slang-check-conversion.cpp @@ -1430,7 +1430,11 @@ bool SemanticsVisitor::_coerce( } if (outToExpr) { - *outToExpr = fromExpr; + auto castExpr = getASTBuilder()->create<BuiltinCastExpr>(); + castExpr->type = toType; + castExpr->loc = fromExpr->loc; + castExpr->base = fromExpr; + *outToExpr = castExpr; } return true; } diff --git a/source/slang/slang-emit-spirv.cpp b/source/slang/slang-emit-spirv.cpp index b9627e1ee..2b6f1c821 100644 --- a/source/slang/slang-emit-spirv.cpp +++ b/source/slang/slang-emit-spirv.cpp @@ -7374,6 +7374,12 @@ struct SPIRVEmitContext : public SourceEmitterBase, public SPIRVEmitSharedContex SLANG_ASSERT(isIntegralType(fromType)); SLANG_ASSERT(isIntegralType(toType)); + if (isTypeEqual(fromType, toType)) + { + auto inner = ensureInst(inst->getOperand(0)); + registerInst(inst, inner); + return inner; + } const auto fromInfo = getIntTypeInfo(fromType); const auto toInfo = getIntTypeInfo(toType); @@ -7491,7 +7497,12 @@ struct SPIRVEmitContext : public SourceEmitterBase, public SPIRVEmitSharedContex SLANG_ASSERT(isFloatingType(fromType)); SLANG_ASSERT(isFloatingType(toType)); - SLANG_ASSERT(!isTypeEqual(fromType, toType)); + if (isTypeEqual(fromType, toType)) + { + auto inner = ensureInst(inst->getOperand(0)); + registerInst(inst, inner); + return inner; + } if (isMatrixCast) { |
