#version 430 core | |
layout(local_size_x = 2) in; | |
layout(local_size_x = 16) in; // ERROR, changing | |
layout(local_size_z = 4096) in; // ERROR, too large | |
layout(local_size_x = 2) in; | |
const int total = gl_MaxComputeWorkGroupCount.y | |
+ gl_MaxComputeUniformComponents | |
+ gl_MaxComputeTextureImageUnits | |
+ gl_MaxComputeImageUniforms | |
+ gl_MaxComputeAtomicCounters | |
+ gl_MaxComputeAtomicCounterBuffers; | |
buffer ShaderStorageBlock | |
{ | |
int value; | |
float values[]; | |
}; | |
buffer InvalidShaderStorageBlock | |
{ | |
float values[]; // ERROR | |
int value; | |
} invalid; | |
void main() | |
{ | |
barrier(); | |
memoryBarrier(); | |
memoryBarrierAtomicCounter(); | |
memoryBarrierBuffer(); | |
memoryBarrierShared(); | |
memoryBarrierImage(); | |
groupMemoryBarrier(); | |
value = int(values[gl_LocalInvocationIndex]); | |
} | |
layout(location = 2) in vec3 v3; // ERROR | |
in float f; // ERROR | |
out float fo; // ERROR | |
shared vec4 s; | |
layout(location = 2) shared vec4 sl; // ERROR | |
shared float fs = 4.2; // ERROR | |
layout(local_size_x = 2, local_size_y = 3, local_size_z = 4) out; // ERROR | |
int arrX[gl_WorkGroupSize.x]; | |
int arrY[gl_WorkGroupSize.y]; | |
int arrZ[gl_WorkGroupSize.z]; | |
readonly buffer roblock | |
{ | |
int value; | |
float values[]; | |
} ro; | |
void foo() | |
{ | |
ro.values[2] = 4.7; // ERROR, readonly | |
ro.values.length(); | |
} |