From 564842b23b1396c3450da17794b5a471dbe5fffd Mon Sep 17 00:00:00 2001 From: John Kessenich Date: Thu, 10 Jan 2013 18:20:47 +0000 Subject: [PATCH] Properly declare versions for precision qualifiers, in/out/attribute/varying. git-svn-id: https://cvs.khronos.org/svn/repos/ogl/trunk/ecosystem/public/sdk/tools/glslang@20083 e7fa87d3-cd2b-0410-9028-fcbf551c1848 --- Test/120.frag | 14 ++++++++++++++ Test/130.frag | 14 ++++++++++++++ Test/{pre150.frag => 140.frag} | 7 +++++++ Test/testlist | 4 +++- glslang/MachineIndependent/Versions.cpp | 5 +++-- glslang/MachineIndependent/glslang.y | 10 +++++++++- 6 files changed, 50 insertions(+), 4 deletions(-) create mode 100644 Test/120.frag create mode 100644 Test/130.frag rename Test/{pre150.frag => 140.frag} (54%) diff --git a/Test/120.frag b/Test/120.frag new file mode 100644 index 00000000..98f5c148 --- /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 00000000..cd7aae3e --- /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 31e75848..045983d1 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 208ca683..e55cdd83 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 0178ae6b..1cee7b1c 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 fc6ad836..3ccc5c02 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"); } ;