From 9353f1afab8d1c2b1811c6acd807675128eaabc5 Mon Sep 17 00:00:00 2001 From: John Kessenich Date: Sun, 23 Jul 2017 11:49:42 -0600 Subject: [PATCH] GLSL: Add version-number checking. --- Test/435.vert | 2 ++ Test/baseResults/435.vert.out | 25 ++++++++++++++ glslang/MachineIndependent/ShaderLang.cpp | 41 +++++++++++++++++++++-- gtests/AST.FromFile.cpp | 1 + 4 files changed, 66 insertions(+), 3 deletions(-) create mode 100644 Test/435.vert create mode 100755 Test/baseResults/435.vert.out diff --git a/Test/435.vert b/Test/435.vert new file mode 100644 index 000000000..bf27ce967 --- /dev/null +++ b/Test/435.vert @@ -0,0 +1,2 @@ +#version 435 +void main() {} \ No newline at end of file diff --git a/Test/baseResults/435.vert.out b/Test/baseResults/435.vert.out new file mode 100755 index 000000000..188a0a43c --- /dev/null +++ b/Test/baseResults/435.vert.out @@ -0,0 +1,25 @@ +435.vert +ERROR: version not supported +ERROR: 1 compilation errors. No code generated. + + +Shader version: 450 +ERROR: node is still EOpNull! +0:2 Function Definition: main( ( global void) +0:2 Function Parameters: +0:? Linker Objects +0:? 'gl_VertexID' ( gl_VertexId int VertexId) +0:? 'gl_InstanceID' ( gl_InstanceId int InstanceId) + + +Linked vertex stage: + + +Shader version: 450 +ERROR: node is still EOpNull! +0:2 Function Definition: main( ( global void) +0:2 Function Parameters: +0:? Linker Objects +0:? 'gl_VertexID' ( gl_VertexId int VertexId) +0:? 'gl_InstanceID' ( gl_InstanceId int InstanceId) + diff --git a/glslang/MachineIndependent/ShaderLang.cpp b/glslang/MachineIndependent/ShaderLang.cpp index 93f1568fc..2f1a7ccc7 100644 --- a/glslang/MachineIndependent/ShaderLang.cpp +++ b/glslang/MachineIndependent/ShaderLang.cpp @@ -1,7 +1,7 @@ // // Copyright (C) 2002-2005 3Dlabs Inc. Ltd. // Copyright (C) 2013-2016 LunarG, Inc. -// Copyright (C) 2015-2016 Google, Inc. +// Copyright (C) 2015-2017 Google, Inc. // // All rights reserved. // @@ -138,7 +138,8 @@ int MapVersionToIndex(int version) case 440: index = 12; break; case 310: index = 13; break; case 450: index = 14; break; - default: break; + case 500: index = 0; break; // HLSL + default: assert(0); break; } assert(index < VersionCount); @@ -447,7 +448,7 @@ bool DeduceVersionProfile(TInfoSink& infoSink, EShLanguage stage, bool versionNo return correct; } - // Get a good version... + // Get a version... if (version == 0) { version = defaultVersion; // infoSink.info.message(EPrefixWarning, "#version: statement missing; use #version on first line of shader"); @@ -493,6 +494,40 @@ bool DeduceVersionProfile(TInfoSink& infoSink, EShLanguage stage, bool versionNo } } + // Fix version... + switch (version) { + // ES versions + case 100: break; + case 300: break; + case 310: break; + + // desktop versions + case 110: break; + case 120: break; + case 130: break; + case 140: break; + case 150: break; + case 330: break; + case 400: break; + case 410: break; + case 420: break; + case 430: break; + case 440: break; + case 450: break; + + // unknown version + default: + correct = false; + infoSink.info.message(EPrefixError, "version not supported"); + if (profile == EEsProfile) + version = 310; + else { + version = 450; + profile = ECoreProfile; + } + break; + } + // Correct for stage type... switch (stage) { case EShLangGeometry: diff --git a/gtests/AST.FromFile.cpp b/gtests/AST.FromFile.cpp index d8a5ef94c..594545f2c 100644 --- a/gtests/AST.FromFile.cpp +++ b/gtests/AST.FromFile.cpp @@ -136,6 +136,7 @@ INSTANTIATE_TEST_CASE_P( "430.vert", "430.comp", "430AofA.frag", + "435.vert", "440.vert", "440.frag", "450.vert",