GLSL 4.6: Implement draw parameters.

This commit is contained in:
John Kessenich 2017-07-23 23:11:41 -06:00
parent 0d0c6d38f0
commit 941f3bbd7a
6 changed files with 80 additions and 12 deletions

View File

@ -37,5 +37,7 @@ void foo()
atomicCounterXor(aui, ui); // ERROR, need 4.6 atomicCounterXor(aui, ui); // ERROR, need 4.6
atomicCounterExchange(aui, ui); // ERROR, need 4.6 atomicCounterExchange(aui, ui); // ERROR, need 4.6
atomicCounterCompSwap(aui, ui, 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 ; // ERROR: no extraneous semicolons

View File

@ -11,8 +11,12 @@ ERROR: 0:36: 'atomicCounterOr' : no matching overloaded function found
ERROR: 0:37: 'atomicCounterXor' : 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:38: 'atomicCounterExchange' : no matching overloaded function found
ERROR: 0:39: 'atomicCounterCompSwap' : 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: 0:41: 'gl_BaseVertex' : undeclared identifier
ERROR: 13 compilation errors. No code generated. 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 Shader version: 450

View File

@ -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

6
Test/spv.460.vert Normal file
View File

@ -0,0 +1,6 @@
#version 460
void main()
{
int a = gl_BaseVertex + gl_BaseInstance + gl_DrawID;
}

View File

@ -3416,6 +3416,13 @@ void TBuiltIns::initialize(int version, EProfile profile, const SpvVersion& spvV
"in int gl_DrawIDARB;" "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 #ifdef NV_EXTENSIONS
if (version >= 450) if (version >= 450)
@ -5230,16 +5237,19 @@ void TBuiltIns::identifyBuiltIns(int version, EProfile profile, const SpvVersion
switch(language) { switch(language) {
case EShLangVertex: case EShLangVertex:
if (profile != EEsProfile) { if (profile != EEsProfile) {
if (version >= 440) {
symbolTable.setVariableExtensions("gl_BaseVertexARB", 1, &E_GL_ARB_shader_draw_parameters); 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_BaseInstanceARB", 1, &E_GL_ARB_shader_draw_parameters);
symbolTable.setVariableExtensions("gl_DrawIDARB", 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_BaseVertexARB", EbvBaseVertex, symbolTable);
BuiltInVariable("gl_BaseInstanceARB", EbvBaseInstance, symbolTable); BuiltInVariable("gl_BaseInstanceARB", EbvBaseInstance, symbolTable);
BuiltInVariable("gl_DrawIDARB", EbvDrawId, symbolTable); BuiltInVariable("gl_DrawIDARB", EbvDrawId, symbolTable);
} }
if (version >= 460) {
if (profile != EEsProfile) { 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_SubGroupSizeARB", 1, &E_GL_ARB_shader_ballot);
symbolTable.setVariableExtensions("gl_SubGroupInvocationARB", 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); symbolTable.setVariableExtensions("gl_SubGroupEqMaskARB", 1, &E_GL_ARB_shader_ballot);

View File

@ -361,6 +361,7 @@ INSTANTIATE_TEST_CASE_P(
Glsl, CompileOpenGLToSpirvTest, Glsl, CompileOpenGLToSpirvTest,
::testing::ValuesIn(std::vector<std::string>({ ::testing::ValuesIn(std::vector<std::string>({
"spv.460.frag", "spv.460.frag",
"spv.460.vert",
"spv.atomic.comp", "spv.atomic.comp",
"spv.glFragColor.frag", "spv.glFragColor.frag",
"spv.specConst.vert", "spv.specConst.vert",