MCPcopy Create free account
hub / github.com/KhronosGroup/glslang / paramCheckFix

Method paramCheckFix

glslang/MachineIndependent/ParseHelper.cpp:6348–6391  ·  view source on GitHub ↗

Source from the content-addressed store, hash-verified

6346}
6347
6348void TParseContext::paramCheckFix(const TSourceLoc& loc, const TQualifier& qualifier, TType& type)
6349{
6350 if (qualifier.isMemory()) {
6351 type.getQualifier().volatil = qualifier.volatil;
6352 type.getQualifier().nontemporal = qualifier.nontemporal;
6353 type.getQualifier().coherent = qualifier.coherent;
6354 type.getQualifier().devicecoherent = qualifier.devicecoherent ;
6355 type.getQualifier().queuefamilycoherent = qualifier.queuefamilycoherent;
6356 type.getQualifier().workgroupcoherent = qualifier.workgroupcoherent;
6357 type.getQualifier().subgroupcoherent = qualifier.subgroupcoherent;
6358 type.getQualifier().shadercallcoherent = qualifier.shadercallcoherent;
6359 type.getQualifier().nonprivate = qualifier.nonprivate;
6360 type.getQualifier().readonly = qualifier.readonly;
6361 type.getQualifier().writeonly = qualifier.writeonly;
6362 type.getQualifier().restrict = qualifier.restrict;
6363 }
6364
6365 if (qualifier.isAuxiliary() ||
6366 qualifier.isInterpolation())
6367 error(loc, "cannot use auxiliary or interpolation qualifiers on a function parameter", "", "");
6368 if (qualifier.hasLayout())
6369 error(loc, "cannot use layout qualifiers on a function parameter", "", "");
6370 if (qualifier.invariant)
6371 error(loc, "cannot use invariant qualifier on a function parameter", "", "");
6372 if (qualifier.isNoContraction()) {
6373 if (qualifier.isParamOutput())
6374 type.getQualifier().setNoContraction();
6375 else
6376 warn(loc, "qualifier has no effect on non-output parameters", "precise", "");
6377 }
6378 if (qualifier.isNonUniform())
6379 type.getQualifier().nonUniform = qualifier.nonUniform;
6380 if (qualifier.isSpirvByReference())
6381 type.getQualifier().setSpirvByReference();
6382 if (qualifier.isSpirvLiteral()) {
6383 if (type.getBasicType() == EbtFloat || type.getBasicType() == EbtInt || type.getBasicType() == EbtUint ||
6384 type.getBasicType() == EbtBool)
6385 type.getQualifier().setSpirvLiteral();
6386 else
6387 error(loc, "cannot use spirv_literal qualifier", type.getBasicTypeString().c_str(), "");
6388 }
6389
6390 paramCheckFixStorage(loc, qualifier.storage, type);
6391}
6392
6393void TParseContext::nestedBlockCheck(const TSourceLoc& loc, const bool allowedInnerStruct)
6394{

Callers 1

yyparseFunction · 0.80

Calls 15

errorFunction · 0.85
isMemoryMethod · 0.80
isAuxiliaryMethod · 0.80
isInterpolationMethod · 0.80
hasLayoutMethod · 0.80
isNoContractionMethod · 0.80
isParamOutputMethod · 0.80
setNoContractionMethod · 0.80
isSpirvByReferenceMethod · 0.80
setSpirvByReferenceMethod · 0.80
isSpirvLiteralMethod · 0.80
setSpirvLiteralMethod · 0.80

Tested by

no test coverage detected