mediump int n1 = gl_MaxSamples;\r
mediump int n2 = gl_NumSamples;\r
}\r
+\r
+uniform layout(r32f) highp image2D im2Df;\r
+uniform layout(r32ui) highp uimage2D im2Du;\r
+uniform layout(r32i) highp iimage2D im2Di;\r
+uniform ivec2 P;\r
+\r
+void badImageAtom()\r
+{\r
+ float datf;\r
+ int dati;\r
+ uint datu;\r
+\r
+ imageAtomicAdd( im2Di, P, dati); // ERROR, need extension
+ imageAtomicAdd( im2Du, P, datu); // ERROR, need extension
+ imageAtomicMin( im2Di, P, dati); // ERROR, need extension
+ imageAtomicMin( im2Du, P, datu); // ERROR, need extension
+ imageAtomicMax( im2Di, P, dati); // ERROR, need extension
+ imageAtomicMax( im2Du, P, datu); // ERROR, need extension
+ imageAtomicAnd( im2Di, P, dati); // ERROR, need extension
+ imageAtomicAnd( im2Du, P, datu); // ERROR, need extension
+ imageAtomicOr( im2Di, P, dati); // ERROR, need extension
+ imageAtomicOr( im2Du, P, datu); // ERROR, need extension
+ imageAtomicXor( im2Di, P, dati); // ERROR, need extension
+ imageAtomicXor( im2Du, P, datu); // ERROR, need extension
+ imageAtomicExchange(im2Di, P, dati); // ERROR, need extension
+ imageAtomicExchange(im2Du, P, datu); // ERROR, need extension
+ imageAtomicExchange(im2Df, P, datf); // ERROR, need extension
+ imageAtomicCompSwap(im2Di, P, 3, dati); // ERROR, need extension\r
+ imageAtomicCompSwap(im2Du, P, 5u, datu); // ERROR, need extension\r
+}\r
+\r
+#ifdef GL_OES_shader_image_atomic \r
+#extension GL_OES_shader_image_atomic : enable\r
+#endif\r
+\r
+uniform layout(rgba32f) highp image2D badIm2Df; // ERROR, needs readonly or writeonly\r
+uniform layout(rgba8ui) highp uimage2D badIm2Du; // ERROR, needs readonly or writeonly\r
+uniform layout(rgba16i) highp iimage2D badIm2Di; // ERROR, needs readonly or writeonly\r
+\r
+void goodImageAtom()\r
+{\r
+ float datf;\r
+ int dati;\r
+ uint datu;\r
+\r
+ imageAtomicAdd( im2Di, P, dati);
+ imageAtomicAdd( im2Du, P, datu);
+ imageAtomicMin( im2Di, P, dati);
+ imageAtomicMin( im2Du, P, datu);
+ imageAtomicMax( im2Di, P, dati);
+ imageAtomicMax( im2Du, P, datu);
+ imageAtomicAnd( im2Di, P, dati);
+ imageAtomicAnd( im2Du, P, datu);
+ imageAtomicOr( im2Di, P, dati);
+ imageAtomicOr( im2Du, P, datu);
+ imageAtomicXor( im2Di, P, dati);
+ imageAtomicXor( im2Du, P, datu);
+ imageAtomicExchange(im2Di, P, dati);
+ imageAtomicExchange(im2Du, P, datu);
+ imageAtomicExchange(im2Df, P, datf);
+ imageAtomicCompSwap(im2Di, P, 3, dati);\r
+ imageAtomicCompSwap(im2Du, P, 5u, datu);\r
+\r
+ imageAtomicMax(badIm2Di, P, dati); // ERROR, not an allowed layout() on the image
+ imageAtomicMax(badIm2Du, P, datu); // ERROR, not an allowed layout() on the image
+ imageAtomicExchange(badIm2Df, P, datf); // ERROR, not an allowed layout() on the image
+}\r
ivec3 tfsb = textureSize(samp2DMSAi, 4); // ERROR, no lod\r
ivec3 tfsu = textureSize(samp2DMSAu);\r
}\r
+\r
+#ifdef GL_OES_shader_image_atomic \r
+#extension GL_OES_shader_image_atomic : enable\r
+#endif\r
+\r
+uniform layout(r32f) highp image2D im2Df;\r
+uniform layout(r32ui) highp uimage2D im2Du;\r
+uniform layout(r32i) highp iimage2D im2Di;\r
+uniform ivec2 P;\r
+\r
+void goodImageAtom()\r
+{\r
+ float datf;\r
+ int dati;\r
+ uint datu;\r
+\r
+ imageAtomicAdd( im2Di, P, dati);
+ imageAtomicAdd( im2Du, P, datu);
+ imageAtomicMin( im2Di, P, dati);
+ imageAtomicMin( im2Du, P, datu);
+ imageAtomicMax( im2Di, P, dati);
+ imageAtomicMax( im2Du, P, datu);
+ imageAtomicAnd( im2Di, P, dati);
+ imageAtomicAnd( im2Du, P, datu);
+ imageAtomicOr( im2Di, P, dati);
+ imageAtomicOr( im2Du, P, datu);
+ imageAtomicXor( im2Di, P, dati);
+ imageAtomicXor( im2Du, P, datu);
+ imageAtomicExchange(im2Di, P, dati);
+ imageAtomicExchange(im2Du, P, datu);
+ imageAtomicExchange(im2Df, P, datf);
+ imageAtomicCompSwap(im2Di, P, 3, dati);\r
+ imageAtomicCompSwap(im2Du, P, 5u, datu);\r
+}\r
ERROR: 0:66: 'buffer' : buffers can be declared only as blocks \r
ERROR: 0:68: 'sampler/image' : type requires declaration of default precision qualifier \r
ERROR: 0:76: '' : image variables not declared 'writeonly' must have a format layout qualifier \r
-ERROR: 0:87: 'imageAtomicCompSwap' : no matching overloaded function found \r
-ERROR: 0:88: 'imageAtomicAdd' : no matching overloaded function found \r
-ERROR: 0:89: 'imageAtomicMin' : no matching overloaded function found \r
+ERROR: 0:87: 'imageAtomicCompSwap' : required extension not requested: GL_OES_shader_image_atomic\r
+ERROR: 0:88: 'imageAtomicAdd' : required extension not requested: GL_OES_shader_image_atomic\r
+ERROR: 0:89: 'imageAtomicMin' : required extension not requested: GL_OES_shader_image_atomic\r
+ERROR: 0:89: 'readonly' : argument cannot drop memory qualifier when passed to formal parameter \r
+ERROR: 0:89: 'imageAtomicMin' : only supported on image with format r32i or r32ui \r
ERROR: 0:90: 'imageAtomicMax' : no matching overloaded function found \r
ERROR: 0:94: 'writeonly' : argument cannot drop memory qualifier when passed to formal parameter \r
ERROR: 0:97: '' : memory qualifiers cannot be used on this type \r
ERROR: 0:231: 'output block' : not supported in this stage: compute\r
WARNING: 0:235: 't__' : identifiers containing consecutive underscores ("__") are reserved \r
WARNING: 0:238: '#define' : names containing consecutive underscores are reserved: __D\r
-ERROR: 74 compilation errors. No code generated.\r
+ERROR: 76 compilation errors. No code generated.\r
\r
\r
Shader version: 310\r
0:86 'i' (temp highp int)\r
0:86 Constant:\r
0:86 4 (const int)\r
-0:87 Constant:\r
-0:87 0.000000\r
-0:88 Constant:\r
-0:88 0.000000\r
-0:89 Constant:\r
-0:89 0.000000\r
+0:87 Function Call: imageAtomicCompSwap(iI21;vi2;i1;i1; (global highp int)\r
+0:87 'iimg2D' (layout(r32i ) uniform highp iimage2D)\r
+0:87 Construct ivec2 (temp 2-component vector of int)\r
+0:87 'i' (temp highp int)\r
+0:87 'i' (temp highp int)\r
+0:87 'i' (temp highp int)\r
+0:87 'i' (temp highp int)\r
+0:88 Function Call: imageAtomicAdd(uI21;vi2;u1; (global highp uint)\r
+0:88 'uimg2D' (layout(r32ui ) uniform highp uimage2D)\r
+0:88 Construct ivec2 (temp 2-component vector of int)\r
+0:88 'i' (temp highp int)\r
+0:88 'i' (temp highp int)\r
+0:88 Convert int to uint (temp uint)\r
+0:88 'i' (temp highp int)\r
+0:89 Function Call: imageAtomicMin(iI21;vi2;i1; (global highp int)\r
+0:89 'iimg2Drgba' (layout(rgba32i ) readonly uniform highp iimage2D)\r
+0:89 Construct ivec2 (temp 2-component vector of int)\r
+0:89 'i' (temp highp int)\r
+0:89 'i' (temp highp int)\r
+0:89 'i' (temp highp int)\r
0:90 Constant:\r
0:90 0.000000\r
0:91 Sequence\r
0:86 'i' (temp highp int)\r
0:86 Constant:\r
0:86 4 (const int)\r
-0:87 Constant:\r
-0:87 0.000000\r
-0:88 Constant:\r
-0:88 0.000000\r
-0:89 Constant:\r
-0:89 0.000000\r
+0:87 Function Call: imageAtomicCompSwap(iI21;vi2;i1;i1; (global highp int)\r
+0:87 'iimg2D' (layout(r32i ) uniform highp iimage2D)\r
+0:87 Construct ivec2 (temp 2-component vector of int)\r
+0:87 'i' (temp highp int)\r
+0:87 'i' (temp highp int)\r
+0:87 'i' (temp highp int)\r
+0:87 'i' (temp highp int)\r
+0:88 Function Call: imageAtomicAdd(uI21;vi2;u1; (global highp uint)\r
+0:88 'uimg2D' (layout(r32ui ) uniform highp uimage2D)\r
+0:88 Construct ivec2 (temp 2-component vector of int)\r
+0:88 'i' (temp highp int)\r
+0:88 'i' (temp highp int)\r
+0:88 Convert int to uint (temp uint)\r
+0:88 'i' (temp highp int)\r
+0:89 Function Call: imageAtomicMin(iI21;vi2;i1; (global highp int)\r
+0:89 'iimg2Drgba' (layout(rgba32i ) readonly uniform highp iimage2D)\r
+0:89 Construct ivec2 (temp 2-component vector of int)\r
+0:89 'i' (temp highp int)\r
+0:89 'i' (temp highp int)\r
+0:89 'i' (temp highp int)\r
0:90 Constant:\r
0:90 0.000000\r
0:91 Sequence\r
ERROR: 0:259: 'gl_SampleMaskIn' : required extension not requested: GL_OES_sample_variables\r
ERROR: 0:260: 'gl_SampleMask' : required extension not requested: GL_OES_sample_variables\r
ERROR: 0:261: 'gl_NumSamples' : required extension not requested: GL_OES_sample_variables\r
-ERROR: 67 compilation errors. No code generated.\r
+ERROR: 0:289: 'imageAtomicAdd' : required extension not requested: GL_OES_shader_image_atomic\r
+ERROR: 0:290: 'imageAtomicAdd' : required extension not requested: GL_OES_shader_image_atomic\r
+ERROR: 0:291: 'imageAtomicMin' : required extension not requested: GL_OES_shader_image_atomic\r
+ERROR: 0:292: 'imageAtomicMin' : required extension not requested: GL_OES_shader_image_atomic\r
+ERROR: 0:293: 'imageAtomicMax' : required extension not requested: GL_OES_shader_image_atomic\r
+ERROR: 0:294: 'imageAtomicMax' : required extension not requested: GL_OES_shader_image_atomic\r
+ERROR: 0:295: 'imageAtomicAnd' : required extension not requested: GL_OES_shader_image_atomic\r
+ERROR: 0:296: 'imageAtomicAnd' : required extension not requested: GL_OES_shader_image_atomic\r
+ERROR: 0:297: 'imageAtomicOr' : required extension not requested: GL_OES_shader_image_atomic\r
+ERROR: 0:298: 'imageAtomicOr' : required extension not requested: GL_OES_shader_image_atomic\r
+ERROR: 0:299: 'imageAtomicXor' : required extension not requested: GL_OES_shader_image_atomic\r
+ERROR: 0:300: 'imageAtomicXor' : required extension not requested: GL_OES_shader_image_atomic\r
+ERROR: 0:301: 'imageAtomicExchange' : required extension not requested: GL_OES_shader_image_atomic\r
+ERROR: 0:302: 'imageAtomicExchange' : required extension not requested: GL_OES_shader_image_atomic\r
+ERROR: 0:303: 'imageAtomicExchange' : required extension not requested: GL_OES_shader_image_atomic\r
+ERROR: 0:304: 'imageAtomicCompSwap' : required extension not requested: GL_OES_shader_image_atomic\r
+ERROR: 0:305: 'imageAtomicCompSwap' : required extension not requested: GL_OES_shader_image_atomic\r
+ERROR: 0:312: 'rgba32f' : format requires readonly or writeonly memory qualifier \r
+ERROR: 0:313: 'rgba8ui' : format requires readonly or writeonly memory qualifier \r
+ERROR: 0:314: 'rgba16i' : format requires readonly or writeonly memory qualifier \r
+ERROR: 0:340: 'imageAtomicMax' : only supported on image with format r32i or r32ui \r
+ERROR: 0:341: 'imageAtomicMax' : only supported on image with format r32i or r32ui \r
+ERROR: 0:342: 'imageAtomicExchange' : only supported on image with format r32f \r
+ERROR: 90 compilation errors. No code generated.\r
\r
\r
Shader version: 310\r
Requested GL_OES_geometry_shader\r
Requested GL_OES_gpu_shader5\r
Requested GL_OES_sample_variables\r
+Requested GL_OES_shader_image_atomic\r
Requested GL_OES_shader_io_blocks\r
gl_FragCoord pixel center is integer\r
gl_FragCoord origin is upper left\r
0:275 move second child to first child (temp mediump int)\r
0:275 'n2' (temp mediump int)\r
0:275 'gl_NumSamples' (uniform lowp int)\r
+0:283 Function Definition: badImageAtom( (global void)\r
+0:283 Function Parameters: \r
+0:? Sequence\r
+0:289 Function Call: imageAtomicAdd(iI21;vi2;i1; (global mediump int)\r
+0:289 'im2Di' (layout(r32i ) uniform highp iimage2D)\r
+0:289 'P' (uniform mediump 2-component vector of int)\r
+0:289 'dati' (temp mediump int)\r
+0:290 Function Call: imageAtomicAdd(uI21;vi2;u1; (global mediump uint)\r
+0:290 'im2Du' (layout(r32ui ) uniform highp uimage2D)\r
+0:290 'P' (uniform mediump 2-component vector of int)\r
+0:290 'datu' (temp mediump uint)\r
+0:291 Function Call: imageAtomicMin(iI21;vi2;i1; (global mediump int)\r
+0:291 'im2Di' (layout(r32i ) uniform highp iimage2D)\r
+0:291 'P' (uniform mediump 2-component vector of int)\r
+0:291 'dati' (temp mediump int)\r
+0:292 Function Call: imageAtomicMin(uI21;vi2;u1; (global mediump uint)\r
+0:292 'im2Du' (layout(r32ui ) uniform highp uimage2D)\r
+0:292 'P' (uniform mediump 2-component vector of int)\r
+0:292 'datu' (temp mediump uint)\r
+0:293 Function Call: imageAtomicMax(iI21;vi2;i1; (global mediump int)\r
+0:293 'im2Di' (layout(r32i ) uniform highp iimage2D)\r
+0:293 'P' (uniform mediump 2-component vector of int)\r
+0:293 'dati' (temp mediump int)\r
+0:294 Function Call: imageAtomicMax(uI21;vi2;u1; (global mediump uint)\r
+0:294 'im2Du' (layout(r32ui ) uniform highp uimage2D)\r
+0:294 'P' (uniform mediump 2-component vector of int)\r
+0:294 'datu' (temp mediump uint)\r
+0:295 Function Call: imageAtomicAnd(iI21;vi2;i1; (global mediump int)\r
+0:295 'im2Di' (layout(r32i ) uniform highp iimage2D)\r
+0:295 'P' (uniform mediump 2-component vector of int)\r
+0:295 'dati' (temp mediump int)\r
+0:296 Function Call: imageAtomicAnd(uI21;vi2;u1; (global mediump uint)\r
+0:296 'im2Du' (layout(r32ui ) uniform highp uimage2D)\r
+0:296 'P' (uniform mediump 2-component vector of int)\r
+0:296 'datu' (temp mediump uint)\r
+0:297 Function Call: imageAtomicOr(iI21;vi2;i1; (global mediump int)\r
+0:297 'im2Di' (layout(r32i ) uniform highp iimage2D)\r
+0:297 'P' (uniform mediump 2-component vector of int)\r
+0:297 'dati' (temp mediump int)\r
+0:298 Function Call: imageAtomicOr(uI21;vi2;u1; (global mediump uint)\r
+0:298 'im2Du' (layout(r32ui ) uniform highp uimage2D)\r
+0:298 'P' (uniform mediump 2-component vector of int)\r
+0:298 'datu' (temp mediump uint)\r
+0:299 Function Call: imageAtomicXor(iI21;vi2;i1; (global mediump int)\r
+0:299 'im2Di' (layout(r32i ) uniform highp iimage2D)\r
+0:299 'P' (uniform mediump 2-component vector of int)\r
+0:299 'dati' (temp mediump int)\r
+0:300 Function Call: imageAtomicXor(uI21;vi2;u1; (global mediump uint)\r
+0:300 'im2Du' (layout(r32ui ) uniform highp uimage2D)\r
+0:300 'P' (uniform mediump 2-component vector of int)\r
+0:300 'datu' (temp mediump uint)\r
+0:301 Function Call: imageAtomicExchange(iI21;vi2;i1; (global mediump int)\r
+0:301 'im2Di' (layout(r32i ) uniform highp iimage2D)\r
+0:301 'P' (uniform mediump 2-component vector of int)\r
+0:301 'dati' (temp mediump int)\r
+0:302 Function Call: imageAtomicExchange(uI21;vi2;u1; (global mediump uint)\r
+0:302 'im2Du' (layout(r32ui ) uniform highp uimage2D)\r
+0:302 'P' (uniform mediump 2-component vector of int)\r
+0:302 'datu' (temp mediump uint)\r
+0:303 Function Call: imageAtomicExchange(I21;vi2;f1; (global highp float)\r
+0:303 'im2Df' (layout(r32f ) uniform highp image2D)\r
+0:303 'P' (uniform mediump 2-component vector of int)\r
+0:303 'datf' (temp mediump float)\r
+0:304 Function Call: imageAtomicCompSwap(iI21;vi2;i1;i1; (global mediump int)\r
+0:304 'im2Di' (layout(r32i ) uniform highp iimage2D)\r
+0:304 'P' (uniform mediump 2-component vector of int)\r
+0:304 Constant:\r
+0:304 3 (const int)\r
+0:304 'dati' (temp mediump int)\r
+0:305 Function Call: imageAtomicCompSwap(uI21;vi2;u1;u1; (global mediump uint)\r
+0:305 'im2Du' (layout(r32ui ) uniform highp uimage2D)\r
+0:305 'P' (uniform mediump 2-component vector of int)\r
+0:305 Constant:\r
+0:305 5 (const uint)\r
+0:305 'datu' (temp mediump uint)\r
+0:316 Function Definition: goodImageAtom( (global void)\r
+0:316 Function Parameters: \r
+0:? Sequence\r
+0:322 Function Call: imageAtomicAdd(iI21;vi2;i1; (global mediump int)\r
+0:322 'im2Di' (layout(r32i ) uniform highp iimage2D)\r
+0:322 'P' (uniform mediump 2-component vector of int)\r
+0:322 'dati' (temp mediump int)\r
+0:323 Function Call: imageAtomicAdd(uI21;vi2;u1; (global mediump uint)\r
+0:323 'im2Du' (layout(r32ui ) uniform highp uimage2D)\r
+0:323 'P' (uniform mediump 2-component vector of int)\r
+0:323 'datu' (temp mediump uint)\r
+0:324 Function Call: imageAtomicMin(iI21;vi2;i1; (global mediump int)\r
+0:324 'im2Di' (layout(r32i ) uniform highp iimage2D)\r
+0:324 'P' (uniform mediump 2-component vector of int)\r
+0:324 'dati' (temp mediump int)\r
+0:325 Function Call: imageAtomicMin(uI21;vi2;u1; (global mediump uint)\r
+0:325 'im2Du' (layout(r32ui ) uniform highp uimage2D)\r
+0:325 'P' (uniform mediump 2-component vector of int)\r
+0:325 'datu' (temp mediump uint)\r
+0:326 Function Call: imageAtomicMax(iI21;vi2;i1; (global mediump int)\r
+0:326 'im2Di' (layout(r32i ) uniform highp iimage2D)\r
+0:326 'P' (uniform mediump 2-component vector of int)\r
+0:326 'dati' (temp mediump int)\r
+0:327 Function Call: imageAtomicMax(uI21;vi2;u1; (global mediump uint)\r
+0:327 'im2Du' (layout(r32ui ) uniform highp uimage2D)\r
+0:327 'P' (uniform mediump 2-component vector of int)\r
+0:327 'datu' (temp mediump uint)\r
+0:328 Function Call: imageAtomicAnd(iI21;vi2;i1; (global mediump int)\r
+0:328 'im2Di' (layout(r32i ) uniform highp iimage2D)\r
+0:328 'P' (uniform mediump 2-component vector of int)\r
+0:328 'dati' (temp mediump int)\r
+0:329 Function Call: imageAtomicAnd(uI21;vi2;u1; (global mediump uint)\r
+0:329 'im2Du' (layout(r32ui ) uniform highp uimage2D)\r
+0:329 'P' (uniform mediump 2-component vector of int)\r
+0:329 'datu' (temp mediump uint)\r
+0:330 Function Call: imageAtomicOr(iI21;vi2;i1; (global mediump int)\r
+0:330 'im2Di' (layout(r32i ) uniform highp iimage2D)\r
+0:330 'P' (uniform mediump 2-component vector of int)\r
+0:330 'dati' (temp mediump int)\r
+0:331 Function Call: imageAtomicOr(uI21;vi2;u1; (global mediump uint)\r
+0:331 'im2Du' (layout(r32ui ) uniform highp uimage2D)\r
+0:331 'P' (uniform mediump 2-component vector of int)\r
+0:331 'datu' (temp mediump uint)\r
+0:332 Function Call: imageAtomicXor(iI21;vi2;i1; (global mediump int)\r
+0:332 'im2Di' (layout(r32i ) uniform highp iimage2D)\r
+0:332 'P' (uniform mediump 2-component vector of int)\r
+0:332 'dati' (temp mediump int)\r
+0:333 Function Call: imageAtomicXor(uI21;vi2;u1; (global mediump uint)\r
+0:333 'im2Du' (layout(r32ui ) uniform highp uimage2D)\r
+0:333 'P' (uniform mediump 2-component vector of int)\r
+0:333 'datu' (temp mediump uint)\r
+0:334 Function Call: imageAtomicExchange(iI21;vi2;i1; (global mediump int)\r
+0:334 'im2Di' (layout(r32i ) uniform highp iimage2D)\r
+0:334 'P' (uniform mediump 2-component vector of int)\r
+0:334 'dati' (temp mediump int)\r
+0:335 Function Call: imageAtomicExchange(uI21;vi2;u1; (global mediump uint)\r
+0:335 'im2Du' (layout(r32ui ) uniform highp uimage2D)\r
+0:335 'P' (uniform mediump 2-component vector of int)\r
+0:335 'datu' (temp mediump uint)\r
+0:336 Function Call: imageAtomicExchange(I21;vi2;f1; (global highp float)\r
+0:336 'im2Df' (layout(r32f ) uniform highp image2D)\r
+0:336 'P' (uniform mediump 2-component vector of int)\r
+0:336 'datf' (temp mediump float)\r
+0:337 Function Call: imageAtomicCompSwap(iI21;vi2;i1;i1; (global mediump int)\r
+0:337 'im2Di' (layout(r32i ) uniform highp iimage2D)\r
+0:337 'P' (uniform mediump 2-component vector of int)\r
+0:337 Constant:\r
+0:337 3 (const int)\r
+0:337 'dati' (temp mediump int)\r
+0:338 Function Call: imageAtomicCompSwap(uI21;vi2;u1;u1; (global mediump uint)\r
+0:338 'im2Du' (layout(r32ui ) uniform highp uimage2D)\r
+0:338 'P' (uniform mediump 2-component vector of int)\r
+0:338 Constant:\r
+0:338 5 (const uint)\r
+0:338 'datu' (temp mediump uint)\r
+0:340 Function Call: imageAtomicMax(iI21;vi2;i1; (global mediump int)\r
+0:340 'badIm2Di' (layout(rgba16i ) uniform highp iimage2D)\r
+0:340 'P' (uniform mediump 2-component vector of int)\r
+0:340 'dati' (temp mediump int)\r
+0:341 Function Call: imageAtomicMax(uI21;vi2;u1; (global mediump uint)\r
+0:341 'badIm2Du' (layout(rgba8ui ) uniform highp uimage2D)\r
+0:341 'P' (uniform mediump 2-component vector of int)\r
+0:341 'datu' (temp mediump uint)\r
+0:342 Function Call: imageAtomicExchange(I21;vi2;f1; (global highp float)\r
+0:342 'badIm2Df' (layout(rgba32f ) uniform highp image2D)\r
+0:342 'P' (uniform mediump 2-component vector of int)\r
+0:342 'datf' (temp mediump float)\r
0:? Linker Objects\r
0:? 'gl_FragCoord' (smooth in mediump 4-component vector of float)\r
0:? 'v3' (layout(location=2 ) smooth in mediump 3-component vector of float)\r
0:? 'CA7' (uniform highp usamplerCubeArray)\r
0:? 'gl_SampleMaskIn' (flat in implicitly-sized array of highp int SampleMaskIn)\r
0:? 'gl_SampleMask' (out implicitly-sized array of highp int SampleMaskIn)\r
+0:? 'im2Df' (layout(r32f ) uniform highp image2D)\r
+0:? 'im2Du' (layout(r32ui ) uniform highp uimage2D)\r
+0:? 'im2Di' (layout(r32i ) uniform highp iimage2D)\r
+0:? 'P' (uniform mediump 2-component vector of int)\r
+0:? 'badIm2Df' (layout(rgba32f ) uniform highp image2D)\r
+0:? 'badIm2Du' (layout(rgba8ui ) uniform highp uimage2D)\r
+0:? 'badIm2Di' (layout(rgba16i ) uniform highp iimage2D)\r
\r
\r
Linked fragment stage:\r
Requested GL_OES_geometry_shader\r
Requested GL_OES_gpu_shader5\r
Requested GL_OES_sample_variables\r
+Requested GL_OES_shader_image_atomic\r
Requested GL_OES_shader_io_blocks\r
gl_FragCoord pixel center is integer\r
gl_FragCoord origin is upper left\r
0:275 move second child to first child (temp mediump int)\r
0:275 'n2' (temp mediump int)\r
0:275 'gl_NumSamples' (uniform lowp int)\r
+0:283 Function Definition: badImageAtom( (global void)\r
+0:283 Function Parameters: \r
+0:? Sequence\r
+0:289 Function Call: imageAtomicAdd(iI21;vi2;i1; (global mediump int)\r
+0:289 'im2Di' (layout(r32i ) uniform highp iimage2D)\r
+0:289 'P' (uniform mediump 2-component vector of int)\r
+0:289 'dati' (temp mediump int)\r
+0:290 Function Call: imageAtomicAdd(uI21;vi2;u1; (global mediump uint)\r
+0:290 'im2Du' (layout(r32ui ) uniform highp uimage2D)\r
+0:290 'P' (uniform mediump 2-component vector of int)\r
+0:290 'datu' (temp mediump uint)\r
+0:291 Function Call: imageAtomicMin(iI21;vi2;i1; (global mediump int)\r
+0:291 'im2Di' (layout(r32i ) uniform highp iimage2D)\r
+0:291 'P' (uniform mediump 2-component vector of int)\r
+0:291 'dati' (temp mediump int)\r
+0:292 Function Call: imageAtomicMin(uI21;vi2;u1; (global mediump uint)\r
+0:292 'im2Du' (layout(r32ui ) uniform highp uimage2D)\r
+0:292 'P' (uniform mediump 2-component vector of int)\r
+0:292 'datu' (temp mediump uint)\r
+0:293 Function Call: imageAtomicMax(iI21;vi2;i1; (global mediump int)\r
+0:293 'im2Di' (layout(r32i ) uniform highp iimage2D)\r
+0:293 'P' (uniform mediump 2-component vector of int)\r
+0:293 'dati' (temp mediump int)\r
+0:294 Function Call: imageAtomicMax(uI21;vi2;u1; (global mediump uint)\r
+0:294 'im2Du' (layout(r32ui ) uniform highp uimage2D)\r
+0:294 'P' (uniform mediump 2-component vector of int)\r
+0:294 'datu' (temp mediump uint)\r
+0:295 Function Call: imageAtomicAnd(iI21;vi2;i1; (global mediump int)\r
+0:295 'im2Di' (layout(r32i ) uniform highp iimage2D)\r
+0:295 'P' (uniform mediump 2-component vector of int)\r
+0:295 'dati' (temp mediump int)\r
+0:296 Function Call: imageAtomicAnd(uI21;vi2;u1; (global mediump uint)\r
+0:296 'im2Du' (layout(r32ui ) uniform highp uimage2D)\r
+0:296 'P' (uniform mediump 2-component vector of int)\r
+0:296 'datu' (temp mediump uint)\r
+0:297 Function Call: imageAtomicOr(iI21;vi2;i1; (global mediump int)\r
+0:297 'im2Di' (layout(r32i ) uniform highp iimage2D)\r
+0:297 'P' (uniform mediump 2-component vector of int)\r
+0:297 'dati' (temp mediump int)\r
+0:298 Function Call: imageAtomicOr(uI21;vi2;u1; (global mediump uint)\r
+0:298 'im2Du' (layout(r32ui ) uniform highp uimage2D)\r
+0:298 'P' (uniform mediump 2-component vector of int)\r
+0:298 'datu' (temp mediump uint)\r
+0:299 Function Call: imageAtomicXor(iI21;vi2;i1; (global mediump int)\r
+0:299 'im2Di' (layout(r32i ) uniform highp iimage2D)\r
+0:299 'P' (uniform mediump 2-component vector of int)\r
+0:299 'dati' (temp mediump int)\r
+0:300 Function Call: imageAtomicXor(uI21;vi2;u1; (global mediump uint)\r
+0:300 'im2Du' (layout(r32ui ) uniform highp uimage2D)\r
+0:300 'P' (uniform mediump 2-component vector of int)\r
+0:300 'datu' (temp mediump uint)\r
+0:301 Function Call: imageAtomicExchange(iI21;vi2;i1; (global mediump int)\r
+0:301 'im2Di' (layout(r32i ) uniform highp iimage2D)\r
+0:301 'P' (uniform mediump 2-component vector of int)\r
+0:301 'dati' (temp mediump int)\r
+0:302 Function Call: imageAtomicExchange(uI21;vi2;u1; (global mediump uint)\r
+0:302 'im2Du' (layout(r32ui ) uniform highp uimage2D)\r
+0:302 'P' (uniform mediump 2-component vector of int)\r
+0:302 'datu' (temp mediump uint)\r
+0:303 Function Call: imageAtomicExchange(I21;vi2;f1; (global highp float)\r
+0:303 'im2Df' (layout(r32f ) uniform highp image2D)\r
+0:303 'P' (uniform mediump 2-component vector of int)\r
+0:303 'datf' (temp mediump float)\r
+0:304 Function Call: imageAtomicCompSwap(iI21;vi2;i1;i1; (global mediump int)\r
+0:304 'im2Di' (layout(r32i ) uniform highp iimage2D)\r
+0:304 'P' (uniform mediump 2-component vector of int)\r
+0:304 Constant:\r
+0:304 3 (const int)\r
+0:304 'dati' (temp mediump int)\r
+0:305 Function Call: imageAtomicCompSwap(uI21;vi2;u1;u1; (global mediump uint)\r
+0:305 'im2Du' (layout(r32ui ) uniform highp uimage2D)\r
+0:305 'P' (uniform mediump 2-component vector of int)\r
+0:305 Constant:\r
+0:305 5 (const uint)\r
+0:305 'datu' (temp mediump uint)\r
+0:316 Function Definition: goodImageAtom( (global void)\r
+0:316 Function Parameters: \r
+0:? Sequence\r
+0:322 Function Call: imageAtomicAdd(iI21;vi2;i1; (global mediump int)\r
+0:322 'im2Di' (layout(r32i ) uniform highp iimage2D)\r
+0:322 'P' (uniform mediump 2-component vector of int)\r
+0:322 'dati' (temp mediump int)\r
+0:323 Function Call: imageAtomicAdd(uI21;vi2;u1; (global mediump uint)\r
+0:323 'im2Du' (layout(r32ui ) uniform highp uimage2D)\r
+0:323 'P' (uniform mediump 2-component vector of int)\r
+0:323 'datu' (temp mediump uint)\r
+0:324 Function Call: imageAtomicMin(iI21;vi2;i1; (global mediump int)\r
+0:324 'im2Di' (layout(r32i ) uniform highp iimage2D)\r
+0:324 'P' (uniform mediump 2-component vector of int)\r
+0:324 'dati' (temp mediump int)\r
+0:325 Function Call: imageAtomicMin(uI21;vi2;u1; (global mediump uint)\r
+0:325 'im2Du' (layout(r32ui ) uniform highp uimage2D)\r
+0:325 'P' (uniform mediump 2-component vector of int)\r
+0:325 'datu' (temp mediump uint)\r
+0:326 Function Call: imageAtomicMax(iI21;vi2;i1; (global mediump int)\r
+0:326 'im2Di' (layout(r32i ) uniform highp iimage2D)\r
+0:326 'P' (uniform mediump 2-component vector of int)\r
+0:326 'dati' (temp mediump int)\r
+0:327 Function Call: imageAtomicMax(uI21;vi2;u1; (global mediump uint)\r
+0:327 'im2Du' (layout(r32ui ) uniform highp uimage2D)\r
+0:327 'P' (uniform mediump 2-component vector of int)\r
+0:327 'datu' (temp mediump uint)\r
+0:328 Function Call: imageAtomicAnd(iI21;vi2;i1; (global mediump int)\r
+0:328 'im2Di' (layout(r32i ) uniform highp iimage2D)\r
+0:328 'P' (uniform mediump 2-component vector of int)\r
+0:328 'dati' (temp mediump int)\r
+0:329 Function Call: imageAtomicAnd(uI21;vi2;u1; (global mediump uint)\r
+0:329 'im2Du' (layout(r32ui ) uniform highp uimage2D)\r
+0:329 'P' (uniform mediump 2-component vector of int)\r
+0:329 'datu' (temp mediump uint)\r
+0:330 Function Call: imageAtomicOr(iI21;vi2;i1; (global mediump int)\r
+0:330 'im2Di' (layout(r32i ) uniform highp iimage2D)\r
+0:330 'P' (uniform mediump 2-component vector of int)\r
+0:330 'dati' (temp mediump int)\r
+0:331 Function Call: imageAtomicOr(uI21;vi2;u1; (global mediump uint)\r
+0:331 'im2Du' (layout(r32ui ) uniform highp uimage2D)\r
+0:331 'P' (uniform mediump 2-component vector of int)\r
+0:331 'datu' (temp mediump uint)\r
+0:332 Function Call: imageAtomicXor(iI21;vi2;i1; (global mediump int)\r
+0:332 'im2Di' (layout(r32i ) uniform highp iimage2D)\r
+0:332 'P' (uniform mediump 2-component vector of int)\r
+0:332 'dati' (temp mediump int)\r
+0:333 Function Call: imageAtomicXor(uI21;vi2;u1; (global mediump uint)\r
+0:333 'im2Du' (layout(r32ui ) uniform highp uimage2D)\r
+0:333 'P' (uniform mediump 2-component vector of int)\r
+0:333 'datu' (temp mediump uint)\r
+0:334 Function Call: imageAtomicExchange(iI21;vi2;i1; (global mediump int)\r
+0:334 'im2Di' (layout(r32i ) uniform highp iimage2D)\r
+0:334 'P' (uniform mediump 2-component vector of int)\r
+0:334 'dati' (temp mediump int)\r
+0:335 Function Call: imageAtomicExchange(uI21;vi2;u1; (global mediump uint)\r
+0:335 'im2Du' (layout(r32ui ) uniform highp uimage2D)\r
+0:335 'P' (uniform mediump 2-component vector of int)\r
+0:335 'datu' (temp mediump uint)\r
+0:336 Function Call: imageAtomicExchange(I21;vi2;f1; (global highp float)\r
+0:336 'im2Df' (layout(r32f ) uniform highp image2D)\r
+0:336 'P' (uniform mediump 2-component vector of int)\r
+0:336 'datf' (temp mediump float)\r
+0:337 Function Call: imageAtomicCompSwap(iI21;vi2;i1;i1; (global mediump int)\r
+0:337 'im2Di' (layout(r32i ) uniform highp iimage2D)\r
+0:337 'P' (uniform mediump 2-component vector of int)\r
+0:337 Constant:\r
+0:337 3 (const int)\r
+0:337 'dati' (temp mediump int)\r
+0:338 Function Call: imageAtomicCompSwap(uI21;vi2;u1;u1; (global mediump uint)\r
+0:338 'im2Du' (layout(r32ui ) uniform highp uimage2D)\r
+0:338 'P' (uniform mediump 2-component vector of int)\r
+0:338 Constant:\r
+0:338 5 (const uint)\r
+0:338 'datu' (temp mediump uint)\r
+0:340 Function Call: imageAtomicMax(iI21;vi2;i1; (global mediump int)\r
+0:340 'badIm2Di' (layout(rgba16i ) uniform highp iimage2D)\r
+0:340 'P' (uniform mediump 2-component vector of int)\r
+0:340 'dati' (temp mediump int)\r
+0:341 Function Call: imageAtomicMax(uI21;vi2;u1; (global mediump uint)\r
+0:341 'badIm2Du' (layout(rgba8ui ) uniform highp uimage2D)\r
+0:341 'P' (uniform mediump 2-component vector of int)\r
+0:341 'datu' (temp mediump uint)\r
+0:342 Function Call: imageAtomicExchange(I21;vi2;f1; (global highp float)\r
+0:342 'badIm2Df' (layout(rgba32f ) uniform highp image2D)\r
+0:342 'P' (uniform mediump 2-component vector of int)\r
+0:342 'datf' (temp mediump float)\r
0:? Linker Objects\r
0:? 'gl_FragCoord' (smooth in mediump 4-component vector of float)\r
0:? 'v3' (layout(location=2 ) smooth in mediump 3-component vector of float)\r
0:? 'CA7' (uniform highp usamplerCubeArray)\r
0:? 'gl_SampleMaskIn' (flat in 1-element array of highp int SampleMaskIn)\r
0:? 'gl_SampleMask' (out 1-element array of highp int SampleMaskIn)\r
+0:? 'im2Df' (layout(r32f ) uniform highp image2D)\r
+0:? 'im2Du' (layout(r32ui ) uniform highp uimage2D)\r
+0:? 'im2Di' (layout(r32i ) uniform highp iimage2D)\r
+0:? 'P' (uniform mediump 2-component vector of int)\r
+0:? 'badIm2Df' (layout(rgba32f ) uniform highp image2D)\r
+0:? 'badIm2Du' (layout(rgba8ui ) uniform highp uimage2D)\r
+0:? 'badIm2Di' (layout(rgba16i ) uniform highp iimage2D)\r
\r
Shader version: 310\r
Requested GL_EXT_texture_buffer\r
Requested GL_OES_gpu_shader5\r
+Requested GL_OES_shader_image_atomic\r
Requested GL_OES_shader_io_blocks\r
Requested GL_OES_texture_buffer\r
Requested GL_OES_texture_cube_map_array\r
0:340 'tfsu' (temp highp 3-component vector of int)\r
0:340 Function Call: textureSize(usA2M1; (global highp 3-component vector of int)\r
0:340 'samp2DMSAu' (uniform highp usampler2DMSArray)\r
+0:352 Function Definition: goodImageAtom( (global void)\r
+0:352 Function Parameters: \r
+0:? Sequence\r
+0:358 Function Call: imageAtomicAdd(iI21;vi2;i1; (global highp int)\r
+0:358 'im2Di' (layout(r32i ) uniform highp iimage2D)\r
+0:358 'P' (uniform highp 2-component vector of int)\r
+0:358 'dati' (temp highp int)\r
+0:359 Function Call: imageAtomicAdd(uI21;vi2;u1; (global highp uint)\r
+0:359 'im2Du' (layout(r32ui ) uniform highp uimage2D)\r
+0:359 'P' (uniform highp 2-component vector of int)\r
+0:359 'datu' (temp highp uint)\r
+0:360 Function Call: imageAtomicMin(iI21;vi2;i1; (global highp int)\r
+0:360 'im2Di' (layout(r32i ) uniform highp iimage2D)\r
+0:360 'P' (uniform highp 2-component vector of int)\r
+0:360 'dati' (temp highp int)\r
+0:361 Function Call: imageAtomicMin(uI21;vi2;u1; (global highp uint)\r
+0:361 'im2Du' (layout(r32ui ) uniform highp uimage2D)\r
+0:361 'P' (uniform highp 2-component vector of int)\r
+0:361 'datu' (temp highp uint)\r
+0:362 Function Call: imageAtomicMax(iI21;vi2;i1; (global highp int)\r
+0:362 'im2Di' (layout(r32i ) uniform highp iimage2D)\r
+0:362 'P' (uniform highp 2-component vector of int)\r
+0:362 'dati' (temp highp int)\r
+0:363 Function Call: imageAtomicMax(uI21;vi2;u1; (global highp uint)\r
+0:363 'im2Du' (layout(r32ui ) uniform highp uimage2D)\r
+0:363 'P' (uniform highp 2-component vector of int)\r
+0:363 'datu' (temp highp uint)\r
+0:364 Function Call: imageAtomicAnd(iI21;vi2;i1; (global highp int)\r
+0:364 'im2Di' (layout(r32i ) uniform highp iimage2D)\r
+0:364 'P' (uniform highp 2-component vector of int)\r
+0:364 'dati' (temp highp int)\r
+0:365 Function Call: imageAtomicAnd(uI21;vi2;u1; (global highp uint)\r
+0:365 'im2Du' (layout(r32ui ) uniform highp uimage2D)\r
+0:365 'P' (uniform highp 2-component vector of int)\r
+0:365 'datu' (temp highp uint)\r
+0:366 Function Call: imageAtomicOr(iI21;vi2;i1; (global highp int)\r
+0:366 'im2Di' (layout(r32i ) uniform highp iimage2D)\r
+0:366 'P' (uniform highp 2-component vector of int)\r
+0:366 'dati' (temp highp int)\r
+0:367 Function Call: imageAtomicOr(uI21;vi2;u1; (global highp uint)\r
+0:367 'im2Du' (layout(r32ui ) uniform highp uimage2D)\r
+0:367 'P' (uniform highp 2-component vector of int)\r
+0:367 'datu' (temp highp uint)\r
+0:368 Function Call: imageAtomicXor(iI21;vi2;i1; (global highp int)\r
+0:368 'im2Di' (layout(r32i ) uniform highp iimage2D)\r
+0:368 'P' (uniform highp 2-component vector of int)\r
+0:368 'dati' (temp highp int)\r
+0:369 Function Call: imageAtomicXor(uI21;vi2;u1; (global highp uint)\r
+0:369 'im2Du' (layout(r32ui ) uniform highp uimage2D)\r
+0:369 'P' (uniform highp 2-component vector of int)\r
+0:369 'datu' (temp highp uint)\r
+0:370 Function Call: imageAtomicExchange(iI21;vi2;i1; (global highp int)\r
+0:370 'im2Di' (layout(r32i ) uniform highp iimage2D)\r
+0:370 'P' (uniform highp 2-component vector of int)\r
+0:370 'dati' (temp highp int)\r
+0:371 Function Call: imageAtomicExchange(uI21;vi2;u1; (global highp uint)\r
+0:371 'im2Du' (layout(r32ui ) uniform highp uimage2D)\r
+0:371 'P' (uniform highp 2-component vector of int)\r
+0:371 'datu' (temp highp uint)\r
+0:372 Function Call: imageAtomicExchange(I21;vi2;f1; (global highp float)\r
+0:372 'im2Df' (layout(r32f ) uniform highp image2D)\r
+0:372 'P' (uniform highp 2-component vector of int)\r
+0:372 'datf' (temp highp float)\r
+0:373 Function Call: imageAtomicCompSwap(iI21;vi2;i1;i1; (global highp int)\r
+0:373 'im2Di' (layout(r32i ) uniform highp iimage2D)\r
+0:373 'P' (uniform highp 2-component vector of int)\r
+0:373 Constant:\r
+0:373 3 (const int)\r
+0:373 'dati' (temp highp int)\r
+0:374 Function Call: imageAtomicCompSwap(uI21;vi2;u1;u1; (global highp uint)\r
+0:374 'im2Du' (layout(r32ui ) uniform highp uimage2D)\r
+0:374 'P' (uniform highp 2-component vector of int)\r
+0:374 Constant:\r
+0:374 5 (const uint)\r
+0:374 'datu' (temp highp uint)\r
0:? Linker Objects\r
0:? 's' (shared highp 4-component vector of float)\r
0:? 'v' (buffer highp 4-component vector of float)\r
0:? 'samp2DMSA' (uniform highp sampler2DMSArray)\r
0:? 'samp2DMSAi' (uniform highp isampler2DMSArray)\r
0:? 'samp2DMSAu' (uniform highp usampler2DMSArray)\r
+0:? 'im2Df' (layout(r32f ) uniform highp image2D)\r
+0:? 'im2Du' (layout(r32ui ) uniform highp uimage2D)\r
+0:? 'im2Di' (layout(r32i ) uniform highp iimage2D)\r
+0:? 'P' (uniform highp 2-component vector of int)\r
0:? 'gl_VertexID' (gl_VertexId highp int VertexId)\r
0:? 'gl_InstanceID' (gl_InstanceId highp int InstanceId)\r
\r
Shader version: 310\r
Requested GL_EXT_texture_buffer\r
Requested GL_OES_gpu_shader5\r
+Requested GL_OES_shader_image_atomic\r
Requested GL_OES_shader_io_blocks\r
Requested GL_OES_texture_buffer\r
Requested GL_OES_texture_cube_map_array\r
0:340 'tfsu' (temp highp 3-component vector of int)\r
0:340 Function Call: textureSize(usA2M1; (global highp 3-component vector of int)\r
0:340 'samp2DMSAu' (uniform highp usampler2DMSArray)\r
+0:352 Function Definition: goodImageAtom( (global void)\r
+0:352 Function Parameters: \r
+0:? Sequence\r
+0:358 Function Call: imageAtomicAdd(iI21;vi2;i1; (global highp int)\r
+0:358 'im2Di' (layout(r32i ) uniform highp iimage2D)\r
+0:358 'P' (uniform highp 2-component vector of int)\r
+0:358 'dati' (temp highp int)\r
+0:359 Function Call: imageAtomicAdd(uI21;vi2;u1; (global highp uint)\r
+0:359 'im2Du' (layout(r32ui ) uniform highp uimage2D)\r
+0:359 'P' (uniform highp 2-component vector of int)\r
+0:359 'datu' (temp highp uint)\r
+0:360 Function Call: imageAtomicMin(iI21;vi2;i1; (global highp int)\r
+0:360 'im2Di' (layout(r32i ) uniform highp iimage2D)\r
+0:360 'P' (uniform highp 2-component vector of int)\r
+0:360 'dati' (temp highp int)\r
+0:361 Function Call: imageAtomicMin(uI21;vi2;u1; (global highp uint)\r
+0:361 'im2Du' (layout(r32ui ) uniform highp uimage2D)\r
+0:361 'P' (uniform highp 2-component vector of int)\r
+0:361 'datu' (temp highp uint)\r
+0:362 Function Call: imageAtomicMax(iI21;vi2;i1; (global highp int)\r
+0:362 'im2Di' (layout(r32i ) uniform highp iimage2D)\r
+0:362 'P' (uniform highp 2-component vector of int)\r
+0:362 'dati' (temp highp int)\r
+0:363 Function Call: imageAtomicMax(uI21;vi2;u1; (global highp uint)\r
+0:363 'im2Du' (layout(r32ui ) uniform highp uimage2D)\r
+0:363 'P' (uniform highp 2-component vector of int)\r
+0:363 'datu' (temp highp uint)\r
+0:364 Function Call: imageAtomicAnd(iI21;vi2;i1; (global highp int)\r
+0:364 'im2Di' (layout(r32i ) uniform highp iimage2D)\r
+0:364 'P' (uniform highp 2-component vector of int)\r
+0:364 'dati' (temp highp int)\r
+0:365 Function Call: imageAtomicAnd(uI21;vi2;u1; (global highp uint)\r
+0:365 'im2Du' (layout(r32ui ) uniform highp uimage2D)\r
+0:365 'P' (uniform highp 2-component vector of int)\r
+0:365 'datu' (temp highp uint)\r
+0:366 Function Call: imageAtomicOr(iI21;vi2;i1; (global highp int)\r
+0:366 'im2Di' (layout(r32i ) uniform highp iimage2D)\r
+0:366 'P' (uniform highp 2-component vector of int)\r
+0:366 'dati' (temp highp int)\r
+0:367 Function Call: imageAtomicOr(uI21;vi2;u1; (global highp uint)\r
+0:367 'im2Du' (layout(r32ui ) uniform highp uimage2D)\r
+0:367 'P' (uniform highp 2-component vector of int)\r
+0:367 'datu' (temp highp uint)\r
+0:368 Function Call: imageAtomicXor(iI21;vi2;i1; (global highp int)\r
+0:368 'im2Di' (layout(r32i ) uniform highp iimage2D)\r
+0:368 'P' (uniform highp 2-component vector of int)\r
+0:368 'dati' (temp highp int)\r
+0:369 Function Call: imageAtomicXor(uI21;vi2;u1; (global highp uint)\r
+0:369 'im2Du' (layout(r32ui ) uniform highp uimage2D)\r
+0:369 'P' (uniform highp 2-component vector of int)\r
+0:369 'datu' (temp highp uint)\r
+0:370 Function Call: imageAtomicExchange(iI21;vi2;i1; (global highp int)\r
+0:370 'im2Di' (layout(r32i ) uniform highp iimage2D)\r
+0:370 'P' (uniform highp 2-component vector of int)\r
+0:370 'dati' (temp highp int)\r
+0:371 Function Call: imageAtomicExchange(uI21;vi2;u1; (global highp uint)\r
+0:371 'im2Du' (layout(r32ui ) uniform highp uimage2D)\r
+0:371 'P' (uniform highp 2-component vector of int)\r
+0:371 'datu' (temp highp uint)\r
+0:372 Function Call: imageAtomicExchange(I21;vi2;f1; (global highp float)\r
+0:372 'im2Df' (layout(r32f ) uniform highp image2D)\r
+0:372 'P' (uniform highp 2-component vector of int)\r
+0:372 'datf' (temp highp float)\r
+0:373 Function Call: imageAtomicCompSwap(iI21;vi2;i1;i1; (global highp int)\r
+0:373 'im2Di' (layout(r32i ) uniform highp iimage2D)\r
+0:373 'P' (uniform highp 2-component vector of int)\r
+0:373 Constant:\r
+0:373 3 (const int)\r
+0:373 'dati' (temp highp int)\r
+0:374 Function Call: imageAtomicCompSwap(uI21;vi2;u1;u1; (global highp uint)\r
+0:374 'im2Du' (layout(r32ui ) uniform highp uimage2D)\r
+0:374 'P' (uniform highp 2-component vector of int)\r
+0:374 Constant:\r
+0:374 5 (const uint)\r
+0:374 'datu' (temp highp uint)\r
0:? Linker Objects\r
0:? 's' (shared highp 4-component vector of float)\r
0:? 'v' (buffer highp 4-component vector of float)\r
0:? 'samp2DMSA' (uniform highp sampler2DMSArray)\r
0:? 'samp2DMSAi' (uniform highp isampler2DMSArray)\r
0:? 'samp2DMSAu' (uniform highp usampler2DMSArray)\r
+0:? 'im2Df' (layout(r32f ) uniform highp image2D)\r
+0:? 'im2Du' (layout(r32ui ) uniform highp uimage2D)\r
+0:? 'im2Di' (layout(r32i ) uniform highp iimage2D)\r
+0:? 'P' (uniform highp 2-component vector of int)\r
0:? 'gl_VertexID' (gl_VertexId highp int VertexId)\r
0:? 'gl_InstanceID' (gl_InstanceId highp int InstanceId)\r
\r
// For the version, it uses the latest git tag followed by the number of commits.
// For the date, it uses the current date (when then script is run).
-#define GLSLANG_REVISION "2.3.719"
+#define GLSLANG_REVISION "2.3.720"
#define GLSLANG_DATE "16-Aug-2015"
commonBuiltins.append(prefixes[sampler.type]);
commonBuiltins.append("vec4);\n");
- if (profile != EEsProfile) {
+ if ( profile != EEsProfile ||
+ (profile == EEsProfile && version >= 310)) {
if (sampler.type == EbtInt || sampler.type == EbtUint) {
const char* dataType = sampler.type == EbtInt ? "int" : "uint";
// not int or uint
// GL_ARB_ES3_1_compatibility
// TODO: spec issue: are there restrictions on the kind of layout() that can be used? what about dropping memory qualifiers?
- if (version >= 450) {
+ if ((profile != EEsProfile && version >= 450) ||
+ (profile == EEsProfile && version >= 310)) {
commonBuiltins.append("float imageAtomicExchange(volatile coherent ");
commonBuiltins.append(imageParams);
commonBuiltins.append(", float);\n");
symbolTable.setFunctionExtensions("fma", Num_AEP_gpu_shader5, AEP_gpu_shader5);
}
+ if (profile == EEsProfile) {
+ symbolTable.setFunctionExtensions("imageAtomicAdd", 1, &E_GL_OES_shader_image_atomic);
+ symbolTable.setFunctionExtensions("imageAtomicMin", 1, &E_GL_OES_shader_image_atomic);
+ symbolTable.setFunctionExtensions("imageAtomicMax", 1, &E_GL_OES_shader_image_atomic);
+ symbolTable.setFunctionExtensions("imageAtomicAnd", 1, &E_GL_OES_shader_image_atomic);
+ symbolTable.setFunctionExtensions("imageAtomicOr", 1, &E_GL_OES_shader_image_atomic);
+ symbolTable.setFunctionExtensions("imageAtomicXor", 1, &E_GL_OES_shader_image_atomic);
+ symbolTable.setFunctionExtensions("imageAtomicExchange", 1, &E_GL_OES_shader_image_atomic);
+ symbolTable.setFunctionExtensions("imageAtomicCompSwap", 1, &E_GL_OES_shader_image_atomic);
+ }
+
// Fall through
case EShLangTessControl:
symbolTable.setVariableExtensions("gl_FragDepthEXT", 1, &E_GL_EXT_frag_depth);
symbolTable.setVariableExtensions("gl_PrimitiveID", Num_AEP_geometry_shader, AEP_geometry_shader);
symbolTable.setVariableExtensions("gl_Layer", Num_AEP_geometry_shader, AEP_geometry_shader);
+
+ if (profile == EEsProfile) {
+ symbolTable.setFunctionExtensions("imageAtomicAdd", 1, &E_GL_OES_shader_image_atomic);
+ symbolTable.setFunctionExtensions("imageAtomicMin", 1, &E_GL_OES_shader_image_atomic);
+ symbolTable.setFunctionExtensions("imageAtomicMax", 1, &E_GL_OES_shader_image_atomic);
+ symbolTable.setFunctionExtensions("imageAtomicAnd", 1, &E_GL_OES_shader_image_atomic);
+ symbolTable.setFunctionExtensions("imageAtomicOr", 1, &E_GL_OES_shader_image_atomic);
+ symbolTable.setFunctionExtensions("imageAtomicXor", 1, &E_GL_OES_shader_image_atomic);
+ symbolTable.setFunctionExtensions("imageAtomicExchange", 1, &E_GL_OES_shader_image_atomic);
+ symbolTable.setFunctionExtensions("imageAtomicCompSwap", 1, &E_GL_OES_shader_image_atomic);
+ }
break;
case EShLangCompute:
if (imageType.getSampler().type == EbtInt || imageType.getSampler().type == EbtUint) {
if (imageType.getQualifier().layoutFormat != ElfR32i && imageType.getQualifier().layoutFormat != ElfR32ui)
error(loc, "only supported on image with format r32i or r32ui", fnCandidate.getName().c_str(), "");
- } else if (fnCandidate.getName().compare(0, 19, "imageAtomicExchange") != 0)
- error(loc, "only supported on integer images", fnCandidate.getName().c_str(), "");
+ } else {
+ if (fnCandidate.getName().compare(0, 19, "imageAtomicExchange") != 0)
+ error(loc, "only supported on integer images", fnCandidate.getName().c_str(), "");
+ else if (imageType.getQualifier().layoutFormat != ElfR32f && profile == EEsProfile)
+ error(loc, "only supported on image with format r32f", fnCandidate.getName().c_str(), "");
+ }
}
}
extensionBehavior[E_GL_ANDROID_extension_pack_es31a] = EBhDisablePartial;
extensionBehavior[E_GL_KHR_blend_equation_advanced] = EBhDisablePartial;
extensionBehavior[E_GL_OES_sample_variables] = EBhDisable;
- extensionBehavior[E_GL_OES_shader_image_atomic] = EBhDisablePartial;
+ extensionBehavior[E_GL_OES_shader_image_atomic] = EBhDisable;
extensionBehavior[E_GL_OES_shader_multisample_interpolation] = EBhDisablePartial;
extensionBehavior[E_GL_OES_texture_storage_multisample_2d_array] = EBhDisable;
extensionBehavior[E_GL_EXT_geometry_shader] = EBhDisable;