Front-end: Complete GL_ARB_compute_shader implementation.
Core compute shaders were working, but the extension wasn't implemented.
This commit is contained in:
parent
0f5e3ad23c
commit
d94c003fb7
@ -4042,7 +4042,7 @@ spv::Id TGlslangToSpvTraverser::createSpvConstant(const glslang::TIntermTyped& n
|
||||
|
||||
// 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;
|
||||
|
@ -4,4 +4,19 @@ layout(local_size_x = 2) in; // ERROR, no compute
|
||||
|
||||
#extension GL_ARB_compute_shader : enable
|
||||
|
||||
layout(local_size_x = 2) in;
|
||||
layout(local_size_x = 2, local_size_y = 4, local_size_z = 6) in;
|
||||
|
||||
shared vec3 sfoo;
|
||||
|
||||
void main()
|
||||
{
|
||||
sfoo = vec3(gl_WorkGroupSize.x, gl_WorkGroupSize.y, gl_WorkGroupSize.z);
|
||||
sfoo += gl_WorkGroupSize + gl_NumWorkGroups + gl_WorkGroupID + gl_LocalInvocationID + gl_GlobalInvocationID;
|
||||
sfoo *= gl_LocalInvocationIndex;
|
||||
sfoo += gl_MaxComputeWorkGroupCount + gl_MaxComputeWorkGroupSize;
|
||||
sfoo *= gl_MaxComputeUniformComponents +
|
||||
gl_MaxComputeTextureImageUnits +
|
||||
gl_MaxComputeImageUniforms +
|
||||
gl_MaxComputeAtomicCounters +
|
||||
gl_MaxComputeAtomicCounterBuffers;
|
||||
}
|
@ -1,32 +1,108 @@
|
||||
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)
|
||||
|
||||
|
@ -3421,7 +3421,7 @@ void TBuiltIns::initialize(const TBuiltInResource &resources, int version, EProf
|
||||
|
||||
|
||||
// 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);
|
||||
@ -3904,6 +3904,14 @@ void TBuiltIns::identifyBuiltIns(int version, EProfile profile, int spv, int vul
|
||||
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;
|
||||
|
||||
|
@ -4232,8 +4232,8 @@ void TParseContext::setLayoutQualifier(const TSourceLoc& loc, TPublicType& publi
|
||||
|
||||
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;
|
||||
|
@ -162,7 +162,7 @@ void TParseVersions::initializeExtensionBehavior()
|
||||
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;
|
||||
|
@ -1208,7 +1208,7 @@ storage_qualifier
|
||||
$$.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);
|
||||
|
@ -4737,7 +4737,7 @@ yyreduce:
|
||||
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);
|
||||
|
Loading…
x
Reference in New Issue
Block a user