HLSL: Add missing relaxed-precision float/int matrix expansions

This commit is contained in:
rdb 2023-01-30 17:42:49 +01:00 committed by Jeremy Hayes
parent 58d302cfa2
commit 5137ce1a95
6 changed files with 858 additions and 95 deletions

View file

@ -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;
}

View file

@ -76,7 +76,7 @@ namespace glslang {
bool acceptLayoutQualifierList(TQualifier&);
bool acceptType(TType&);
bool acceptType(TType&, TIntermNode*& nodeList);
bool acceptTemplateVecMatBasicType(TBasicType&);
bool acceptTemplateVecMatBasicType(TBasicType&, TPrecisionQualifier&);
bool acceptVectorTemplateType(TType&);
bool acceptMatrixTemplateType(TType&);
bool acceptTessellationDeclType(TBuiltInVariable&);

View file

@ -312,6 +312,86 @@ void HlslScanContext::fillInKeywordMap()
(*KeywordMap)["double4x2"] = EHTokDouble4x2;
(*KeywordMap)["double4x3"] = EHTokDouble4x3;
(*KeywordMap)["double4x4"] = EHTokDouble4x4;
(*KeywordMap)["min16float1x1"] = EHTokMin16float1x1;
(*KeywordMap)["min16float1x2"] = EHTokMin16float1x2;
(*KeywordMap)["min16float1x3"] = EHTokMin16float1x3;
(*KeywordMap)["min16float1x4"] = EHTokMin16float1x4;
(*KeywordMap)["min16float2x1"] = EHTokMin16float2x1;
(*KeywordMap)["min16float2x2"] = EHTokMin16float2x2;
(*KeywordMap)["min16float2x3"] = EHTokMin16float2x3;
(*KeywordMap)["min16float2x4"] = EHTokMin16float2x4;
(*KeywordMap)["min16float3x1"] = EHTokMin16float3x1;
(*KeywordMap)["min16float3x2"] = EHTokMin16float3x2;
(*KeywordMap)["min16float3x3"] = EHTokMin16float3x3;
(*KeywordMap)["min16float3x4"] = EHTokMin16float3x4;
(*KeywordMap)["min16float4x1"] = EHTokMin16float4x1;
(*KeywordMap)["min16float4x2"] = EHTokMin16float4x2;
(*KeywordMap)["min16float4x3"] = EHTokMin16float4x3;
(*KeywordMap)["min16float4x4"] = EHTokMin16float4x4;
(*KeywordMap)["min10float1x1"] = EHTokMin10float1x1;
(*KeywordMap)["min10float1x2"] = EHTokMin10float1x2;
(*KeywordMap)["min10float1x3"] = EHTokMin10float1x3;
(*KeywordMap)["min10float1x4"] = EHTokMin10float1x4;
(*KeywordMap)["min10float2x1"] = EHTokMin10float2x1;
(*KeywordMap)["min10float2x2"] = EHTokMin10float2x2;
(*KeywordMap)["min10float2x3"] = EHTokMin10float2x3;
(*KeywordMap)["min10float2x4"] = EHTokMin10float2x4;
(*KeywordMap)["min10float3x1"] = EHTokMin10float3x1;
(*KeywordMap)["min10float3x2"] = EHTokMin10float3x2;
(*KeywordMap)["min10float3x3"] = EHTokMin10float3x3;
(*KeywordMap)["min10float3x4"] = EHTokMin10float3x4;
(*KeywordMap)["min10float4x1"] = EHTokMin10float4x1;
(*KeywordMap)["min10float4x2"] = EHTokMin10float4x2;
(*KeywordMap)["min10float4x3"] = EHTokMin10float4x3;
(*KeywordMap)["min10float4x4"] = EHTokMin10float4x4;
(*KeywordMap)["min16int1x1"] = EHTokMin16int1x1;
(*KeywordMap)["min16int1x2"] = EHTokMin16int1x2;
(*KeywordMap)["min16int1x3"] = EHTokMin16int1x3;
(*KeywordMap)["min16int1x4"] = EHTokMin16int1x4;
(*KeywordMap)["min16int2x1"] = EHTokMin16int2x1;
(*KeywordMap)["min16int2x2"] = EHTokMin16int2x2;
(*KeywordMap)["min16int2x3"] = EHTokMin16int2x3;
(*KeywordMap)["min16int2x4"] = EHTokMin16int2x4;
(*KeywordMap)["min16int3x1"] = EHTokMin16int3x1;
(*KeywordMap)["min16int3x2"] = EHTokMin16int3x2;
(*KeywordMap)["min16int3x3"] = EHTokMin16int3x3;
(*KeywordMap)["min16int3x4"] = EHTokMin16int3x4;
(*KeywordMap)["min16int4x1"] = EHTokMin16int4x1;
(*KeywordMap)["min16int4x2"] = EHTokMin16int4x2;
(*KeywordMap)["min16int4x3"] = EHTokMin16int4x3;
(*KeywordMap)["min16int4x4"] = EHTokMin16int4x4;
(*KeywordMap)["min12int1x1"] = EHTokMin12int1x1;
(*KeywordMap)["min12int1x2"] = EHTokMin12int1x2;
(*KeywordMap)["min12int1x3"] = EHTokMin12int1x3;
(*KeywordMap)["min12int1x4"] = EHTokMin12int1x4;
(*KeywordMap)["min12int2x1"] = EHTokMin12int2x1;
(*KeywordMap)["min12int2x2"] = EHTokMin12int2x2;
(*KeywordMap)["min12int2x3"] = EHTokMin12int2x3;
(*KeywordMap)["min12int2x4"] = EHTokMin12int2x4;
(*KeywordMap)["min12int3x1"] = EHTokMin12int3x1;
(*KeywordMap)["min12int3x2"] = EHTokMin12int3x2;
(*KeywordMap)["min12int3x3"] = EHTokMin12int3x3;
(*KeywordMap)["min12int3x4"] = EHTokMin12int3x4;
(*KeywordMap)["min12int4x1"] = EHTokMin12int4x1;
(*KeywordMap)["min12int4x2"] = EHTokMin12int4x2;
(*KeywordMap)["min12int4x3"] = EHTokMin12int4x3;
(*KeywordMap)["min12int4x4"] = EHTokMin12int4x4;
(*KeywordMap)["min16uint1x1"] = EHTokMin16uint1x1;
(*KeywordMap)["min16uint1x2"] = EHTokMin16uint1x2;
(*KeywordMap)["min16uint1x3"] = EHTokMin16uint1x3;
(*KeywordMap)["min16uint1x4"] = EHTokMin16uint1x4;
(*KeywordMap)["min16uint2x1"] = EHTokMin16uint2x1;
(*KeywordMap)["min16uint2x2"] = EHTokMin16uint2x2;
(*KeywordMap)["min16uint2x3"] = EHTokMin16uint2x3;
(*KeywordMap)["min16uint2x4"] = EHTokMin16uint2x4;
(*KeywordMap)["min16uint3x1"] = EHTokMin16uint3x1;
(*KeywordMap)["min16uint3x2"] = EHTokMin16uint3x2;
(*KeywordMap)["min16uint3x3"] = EHTokMin16uint3x3;
(*KeywordMap)["min16uint3x4"] = EHTokMin16uint3x4;
(*KeywordMap)["min16uint4x1"] = EHTokMin16uint4x1;
(*KeywordMap)["min16uint4x2"] = EHTokMin16uint4x2;
(*KeywordMap)["min16uint4x3"] = EHTokMin16uint4x3;
(*KeywordMap)["min16uint4x4"] = EHTokMin16uint4x4;
(*KeywordMap)["sampler"] = EHTokSampler;
(*KeywordMap)["sampler1D"] = EHTokSampler1d;
@ -806,6 +886,86 @@ EHlslTokenClass HlslScanContext::tokenizeIdentifier()
case EHTokDouble4x2:
case EHTokDouble4x3:
case EHTokDouble4x4:
case EHTokMin16float1x1:
case EHTokMin16float1x2:
case EHTokMin16float1x3:
case EHTokMin16float1x4:
case EHTokMin16float2x1:
case EHTokMin16float2x2:
case EHTokMin16float2x3:
case EHTokMin16float2x4:
case EHTokMin16float3x1:
case EHTokMin16float3x2:
case EHTokMin16float3x3:
case EHTokMin16float3x4:
case EHTokMin16float4x1:
case EHTokMin16float4x2:
case EHTokMin16float4x3:
case EHTokMin16float4x4:
case EHTokMin10float1x1:
case EHTokMin10float1x2:
case EHTokMin10float1x3:
case EHTokMin10float1x4:
case EHTokMin10float2x1:
case EHTokMin10float2x2:
case EHTokMin10float2x3:
case EHTokMin10float2x4:
case EHTokMin10float3x1:
case EHTokMin10float3x2:
case EHTokMin10float3x3:
case EHTokMin10float3x4:
case EHTokMin10float4x1:
case EHTokMin10float4x2:
case EHTokMin10float4x3:
case EHTokMin10float4x4:
case EHTokMin16int1x1:
case EHTokMin16int1x2:
case EHTokMin16int1x3:
case EHTokMin16int1x4:
case EHTokMin16int2x1:
case EHTokMin16int2x2:
case EHTokMin16int2x3:
case EHTokMin16int2x4:
case EHTokMin16int3x1:
case EHTokMin16int3x2:
case EHTokMin16int3x3:
case EHTokMin16int3x4:
case EHTokMin16int4x1:
case EHTokMin16int4x2:
case EHTokMin16int4x3:
case EHTokMin16int4x4:
case EHTokMin12int1x1:
case EHTokMin12int1x2:
case EHTokMin12int1x3:
case EHTokMin12int1x4:
case EHTokMin12int2x1:
case EHTokMin12int2x2:
case EHTokMin12int2x3:
case EHTokMin12int2x4:
case EHTokMin12int3x1:
case EHTokMin12int3x2:
case EHTokMin12int3x3:
case EHTokMin12int3x4:
case EHTokMin12int4x1:
case EHTokMin12int4x2:
case EHTokMin12int4x3:
case EHTokMin12int4x4:
case EHTokMin16uint1x1:
case EHTokMin16uint1x2:
case EHTokMin16uint1x3:
case EHTokMin16uint1x4:
case EHTokMin16uint2x1:
case EHTokMin16uint2x2:
case EHTokMin16uint2x3:
case EHTokMin16uint2x4:
case EHTokMin16uint3x1:
case EHTokMin16uint3x2:
case EHTokMin16uint3x3:
case EHTokMin16uint3x4:
case EHTokMin16uint4x1:
case EHTokMin16uint4x2:
case EHTokMin16uint4x3:
case EHTokMin16uint4x4:
return keyword;
// texturing types

View file

@ -249,6 +249,86 @@ enum EHlslTokenClass {
EHTokDouble4x2,
EHTokDouble4x3,
EHTokDouble4x4,
EHTokMin16float1x1,
EHTokMin16float1x2,
EHTokMin16float1x3,
EHTokMin16float1x4,
EHTokMin16float2x1,
EHTokMin16float2x2,
EHTokMin16float2x3,
EHTokMin16float2x4,
EHTokMin16float3x1,
EHTokMin16float3x2,
EHTokMin16float3x3,
EHTokMin16float3x4,
EHTokMin16float4x1,
EHTokMin16float4x2,
EHTokMin16float4x3,
EHTokMin16float4x4,
EHTokMin10float1x1,
EHTokMin10float1x2,
EHTokMin10float1x3,
EHTokMin10float1x4,
EHTokMin10float2x1,
EHTokMin10float2x2,
EHTokMin10float2x3,
EHTokMin10float2x4,
EHTokMin10float3x1,
EHTokMin10float3x2,
EHTokMin10float3x3,
EHTokMin10float3x4,
EHTokMin10float4x1,
EHTokMin10float4x2,
EHTokMin10float4x3,
EHTokMin10float4x4,
EHTokMin16int1x1,
EHTokMin16int1x2,
EHTokMin16int1x3,
EHTokMin16int1x4,
EHTokMin16int2x1,
EHTokMin16int2x2,
EHTokMin16int2x3,
EHTokMin16int2x4,
EHTokMin16int3x1,
EHTokMin16int3x2,
EHTokMin16int3x3,
EHTokMin16int3x4,
EHTokMin16int4x1,
EHTokMin16int4x2,
EHTokMin16int4x3,
EHTokMin16int4x4,
EHTokMin12int1x1,
EHTokMin12int1x2,
EHTokMin12int1x3,
EHTokMin12int1x4,
EHTokMin12int2x1,
EHTokMin12int2x2,
EHTokMin12int2x3,
EHTokMin12int2x4,
EHTokMin12int3x1,
EHTokMin12int3x2,
EHTokMin12int3x3,
EHTokMin12int3x4,
EHTokMin12int4x1,
EHTokMin12int4x2,
EHTokMin12int4x3,
EHTokMin12int4x4,
EHTokMin16uint1x1,
EHTokMin16uint1x2,
EHTokMin16uint1x3,
EHTokMin16uint1x4,
EHTokMin16uint2x1,
EHTokMin16uint2x2,
EHTokMin16uint2x3,
EHTokMin16uint2x4,
EHTokMin16uint3x1,
EHTokMin16uint3x2,
EHTokMin16uint3x3,
EHTokMin16uint3x4,
EHTokMin16uint4x1,
EHTokMin16uint4x2,
EHTokMin16uint4x3,
EHTokMin16uint4x4,
// texturing types
EHTokSampler,