// Suffix:
bool isFloat16 = false;
if (ch == 'l' || ch == 'L') {
- parseContext.doubleCheck(ppToken->loc, "double floating-point suffix");
+ if (parseContext.intermediate.getSource() == EShSourceGlsl)
+ parseContext.doubleCheck(ppToken->loc, "double floating-point suffix");
if (! HasDecimalOrExponent)
parseContext.ppError(ppToken->loc, "float literal needs a decimal point or exponent", "", "");
- int ch2 = getChar();
- if (ch2 != 'f' && ch2 != 'F') {
- ungetChar();
- ungetChar();
- } else {
+ if (parseContext.intermediate.getSource() == EShSourceGlsl) {
+ int ch2 = getChar();
+ if (ch2 != 'f' && ch2 != 'F') {
+ ungetChar();
+ ungetChar();
+ } else {
+ saveName(ch);
+ saveName(ch2);
+ isDouble = 1;
+ }
+ } else if (parseContext.intermediate.getSource() == EShSourceHlsl) {
saveName(ch);
- saveName(ch2);
isDouble = 1;
}
} else if (ch == 'h' || ch == 'H') {
saveName(ch2);
isFloat16 = true;
}
- } else {
+ } else if (parseContext.intermediate.getSource() == EShSourceHlsl) {
saveName(ch);
- isFloat16 = false;
+ isFloat16 = true;
}
} else if (ch == 'f' || ch == 'F') {
parseContext.profileRequires(ppToken->loc, EEsProfile, 300, nullptr, "floating-point suffix");
case EHTokUintConstant:
node = intermediate.addConstantUnion(token.u, token.loc, true);
break;
+ case EHTokFloat16Constant:
+ node = intermediate.addConstantUnion(token.d, EbtFloat16, token.loc, true);
+ break;
case EHTokFloatConstant:
node = intermediate.addConstantUnion(token.d, EbtFloat, token.loc, true);
break;
// First, convert types as needed.
//
switch (op) {
+ case EOpConstructF16Vec2:
+ case EOpConstructF16Vec3:
+ case EOpConstructF16Vec4:
+ case EOpConstructF16Mat2x2:
+ case EOpConstructF16Mat2x3:
+ case EOpConstructF16Mat2x4:
+ case EOpConstructF16Mat3x2:
+ case EOpConstructF16Mat3x3:
+ case EOpConstructF16Mat3x4:
+ case EOpConstructF16Mat4x2:
+ case EOpConstructF16Mat4x3:
+ case EOpConstructF16Mat4x4:
+ case EOpConstructFloat16:
+ basicOp = EOpConstructFloat16;
+ break;
+
case EOpConstructVec2:
case EOpConstructVec3:
case EOpConstructVec4:
basicOp = EOpConstructDouble;
break;
+ case EOpConstructI16Vec2:
+ case EOpConstructI16Vec3:
+ case EOpConstructI16Vec4:
+ case EOpConstructInt16:
+ basicOp = EOpConstructInt16;
+ break;
+
case EOpConstructIVec2:
case EOpConstructIVec3:
case EOpConstructIVec4:
basicOp = EOpConstructInt;
break;
+ case EOpConstructU16Vec2:
+ case EOpConstructU16Vec3:
+ case EOpConstructU16Vec4:
+ case EOpConstructUint16:
+ basicOp = EOpConstructUint16;
+ break;
+
case EOpConstructUVec2:
case EOpConstructUVec3:
case EOpConstructUVec4:
case PpAtomConstInt: parserToken->i = ppToken.ival; return EHTokIntConstant;
case PpAtomConstUint: parserToken->i = ppToken.ival; return EHTokUintConstant;
+ case PpAtomConstFloat16: parserToken->d = ppToken.dval; return EHTokFloat16Constant;
case PpAtomConstFloat: parserToken->d = ppToken.dval; return EHTokFloatConstant;
case PpAtomConstDouble: parserToken->d = ppToken.dval; return EHTokDoubleConstant;
case PpAtomIdentifier:
EHTokConstantBuffer,
// constant
+ EHTokFloat16Constant,
EHTokFloatConstant,
EHTokDoubleConstant,
EHTokIntConstant,