Miscellaneous ES 3.1 semantics, and identification of all missing features.

git-svn-id: https://cvs.khronos.org/svn/repos/ogl/trunk/ecosystem/public/sdk/tools/glslang@27732 e7fa87d3-cd2b-0410-9028-fcbf551c1848
This commit is contained in:
John Kessenich 2014-08-14 07:07:21 +00:00
parent f014740066
commit b3007519fc
11 changed files with 210 additions and 14 deletions

View file

@ -1960,7 +1960,6 @@ void TParseContext::globalQualifierCheck(TSourceLoc loc, const TQualifier& quali
if (publicType.basicType == EbtBool) {
error(loc, "cannot be bool", GetStorageQualifierString(qualifier.storage), "");
return;
}
@ -2043,7 +2042,10 @@ void TParseContext::globalQualifierCheck(TSourceLoc loc, const TQualifier& quali
profileRequires(loc, EEsProfile, 300, 0, "fragment shader output");
if (publicType.basicType == EbtStruct) {
error(loc, "cannot be a structure", GetStorageQualifierString(qualifier.storage), "");
return;
}
if (publicType.matrixRows > 0) {
error(loc, "cannot be a matrix", GetStorageQualifierString(qualifier.storage), "");
return;
}
break;
@ -2157,6 +2159,13 @@ void TParseContext::setDefaultPrecision(TSourceLoc loc, TPublicType& publicType,
}
}
if (basicType == EbtAtomicUint) {
if (qualifier != EpqHigh)
error(loc, "can only apply highp to atomic_uint", "precision", "");
return;
}
error(loc, "cannot apply precision statement to this type; use 'float', 'int' or a sampler type", TType::getBasicString(basicType), "");
}
@ -3091,8 +3100,8 @@ void TParseContext::setLayoutQualifier(TSourceLoc loc, TPublicType& publicType,
return;
}
if (id == "early_fragment_tests") {
requireProfile(loc, ENoProfile | ECoreProfile | ECompatibilityProfile, "early_fragment_tests");
profileRequires(loc, ENoProfile | ECoreProfile | ECompatibilityProfile, 420, GL_ARB_shader_image_load_store, "early_fragment_tests");
profileRequires(loc, EEsProfile, 310, 0, "early_fragment_tests");
publicType.shaderQualifiers.earlyFragmentTests = true;
return;
}
@ -3393,6 +3402,11 @@ void TParseContext::layoutTypeCheck(TSourceLoc loc, const TType& type)
error(loc, "cannot apply to a matrix, structure, or block", "component", "");
}
if (qualifier.storage == EvqVaryingOut && language == EShLangFragment) {
if (qualifier.layoutLocation >= (unsigned int)resources.maxDrawBuffers)
error(loc, "too large for fragment output", "location", "");
}
switch (qualifier.storage) {
case EvqVaryingIn:
case EvqVaryingOut: