From e95ecc54faaa83740d05336161865178fa59a081 Mon Sep 17 00:00:00 2001 From: John Kessenich Date: Wed, 12 Dec 2012 21:34:14 +0000 Subject: [PATCH] 1) Improve error recovery from arrays sized with a non constant. 2) Add double vectors to the lexer. 3) Default to vertex shaders for unrecognized file name suffixes. Also fix issue where the keyword "shared" conflicts with the layout qualifier identifier "shared" by allowing the keyword in the layout qualifier identifier list. git-svn-id: https://cvs.khronos.org/svn/repos/ogl/trunk/ecosystem/public/sdk/tools/glslang@19948 e7fa87d3-cd2b-0410-9028-fcbf551c1848 --- StandAlone/StandAlone.cpp | 5 ++--- glslang/MachineIndependent/ParseHelper.cpp | 1 + glslang/MachineIndependent/glslang.l | 6 +++--- glslang/MachineIndependent/glslang.y | 2 ++ 4 files changed, 8 insertions(+), 6 deletions(-) diff --git a/StandAlone/StandAlone.cpp b/StandAlone/StandAlone.cpp index 3620f60d..3a5fe558 100644 --- a/StandAlone/StandAlone.cpp +++ b/StandAlone/StandAlone.cpp @@ -216,7 +216,7 @@ int C_DECL main(int argc, char* argv[]) static EShLanguage FindLanguage(char *name) { if (!name) - return EShLangFragment; + return EShLangVertex; char *ext = strrchr(name, '.'); @@ -225,10 +225,9 @@ static EShLanguage FindLanguage(char *name) if (ext = strrchr(name, '.')) { if (strncmp(ext, ".frag", 4) == 0) return EShLangFragment; - if (strncmp(ext, ".vert", 4) == 0) return EShLangVertex; } - return EShLangFragment; + return EShLangVertex; } diff --git a/glslang/MachineIndependent/ParseHelper.cpp b/glslang/MachineIndependent/ParseHelper.cpp index e05c94fb..f2c77535 100644 --- a/glslang/MachineIndependent/ParseHelper.cpp +++ b/glslang/MachineIndependent/ParseHelper.cpp @@ -712,6 +712,7 @@ bool TParseContext::arraySizeErrorCheck(int line, TIntermTyped* expr, int& size) TIntermConstantUnion* constant = expr->getAsConstantUnion(); if (constant == 0 || constant->getBasicType() != EbtInt) { error(line, "array size must be a constant integer expression", "", ""); + size = 1; return true; } diff --git a/glslang/MachineIndependent/glslang.l b/glslang/MachineIndependent/glslang.l index 64f5cef1..66e3e689 100644 --- a/glslang/MachineIndependent/glslang.l +++ b/glslang/MachineIndependent/glslang.l @@ -181,6 +181,9 @@ TSourceLoc yylineno; "vec2" { pyylval->lex.line = yylineno; parseContext.lexAfterType = true; return (VEC2); } "vec3" { pyylval->lex.line = yylineno; parseContext.lexAfterType = true; return (VEC3); } "vec4" { pyylval->lex.line = yylineno; parseContext.lexAfterType = true; return (VEC4); } +"dvec2" { pyylval->lex.line = yylineno; parseContext.lexAfterType = true; return (DVEC2); } +"dvec3" { pyylval->lex.line = yylineno; parseContext.lexAfterType = true; return (DVEC3); } +"dvec4" { pyylval->lex.line = yylineno; parseContext.lexAfterType = true; return (DVEC4); } "ivec2" { pyylval->lex.line = yylineno; parseContext.lexAfterType = true; return (IVEC2); } "ivec3" { pyylval->lex.line = yylineno; parseContext.lexAfterType = true; return (IVEC3); } "ivec4" { pyylval->lex.line = yylineno; parseContext.lexAfterType = true; return (IVEC4); } @@ -301,9 +304,6 @@ TSourceLoc yylineno; "fvec2" { PaReservedWord(); return 0; } "fvec3" { PaReservedWord(); return 0; } "fvec4" { PaReservedWord(); return 0; } -"dvec2" { PaReservedWord(); return 0; } -"dvec3" { PaReservedWord(); return 0; } -"dvec4" { PaReservedWord(); return 0; } "sampler3DRect" { PaReservedWord(); return 0; } diff --git a/glslang/MachineIndependent/glslang.y b/glslang/MachineIndependent/glslang.y index a671aa92..4a43d10d 100644 --- a/glslang/MachineIndependent/glslang.y +++ b/glslang/MachineIndependent/glslang.y @@ -1598,6 +1598,8 @@ layout_qualifier_id } | IDENTIFIER EQUAL INTCONSTANT { } + | SHARED { + } ; precise_qualifier