|
|
@@ -823,8 +823,10 @@ bool HlslGrammar::acceptLayoutQualifierList(TQualifier& qualifier)
|
|
|
// | UINT
|
|
|
// | BOOL
|
|
|
//
|
|
|
-bool HlslGrammar::acceptTemplateVecMatBasicType(TBasicType& basicType)
|
|
|
+bool HlslGrammar::acceptTemplateVecMatBasicType(TBasicType& basicType,
|
|
|
+ TPrecisionQualifier& precision)
|
|
|
{
|
|
|
+ precision = EpqNone;
|
|
|
switch (peek()) {
|
|
|
case EHTokFloat:
|
|
|
basicType = EbtFloat;
|
|
|
@@ -842,6 +844,23 @@ bool HlslGrammar::acceptTemplateVecMatBasicType(TBasicType& basicType)
|
|
|
case EHTokBool:
|
|
|
basicType = EbtBool;
|
|
|
break;
|
|
|
+ case EHTokHalf:
|
|
|
+ basicType = parseContext.hlslEnable16BitTypes() ? EbtFloat16 : EbtFloat;
|
|
|
+ break;
|
|
|
+ case EHTokMin16float:
|
|
|
+ case EHTokMin10float:
|
|
|
+ basicType = parseContext.hlslEnable16BitTypes() ? EbtFloat16 : EbtFloat;
|
|
|
+ precision = EpqMedium;
|
|
|
+ break;
|
|
|
+ case EHTokMin16int:
|
|
|
+ case EHTokMin12int:
|
|
|
+ basicType = parseContext.hlslEnable16BitTypes() ? EbtInt16 : EbtInt;
|
|
|
+ precision = EpqMedium;
|
|
|
+ break;
|
|
|
+ case EHTokMin16uint:
|
|
|
+ basicType = parseContext.hlslEnable16BitTypes() ? EbtUint16 : EbtUint;
|
|
|
+ precision = EpqMedium;
|
|
|
+ break;
|
|
|
default:
|
|
|
return false;
|
|
|
}
|
|
|
@@ -867,7 +886,8 @@ bool HlslGrammar::acceptVectorTemplateType(TType& type)
|
|
|
}
|
|
|
|
|
|
TBasicType basicType;
|
|
|
- if (! acceptTemplateVecMatBasicType(basicType)) {
|
|
|
+ TPrecisionQualifier precision;
|
|
|
+ if (! acceptTemplateVecMatBasicType(basicType, precision)) {
|
|
|
expected("scalar type");
|
|
|
return false;
|
|
|
}
|
|
|
@@ -890,7 +910,7 @@ bool HlslGrammar::acceptVectorTemplateType(TType& type)
|
|
|
|
|
|
const int vecSizeI = vecSize->getAsConstantUnion()->getConstArray()[0].getIConst();
|
|
|
|
|
|
- new(&type) TType(basicType, EvqTemporary, vecSizeI);
|
|
|
+ new(&type) TType(basicType, EvqTemporary, precision, vecSizeI);
|
|
|
|
|
|
if (vecSizeI == 1)
|
|
|
type.makeVector();
|
|
|
@@ -919,7 +939,8 @@ bool HlslGrammar::acceptMatrixTemplateType(TType& type)
|
|
|
}
|
|
|
|
|
|
TBasicType basicType;
|
|
|
- if (! acceptTemplateVecMatBasicType(basicType)) {
|
|
|
+ TPrecisionQualifier precision;
|
|
|
+ if (! acceptTemplateVecMatBasicType(basicType, precision)) {
|
|
|
expected("scalar type");
|
|
|
return false;
|
|
|
}
|
|
|
@@ -956,7 +977,7 @@ bool HlslGrammar::acceptMatrixTemplateType(TType& type)
|
|
|
if (! acceptLiteral(cols))
|
|
|
return false;
|
|
|
|
|
|
- new(&type) TType(basicType, EvqTemporary, 0,
|
|
|
+ new(&type) TType(basicType, EvqTemporary, precision, 0,
|
|
|
rows->getAsConstantUnion()->getConstArray()[0].getIConst(),
|
|
|
cols->getAsConstantUnion()->getConstArray()[0].getIConst());
|
|
|
|
|
|
@@ -2064,6 +2085,251 @@ bool HlslGrammar::acceptType(TType& type, TIntermNode*& nodeList)
|
|
|
new(&type) TType(EbtDouble, EvqTemporary, 0, 4, 4);
|
|
|
break;
|
|
|
|
|
|
+ case EHTokMin16float1x1:
|
|
|
+ new(&type) TType(min16float_bt, EvqTemporary, EpqMedium, 0, 1, 1);
|
|
|
+ break;
|
|
|
+ case EHTokMin16float1x2:
|
|
|
+ new(&type) TType(min16float_bt, EvqTemporary, EpqMedium, 0, 1, 2);
|
|
|
+ break;
|
|
|
+ case EHTokMin16float1x3:
|
|
|
+ new(&type) TType(min16float_bt, EvqTemporary, EpqMedium, 0, 1, 3);
|
|
|
+ break;
|
|
|
+ case EHTokMin16float1x4:
|
|
|
+ new(&type) TType(min16float_bt, EvqTemporary, EpqMedium, 0, 1, 4);
|
|
|
+ break;
|
|
|
+ case EHTokMin16float2x1:
|
|
|
+ new(&type) TType(min16float_bt, EvqTemporary, EpqMedium, 0, 2, 1);
|
|
|
+ break;
|
|
|
+ case EHTokMin16float2x2:
|
|
|
+ new(&type) TType(min16float_bt, EvqTemporary, EpqMedium, 0, 2, 2);
|
|
|
+ break;
|
|
|
+ case EHTokMin16float2x3:
|
|
|
+ new(&type) TType(min16float_bt, EvqTemporary, EpqMedium, 0, 2, 3);
|
|
|
+ break;
|
|
|
+ case EHTokMin16float2x4:
|
|
|
+ new(&type) TType(min16float_bt, EvqTemporary, EpqMedium, 0, 2, 4);
|
|
|
+ break;
|
|
|
+ case EHTokMin16float3x1:
|
|
|
+ new(&type) TType(min16float_bt, EvqTemporary, EpqMedium, 0, 3, 1);
|
|
|
+ break;
|
|
|
+ case EHTokMin16float3x2:
|
|
|
+ new(&type) TType(min16float_bt, EvqTemporary, EpqMedium, 0, 3, 2);
|
|
|
+ break;
|
|
|
+ case EHTokMin16float3x3:
|
|
|
+ new(&type) TType(min16float_bt, EvqTemporary, EpqMedium, 0, 3, 3);
|
|
|
+ break;
|
|
|
+ case EHTokMin16float3x4:
|
|
|
+ new(&type) TType(min16float_bt, EvqTemporary, EpqMedium, 0, 3, 4);
|
|
|
+ break;
|
|
|
+ case EHTokMin16float4x1:
|
|
|
+ new(&type) TType(min16float_bt, EvqTemporary, EpqMedium, 0, 4, 1);
|
|
|
+ break;
|
|
|
+ case EHTokMin16float4x2:
|
|
|
+ new(&type) TType(min16float_bt, EvqTemporary, EpqMedium, 0, 4, 2);
|
|
|
+ break;
|
|
|
+ case EHTokMin16float4x3:
|
|
|
+ new(&type) TType(min16float_bt, EvqTemporary, EpqMedium, 0, 4, 3);
|
|
|
+ break;
|
|
|
+ case EHTokMin16float4x4:
|
|
|
+ new(&type) TType(min16float_bt, EvqTemporary, EpqMedium, 0, 4, 4);
|
|
|
+ break;
|
|
|
+
|
|
|
+ case EHTokMin10float1x1:
|
|
|
+ new(&type) TType(min10float_bt, EvqTemporary, EpqMedium, 0, 1, 1);
|
|
|
+ break;
|
|
|
+ case EHTokMin10float1x2:
|
|
|
+ new(&type) TType(min10float_bt, EvqTemporary, EpqMedium, 0, 1, 2);
|
|
|
+ break;
|
|
|
+ case EHTokMin10float1x3:
|
|
|
+ new(&type) TType(min10float_bt, EvqTemporary, EpqMedium, 0, 1, 3);
|
|
|
+ break;
|
|
|
+ case EHTokMin10float1x4:
|
|
|
+ new(&type) TType(min10float_bt, EvqTemporary, EpqMedium, 0, 1, 4);
|
|
|
+ break;
|
|
|
+ case EHTokMin10float2x1:
|
|
|
+ new(&type) TType(min10float_bt, EvqTemporary, EpqMedium, 0, 2, 1);
|
|
|
+ break;
|
|
|
+ case EHTokMin10float2x2:
|
|
|
+ new(&type) TType(min10float_bt, EvqTemporary, EpqMedium, 0, 2, 2);
|
|
|
+ break;
|
|
|
+ case EHTokMin10float2x3:
|
|
|
+ new(&type) TType(min10float_bt, EvqTemporary, EpqMedium, 0, 2, 3);
|
|
|
+ break;
|
|
|
+ case EHTokMin10float2x4:
|
|
|
+ new(&type) TType(min10float_bt, EvqTemporary, EpqMedium, 0, 2, 4);
|
|
|
+ break;
|
|
|
+ case EHTokMin10float3x1:
|
|
|
+ new(&type) TType(min10float_bt, EvqTemporary, EpqMedium, 0, 3, 1);
|
|
|
+ break;
|
|
|
+ case EHTokMin10float3x2:
|
|
|
+ new(&type) TType(min10float_bt, EvqTemporary, EpqMedium, 0, 3, 2);
|
|
|
+ break;
|
|
|
+ case EHTokMin10float3x3:
|
|
|
+ new(&type) TType(min10float_bt, EvqTemporary, EpqMedium, 0, 3, 3);
|
|
|
+ break;
|
|
|
+ case EHTokMin10float3x4:
|
|
|
+ new(&type) TType(min10float_bt, EvqTemporary, EpqMedium, 0, 3, 4);
|
|
|
+ break;
|
|
|
+ case EHTokMin10float4x1:
|
|
|
+ new(&type) TType(min10float_bt, EvqTemporary, EpqMedium, 0, 4, 1);
|
|
|
+ break;
|
|
|
+ case EHTokMin10float4x2:
|
|
|
+ new(&type) TType(min10float_bt, EvqTemporary, EpqMedium, 0, 4, 2);
|
|
|
+ break;
|
|
|
+ case EHTokMin10float4x3:
|
|
|
+ new(&type) TType(min10float_bt, EvqTemporary, EpqMedium, 0, 4, 3);
|
|
|
+ break;
|
|
|
+ case EHTokMin10float4x4:
|
|
|
+ new(&type) TType(min10float_bt, EvqTemporary, EpqMedium, 0, 4, 4);
|
|
|
+ break;
|
|
|
+
|
|
|
+ case EHTokMin16int1x1:
|
|
|
+ new(&type) TType(min16int_bt, EvqTemporary, EpqMedium, 0, 1, 1);
|
|
|
+ break;
|
|
|
+ case EHTokMin16int1x2:
|
|
|
+ new(&type) TType(min16int_bt, EvqTemporary, EpqMedium, 0, 1, 2);
|
|
|
+ break;
|
|
|
+ case EHTokMin16int1x3:
|
|
|
+ new(&type) TType(min16int_bt, EvqTemporary, EpqMedium, 0, 1, 3);
|
|
|
+ break;
|
|
|
+ case EHTokMin16int1x4:
|
|
|
+ new(&type) TType(min16int_bt, EvqTemporary, EpqMedium, 0, 1, 4);
|
|
|
+ break;
|
|
|
+ case EHTokMin16int2x1:
|
|
|
+ new(&type) TType(min16int_bt, EvqTemporary, EpqMedium, 0, 2, 1);
|
|
|
+ break;
|
|
|
+ case EHTokMin16int2x2:
|
|
|
+ new(&type) TType(min16int_bt, EvqTemporary, EpqMedium, 0, 2, 2);
|
|
|
+ break;
|
|
|
+ case EHTokMin16int2x3:
|
|
|
+ new(&type) TType(min16int_bt, EvqTemporary, EpqMedium, 0, 2, 3);
|
|
|
+ break;
|
|
|
+ case EHTokMin16int2x4:
|
|
|
+ new(&type) TType(min16int_bt, EvqTemporary, EpqMedium, 0, 2, 4);
|
|
|
+ break;
|
|
|
+ case EHTokMin16int3x1:
|
|
|
+ new(&type) TType(min16int_bt, EvqTemporary, EpqMedium, 0, 3, 1);
|
|
|
+ break;
|
|
|
+ case EHTokMin16int3x2:
|
|
|
+ new(&type) TType(min16int_bt, EvqTemporary, EpqMedium, 0, 3, 2);
|
|
|
+ break;
|
|
|
+ case EHTokMin16int3x3:
|
|
|
+ new(&type) TType(min16int_bt, EvqTemporary, EpqMedium, 0, 3, 3);
|
|
|
+ break;
|
|
|
+ case EHTokMin16int3x4:
|
|
|
+ new(&type) TType(min16int_bt, EvqTemporary, EpqMedium, 0, 3, 4);
|
|
|
+ break;
|
|
|
+ case EHTokMin16int4x1:
|
|
|
+ new(&type) TType(min16int_bt, EvqTemporary, EpqMedium, 0, 4, 1);
|
|
|
+ break;
|
|
|
+ case EHTokMin16int4x2:
|
|
|
+ new(&type) TType(min16int_bt, EvqTemporary, EpqMedium, 0, 4, 2);
|
|
|
+ break;
|
|
|
+ case EHTokMin16int4x3:
|
|
|
+ new(&type) TType(min16int_bt, EvqTemporary, EpqMedium, 0, 4, 3);
|
|
|
+ break;
|
|
|
+ case EHTokMin16int4x4:
|
|
|
+ new(&type) TType(min16int_bt, EvqTemporary, EpqMedium, 0, 4, 4);
|
|
|
+ break;
|
|
|
+
|
|
|
+ case EHTokMin12int1x1:
|
|
|
+ new(&type) TType(min12int_bt, EvqTemporary, EpqMedium, 0, 1, 1);
|
|
|
+ break;
|
|
|
+ case EHTokMin12int1x2:
|
|
|
+ new(&type) TType(min12int_bt, EvqTemporary, EpqMedium, 0, 1, 2);
|
|
|
+ break;
|
|
|
+ case EHTokMin12int1x3:
|
|
|
+ new(&type) TType(min12int_bt, EvqTemporary, EpqMedium, 0, 1, 3);
|
|
|
+ break;
|
|
|
+ case EHTokMin12int1x4:
|
|
|
+ new(&type) TType(min12int_bt, EvqTemporary, EpqMedium, 0, 1, 4);
|
|
|
+ break;
|
|
|
+ case EHTokMin12int2x1:
|
|
|
+ new(&type) TType(min12int_bt, EvqTemporary, EpqMedium, 0, 2, 1);
|
|
|
+ break;
|
|
|
+ case EHTokMin12int2x2:
|
|
|
+ new(&type) TType(min12int_bt, EvqTemporary, EpqMedium, 0, 2, 2);
|
|
|
+ break;
|
|
|
+ case EHTokMin12int2x3:
|
|
|
+ new(&type) TType(min12int_bt, EvqTemporary, EpqMedium, 0, 2, 3);
|
|
|
+ break;
|
|
|
+ case EHTokMin12int2x4:
|
|
|
+ new(&type) TType(min12int_bt, EvqTemporary, EpqMedium, 0, 2, 4);
|
|
|
+ break;
|
|
|
+ case EHTokMin12int3x1:
|
|
|
+ new(&type) TType(min12int_bt, EvqTemporary, EpqMedium, 0, 3, 1);
|
|
|
+ break;
|
|
|
+ case EHTokMin12int3x2:
|
|
|
+ new(&type) TType(min12int_bt, EvqTemporary, EpqMedium, 0, 3, 2);
|
|
|
+ break;
|
|
|
+ case EHTokMin12int3x3:
|
|
|
+ new(&type) TType(min12int_bt, EvqTemporary, EpqMedium, 0, 3, 3);
|
|
|
+ break;
|
|
|
+ case EHTokMin12int3x4:
|
|
|
+ new(&type) TType(min12int_bt, EvqTemporary, EpqMedium, 0, 3, 4);
|
|
|
+ break;
|
|
|
+ case EHTokMin12int4x1:
|
|
|
+ new(&type) TType(min12int_bt, EvqTemporary, EpqMedium, 0, 4, 1);
|
|
|
+ break;
|
|
|
+ case EHTokMin12int4x2:
|
|
|
+ new(&type) TType(min12int_bt, EvqTemporary, EpqMedium, 0, 4, 2);
|
|
|
+ break;
|
|
|
+ case EHTokMin12int4x3:
|
|
|
+ new(&type) TType(min12int_bt, EvqTemporary, EpqMedium, 0, 4, 3);
|
|
|
+ break;
|
|
|
+ case EHTokMin12int4x4:
|
|
|
+ new(&type) TType(min12int_bt, EvqTemporary, EpqMedium, 0, 4, 4);
|
|
|
+ break;
|
|
|
+
|
|
|
+ case EHTokMin16uint1x1:
|
|
|
+ new(&type) TType(min16uint_bt, EvqTemporary, EpqMedium, 0, 1, 1);
|
|
|
+ break;
|
|
|
+ case EHTokMin16uint1x2:
|
|
|
+ new(&type) TType(min16uint_bt, EvqTemporary, EpqMedium, 0, 1, 2);
|
|
|
+ break;
|
|
|
+ case EHTokMin16uint1x3:
|
|
|
+ new(&type) TType(min16uint_bt, EvqTemporary, EpqMedium, 0, 1, 3);
|
|
|
+ break;
|
|
|
+ case EHTokMin16uint1x4:
|
|
|
+ new(&type) TType(min16uint_bt, EvqTemporary, EpqMedium, 0, 1, 4);
|
|
|
+ break;
|
|
|
+ case EHTokMin16uint2x1:
|
|
|
+ new(&type) TType(min16uint_bt, EvqTemporary, EpqMedium, 0, 2, 1);
|
|
|
+ break;
|
|
|
+ case EHTokMin16uint2x2:
|
|
|
+ new(&type) TType(min16uint_bt, EvqTemporary, EpqMedium, 0, 2, 2);
|
|
|
+ break;
|
|
|
+ case EHTokMin16uint2x3:
|
|
|
+ new(&type) TType(min16uint_bt, EvqTemporary, EpqMedium, 0, 2, 3);
|
|
|
+ break;
|
|
|
+ case EHTokMin16uint2x4:
|
|
|
+ new(&type) TType(min16uint_bt, EvqTemporary, EpqMedium, 0, 2, 4);
|
|
|
+ break;
|
|
|
+ case EHTokMin16uint3x1:
|
|
|
+ new(&type) TType(min16uint_bt, EvqTemporary, EpqMedium, 0, 3, 1);
|
|
|
+ break;
|
|
|
+ case EHTokMin16uint3x2:
|
|
|
+ new(&type) TType(min16uint_bt, EvqTemporary, EpqMedium, 0, 3, 2);
|
|
|
+ break;
|
|
|
+ case EHTokMin16uint3x3:
|
|
|
+ new(&type) TType(min16uint_bt, EvqTemporary, EpqMedium, 0, 3, 3);
|
|
|
+ break;
|
|
|
+ case EHTokMin16uint3x4:
|
|
|
+ new(&type) TType(min16uint_bt, EvqTemporary, EpqMedium, 0, 3, 4);
|
|
|
+ break;
|
|
|
+ case EHTokMin16uint4x1:
|
|
|
+ new(&type) TType(min16uint_bt, EvqTemporary, EpqMedium, 0, 4, 1);
|
|
|
+ break;
|
|
|
+ case EHTokMin16uint4x2:
|
|
|
+ new(&type) TType(min16uint_bt, EvqTemporary, EpqMedium, 0, 4, 2);
|
|
|
+ break;
|
|
|
+ case EHTokMin16uint4x3:
|
|
|
+ new(&type) TType(min16uint_bt, EvqTemporary, EpqMedium, 0, 4, 3);
|
|
|
+ break;
|
|
|
+ case EHTokMin16uint4x4:
|
|
|
+ new(&type) TType(min16uint_bt, EvqTemporary, EpqMedium, 0, 4, 4);
|
|
|
+ break;
|
|
|
+
|
|
|
default:
|
|
|
return false;
|
|
|
}
|