HLSL: allow promotion from 1-vector types to scalars, e.g, float<-float1

Previously, an error was thrown when assigning a float1 to a scalar float,
or similar for other basic types.  This allows that.

Also, this allows calling functions accepting scalars with float1 params,
so for example sin(float1) will work.  This is a minor change in
HlslParseContext::findFunction().
This commit is contained in:
steve-lunarg 2016-11-11 15:37:10 -07:00
parent e69e196e02
commit d9cb832f9c
6 changed files with 140 additions and 2 deletions

View file

@ -814,8 +814,10 @@ TIntermTyped* TIntermediate::addShapeConversion(TOperator op, const TType& type,
TOperator constructorOp = mapTypeToConstructorOp(type);
// scalar -> smeared -> vector, or
// vec1 -> scalar, or
// bigger vector -> smaller vector or scalar
if ((type.isVector() && node->getType().isScalar()) ||
(node->getType().isVector() && node->getVectorSize() == 1 && type.isScalar()) ||
(node->getVectorSize() > type.getVectorSize() && type.isVector()))
return setAggregateOperator(makeAggregate(node), constructorOp, type, node->getLoc());