GL_NV_integer_cooperative_matrix support

This commit is contained in:
Jeff Bolz 2019-08-22 20:28:00 -05:00
parent a3bc04b278
commit 387657e4cf
15 changed files with 3580 additions and 2797 deletions

View file

@ -1433,11 +1433,18 @@ public:
}
typeName = NewPoolTString(p.userDef->getTypeName().c_str());
}
if (p.isCoopmat() && p.basicType == EbtFloat &&
p.typeParameters && p.typeParameters->getNumDims() > 0 &&
p.typeParameters->getDimSize(0) == 16) {
basicType = EbtFloat16;
qualifier.precision = EpqNone;
if (p.isCoopmat() && p.typeParameters && p.typeParameters->getNumDims() > 0) {
int numBits = p.typeParameters->getDimSize(0);
if (p.basicType == EbtFloat && numBits == 16) {
basicType = EbtFloat16;
qualifier.precision = EpqNone;
} else if (p.basicType == EbtUint && numBits == 8) {
basicType = EbtUint8;
qualifier.precision = EpqNone;
} else if (p.basicType == EbtInt && numBits == 8) {
basicType = EbtInt8;
qualifier.precision = EpqNone;
}
}
}
// for construction of sampler types
@ -2301,10 +2308,24 @@ public:
// an OK function parameter
bool coopMatParameterOK(const TType& right) const
{
return isCoopMat() && right.isCoopMat() &&
return isCoopMat() && right.isCoopMat() && (getBasicType() == right.getBasicType()) &&
typeParameters == nullptr && right.typeParameters != nullptr;
}
bool sameCoopMatBaseType(const TType &right) const {
bool rv = coopmat && right.coopmat;
if (getBasicType() == EbtFloat || getBasicType() == EbtFloat16)
rv = right.getBasicType() == EbtFloat || right.getBasicType() == EbtFloat16;
else if (getBasicType() == EbtUint || getBasicType() == EbtUint8)
rv = right.getBasicType() == EbtUint || right.getBasicType() == EbtUint8;
else if (getBasicType() == EbtInt || getBasicType() == EbtInt8)
rv = right.getBasicType() == EbtInt || right.getBasicType() == EbtInt8;
else
rv = false;
return rv;
}
// See if two types match in all ways (just the actual type, not qualification)
bool operator==(const TType& right) const
{

View file

@ -4797,6 +4797,60 @@ void TBuiltIns::initialize(int version, EProfile profile, const SpvVersion& spvV
"void coopMatStoreNV(fcoopmatNV m, volatile coherent uvec4[] buf, uint element, uint stride, bool colMajor);\n"
"fcoopmatNV coopMatMulAddNV(fcoopmatNV A, fcoopmatNV B, fcoopmatNV C);\n"
"void coopMatLoadNV(out icoopmatNV m, volatile coherent int8_t[] buf, uint element, uint stride, bool colMajor);\n"
"void coopMatLoadNV(out icoopmatNV m, volatile coherent int16_t[] buf, uint element, uint stride, bool colMajor);\n"
"void coopMatLoadNV(out icoopmatNV m, volatile coherent int[] buf, uint element, uint stride, bool colMajor);\n"
"void coopMatLoadNV(out icoopmatNV m, volatile coherent int64_t[] buf, uint element, uint stride, bool colMajor);\n"
"void coopMatLoadNV(out icoopmatNV m, volatile coherent ivec2[] buf, uint element, uint stride, bool colMajor);\n"
"void coopMatLoadNV(out icoopmatNV m, volatile coherent ivec4[] buf, uint element, uint stride, bool colMajor);\n"
"void coopMatLoadNV(out icoopmatNV m, volatile coherent uint8_t[] buf, uint element, uint stride, bool colMajor);\n"
"void coopMatLoadNV(out icoopmatNV m, volatile coherent uint16_t[] buf, uint element, uint stride, bool colMajor);\n"
"void coopMatLoadNV(out icoopmatNV m, volatile coherent uint[] buf, uint element, uint stride, bool colMajor);\n"
"void coopMatLoadNV(out icoopmatNV m, volatile coherent uint64_t[] buf, uint element, uint stride, bool colMajor);\n"
"void coopMatLoadNV(out icoopmatNV m, volatile coherent uvec2[] buf, uint element, uint stride, bool colMajor);\n"
"void coopMatLoadNV(out icoopmatNV m, volatile coherent uvec4[] buf, uint element, uint stride, bool colMajor);\n"
"void coopMatLoadNV(out ucoopmatNV m, volatile coherent int8_t[] buf, uint element, uint stride, bool colMajor);\n"
"void coopMatLoadNV(out ucoopmatNV m, volatile coherent int16_t[] buf, uint element, uint stride, bool colMajor);\n"
"void coopMatLoadNV(out ucoopmatNV m, volatile coherent int[] buf, uint element, uint stride, bool colMajor);\n"
"void coopMatLoadNV(out ucoopmatNV m, volatile coherent int64_t[] buf, uint element, uint stride, bool colMajor);\n"
"void coopMatLoadNV(out ucoopmatNV m, volatile coherent ivec2[] buf, uint element, uint stride, bool colMajor);\n"
"void coopMatLoadNV(out ucoopmatNV m, volatile coherent ivec4[] buf, uint element, uint stride, bool colMajor);\n"
"void coopMatLoadNV(out ucoopmatNV m, volatile coherent uint8_t[] buf, uint element, uint stride, bool colMajor);\n"
"void coopMatLoadNV(out ucoopmatNV m, volatile coherent uint16_t[] buf, uint element, uint stride, bool colMajor);\n"
"void coopMatLoadNV(out ucoopmatNV m, volatile coherent uint[] buf, uint element, uint stride, bool colMajor);\n"
"void coopMatLoadNV(out ucoopmatNV m, volatile coherent uint64_t[] buf, uint element, uint stride, bool colMajor);\n"
"void coopMatLoadNV(out ucoopmatNV m, volatile coherent uvec2[] buf, uint element, uint stride, bool colMajor);\n"
"void coopMatLoadNV(out ucoopmatNV m, volatile coherent uvec4[] buf, uint element, uint stride, bool colMajor);\n"
"void coopMatStoreNV(icoopmatNV m, volatile coherent int8_t[] buf, uint element, uint stride, bool colMajor);\n"
"void coopMatStoreNV(icoopmatNV m, volatile coherent int16_t[] buf, uint element, uint stride, bool colMajor);\n"
"void coopMatStoreNV(icoopmatNV m, volatile coherent int[] buf, uint element, uint stride, bool colMajor);\n"
"void coopMatStoreNV(icoopmatNV m, volatile coherent int64_t[] buf, uint element, uint stride, bool colMajor);\n"
"void coopMatStoreNV(icoopmatNV m, volatile coherent ivec2[] buf, uint element, uint stride, bool colMajor);\n"
"void coopMatStoreNV(icoopmatNV m, volatile coherent ivec4[] buf, uint element, uint stride, bool colMajor);\n"
"void coopMatStoreNV(icoopmatNV m, volatile coherent uint8_t[] buf, uint element, uint stride, bool colMajor);\n"
"void coopMatStoreNV(icoopmatNV m, volatile coherent uint16_t[] buf, uint element, uint stride, bool colMajor);\n"
"void coopMatStoreNV(icoopmatNV m, volatile coherent uint[] buf, uint element, uint stride, bool colMajor);\n"
"void coopMatStoreNV(icoopmatNV m, volatile coherent uint64_t[] buf, uint element, uint stride, bool colMajor);\n"
"void coopMatStoreNV(icoopmatNV m, volatile coherent uvec2[] buf, uint element, uint stride, bool colMajor);\n"
"void coopMatStoreNV(icoopmatNV m, volatile coherent uvec4[] buf, uint element, uint stride, bool colMajor);\n"
"void coopMatStoreNV(ucoopmatNV m, volatile coherent int8_t[] buf, uint element, uint stride, bool colMajor);\n"
"void coopMatStoreNV(ucoopmatNV m, volatile coherent int16_t[] buf, uint element, uint stride, bool colMajor);\n"
"void coopMatStoreNV(ucoopmatNV m, volatile coherent int[] buf, uint element, uint stride, bool colMajor);\n"
"void coopMatStoreNV(ucoopmatNV m, volatile coherent int64_t[] buf, uint element, uint stride, bool colMajor);\n"
"void coopMatStoreNV(ucoopmatNV m, volatile coherent ivec2[] buf, uint element, uint stride, bool colMajor);\n"
"void coopMatStoreNV(ucoopmatNV m, volatile coherent ivec4[] buf, uint element, uint stride, bool colMajor);\n"
"void coopMatStoreNV(ucoopmatNV m, volatile coherent uint8_t[] buf, uint element, uint stride, bool colMajor);\n"
"void coopMatStoreNV(ucoopmatNV m, volatile coherent uint16_t[] buf, uint element, uint stride, bool colMajor);\n"
"void coopMatStoreNV(ucoopmatNV m, volatile coherent uint[] buf, uint element, uint stride, bool colMajor);\n"
"void coopMatStoreNV(ucoopmatNV m, volatile coherent uint64_t[] buf, uint element, uint stride, bool colMajor);\n"
"void coopMatStoreNV(ucoopmatNV m, volatile coherent uvec2[] buf, uint element, uint stride, bool colMajor);\n"
"void coopMatStoreNV(ucoopmatNV m, volatile coherent uvec4[] buf, uint element, uint stride, bool colMajor);\n"
"icoopmatNV coopMatMulAddNV(icoopmatNV A, icoopmatNV B, icoopmatNV C);\n"
"ucoopmatNV coopMatMulAddNV(ucoopmatNV A, ucoopmatNV B, ucoopmatNV C);\n"
);
}
@ -8527,9 +8581,12 @@ void TBuiltIns::identifyBuiltIns(int version, EProfile profile, const SpvVersion
symbolTable.setFunctionExtensions("subgroupMemoryBarrierShared", 1, &E_GL_KHR_shader_subgroup_basic);
}
symbolTable.setFunctionExtensions("coopMatLoadNV", 1, &E_GL_NV_cooperative_matrix);
symbolTable.setFunctionExtensions("coopMatStoreNV", 1, &E_GL_NV_cooperative_matrix);
symbolTable.setFunctionExtensions("coopMatMulAddNV", 1, &E_GL_NV_cooperative_matrix);
{
const char *coopExt[2] = { E_GL_NV_cooperative_matrix, E_GL_NV_integer_cooperative_matrix };
symbolTable.setFunctionExtensions("coopMatLoadNV", 2, coopExt);
symbolTable.setFunctionExtensions("coopMatStoreNV", 2, coopExt);
symbolTable.setFunctionExtensions("coopMatMulAddNV", 2, coopExt);
}
if ((profile != EEsProfile && version >= 450) || (profile == EEsProfile && version >= 320)) {
symbolTable.setFunctionExtensions("dFdx", 1, &E_GL_NV_compute_shader_derivatives);

View file

@ -6192,6 +6192,8 @@ const TFunction* TParseContext::findFunction400(const TSourceLoc& loc, const TFu
}
if (from.isArray() || to.isArray() || ! from.sameElementShape(to))
return false;
if (from.isCoopMat() && to.isCoopMat())
return from.sameCoopMatBaseType(to);
return intermediate.canImplicitlyPromote(from.getBasicType(), to.getBasicType());
};
@ -6266,6 +6268,8 @@ const TFunction* TParseContext::findFunctionExplicitTypes(const TSourceLoc& loc,
}
if (from.isArray() || to.isArray() || ! from.sameElementShape(to))
return false;
if (from.isCoopMat() && to.isCoopMat())
return from.sameCoopMatBaseType(to);
return intermediate.canImplicitlyPromote(from.getBasicType(), to.getBasicType());
};
@ -6365,12 +6369,20 @@ TIntermNode* TParseContext::declareVariable(const TSourceLoc& loc, TString& iden
if (!publicType.typeParameters || publicType.typeParameters->getNumDims() != 4) {
error(loc, "expected four type parameters", identifier.c_str(), "");
}
if (publicType.typeParameters &&
publicType.typeParameters->getDimSize(0) != 16 &&
publicType.typeParameters->getDimSize(0) != 32 &&
publicType.typeParameters->getDimSize(0) != 64) {
error(loc, "expected 16, 32, or 64 bits for first type parameter", identifier.c_str(), "");
if (publicType.typeParameters) {
if (isTypeFloat(publicType.basicType) &&
publicType.typeParameters->getDimSize(0) != 16 &&
publicType.typeParameters->getDimSize(0) != 32 &&
publicType.typeParameters->getDimSize(0) != 64) {
error(loc, "expected 16, 32, or 64 bits for first type parameter", identifier.c_str(), "");
}
if (isTypeInt(publicType.basicType) &&
publicType.typeParameters->getDimSize(0) != 8 &&
publicType.typeParameters->getDimSize(0) != 32) {
error(loc, "expected 8 or 32 bits for first type parameter", identifier.c_str(), "");
}
}
} else {
if (publicType.typeParameters && publicType.typeParameters->getNumDims() != 0) {
error(loc, "unexpected type parameters", identifier.c_str(), "");
@ -7065,19 +7077,90 @@ TIntermTyped* TParseContext::constructBuiltIn(const TType& type, TOperator op, T
}
node = intermediate.setAggregateOperator(node, EOpConstructCooperativeMatrix, type, node->getLoc());
} else {
TOperator op;
switch (type.getBasicType()) {
default:
assert(0);
break;
case EbtInt:
{
switch (node->getType().getBasicType()) {
case EbtFloat: op = EOpConvFloatToInt; break;
case EbtFloat16: op = EOpConvFloat16ToInt; break;
case EbtUint8: op = EOpConvUint8ToInt; break;
case EbtInt8: op = EOpConvInt8ToInt; break;
case EbtUint: op = EOpConvUintToInt; break;
default: assert(0);
}
}
break;
case EbtUint:
{
switch (node->getType().getBasicType()) {
case EbtFloat: op = EOpConvFloatToUint; break;
case EbtFloat16: op = EOpConvFloat16ToUint; break;
case EbtUint8: op = EOpConvUint8ToUint; break;
case EbtInt8: op = EOpConvInt8ToUint; break;
case EbtInt: op = EOpConvIntToUint; break;
case EbtUint: op = EOpConvUintToInt8; break;
default: assert(0);
}
}
break;
case EbtInt8:
{
switch (node->getType().getBasicType()) {
case EbtFloat: op = EOpConvFloatToInt8; break;
case EbtFloat16: op = EOpConvFloat16ToInt8; break;
case EbtUint8: op = EOpConvUint8ToInt8; break;
case EbtInt: op = EOpConvIntToInt8; break;
case EbtUint: op = EOpConvUintToInt8; break;
default: assert(0);
}
}
break;
case EbtUint8: {
switch (node->getType().getBasicType()) {
case EbtFloat: op = EOpConvFloatToUint8; break;
case EbtFloat16: op = EOpConvFloat16ToUint8; break;
case EbtInt8: op = EOpConvInt8ToUint8; break;
case EbtInt: op = EOpConvIntToUint8; break;
case EbtUint: op = EOpConvUintToUint8; break;
default: assert(0);
}
}
break;
case EbtFloat:
assert(node->getType().getBasicType() == EbtFloat16);
node = intermediate.addUnaryNode(EOpConvFloat16ToFloat, node, node->getLoc(), type);
{
switch (node->getType().getBasicType()) {
case EbtFloat16: op = EOpConvFloat16ToFloat; break;
case EbtInt8: op = EOpConvInt8ToFloat; break;
case EbtUint8: op = EOpConvUint8ToFloat; break;
case EbtInt: op = EOpConvIntToFloat; break;
case EbtUint: op = EOpConvUintToFloat; break;
default: assert(0);
}
}
break;
case EbtFloat16:
assert(node->getType().getBasicType() == EbtFloat);
node = intermediate.addUnaryNode(EOpConvFloatToFloat16, node, node->getLoc(), type);
{
switch (node->getType().getBasicType()) {
case EbtFloat: op = EOpConvFloatToFloat16; break;
case EbtInt8: op = EOpConvInt8ToFloat16; break;
case EbtUint8: op = EOpConvUint8ToFloat16; break;
case EbtInt: op = EOpConvIntToFloat16; break;
case EbtUint: op = EOpConvUintToFloat16; break;
default: assert(0);
}
}
break;
}
node = intermediate.addUnaryNode(op, node, node->getLoc(), type);
// If it's a (non-specialization) constant, it must be folded.
if (node->getAsUnaryNode()->getOperand()->getAsConstantUnion())
return node->getAsUnaryNode()->getOperand()->getAsConstantUnion()->fold(op, node->getType());

View file

@ -713,6 +713,8 @@ void TScanContext::fillInKeywordMap()
(*KeywordMap)["taskNV"] = PERTASKNV;
(*KeywordMap)["fcoopmatNV"] = FCOOPMATNV;
(*KeywordMap)["icoopmatNV"] = ICOOPMATNV;
(*KeywordMap)["ucoopmatNV"] = UCOOPMATNV;
ReservedSet = new std::unordered_set<const char*, str_hash, str_eq>;
@ -1599,6 +1601,14 @@ int TScanContext::tokenizeIdentifier()
return keyword;
return identifierOrType();
case UCOOPMATNV:
case ICOOPMATNV:
afterType = true;
if (parseContext.symbolTable.atBuiltInLevel() ||
parseContext.extensionTurnedOn(E_GL_NV_integer_cooperative_matrix))
return keyword;
return identifierOrType();
case DEMOTE:
if (parseContext.extensionTurnedOn(E_GL_EXT_demote_to_helper_invocation))
return keyword;

View file

@ -252,6 +252,7 @@ void TParseVersions::initializeExtensionBehavior()
extensionBehavior[E_GL_NV_cooperative_matrix] = EBhDisable;
extensionBehavior[E_GL_NV_shader_sm_builtins] = EBhDisable;
extensionBehavior[E_GL_NV_integer_cooperative_matrix] = EBhDisable;
// AEP
extensionBehavior[E_GL_ANDROID_extension_pack_es31a] = EBhDisable;
@ -436,6 +437,7 @@ void TParseVersions::getPreamble(std::string& preamble)
"#define GL_NV_shader_texture_footprint 1\n"
"#define GL_NV_mesh_shader 1\n"
"#define GL_NV_cooperative_matrix 1\n"
"#define GL_NV_integer_cooperative_matrix 1\n"
"#define GL_EXT_shader_explicit_arithmetic_types 1\n"
"#define GL_EXT_shader_explicit_arithmetic_types_int8 1\n"
@ -822,6 +824,8 @@ void TParseVersions::updateExtensionBehavior(int line, const char* extension, co
updateExtensionBehavior(line, "GL_KHR_shader_subgroup_basic", behaviorString);
else if (strcmp(extension, "GL_EXT_buffer_reference2") == 0)
updateExtensionBehavior(line, "GL_EXT_buffer_reference", behaviorString);
else if (strcmp(extension, "GL_NV_integer_cooperative_matrix") == 0)
updateExtensionBehavior(line, "GL_NV_cooperative_matrix", behaviorString);
}
void TParseVersions::updateExtensionBehavior(const char* extension, TExtensionBehavior behavior)
@ -1088,8 +1092,15 @@ void TParseVersions::fcoopmatCheck(const TSourceLoc& loc, const char* op, bool b
requireExtensions(loc, sizeof(extensions)/sizeof(extensions[0]), extensions, op);
}
}
#endif // GLSLANG_WEB
void TParseVersions::intcoopmatCheck(const TSourceLoc& loc, const char* op, bool builtIn)
{
if (!builtIn) {
const char* const extensions[] = {E_GL_NV_integer_cooperative_matrix};
requireExtensions(loc, sizeof(extensions)/sizeof(extensions[0]), extensions, op);
}
}
#endif // GLSLANG_WEB
// Call for any operation removed because SPIR-V is in use.
void TParseVersions::spvRemoved(const TSourceLoc& loc, const char* op)
{

View file

@ -227,6 +227,7 @@ const int Num_viewportEXTs = sizeof(viewportEXTs) / sizeof(viewportEXTs[0]);
const char* const E_GL_NV_cooperative_matrix = "GL_NV_cooperative_matrix";
const char* const E_GL_NV_shader_sm_builtins = "GL_NV_shader_sm_builtins";
const char* const E_GL_NV_integer_cooperative_matrix = "GL_NV_integer_cooperative_matrix";
// AEP
const char* const E_GL_ANDROID_extension_pack_es31a = "GL_ANDROID_extension_pack_es31a";

View file

@ -200,7 +200,7 @@ GLSLANG_WEB_EXCLUDE_ON
%token <lex> F64MAT4X2 F64MAT4X3 F64MAT4X4
%token <lex> ATOMIC_UINT
%token <lex> ACCSTRUCTNV
%token <lex> FCOOPMATNV
%token <lex> FCOOPMATNV ICOOPMATNV UCOOPMATNV
// combined image/sampler
%token <lex> SAMPLER1D SAMPLER1DARRAY SAMPLER1DARRAYSHADOW ISAMPLER1D SAMPLER1DSHADOW
@ -3183,6 +3183,18 @@ GLSLANG_WEB_EXCLUDE_ON
$$.basicType = EbtFloat;
$$.coopmat = true;
}
| ICOOPMATNV {
parseContext.intcoopmatCheck($1.loc, "icoopmatNV", parseContext.symbolTable.atBuiltInLevel());
$$.init($1.loc, parseContext.symbolTable.atGlobalLevel());
$$.basicType = EbtInt;
$$.coopmat = true;
}
| UCOOPMATNV {
parseContext.intcoopmatCheck($1.loc, "ucoopmatNV", parseContext.symbolTable.atBuiltInLevel());
$$.init($1.loc, parseContext.symbolTable.atGlobalLevel());
$$.basicType = EbtUint;
$$.coopmat = true;
}
GLSLANG_WEB_EXCLUDE_OFF
| struct_specifier {
$$ = $1;

View file

@ -200,7 +200,7 @@ extern int yylex(YYSTYPE*, TParseContext&);
%token <lex> F64MAT4X2 F64MAT4X3 F64MAT4X4
%token <lex> ATOMIC_UINT
%token <lex> ACCSTRUCTNV
%token <lex> FCOOPMATNV
%token <lex> FCOOPMATNV ICOOPMATNV UCOOPMATNV
// combined image/sampler
%token <lex> SAMPLER1D SAMPLER1DARRAY SAMPLER1DARRAYSHADOW ISAMPLER1D SAMPLER1DSHADOW
@ -3183,6 +3183,18 @@ type_specifier_nonarray
$$.basicType = EbtFloat;
$$.coopmat = true;
}
| ICOOPMATNV {
parseContext.intcoopmatCheck($1.loc, "icoopmatNV", parseContext.symbolTable.atBuiltInLevel());
$$.init($1.loc, parseContext.symbolTable.atGlobalLevel());
$$.basicType = EbtInt;
$$.coopmat = true;
}
| UCOOPMATNV {
parseContext.intcoopmatCheck($1.loc, "ucoopmatNV", parseContext.symbolTable.atBuiltInLevel());
$$.init($1.loc, parseContext.symbolTable.atGlobalLevel());
$$.basicType = EbtUint;
$$.coopmat = true;
}
| struct_specifier {
$$ = $1;

File diff suppressed because it is too large Load diff

View file

@ -194,263 +194,265 @@ extern int yydebug;
ATOMIC_UINT = 404,
ACCSTRUCTNV = 405,
FCOOPMATNV = 406,
SAMPLER1D = 407,
SAMPLER1DARRAY = 408,
SAMPLER1DARRAYSHADOW = 409,
ISAMPLER1D = 410,
SAMPLER1DSHADOW = 411,
SAMPLER2DRECT = 412,
SAMPLER2DRECTSHADOW = 413,
ISAMPLER2DRECT = 414,
USAMPLER2DRECT = 415,
SAMPLERBUFFER = 416,
ISAMPLERBUFFER = 417,
USAMPLERBUFFER = 418,
SAMPLER2DMS = 419,
ISAMPLER2DMS = 420,
USAMPLER2DMS = 421,
SAMPLER2DMSARRAY = 422,
ISAMPLER2DMSARRAY = 423,
USAMPLER2DMSARRAY = 424,
SAMPLEREXTERNALOES = 425,
SAMPLEREXTERNAL2DY2YEXT = 426,
ISAMPLER1DARRAY = 427,
USAMPLER1D = 428,
USAMPLER1DARRAY = 429,
F16SAMPLER1D = 430,
F16SAMPLER2D = 431,
F16SAMPLER3D = 432,
F16SAMPLER2DRECT = 433,
F16SAMPLERCUBE = 434,
F16SAMPLER1DARRAY = 435,
F16SAMPLER2DARRAY = 436,
F16SAMPLERCUBEARRAY = 437,
F16SAMPLERBUFFER = 438,
F16SAMPLER2DMS = 439,
F16SAMPLER2DMSARRAY = 440,
F16SAMPLER1DSHADOW = 441,
F16SAMPLER2DSHADOW = 442,
F16SAMPLER1DARRAYSHADOW = 443,
F16SAMPLER2DARRAYSHADOW = 444,
F16SAMPLER2DRECTSHADOW = 445,
F16SAMPLERCUBESHADOW = 446,
F16SAMPLERCUBEARRAYSHADOW = 447,
IMAGE1D = 448,
IIMAGE1D = 449,
UIMAGE1D = 450,
IMAGE2D = 451,
IIMAGE2D = 452,
UIMAGE2D = 453,
IMAGE3D = 454,
IIMAGE3D = 455,
UIMAGE3D = 456,
IMAGE2DRECT = 457,
IIMAGE2DRECT = 458,
UIMAGE2DRECT = 459,
IMAGECUBE = 460,
IIMAGECUBE = 461,
UIMAGECUBE = 462,
IMAGEBUFFER = 463,
IIMAGEBUFFER = 464,
UIMAGEBUFFER = 465,
IMAGE1DARRAY = 466,
IIMAGE1DARRAY = 467,
UIMAGE1DARRAY = 468,
IMAGE2DARRAY = 469,
IIMAGE2DARRAY = 470,
UIMAGE2DARRAY = 471,
IMAGECUBEARRAY = 472,
IIMAGECUBEARRAY = 473,
UIMAGECUBEARRAY = 474,
IMAGE2DMS = 475,
IIMAGE2DMS = 476,
UIMAGE2DMS = 477,
IMAGE2DMSARRAY = 478,
IIMAGE2DMSARRAY = 479,
UIMAGE2DMSARRAY = 480,
F16IMAGE1D = 481,
F16IMAGE2D = 482,
F16IMAGE3D = 483,
F16IMAGE2DRECT = 484,
F16IMAGECUBE = 485,
F16IMAGE1DARRAY = 486,
F16IMAGE2DARRAY = 487,
F16IMAGECUBEARRAY = 488,
F16IMAGEBUFFER = 489,
F16IMAGE2DMS = 490,
F16IMAGE2DMSARRAY = 491,
SAMPLER = 492,
SAMPLERSHADOW = 493,
TEXTURE1D = 494,
TEXTURE2D = 495,
TEXTURE3D = 496,
TEXTURECUBE = 497,
TEXTURE1DARRAY = 498,
TEXTURE2DARRAY = 499,
ITEXTURE1D = 500,
ITEXTURE2D = 501,
ITEXTURE3D = 502,
ITEXTURECUBE = 503,
ITEXTURE1DARRAY = 504,
ITEXTURE2DARRAY = 505,
UTEXTURE1D = 506,
UTEXTURE2D = 507,
UTEXTURE3D = 508,
UTEXTURECUBE = 509,
UTEXTURE1DARRAY = 510,
UTEXTURE2DARRAY = 511,
TEXTURE2DRECT = 512,
ITEXTURE2DRECT = 513,
UTEXTURE2DRECT = 514,
TEXTUREBUFFER = 515,
ITEXTUREBUFFER = 516,
UTEXTUREBUFFER = 517,
TEXTURECUBEARRAY = 518,
ITEXTURECUBEARRAY = 519,
UTEXTURECUBEARRAY = 520,
TEXTURE2DMS = 521,
ITEXTURE2DMS = 522,
UTEXTURE2DMS = 523,
TEXTURE2DMSARRAY = 524,
ITEXTURE2DMSARRAY = 525,
UTEXTURE2DMSARRAY = 526,
F16TEXTURE1D = 527,
F16TEXTURE2D = 528,
F16TEXTURE3D = 529,
F16TEXTURE2DRECT = 530,
F16TEXTURECUBE = 531,
F16TEXTURE1DARRAY = 532,
F16TEXTURE2DARRAY = 533,
F16TEXTURECUBEARRAY = 534,
F16TEXTUREBUFFER = 535,
F16TEXTURE2DMS = 536,
F16TEXTURE2DMSARRAY = 537,
SUBPASSINPUT = 538,
SUBPASSINPUTMS = 539,
ISUBPASSINPUT = 540,
ISUBPASSINPUTMS = 541,
USUBPASSINPUT = 542,
USUBPASSINPUTMS = 543,
F16SUBPASSINPUT = 544,
F16SUBPASSINPUTMS = 545,
LEFT_OP = 546,
RIGHT_OP = 547,
INC_OP = 548,
DEC_OP = 549,
LE_OP = 550,
GE_OP = 551,
EQ_OP = 552,
NE_OP = 553,
AND_OP = 554,
OR_OP = 555,
XOR_OP = 556,
MUL_ASSIGN = 557,
DIV_ASSIGN = 558,
ADD_ASSIGN = 559,
MOD_ASSIGN = 560,
LEFT_ASSIGN = 561,
RIGHT_ASSIGN = 562,
AND_ASSIGN = 563,
XOR_ASSIGN = 564,
OR_ASSIGN = 565,
SUB_ASSIGN = 566,
LEFT_PAREN = 567,
RIGHT_PAREN = 568,
LEFT_BRACKET = 569,
RIGHT_BRACKET = 570,
LEFT_BRACE = 571,
RIGHT_BRACE = 572,
DOT = 573,
COMMA = 574,
COLON = 575,
EQUAL = 576,
SEMICOLON = 577,
BANG = 578,
DASH = 579,
TILDE = 580,
PLUS = 581,
STAR = 582,
SLASH = 583,
PERCENT = 584,
LEFT_ANGLE = 585,
RIGHT_ANGLE = 586,
VERTICAL_BAR = 587,
CARET = 588,
AMPERSAND = 589,
QUESTION = 590,
INVARIANT = 591,
HIGH_PRECISION = 592,
MEDIUM_PRECISION = 593,
LOW_PRECISION = 594,
PRECISION = 595,
PACKED = 596,
RESOURCE = 597,
SUPERP = 598,
FLOATCONSTANT = 599,
INTCONSTANT = 600,
UINTCONSTANT = 601,
BOOLCONSTANT = 602,
IDENTIFIER = 603,
TYPE_NAME = 604,
CENTROID = 605,
IN = 606,
OUT = 607,
INOUT = 608,
STRUCT = 609,
VOID = 610,
WHILE = 611,
BREAK = 612,
CONTINUE = 613,
DO = 614,
ELSE = 615,
FOR = 616,
IF = 617,
DISCARD = 618,
RETURN = 619,
SWITCH = 620,
CASE = 621,
DEFAULT = 622,
UNIFORM = 623,
SHARED = 624,
FLAT = 625,
SMOOTH = 626,
LAYOUT = 627,
DOUBLECONSTANT = 628,
INT16CONSTANT = 629,
UINT16CONSTANT = 630,
FLOAT16CONSTANT = 631,
INT32CONSTANT = 632,
UINT32CONSTANT = 633,
INT64CONSTANT = 634,
UINT64CONSTANT = 635,
SUBROUTINE = 636,
DEMOTE = 637,
PAYLOADNV = 638,
PAYLOADINNV = 639,
HITATTRNV = 640,
CALLDATANV = 641,
CALLDATAINNV = 642,
PATCH = 643,
SAMPLE = 644,
BUFFER = 645,
NONUNIFORM = 646,
COHERENT = 647,
VOLATILE = 648,
RESTRICT = 649,
READONLY = 650,
WRITEONLY = 651,
DEVICECOHERENT = 652,
QUEUEFAMILYCOHERENT = 653,
WORKGROUPCOHERENT = 654,
SUBGROUPCOHERENT = 655,
NONPRIVATE = 656,
NOPERSPECTIVE = 657,
EXPLICITINTERPAMD = 658,
PERVERTEXNV = 659,
PERPRIMITIVENV = 660,
PERVIEWNV = 661,
PERTASKNV = 662,
PRECISE = 663
ICOOPMATNV = 407,
UCOOPMATNV = 408,
SAMPLER1D = 409,
SAMPLER1DARRAY = 410,
SAMPLER1DARRAYSHADOW = 411,
ISAMPLER1D = 412,
SAMPLER1DSHADOW = 413,
SAMPLER2DRECT = 414,
SAMPLER2DRECTSHADOW = 415,
ISAMPLER2DRECT = 416,
USAMPLER2DRECT = 417,
SAMPLERBUFFER = 418,
ISAMPLERBUFFER = 419,
USAMPLERBUFFER = 420,
SAMPLER2DMS = 421,
ISAMPLER2DMS = 422,
USAMPLER2DMS = 423,
SAMPLER2DMSARRAY = 424,
ISAMPLER2DMSARRAY = 425,
USAMPLER2DMSARRAY = 426,
SAMPLEREXTERNALOES = 427,
SAMPLEREXTERNAL2DY2YEXT = 428,
ISAMPLER1DARRAY = 429,
USAMPLER1D = 430,
USAMPLER1DARRAY = 431,
F16SAMPLER1D = 432,
F16SAMPLER2D = 433,
F16SAMPLER3D = 434,
F16SAMPLER2DRECT = 435,
F16SAMPLERCUBE = 436,
F16SAMPLER1DARRAY = 437,
F16SAMPLER2DARRAY = 438,
F16SAMPLERCUBEARRAY = 439,
F16SAMPLERBUFFER = 440,
F16SAMPLER2DMS = 441,
F16SAMPLER2DMSARRAY = 442,
F16SAMPLER1DSHADOW = 443,
F16SAMPLER2DSHADOW = 444,
F16SAMPLER1DARRAYSHADOW = 445,
F16SAMPLER2DARRAYSHADOW = 446,
F16SAMPLER2DRECTSHADOW = 447,
F16SAMPLERCUBESHADOW = 448,
F16SAMPLERCUBEARRAYSHADOW = 449,
IMAGE1D = 450,
IIMAGE1D = 451,
UIMAGE1D = 452,
IMAGE2D = 453,
IIMAGE2D = 454,
UIMAGE2D = 455,
IMAGE3D = 456,
IIMAGE3D = 457,
UIMAGE3D = 458,
IMAGE2DRECT = 459,
IIMAGE2DRECT = 460,
UIMAGE2DRECT = 461,
IMAGECUBE = 462,
IIMAGECUBE = 463,
UIMAGECUBE = 464,
IMAGEBUFFER = 465,
IIMAGEBUFFER = 466,
UIMAGEBUFFER = 467,
IMAGE1DARRAY = 468,
IIMAGE1DARRAY = 469,
UIMAGE1DARRAY = 470,
IMAGE2DARRAY = 471,
IIMAGE2DARRAY = 472,
UIMAGE2DARRAY = 473,
IMAGECUBEARRAY = 474,
IIMAGECUBEARRAY = 475,
UIMAGECUBEARRAY = 476,
IMAGE2DMS = 477,
IIMAGE2DMS = 478,
UIMAGE2DMS = 479,
IMAGE2DMSARRAY = 480,
IIMAGE2DMSARRAY = 481,
UIMAGE2DMSARRAY = 482,
F16IMAGE1D = 483,
F16IMAGE2D = 484,
F16IMAGE3D = 485,
F16IMAGE2DRECT = 486,
F16IMAGECUBE = 487,
F16IMAGE1DARRAY = 488,
F16IMAGE2DARRAY = 489,
F16IMAGECUBEARRAY = 490,
F16IMAGEBUFFER = 491,
F16IMAGE2DMS = 492,
F16IMAGE2DMSARRAY = 493,
SAMPLER = 494,
SAMPLERSHADOW = 495,
TEXTURE1D = 496,
TEXTURE2D = 497,
TEXTURE3D = 498,
TEXTURECUBE = 499,
TEXTURE1DARRAY = 500,
TEXTURE2DARRAY = 501,
ITEXTURE1D = 502,
ITEXTURE2D = 503,
ITEXTURE3D = 504,
ITEXTURECUBE = 505,
ITEXTURE1DARRAY = 506,
ITEXTURE2DARRAY = 507,
UTEXTURE1D = 508,
UTEXTURE2D = 509,
UTEXTURE3D = 510,
UTEXTURECUBE = 511,
UTEXTURE1DARRAY = 512,
UTEXTURE2DARRAY = 513,
TEXTURE2DRECT = 514,
ITEXTURE2DRECT = 515,
UTEXTURE2DRECT = 516,
TEXTUREBUFFER = 517,
ITEXTUREBUFFER = 518,
UTEXTUREBUFFER = 519,
TEXTURECUBEARRAY = 520,
ITEXTURECUBEARRAY = 521,
UTEXTURECUBEARRAY = 522,
TEXTURE2DMS = 523,
ITEXTURE2DMS = 524,
UTEXTURE2DMS = 525,
TEXTURE2DMSARRAY = 526,
ITEXTURE2DMSARRAY = 527,
UTEXTURE2DMSARRAY = 528,
F16TEXTURE1D = 529,
F16TEXTURE2D = 530,
F16TEXTURE3D = 531,
F16TEXTURE2DRECT = 532,
F16TEXTURECUBE = 533,
F16TEXTURE1DARRAY = 534,
F16TEXTURE2DARRAY = 535,
F16TEXTURECUBEARRAY = 536,
F16TEXTUREBUFFER = 537,
F16TEXTURE2DMS = 538,
F16TEXTURE2DMSARRAY = 539,
SUBPASSINPUT = 540,
SUBPASSINPUTMS = 541,
ISUBPASSINPUT = 542,
ISUBPASSINPUTMS = 543,
USUBPASSINPUT = 544,
USUBPASSINPUTMS = 545,
F16SUBPASSINPUT = 546,
F16SUBPASSINPUTMS = 547,
LEFT_OP = 548,
RIGHT_OP = 549,
INC_OP = 550,
DEC_OP = 551,
LE_OP = 552,
GE_OP = 553,
EQ_OP = 554,
NE_OP = 555,
AND_OP = 556,
OR_OP = 557,
XOR_OP = 558,
MUL_ASSIGN = 559,
DIV_ASSIGN = 560,
ADD_ASSIGN = 561,
MOD_ASSIGN = 562,
LEFT_ASSIGN = 563,
RIGHT_ASSIGN = 564,
AND_ASSIGN = 565,
XOR_ASSIGN = 566,
OR_ASSIGN = 567,
SUB_ASSIGN = 568,
LEFT_PAREN = 569,
RIGHT_PAREN = 570,
LEFT_BRACKET = 571,
RIGHT_BRACKET = 572,
LEFT_BRACE = 573,
RIGHT_BRACE = 574,
DOT = 575,
COMMA = 576,
COLON = 577,
EQUAL = 578,
SEMICOLON = 579,
BANG = 580,
DASH = 581,
TILDE = 582,
PLUS = 583,
STAR = 584,
SLASH = 585,
PERCENT = 586,
LEFT_ANGLE = 587,
RIGHT_ANGLE = 588,
VERTICAL_BAR = 589,
CARET = 590,
AMPERSAND = 591,
QUESTION = 592,
INVARIANT = 593,
HIGH_PRECISION = 594,
MEDIUM_PRECISION = 595,
LOW_PRECISION = 596,
PRECISION = 597,
PACKED = 598,
RESOURCE = 599,
SUPERP = 600,
FLOATCONSTANT = 601,
INTCONSTANT = 602,
UINTCONSTANT = 603,
BOOLCONSTANT = 604,
IDENTIFIER = 605,
TYPE_NAME = 606,
CENTROID = 607,
IN = 608,
OUT = 609,
INOUT = 610,
STRUCT = 611,
VOID = 612,
WHILE = 613,
BREAK = 614,
CONTINUE = 615,
DO = 616,
ELSE = 617,
FOR = 618,
IF = 619,
DISCARD = 620,
RETURN = 621,
SWITCH = 622,
CASE = 623,
DEFAULT = 624,
UNIFORM = 625,
SHARED = 626,
FLAT = 627,
SMOOTH = 628,
LAYOUT = 629,
DOUBLECONSTANT = 630,
INT16CONSTANT = 631,
UINT16CONSTANT = 632,
FLOAT16CONSTANT = 633,
INT32CONSTANT = 634,
UINT32CONSTANT = 635,
INT64CONSTANT = 636,
UINT64CONSTANT = 637,
SUBROUTINE = 638,
DEMOTE = 639,
PAYLOADNV = 640,
PAYLOADINNV = 641,
HITATTRNV = 642,
CALLDATANV = 643,
CALLDATAINNV = 644,
PATCH = 645,
SAMPLE = 646,
BUFFER = 647,
NONUNIFORM = 648,
COHERENT = 649,
VOLATILE = 650,
RESTRICT = 651,
READONLY = 652,
WRITEONLY = 653,
DEVICECOHERENT = 654,
QUEUEFAMILYCOHERENT = 655,
WORKGROUPCOHERENT = 656,
SUBGROUPCOHERENT = 657,
NONPRIVATE = 658,
NOPERSPECTIVE = 659,
EXPLICITINTERPAMD = 660,
PERVERTEXNV = 661,
PERPRIMITIVENV = 662,
PERVIEWNV = 663,
PERTASKNV = 664,
PRECISE = 665
};
#endif
@ -495,7 +497,7 @@ union YYSTYPE
glslang::TArraySizes* typeParameters;
} interm;
#line 499 "MachineIndependent/glslang_tab.cpp.h" /* yacc.c:1909 */
#line 501 "MachineIndependent/glslang_tab.cpp.h" /* yacc.c:1909 */
};
typedef union YYSTYPE YYSTYPE;

View file

@ -161,6 +161,7 @@ public:
virtual void explicitFloat32Check(const TSourceLoc&, const char* op, bool builtIn = false);
virtual void explicitFloat64Check(const TSourceLoc&, const char* op, bool builtIn = false);
virtual void fcoopmatCheck(const TSourceLoc&, const char* op, bool builtIn = false);
virtual void intcoopmatCheck(const TSourceLoc&, const char *op, bool builtIn = false);
bool relaxedErrors() const { return (messages & EShMsgRelaxedErrors) != 0; }
bool suppressWarnings() const { return (messages & EShMsgSuppressWarnings) != 0; }
bool isForwardCompatible() const { return forwardCompatible; }