Use the correct type for the constant for matrix/scalar division
When a matrix is divided by a scalar it tries to take the reciprocal of the scalar to convert the operation into a multiply. However it was always doing this by making a 32-bit constant. If the scalar is a double then this would end up making an FDiv instruction with different types in the operands. This patch adds a helper method called makeFpConstant which makes a floating-point constant of the given type. The code to take the reciprocal now uses it to make the same type as the result. Fixes https://github.com/KhronosGroup/glslang/issues/1278
This commit is contained in:
@@ -4137,7 +4137,8 @@ spv::Id TGlslangToSpvTraverser::createBinaryMatrixOperation(spv::Op op, spv::Dec
|
||||
case spv::OpFDiv:
|
||||
if (builder.isMatrix(left) && builder.isScalar(right)) {
|
||||
// turn matrix / scalar into a multiply...
|
||||
right = builder.createBinOp(spv::OpFDiv, builder.getTypeId(right), builder.makeFloatConstant(1.0F), right);
|
||||
spv::Id resultType = builder.getTypeId(right);
|
||||
right = builder.createBinOp(spv::OpFDiv, resultType, builder.makeFpConstant(resultType, 1.0), right);
|
||||
op = spv::OpMatrixTimesScalar;
|
||||
} else
|
||||
firstClass = false;
|
||||
|
||||
Reference in New Issue
Block a user