1617a3babSopenharmony_ci#version 310 es 2617a3babSopenharmony_ci 3617a3babSopenharmony_cilayout(local_size_x = 2) in; 4617a3babSopenharmony_cilayout(local_size_x = 16) in; // ERROR, changing 5617a3babSopenharmony_cilayout(local_size_z = 4096) in; // ERROR, too large 6617a3babSopenharmony_cilayout(local_size_x = 2) in; 7617a3babSopenharmony_cilayout(local_size_y = 0) in; // ERROR, 0 not allowed 8617a3babSopenharmony_ciconst int total = gl_MaxComputeWorkGroupCount.y 9617a3babSopenharmony_ci + gl_MaxComputeUniformComponents 10617a3babSopenharmony_ci + gl_MaxComputeTextureImageUnits 11617a3babSopenharmony_ci + gl_MaxComputeImageUniforms 12617a3babSopenharmony_ci + gl_MaxComputeAtomicCounters 13617a3babSopenharmony_ci + gl_MaxComputeAtomicCounterBuffers; 14617a3babSopenharmony_ci 15617a3babSopenharmony_cibuffer ShaderStorageBlock 16617a3babSopenharmony_ci{ 17617a3babSopenharmony_ci int value; 18617a3babSopenharmony_ci float values[]; 19617a3babSopenharmony_ci}; 20617a3babSopenharmony_ci 21617a3babSopenharmony_cibuffer InvalidShaderStorageBlock 22617a3babSopenharmony_ci{ 23617a3babSopenharmony_ci float values[]; // ERROR 24617a3babSopenharmony_ci int value; 25617a3babSopenharmony_ci} invalid; 26617a3babSopenharmony_ci 27617a3babSopenharmony_civoid main() 28617a3babSopenharmony_ci{ 29617a3babSopenharmony_ci barrier(); 30617a3babSopenharmony_ci memoryBarrier(); 31617a3babSopenharmony_ci memoryBarrierAtomicCounter(); 32617a3babSopenharmony_ci memoryBarrierBuffer(); 33617a3babSopenharmony_ci memoryBarrierShared(); 34617a3babSopenharmony_ci memoryBarrierImage(); 35617a3babSopenharmony_ci groupMemoryBarrier(); 36617a3babSopenharmony_ci value = int(values[gl_LocalInvocationIndex]); 37617a3babSopenharmony_ci} 38617a3babSopenharmony_ci 39617a3babSopenharmony_cilayout(location = 2) in vec3 v3; // ERROR 40617a3babSopenharmony_ciin float f; // ERROR 41617a3babSopenharmony_ciout float fo; // ERROR 42617a3babSopenharmony_ci 43617a3babSopenharmony_cishared vec4 s; 44617a3babSopenharmony_cilayout(location = 2) shared vec4 sl; // ERROR 45617a3babSopenharmony_cishared float fs = 4.2; // ERROR 46617a3babSopenharmony_ci 47617a3babSopenharmony_cilayout(local_size_x = 2, local_size_y = 3, local_size_z = 4) out; // ERROR 48617a3babSopenharmony_ci 49617a3babSopenharmony_ciint arrX[gl_WorkGroupSize.x]; 50617a3babSopenharmony_ciint arrY[gl_WorkGroupSize.y]; 51617a3babSopenharmony_ciint arrZ[gl_WorkGroupSize.z]; 52617a3babSopenharmony_ci 53617a3babSopenharmony_cireadonly buffer roblock 54617a3babSopenharmony_ci{ 55617a3babSopenharmony_ci int value; 56617a3babSopenharmony_ci float values[]; 57617a3babSopenharmony_ci} ro; 58617a3babSopenharmony_ci 59617a3babSopenharmony_civoid foo() 60617a3babSopenharmony_ci{ 61617a3babSopenharmony_ci ro.values[2] = 4.7; // ERROR, readonly 62617a3babSopenharmony_ci ro.values.length(); 63617a3babSopenharmony_ci ++s; 64617a3babSopenharmony_ci} 65617a3babSopenharmony_ci 66617a3babSopenharmony_cibuffer vec4 v; // ERROR 67617a3babSopenharmony_ci 68617a3babSopenharmony_ciuniform usampler2D us2dbad; // ERROR, default precision 69617a3babSopenharmony_ci 70617a3babSopenharmony_ciprecision highp usampler2D; 71617a3babSopenharmony_ciprecision highp iimage2DArray; 72617a3babSopenharmony_ciprecision highp iimage2D; 73617a3babSopenharmony_ci 74617a3babSopenharmony_ciuniform usampler2D us2d; 75617a3babSopenharmony_ci 76617a3babSopenharmony_ciuniform iimage2DArray ii2dabad; // ERROR, not writeonly 77617a3babSopenharmony_ciuniform writeonly iimage2DArray ii2da; 78617a3babSopenharmony_ci 79617a3babSopenharmony_cilayout(r32i) uniform iimage2D iimg2D; 80617a3babSopenharmony_cilayout(rgba32i) uniform readonly iimage2D iimg2Drgba; 81617a3babSopenharmony_cilayout(rgba32f) uniform readonly image2D img2Drgba; // ERROR, no default 82617a3babSopenharmony_cilayout(r32ui) uniform uimage2D uimg2D; // ERROR, no default 83617a3babSopenharmony_ci 84617a3babSopenharmony_civoid qux() 85617a3babSopenharmony_ci{ 86617a3babSopenharmony_ci int i = 4; 87617a3babSopenharmony_ci imageAtomicCompSwap(iimg2D, ivec2(i,i), i, i);// ERROR no longer in 310 88617a3babSopenharmony_ci imageAtomicAdd(uimg2D, ivec2(i,i), uint(i)); // ERROR no longer in 310 89617a3babSopenharmony_ci imageAtomicMin(iimg2Drgba, ivec2(i,i), i); // ERROR no longer in 310 // ERROR iimg2Drgba does not have r32i layout 90617a3babSopenharmony_ci imageAtomicMax(img2Drgba, ivec2(i,i), i); // ERROR no longer in 310 // ERROR img2Drgba is not integer image 91617a3babSopenharmony_ci ivec4 pos = imageLoad(iimg2D, ivec2(i,i)); 92617a3babSopenharmony_ci imageStore(ii2da, ivec3(i,i,i), ivec4(0)); 93617a3babSopenharmony_ci imageLoad(img2Drgba, ivec2(i,i)); 94617a3babSopenharmony_ci imageLoad(ii2da, ivec3(i,i,i)); // ERROR, drops writeonly 95617a3babSopenharmony_ci} 96617a3babSopenharmony_ci 97617a3babSopenharmony_civolatile float vol; // ERROR, not an image 98617a3babSopenharmony_cireadonly int vol2; // ERROR, not an image 99617a3babSopenharmony_ci 100617a3babSopenharmony_civoid passr(coherent readonly iimage2D image) 101617a3babSopenharmony_ci{ 102617a3babSopenharmony_ci} 103617a3babSopenharmony_ci 104617a3babSopenharmony_cilayout(r32i) coherent readonly uniform iimage2D qualim1; 105617a3babSopenharmony_cilayout(r32i) coherent restrict readonly uniform iimage2D qualim2; 106617a3babSopenharmony_ci 107617a3babSopenharmony_civoid passrc() 108617a3babSopenharmony_ci{ 109617a3babSopenharmony_ci passr(qualim1); // ERROR, changing formats 110617a3babSopenharmony_ci passr(qualim2); // ERROR, drops restrict, ERROR, changing formats 111617a3babSopenharmony_ci passr(iimg2D); // ERROR, changing formats 112617a3babSopenharmony_ci} 113617a3babSopenharmony_ci 114617a3babSopenharmony_cihighp layout(rg8i) uniform readonly uimage2D i1bad; // ERROR, type mismatch 115617a3babSopenharmony_cihighp layout(rgba32i) uniform readonly image2D i2bad; // ERROR, type mismatch 116617a3babSopenharmony_cihighp layout(rgba32f) uniform readonly uimage2D i3bad; // ERROR, type mismatch 117617a3babSopenharmony_cilayout(r8_snorm) uniform readonly iimage2D i4bad; // ERROR, type mismatch 118617a3babSopenharmony_cilayout(rgba32ui) uniform readonly iimage2D i5bad; // ERROR, type mismatch 119617a3babSopenharmony_cilayout(r8ui) uniform readonly iimage2D i6bad; // ERROR, type mismatch 120617a3babSopenharmony_ci 121617a3babSopenharmony_cilayout(binding = 0) uniform atomic_uint counter; 122617a3babSopenharmony_ci 123617a3babSopenharmony_ciuint func(atomic_uint c) 124617a3babSopenharmony_ci{ 125617a3babSopenharmony_ci return atomicCounterIncrement(c); 126617a3babSopenharmony_ci} 127617a3babSopenharmony_ci 128617a3babSopenharmony_ciuint func2(out atomic_uint c) // ERROR, output 129617a3babSopenharmony_ci{ 130617a3babSopenharmony_ci return counter; // ERROR, type mismatch 131617a3babSopenharmony_ci return atomicCounter(counter); 132617a3babSopenharmony_ci} 133617a3babSopenharmony_ci 134617a3babSopenharmony_civoid mainAC() 135617a3babSopenharmony_ci{ 136617a3babSopenharmony_ci atomic_uint non_uniform_counter; // ERROR 137617a3babSopenharmony_ci uint val = atomicCounter(counter); 138617a3babSopenharmony_ci atomicCounterDecrement(counter); 139617a3babSopenharmony_ci} 140617a3babSopenharmony_ci 141617a3babSopenharmony_cilayout(binding = 1) uniform mediump atomic_uint counterBad; // ERROR, not highp 142617a3babSopenharmony_ci 143617a3babSopenharmony_cilayout(binding = 2, offset = 4) uniform atomic_uint countArr[4]; 144617a3babSopenharmony_ciuniform int i; 145617a3babSopenharmony_ci 146617a3babSopenharmony_civoid opac() 147617a3babSopenharmony_ci{ 148617a3babSopenharmony_ci int a[3]; 149617a3babSopenharmony_ci a[counter]; // ERROR, non-integer 150617a3babSopenharmony_ci countArr[2]; 151617a3babSopenharmony_ci countArr[i]; 152617a3babSopenharmony_ci} 153617a3babSopenharmony_ci 154617a3babSopenharmony_cishared int atomi; 155617a3babSopenharmony_cishared uint atomu; 156617a3babSopenharmony_ci 157617a3babSopenharmony_civoid atoms() 158617a3babSopenharmony_ci{ 159617a3babSopenharmony_ci int origi = atomicAdd(atomi, 3); 160617a3babSopenharmony_ci uint origu = atomicAnd(atomu, 7u); 161617a3babSopenharmony_ci origi = atomicExchange(atomi, 4); 162617a3babSopenharmony_ci origu = atomicCompSwap(atomu, 10u, 8u); 163617a3babSopenharmony_ci} 164617a3babSopenharmony_ci 165617a3babSopenharmony_ciprecision highp atomic_uint; 166617a3babSopenharmony_ciprecision lowp atomic_uint; // ERROR 167617a3babSopenharmony_ci 168617a3babSopenharmony_ciprecise int pfoo; // ERROR, reserved 169617a3babSopenharmony_ci 170617a3babSopenharmony_cidmat2x4 dm; // ERROR 171617a3babSopenharmony_ciuniform samplerCubeArray sca; // ERROR 172617a3babSopenharmony_ciuniform iimage2DRect i2dr; // ERROR 173617a3babSopenharmony_cihighp uniform image2DMS i2dms; // ERROR 174617a3babSopenharmony_ciuniform uimage2DMSArray u2dmsa; // ERROR 175617a3babSopenharmony_ci 176617a3babSopenharmony_cihighp layout(r32f) coherent volatile restrict readonly writeonly uniform image2D okay1; 177617a3babSopenharmony_ci layout(r32i) coherent volatile restrict readonly uniform iimage2D okay2; 178617a3babSopenharmony_cihighp layout(r32ui) coherent volatile restrict writeonly uniform uimage2D okay3; 179617a3babSopenharmony_cihighp layout(r32f) coherent volatile restrict uniform image2D okay4; 180617a3babSopenharmony_ci 181617a3babSopenharmony_cihighp layout(rgba32f) coherent volatile restrict uniform image2D badQ1; // ERROR, bad qualifiers 182617a3babSopenharmony_ci layout(rgba8i) coherent volatile restrict uniform iimage2D badQ2; // ERROR, bad qualifiers 183617a3babSopenharmony_cihighp layout(rgba16ui) coherent volatile restrict uniform uimage2D badQ3; // ERROR, bad qualifiers 184617a3babSopenharmony_ci 185617a3babSopenharmony_ciwriteonly buffer woblock 186617a3babSopenharmony_ci{ 187617a3babSopenharmony_ci int value; 188617a3babSopenharmony_ci float values[]; 189617a3babSopenharmony_ci} wo; 190617a3babSopenharmony_ci 191617a3babSopenharmony_civoid foowo() 192617a3babSopenharmony_ci{ 193617a3babSopenharmony_ci float g; 194617a3babSopenharmony_ci g = wo.values[2]; // ERROR, writeonly 195617a3babSopenharmony_ci float f = wo.values[2]; // ERROR, writeonly 196617a3babSopenharmony_ci ++wo.values[2]; // ERROR, writeonly 197617a3babSopenharmony_ci wo.values[2]--; // ERROR, writeonly 198617a3babSopenharmony_ci f + wo.values[2]; // ERROR, writeonly 199617a3babSopenharmony_ci wo.values[2] - f; // ERROR, writeonly 200617a3babSopenharmony_ci bool b; 201617a3babSopenharmony_ci b ? f : wo.values[2]; // ERROR, writeonly 202617a3babSopenharmony_ci b ? wo.values[2] : f; // ERROR, writeonly 203617a3babSopenharmony_ci if (f == wo.values[2]) // ERROR, writeonly 204617a3babSopenharmony_ci ++f; 205617a3babSopenharmony_ci if (f >= wo.values[2]) // ERROR, writeonly 206617a3babSopenharmony_ci ++f; 207617a3babSopenharmony_ci f = vec3(wo.values[2]).x; // ERROR, writeonly 208617a3babSopenharmony_ci ~wo.value; // ERROR, writeonly 209617a3babSopenharmony_ci wo.values[2] = 3.4; 210617a3babSopenharmony_ci} 211617a3babSopenharmony_ci 212617a3babSopenharmony_cibuffer multioblock 213617a3babSopenharmony_ci{ 214617a3babSopenharmony_ci readonly int value; 215617a3babSopenharmony_ci writeonly float values[]; 216617a3babSopenharmony_ci} multio; 217617a3babSopenharmony_ci 218617a3babSopenharmony_civoid foomultio() 219617a3babSopenharmony_ci{ 220617a3babSopenharmony_ci float g; 221617a3babSopenharmony_ci g = wo.values[2]; // ERROR, writeonly 222617a3babSopenharmony_ci ~wo.value; 223617a3babSopenharmony_ci wo.values[2] = 3.4; 224617a3babSopenharmony_ci wo.value = 2; // ERROR, readonly 225617a3babSopenharmony_ci} 226617a3babSopenharmony_ci 227617a3babSopenharmony_ciin inb { // ERROR 228617a3babSopenharmony_ci int a; 229617a3babSopenharmony_ci} inbi; 230617a3babSopenharmony_ci 231617a3babSopenharmony_ciout outb { // ERROR 232617a3babSopenharmony_ci int a; 233617a3babSopenharmony_ci} outbi; 234617a3babSopenharmony_ci 235617a3babSopenharmony_cifloat t__; // ERROR, no __ until revision 310 236617a3babSopenharmony_ci 237617a3babSopenharmony_ci // ERROR, no __ until revision 310 238617a3babSopenharmony_ci#define __D 239617a3babSopenharmony_ci 240617a3babSopenharmony_cishared vec4 arr[2][3][4]; 241617a3babSopenharmony_ci 242617a3babSopenharmony_civoid devi() 243617a3babSopenharmony_ci{ 244617a3babSopenharmony_ci gl_DeviceIndex; // ERROR, no extension 245617a3babSopenharmony_ci gl_ViewIndex; // ERROR, never this stage 246617a3babSopenharmony_ci} 247617a3babSopenharmony_ci 248617a3babSopenharmony_ci#ifdef GL_EXT_device_group 249617a3babSopenharmony_ci#extension GL_EXT_device_group : enable 250617a3babSopenharmony_ci#endif 251617a3babSopenharmony_ci 252617a3babSopenharmony_civoid devie() 253617a3babSopenharmony_ci{ 254617a3babSopenharmony_ci gl_DeviceIndex; 255617a3babSopenharmony_ci gl_ViewIndex; // ERROR, never this stage 256617a3babSopenharmony_ci} 257