Core compute shaders were working, but the extension wasn't implemented.
// We now know we have a specialization constant to build
- // gl_WorkgroupSize is a special case until the front-end handles hierarchical specialization constants,
+ // gl_WorkGroupSize is a special case until the front-end handles hierarchical specialization constants,
// even then, it's specialization ids are handled by special case syntax in GLSL: layout(local_size_x = ...
if (node.getType().getQualifier().builtIn == glslang::EbvWorkGroupSize) {
std::vector<spv::Id> dimConstId;
\r
#extension GL_ARB_compute_shader : enable\r
\r
-layout(local_size_x = 2) in;\r
+layout(local_size_x = 2, local_size_y = 4, local_size_z = 6) in;\r
+\r
+shared vec3 sfoo;\r
+\r
+void main()\r
+{\r
+ sfoo = vec3(gl_WorkGroupSize.x, gl_WorkGroupSize.y, gl_WorkGroupSize.z);\r
+ sfoo += gl_WorkGroupSize + gl_NumWorkGroups + gl_WorkGroupID + gl_LocalInvocationID + gl_GlobalInvocationID;\r
+ sfoo *= gl_LocalInvocationIndex;\r
+ sfoo += gl_MaxComputeWorkGroupCount + gl_MaxComputeWorkGroupSize;\r
+ sfoo *= gl_MaxComputeUniformComponents +\r
+ gl_MaxComputeTextureImageUnits +\r
+ gl_MaxComputeImageUniforms +\r
+ gl_MaxComputeAtomicCounters +\r
+ gl_MaxComputeAtomicCounterBuffers;\r
+}
\ No newline at end of file
420.comp
Warning, version 420 is not yet complete; most version-specific features are present, but some are missing.
-ERROR: 0:3: 'gl_WorkgroupSize' : not supported for this version or the enabled extensions
-WARNING: 0:5: '#extension' : extension is only partially supported: GL_ARB_compute_shader
+ERROR: 0:3: 'gl_WorkGroupSize' : not supported for this version or the enabled extensions
ERROR: 1 compilation errors. No code generated.
Shader version: 420
Requested GL_ARB_compute_shader
-local_size = (2, 1, 1)
+local_size = (2, 4, 6)
ERROR: node is still EOpNull!
+0:11 Function Definition: main( (global void)
+0:11 Function Parameters:
+0:13 Sequence
+0:13 move second child to first child (temp 3-component vector of float)
+0:13 'sfoo' (shared 3-component vector of float)
+0:13 Constant:
+0:13 2.000000
+0:13 4.000000
+0:13 6.000000
+0:14 add second child into first child (temp 3-component vector of float)
+0:14 'sfoo' (shared 3-component vector of float)
+0:14 Convert uint to float (temp 3-component vector of float)
+0:14 add (temp 3-component vector of uint)
+0:14 add (temp 3-component vector of uint)
+0:14 add (temp 3-component vector of uint)
+0:14 add (temp 3-component vector of uint)
+0:14 Constant:
+0:14 2 (const uint)
+0:14 4 (const uint)
+0:14 6 (const uint)
+0:14 'gl_NumWorkGroups' (in 3-component vector of uint NumWorkGroups)
+0:14 'gl_WorkGroupID' (in 3-component vector of uint WorkGroupID)
+0:14 'gl_LocalInvocationID' (in 3-component vector of uint LocalInvocationID)
+0:14 'gl_GlobalInvocationID' (in 3-component vector of uint GlobalInvocationID)
+0:15 vector scale second child into first child (temp 3-component vector of float)
+0:15 'sfoo' (shared 3-component vector of float)
+0:15 Convert uint to float (temp float)
+0:15 'gl_LocalInvocationIndex' (in uint LocalInvocationIndex)
+0:16 add second child into first child (temp 3-component vector of float)
+0:16 'sfoo' (shared 3-component vector of float)
+0:16 Constant:
+0:16 66559.000000
+0:16 66559.000000
+0:16 65599.000000
+0:17 vector scale second child into first child (temp 3-component vector of float)
+0:17 'sfoo' (shared 3-component vector of float)
+0:17 Constant:
+0:17 1057.000000
0:? Linker Objects
0:? 'gl_WorkGroupSize' (const 3-component vector of uint WorkGroupSize)
0:? 2 (const uint)
-0:? 1 (const uint)
-0:? 1 (const uint)
+0:? 4 (const uint)
+0:? 6 (const uint)
+0:? 'sfoo' (shared 3-component vector of float)
Linked compute stage:
-ERROR: Linking compute stage: Missing entry point: Each stage requires one "void main()" entry point
Shader version: 420
Requested GL_ARB_compute_shader
-local_size = (2, 1, 1)
+local_size = (2, 4, 6)
ERROR: node is still EOpNull!
+0:11 Function Definition: main( (global void)
+0:11 Function Parameters:
+0:13 Sequence
+0:13 move second child to first child (temp 3-component vector of float)
+0:13 'sfoo' (shared 3-component vector of float)
+0:13 Constant:
+0:13 2.000000
+0:13 4.000000
+0:13 6.000000
+0:14 add second child into first child (temp 3-component vector of float)
+0:14 'sfoo' (shared 3-component vector of float)
+0:14 Convert uint to float (temp 3-component vector of float)
+0:14 add (temp 3-component vector of uint)
+0:14 add (temp 3-component vector of uint)
+0:14 add (temp 3-component vector of uint)
+0:14 add (temp 3-component vector of uint)
+0:14 Constant:
+0:14 2 (const uint)
+0:14 4 (const uint)
+0:14 6 (const uint)
+0:14 'gl_NumWorkGroups' (in 3-component vector of uint NumWorkGroups)
+0:14 'gl_WorkGroupID' (in 3-component vector of uint WorkGroupID)
+0:14 'gl_LocalInvocationID' (in 3-component vector of uint LocalInvocationID)
+0:14 'gl_GlobalInvocationID' (in 3-component vector of uint GlobalInvocationID)
+0:15 vector scale second child into first child (temp 3-component vector of float)
+0:15 'sfoo' (shared 3-component vector of float)
+0:15 Convert uint to float (temp float)
+0:15 'gl_LocalInvocationIndex' (in uint LocalInvocationIndex)
+0:16 add second child into first child (temp 3-component vector of float)
+0:16 'sfoo' (shared 3-component vector of float)
+0:16 Constant:
+0:16 66559.000000
+0:16 66559.000000
+0:16 65599.000000
+0:17 vector scale second child into first child (temp 3-component vector of float)
+0:17 'sfoo' (shared 3-component vector of float)
+0:17 Constant:
+0:17 1057.000000
0:? Linker Objects
0:? 'gl_WorkGroupSize' (const 3-component vector of uint WorkGroupSize)
0:? 2 (const uint)
-0:? 1 (const uint)
-0:? 1 (const uint)
+0:? 4 (const uint)
+0:? 6 (const uint)
+0:? 'sfoo' (shared 3-component vector of float)
// compute
- if ((profile == EEsProfile && version >= 310) || (profile != EEsProfile && version >= 430)) {
+ if ((profile == EEsProfile && version >= 310) || (profile != EEsProfile && version >= 420)) {
snprintf(builtInConstant, maxSize, "const ivec3 gl_MaxComputeWorkGroupCount = ivec3(%d,%d,%d);", resources.maxComputeWorkGroupCountX,
resources.maxComputeWorkGroupCountY,
resources.maxComputeWorkGroupCountZ);
symbolTable.setVariableExtensions("gl_LocalInvocationID", 1, &E_GL_ARB_compute_shader);
symbolTable.setVariableExtensions("gl_GlobalInvocationID", 1, &E_GL_ARB_compute_shader);
symbolTable.setVariableExtensions("gl_LocalInvocationIndex", 1, &E_GL_ARB_compute_shader);
+
+ symbolTable.setVariableExtensions("gl_MaxComputeWorkGroupCount", 1, &E_GL_ARB_compute_shader);
+ symbolTable.setVariableExtensions("gl_MaxComputeWorkGroupSize", 1, &E_GL_ARB_compute_shader);
+ symbolTable.setVariableExtensions("gl_MaxComputeUniformComponents", 1, &E_GL_ARB_compute_shader);
+ symbolTable.setVariableExtensions("gl_MaxComputeTextureImageUnits", 1, &E_GL_ARB_compute_shader);
+ symbolTable.setVariableExtensions("gl_MaxComputeImageUniforms", 1, &E_GL_ARB_compute_shader);
+ symbolTable.setVariableExtensions("gl_MaxComputeAtomicCounters", 1, &E_GL_ARB_compute_shader);
+ symbolTable.setVariableExtensions("gl_MaxComputeAtomicCounterBuffers", 1, &E_GL_ARB_compute_shader);
}
break;
case EShLangCompute:
if (id.compare(0, 11, "local_size_") == 0) {
- profileRequires(loc, EEsProfile, 310, 0, "gl_WorkgroupSize");
- profileRequires(loc, ~EEsProfile, 430, E_GL_ARB_compute_shader, "gl_WorkgroupSize");
+ profileRequires(loc, EEsProfile, 310, 0, "gl_WorkGroupSize");
+ profileRequires(loc, ~EEsProfile, 430, E_GL_ARB_compute_shader, "gl_WorkGroupSize");
if (id == "local_size_x") {
publicType.shaderQualifiers.localSize[0] = value;
return;
extensionBehavior[E_GL_ARB_texture_gather] = EBhDisable;
extensionBehavior[E_GL_ARB_gpu_shader5] = EBhDisablePartial;
extensionBehavior[E_GL_ARB_separate_shader_objects] = EBhDisable;
- extensionBehavior[E_GL_ARB_compute_shader] = EBhDisablePartial;
+ extensionBehavior[E_GL_ARB_compute_shader] = EBhDisable;
extensionBehavior[E_GL_ARB_tessellation_shader] = EBhDisable;
extensionBehavior[E_GL_ARB_enhanced_layouts] = EBhDisable;
extensionBehavior[E_GL_ARB_texture_cube_map_array] = EBhDisable;
$$.qualifier.storage = EvqBuffer;
}
| SHARED {
- parseContext.profileRequires($1.loc, ECoreProfile | ECompatibilityProfile, 430, 0, "shared");
+ parseContext.profileRequires($1.loc, ECoreProfile | ECompatibilityProfile, 430, E_GL_ARB_compute_shader, "shared");
parseContext.profileRequires($1.loc, EEsProfile, 310, 0, "shared");
parseContext.requireStage($1.loc, EShLangCompute, "shared");
$$.init($1.loc);
case 155:
#line 1210 "MachineIndependent/glslang.y" /* yacc.c:1646 */
{
- parseContext.profileRequires((yyvsp[0].lex).loc, ECoreProfile | ECompatibilityProfile, 430, 0, "shared");
+ parseContext.profileRequires((yyvsp[0].lex).loc, ECoreProfile | ECompatibilityProfile, 430, E_GL_ARB_compute_shader, "shared");
parseContext.profileRequires((yyvsp[0].lex).loc, EEsProfile, 310, 0, "shared");
parseContext.requireStage((yyvsp[0].lex).loc, EShLangCompute, "shared");
(yyval.interm.type).init((yyvsp[0].lex).loc);