diff --git a/Test/120.frag b/Test/120.frag new file mode 100644 index 0000000000000000000000000000000000000000..98f5c1487b8558516aa070c8ab13fc65099ab52d --- /dev/null +++ b/Test/120.frag @@ -0,0 +1,14 @@ +#version 120 + +lowp vec3 a; +mediump float b; +highp int c; + +precision highp float; + +in vec4 i; +out vec4 o; + +void main() +{ +} diff --git a/Test/130.frag b/Test/130.frag new file mode 100644 index 0000000000000000000000000000000000000000..cd7aae3e2c7e73270507ad040452c9751973ab92 --- /dev/null +++ b/Test/130.frag @@ -0,0 +1,14 @@ +#version 130 + +lowp vec3 a; +mediump float b; +highp int c; + +precision highp float; + +in vec4 i; +out vec4 o; + +void main() +{ +} diff --git a/Test/pre150.frag b/Test/140.frag similarity index 54% rename from Test/pre150.frag rename to Test/140.frag index 31e758481ad0a05da723ddd2ce67e2a1b05f6e3f..045983d198fb52d4b6eed14a3e7a0f711808af89 100644 --- a/Test/pre150.frag +++ b/Test/140.frag @@ -1,3 +1,10 @@ +#version 140 + varying vec4 v; + in vec4 i; out vec4 o; + +void main() +{ +} diff --git a/Test/testlist b/Test/testlist index 208ca6832932469e5c3138d4b99567c4431a940e..e55cdd83089df37de88e0c5651104b7b37c2d203 100644 --- a/Test/testlist +++ b/Test/testlist @@ -6,4 +6,6 @@ versionsClean.frag versionsClean.vert versionsErrors.frag versionsErrors.vert -pre150.frag +120.frag +130.frag +140.frag diff --git a/glslang/MachineIndependent/Versions.cpp b/glslang/MachineIndependent/Versions.cpp index 0178ae6bfb44797a12a983e5717518c247734f59..1cee7b1c8aa8b24df4283c8291c05b3c4df3b3c9 100644 --- a/glslang/MachineIndependent/Versions.cpp +++ b/glslang/MachineIndependent/Versions.cpp @@ -88,7 +88,7 @@ void TParseContext::requireStage(int line, EShLanguageMask languageMask, const c // // Within a profile, if a feature requires a version level or extension, use -// ProfileRequires(). This only checks if the current profile matches +// ProfileRequires(). This only checks if the current profile matches // the passed-in profile. // @@ -137,7 +137,8 @@ void TParseContext::checkDeprecated(int line, EProfile callingProfile, int depVe error(line, "deprecated, may be removed in future release", featureDesc, ""); recover(); } else { - infoSink.info.message(EPrefixWarning, (TString(featureDesc) + " being used, but may be removed in future release").c_str(), line); + infoSink.info.message(EPrefixWarning, (TString(featureDesc) + " deprecated in version " + + String(depVersion) + "; may be removed in future release").c_str(), line); } } } diff --git a/glslang/MachineIndependent/glslang.y b/glslang/MachineIndependent/glslang.y index fc6ad8365146e5064eb4da21dff27650243111c3..3ccc5c02d9268d268a05021a44cf844ea85732b2 100644 --- a/glslang/MachineIndependent/glslang.y +++ b/glslang/MachineIndependent/glslang.y @@ -1121,6 +1121,7 @@ declaration $$ = $1.intermAggregate; } | PRECISION precision_qualifier type_specifier SEMICOLON { + parseContext.profileRequires($1.line, ENoProfile, 130, 0, "precision statement"); $$ = 0; } | type_qualifier IDENTIFIER LEFT_BRACE struct_declaration_list RIGHT_BRACE SEMICOLON { @@ -1641,15 +1642,19 @@ storage_qualifier $$.setBasic(EbtVoid, EvqConst, $1.line); } | ATTRIBUTE { - //parseContext.requireProfile($1.line, (EProfileMask)(ENoProfileMask | ECompatibilityProfileMask), "attribute"); parseContext.requireStage($1.line, EShLangVertexMask, "attribute"); + + parseContext.checkDeprecated($1.line, ENoProfile, 140, "attribute"); parseContext.requireNotRemoved($1.line, ECoreProfile, 420, "attribute"); + if (parseContext.globalErrorCheck($1.line, parseContext.symbolTable.atGlobalLevel(), "attribute")) parseContext.recover(); $$.setBasic(EbtVoid, EvqAttribute, $1.line); } | VARYING { + parseContext.checkDeprecated($1.line, ENoProfile, 140, "varying"); parseContext.requireNotRemoved($1.line, ECoreProfile, 420, "varying"); + if (parseContext.globalErrorCheck($1.line, parseContext.symbolTable.atGlobalLevel(), "varying")) parseContext.recover(); if (parseContext.language == EShLangVertex) @@ -2396,10 +2401,13 @@ type_specifier_nonarray precision_qualifier : HIGH_PRECISION { + parseContext.profileRequires($1.line, ENoProfile, 130, 0, "highp precision qualifier"); } | MEDIUM_PRECISION { + parseContext.profileRequires($1.line, ENoProfile, 130, 0, "mediump precision qualifier"); } | LOW_PRECISION { + parseContext.profileRequires($1.line, ENoProfile, 130, 0, "lowp precision qualifier"); } ;