diff --git a/Test/450.vert b/Test/450.vert index 17d1abbbb..801f1c504 100644 --- a/Test/450.vert +++ b/Test/450.vert @@ -37,5 +37,7 @@ void foo() atomicCounterXor(aui, ui); // ERROR, need 4.6 atomicCounterExchange(aui, ui); // ERROR, need 4.6 atomicCounterCompSwap(aui, ui, ui); // ERROR, need 4.6 + + int a = gl_BaseVertex + gl_BaseInstance + gl_DrawID; // ERROR, need 4.6 } ; // ERROR: no extraneous semicolons diff --git a/Test/baseResults/450.vert.out b/Test/baseResults/450.vert.out index 1005642d0..b05a9a0dd 100644 --- a/Test/baseResults/450.vert.out +++ b/Test/baseResults/450.vert.out @@ -11,8 +11,12 @@ ERROR: 0:36: 'atomicCounterOr' : no matching overloaded function found ERROR: 0:37: 'atomicCounterXor' : no matching overloaded function found ERROR: 0:38: 'atomicCounterExchange' : no matching overloaded function found ERROR: 0:39: 'atomicCounterCompSwap' : no matching overloaded function found -ERROR: 0:41: 'extraneous semicolon' : not supported for this version or the enabled extensions -ERROR: 13 compilation errors. No code generated. +ERROR: 0:41: 'gl_BaseVertex' : undeclared identifier +ERROR: 0:41: 'gl_BaseInstance' : undeclared identifier +ERROR: 0:41: 'gl_DrawID' : undeclared identifier +ERROR: 0:41: '=' : cannot convert from ' temp float' to ' temp int' +ERROR: 0:43: 'extraneous semicolon' : not supported for this version or the enabled extensions +ERROR: 17 compilation errors. No code generated. Shader version: 450 diff --git a/Test/baseResults/spv.460.vert.out b/Test/baseResults/spv.460.vert.out new file mode 100755 index 000000000..6d57d07ed --- /dev/null +++ b/Test/baseResults/spv.460.vert.out @@ -0,0 +1,45 @@ +spv.460.vert +// Module Version 10000 +// Generated by (magic number): 80001 +// Id's are bound by 20 + + Capability Shader + Capability DrawParameters + Extension "SPV_KHR_shader_draw_parameters" + 1: ExtInstImport "GLSL.std.450" + MemoryModel Logical GLSL450 + EntryPoint Vertex 4 "main" 10 12 15 18 19 + Source GLSL 460 + Name 4 "main" + Name 8 "a" + Name 10 "gl_BaseVertex" + Name 12 "gl_BaseInstance" + Name 15 "gl_DrawID" + Name 18 "gl_VertexID" + Name 19 "gl_InstanceID" + Decorate 10(gl_BaseVertex) BuiltIn BaseVertex + Decorate 12(gl_BaseInstance) BuiltIn BaseInstance + Decorate 15(gl_DrawID) BuiltIn DrawIndex + Decorate 18(gl_VertexID) BuiltIn VertexId + Decorate 19(gl_InstanceID) BuiltIn InstanceId + 2: TypeVoid + 3: TypeFunction 2 + 6: TypeInt 32 1 + 7: TypePointer Function 6(int) + 9: TypePointer Input 6(int) +10(gl_BaseVertex): 9(ptr) Variable Input +12(gl_BaseInstance): 9(ptr) Variable Input + 15(gl_DrawID): 9(ptr) Variable Input + 18(gl_VertexID): 9(ptr) Variable Input +19(gl_InstanceID): 9(ptr) Variable Input + 4(main): 2 Function None 3 + 5: Label + 8(a): 7(ptr) Variable Function + 11: 6(int) Load 10(gl_BaseVertex) + 13: 6(int) Load 12(gl_BaseInstance) + 14: 6(int) IAdd 11 13 + 16: 6(int) Load 15(gl_DrawID) + 17: 6(int) IAdd 14 16 + Store 8(a) 17 + Return + FunctionEnd diff --git a/Test/spv.460.vert b/Test/spv.460.vert new file mode 100644 index 000000000..72d4e775f --- /dev/null +++ b/Test/spv.460.vert @@ -0,0 +1,6 @@ +#version 460 + +void main() +{ + int a = gl_BaseVertex + gl_BaseInstance + gl_DrawID; +} diff --git a/glslang/MachineIndependent/Initialize.cpp b/glslang/MachineIndependent/Initialize.cpp index 921d83a9f..885be687f 100644 --- a/glslang/MachineIndependent/Initialize.cpp +++ b/glslang/MachineIndependent/Initialize.cpp @@ -3416,6 +3416,13 @@ void TBuiltIns::initialize(int version, EProfile profile, const SpvVersion& spvV "in int gl_DrawIDARB;" ); } + if (version >= 460) { + stageBuiltins[EShLangVertex].append( + "in int gl_BaseVertex;" + "in int gl_BaseInstance;" + "in int gl_DrawID;" + ); + } #ifdef NV_EXTENSIONS if (version >= 450) @@ -5230,16 +5237,19 @@ void TBuiltIns::identifyBuiltIns(int version, EProfile profile, const SpvVersion switch(language) { case EShLangVertex: if (profile != EEsProfile) { - symbolTable.setVariableExtensions("gl_BaseVertexARB", 1, &E_GL_ARB_shader_draw_parameters); - symbolTable.setVariableExtensions("gl_BaseInstanceARB", 1, &E_GL_ARB_shader_draw_parameters); - symbolTable.setVariableExtensions("gl_DrawIDARB", 1, &E_GL_ARB_shader_draw_parameters); - - BuiltInVariable("gl_BaseVertexARB", EbvBaseVertex, symbolTable); - BuiltInVariable("gl_BaseInstanceARB", EbvBaseInstance, symbolTable); - BuiltInVariable("gl_DrawIDARB", EbvDrawId, symbolTable); - } - - if (profile != EEsProfile) { + if (version >= 440) { + symbolTable.setVariableExtensions("gl_BaseVertexARB", 1, &E_GL_ARB_shader_draw_parameters); + symbolTable.setVariableExtensions("gl_BaseInstanceARB", 1, &E_GL_ARB_shader_draw_parameters); + symbolTable.setVariableExtensions("gl_DrawIDARB", 1, &E_GL_ARB_shader_draw_parameters); + BuiltInVariable("gl_BaseVertexARB", EbvBaseVertex, symbolTable); + BuiltInVariable("gl_BaseInstanceARB", EbvBaseInstance, symbolTable); + BuiltInVariable("gl_DrawIDARB", EbvDrawId, symbolTable); + } + if (version >= 460) { + BuiltInVariable("gl_BaseVertex", EbvBaseVertex, symbolTable); + BuiltInVariable("gl_BaseInstance", EbvBaseInstance, symbolTable); + BuiltInVariable("gl_DrawID", EbvDrawId, symbolTable); + } symbolTable.setVariableExtensions("gl_SubGroupSizeARB", 1, &E_GL_ARB_shader_ballot); symbolTable.setVariableExtensions("gl_SubGroupInvocationARB", 1, &E_GL_ARB_shader_ballot); symbolTable.setVariableExtensions("gl_SubGroupEqMaskARB", 1, &E_GL_ARB_shader_ballot); diff --git a/gtests/Spv.FromFile.cpp b/gtests/Spv.FromFile.cpp index 3a236b7f3..a0d042c85 100644 --- a/gtests/Spv.FromFile.cpp +++ b/gtests/Spv.FromFile.cpp @@ -361,6 +361,7 @@ INSTANTIATE_TEST_CASE_P( Glsl, CompileOpenGLToSpirvTest, ::testing::ValuesIn(std::vector({ "spv.460.frag", + "spv.460.vert", "spv.atomic.comp", "spv.glFragColor.frag", "spv.specConst.vert",