Front-end: Implement GL_OES_gpu_shader5.
This commit is contained in:
		
							parent
							
								
									ace4c45afc
								
							
						
					
					
						commit
						e3933d684d
					
				@ -30,11 +30,11 @@ void main()
 | 
				
			|||||||
    iv4 = textureGatherOffset(isamp2DA, vec3(0.1), ivec2(1), i);  // ERROR, last argument not const
 | 
					    iv4 = textureGatherOffset(isamp2DA, vec3(0.1), ivec2(1), i);  // ERROR, last argument not const
 | 
				
			||||||
    iv4 = textureGatherOffset(isamp2DA, vec3(0.1), ivec2(1), 4);  // ERROR, last argument out of range
 | 
					    iv4 = textureGatherOffset(isamp2DA, vec3(0.1), ivec2(1), 4);  // ERROR, last argument out of range
 | 
				
			||||||
    iv4 = textureGatherOffset(isamp2DA, vec3(0.1), ivec2(1), 1+2);
 | 
					    iv4 = textureGatherOffset(isamp2DA, vec3(0.1), ivec2(1), 1+2);
 | 
				
			||||||
    iv4 = textureGatherOffset(isamp2DA, vec3(0.1), ivec2(i));
 | 
					    iv4 = textureGatherOffset(isamp2DA, vec3(0.1), ivec2(0.5));
 | 
				
			||||||
 | 
					    iv4 = textureGatherOffset(isamp2DA, vec3(0.1), ivec2(i));     // ERROR, offset not constant
 | 
				
			||||||
}
 | 
					}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
out vec4 outp;
 | 
					out vec4 outp;
 | 
				
			||||||
 | 
					 | 
				
			||||||
void foo23()
 | 
					void foo23()
 | 
				
			||||||
{
 | 
					{
 | 
				
			||||||
    const ivec2[3] offsets = ivec2[3](ivec2(1,2), ivec2(3,4), ivec2(15,16));
 | 
					    const ivec2[3] offsets = ivec2[3](ivec2(1,2), ivec2(3,4), ivec2(15,16));
 | 
				
			||||||
@ -193,3 +193,32 @@ void foo_GS()
 | 
				
			|||||||
    highp int l = gl_Layer;
 | 
					    highp int l = gl_Layer;
 | 
				
			||||||
    highp int p = gl_PrimitiveID;
 | 
					    highp int p = gl_PrimitiveID;
 | 
				
			||||||
}
 | 
					}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					in vec2 inf, ing;
 | 
				
			||||||
 | 
					uniform ivec2 offsets[4];
 | 
				
			||||||
 | 
					uniform sampler2D sArray[4];
 | 
				
			||||||
 | 
					uniform int sIndex;
 | 
				
			||||||
 | 
					layout(binding = 0) uniform atomic_uint auArray[2];
 | 
				
			||||||
 | 
					uniform ubName { int i; } ubInst[4];
 | 
				
			||||||
 | 
					buffer bbName { int i; } bbInst[4];
 | 
				
			||||||
 | 
					uniform writeonly image2D iArray[5];
 | 
				
			||||||
 | 
					const ivec2 constOffsets[4] = ivec2[4](ivec2(0.1), ivec2(0.2), ivec2(0.3), ivec2(0.4));
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					void pfooBad()
 | 
				
			||||||
 | 
					{
 | 
				
			||||||
 | 
					    precise vec2 h;                                            // ERROR reserved
 | 
				
			||||||
 | 
					    h = fma(inf, ing, h);                                      // ERROR, not available
 | 
				
			||||||
 | 
					    textureGatherOffset(sArray[0], vec2(0.1), ivec2(inf));     // ERROR, offset not constant
 | 
				
			||||||
 | 
					    textureGatherOffsets(sArray[0], vec2(0.1), constOffsets);  // ERROR, not available
 | 
				
			||||||
 | 
					}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					#extension GL_OES_gpu_shader5 : enable
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					void pfoo()
 | 
				
			||||||
 | 
					{
 | 
				
			||||||
 | 
					    precise vec2 h;
 | 
				
			||||||
 | 
					    h = fma(inf, ing, h);
 | 
				
			||||||
 | 
					    textureGatherOffset(sArray[0], vec2(0.1), ivec2(inf));
 | 
				
			||||||
 | 
					    textureGatherOffsets(sArray[0], vec2(0.1), constOffsets);
 | 
				
			||||||
 | 
					    textureGatherOffsets(sArray[0], vec2(0.1), offsets);       // ERROR, offset not constant
 | 
				
			||||||
 | 
					}
 | 
				
			||||||
 | 
				
			|||||||
@ -139,3 +139,45 @@ centroid out cmo {              // ERROR, no centroid on a block
 | 
				
			|||||||
invariant out imo {             // ERROR, no invariant on a block
 | 
					invariant out imo {             // ERROR, no invariant on a block
 | 
				
			||||||
    int i;
 | 
					    int i;
 | 
				
			||||||
} imon;
 | 
					} imon;
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					in vec2 inf, ing;
 | 
				
			||||||
 | 
					uniform ivec2 offsets[4];
 | 
				
			||||||
 | 
					uniform sampler2D sArray[4];
 | 
				
			||||||
 | 
					uniform int sIndex;
 | 
				
			||||||
 | 
					layout(binding = 0) uniform atomic_uint auArray[2];
 | 
				
			||||||
 | 
					uniform ubName { int i; } ubInst[4];
 | 
				
			||||||
 | 
					buffer bbName { int i; } bbInst[4];
 | 
				
			||||||
 | 
					uniform writeonly image2D iArray[5];
 | 
				
			||||||
 | 
					const ivec2 constOffsets[4] = ivec2[4](ivec2(0.1), ivec2(0.2), ivec2(0.3), ivec2(0.4));
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					void pfooBad()
 | 
				
			||||||
 | 
					{
 | 
				
			||||||
 | 
					    precise vec2 h;          // ERROR reserved
 | 
				
			||||||
 | 
					    h = fma(inf, ing, h);    // ERROR, not available
 | 
				
			||||||
 | 
					    sArray[sIndex + 1];      // ERRRO, not supported
 | 
				
			||||||
 | 
					    auArray[sIndex + 1];
 | 
				
			||||||
 | 
					    ubInst[1];
 | 
				
			||||||
 | 
					    bbInst[2];
 | 
				
			||||||
 | 
					    ubInst[sIndex + 1];      // ERRRO, not supported
 | 
				
			||||||
 | 
					    bbInst[sIndex];          // ERRRO, not supported
 | 
				
			||||||
 | 
					    iArray[2];
 | 
				
			||||||
 | 
					    iArray[sIndex * 2];      // ERRRO, not supported
 | 
				
			||||||
 | 
					    textureGatherOffset(sArray[0], vec2(0.1), ivec2(inf));     // ERROR, offset not constant
 | 
				
			||||||
 | 
					    textureGatherOffsets(sArray[0], vec2(0.1), constOffsets);  // ERROR, not available
 | 
				
			||||||
 | 
					}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					#extension GL_OES_gpu_shader5 : enable
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					void pfoo()
 | 
				
			||||||
 | 
					{
 | 
				
			||||||
 | 
					    precise vec2 h;
 | 
				
			||||||
 | 
					    h = fma(inf, ing, h);
 | 
				
			||||||
 | 
					    sArray[sIndex + 1];
 | 
				
			||||||
 | 
					    ubInst[sIndex + 1];
 | 
				
			||||||
 | 
					    bbInst[sIndex - 2];      // ERROR, still not supported
 | 
				
			||||||
 | 
					    iArray[2];
 | 
				
			||||||
 | 
					    iArray[sIndex - 2];
 | 
				
			||||||
 | 
					    textureGatherOffset(sArray[0], vec2(0.1), ivec2(inf));
 | 
				
			||||||
 | 
					    textureGatherOffsets(sArray[0], vec2(0.1), constOffsets);
 | 
				
			||||||
 | 
					    textureGatherOffsets(sArray[0], vec2(0.1), offsets);   // ERROR, offset not constant
 | 
				
			||||||
 | 
					}
 | 
				
			||||||
 | 
				
			|||||||
@ -10,7 +10,7 @@ ERROR: 0:63: 'texel offset' : argument must be compile-time constant
 | 
				
			|||||||
ERROR: 0:64: 'texel offset' : argument must be compile-time constant 
 | 
					ERROR: 0:64: 'texel offset' : argument must be compile-time constant 
 | 
				
			||||||
ERROR: 0:66: 'texel offset' : argument must be compile-time constant 
 | 
					ERROR: 0:66: 'texel offset' : argument must be compile-time constant 
 | 
				
			||||||
ERROR: 0:68: 'texel offset' : argument must be compile-time constant 
 | 
					ERROR: 0:68: 'texel offset' : argument must be compile-time constant 
 | 
				
			||||||
ERROR: 0:69: 'variable indexing sampler array' : not supported with this profile: es
 | 
					ERROR: 0:69: 'variable indexing sampler array' : not supported for this version or the enabled extensions 
 | 
				
			||||||
ERROR: 0:73: 'texel offset' : argument must be compile-time constant 
 | 
					ERROR: 0:73: 'texel offset' : argument must be compile-time constant 
 | 
				
			||||||
ERROR: 0:83: 'double' : Reserved word. 
 | 
					ERROR: 0:83: 'double' : Reserved word. 
 | 
				
			||||||
ERROR: 0:83: 'double' : not supported with this profile: es
 | 
					ERROR: 0:83: 'double' : not supported with this profile: es
 | 
				
			||||||
 | 
				
			|||||||
@ -2,7 +2,7 @@
 | 
				
			|||||||
ERROR: 0:10: '' : cannot nest a structure definition inside a structure or block 
 | 
					ERROR: 0:10: '' : cannot nest a structure definition inside a structure or block 
 | 
				
			||||||
ERROR: 0:21: '' : cannot nest a structure definition inside a structure or block 
 | 
					ERROR: 0:21: '' : cannot nest a structure definition inside a structure or block 
 | 
				
			||||||
ERROR: 0:20: 'sampler' : member of block cannot be a sampler type 
 | 
					ERROR: 0:20: 'sampler' : member of block cannot be a sampler type 
 | 
				
			||||||
ERROR: 0:45: 'variable indexing block array' : not supported with this profile: es
 | 
					ERROR: 0:45: 'variable indexing uniform block array' : not supported for this version or the enabled extensions 
 | 
				
			||||||
ERROR: 4 compilation errors.  No code generated.
 | 
					ERROR: 4 compilation errors.  No code generated.
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
				
			|||||||
@ -7,11 +7,12 @@ ERROR: 0:8: 'gl_FragCoord' : identifiers starting with "gl_" are reserved
 | 
				
			|||||||
ERROR: 0:11: 'location' : overlapping use of location 2
 | 
					ERROR: 0:11: 'location' : overlapping use of location 2
 | 
				
			||||||
ERROR: 0:15: 'usampler2DRect' : Reserved word. 
 | 
					ERROR: 0:15: 'usampler2DRect' : Reserved word. 
 | 
				
			||||||
ERROR: 0:15: 'sampler/image' : type requires declaration of default precision qualifier 
 | 
					ERROR: 0:15: 'sampler/image' : type requires declaration of default precision qualifier 
 | 
				
			||||||
ERROR: 0:23: 'variable indexing sampler array' : not supported with this profile: es
 | 
					ERROR: 0:23: 'variable indexing sampler array' : not supported for this version or the enabled extensions 
 | 
				
			||||||
ERROR: 0:27: 'textureGatherOffsets' : no matching overloaded function found 
 | 
					ERROR: 0:27: 'textureGatherOffsets' : no matching overloaded function found 
 | 
				
			||||||
ERROR: 0:27: '=' :  cannot convert from 'const float' to 'temp mediump 4-component vector of uint'
 | 
					ERROR: 0:27: '=' :  cannot convert from 'const float' to 'temp mediump 4-component vector of uint'
 | 
				
			||||||
ERROR: 0:30: 'textureGatherOffset(...)' : must be a compile-time constant: component argument
 | 
					ERROR: 0:30: 'textureGatherOffset(...)' : must be a compile-time constant: component argument
 | 
				
			||||||
ERROR: 0:31: 'textureGatherOffset(...)' : must be 0, 1, 2, or 3: component argument
 | 
					ERROR: 0:31: 'textureGatherOffset(...)' : must be 0, 1, 2, or 3: component argument
 | 
				
			||||||
 | 
					ERROR: 0:34: 'non-constant offset argument' : not supported for this version or the enabled extensions 
 | 
				
			||||||
ERROR: 0:42: 'texel offset' : argument must be compile-time constant 
 | 
					ERROR: 0:42: 'texel offset' : argument must be compile-time constant 
 | 
				
			||||||
ERROR: 0:44: 'texel offset' : value is out of range: [gl_MinProgramTexelOffset, gl_MaxProgramTexelOffset]
 | 
					ERROR: 0:44: 'texel offset' : value is out of range: [gl_MinProgramTexelOffset, gl_MaxProgramTexelOffset]
 | 
				
			||||||
ERROR: 0:44: 'texel offset' : value is out of range: [gl_MinProgramTexelOffset, gl_MaxProgramTexelOffset]
 | 
					ERROR: 0:44: 'texel offset' : value is out of range: [gl_MinProgramTexelOffset, gl_MaxProgramTexelOffset]
 | 
				
			||||||
@ -49,7 +50,7 @@ ERROR: 0:148: 'inbname2' : Cannot reuse block name within the same interface: in
 | 
				
			|||||||
ERROR: 0:153: 'badmember' : nameless block contains a member that already has a name at global scope 
 | 
					ERROR: 0:153: 'badmember' : nameless block contains a member that already has a name at global scope 
 | 
				
			||||||
ERROR: 0:157: 'inbname' : redefinition 
 | 
					ERROR: 0:157: 'inbname' : redefinition 
 | 
				
			||||||
ERROR: 0:159: 'vAnon' : redefinition 
 | 
					ERROR: 0:159: 'vAnon' : redefinition 
 | 
				
			||||||
ERROR: 0:169: 'variable indexing block array' : not supported with this profile: es
 | 
					ERROR: 0:169: 'variable indexing in/out block array' : not supported with this profile: es
 | 
				
			||||||
ERROR: 0:173: 'origin_upper_left' : not supported with this profile: es
 | 
					ERROR: 0:173: 'origin_upper_left' : not supported with this profile: es
 | 
				
			||||||
ERROR: 0:173: 'pixel_center_integer' : not supported with this profile: es
 | 
					ERROR: 0:173: 'pixel_center_integer' : not supported with this profile: es
 | 
				
			||||||
ERROR: 0:173: 'redeclaration' : cannot redeclare with different qualification: gl_FragCoord
 | 
					ERROR: 0:173: 'redeclaration' : cannot redeclare with different qualification: gl_FragCoord
 | 
				
			||||||
@ -61,12 +62,22 @@ GL_OES_geometry_shader
 | 
				
			|||||||
ERROR: 0:183: 'gl_PrimitiveID' : required extension not requested: Possible extensions include:
 | 
					ERROR: 0:183: 'gl_PrimitiveID' : required extension not requested: Possible extensions include:
 | 
				
			||||||
GL_EXT_geometry_shader
 | 
					GL_EXT_geometry_shader
 | 
				
			||||||
GL_OES_geometry_shader
 | 
					GL_OES_geometry_shader
 | 
				
			||||||
ERROR: 56 compilation errors.  No code generated.
 | 
					ERROR: 0:209: 'precise' : Reserved word. 
 | 
				
			||||||
 | 
					ERROR: 0:210: 'fma' : required extension not requested: Possible extensions include:
 | 
				
			||||||
 | 
					GL_EXT_gpu_shader5
 | 
				
			||||||
 | 
					GL_OES_gpu_shader5
 | 
				
			||||||
 | 
					ERROR: 0:211: 'non-constant offset argument' : not supported for this version or the enabled extensions 
 | 
				
			||||||
 | 
					ERROR: 0:212: 'textureGatherOffsets' : required extension not requested: Possible extensions include:
 | 
				
			||||||
 | 
					GL_EXT_gpu_shader5
 | 
				
			||||||
 | 
					GL_OES_gpu_shader5
 | 
				
			||||||
 | 
					ERROR: 0:223: 'textureGatherOffsets(...)' : must be a compile-time constant: offsets argument
 | 
				
			||||||
 | 
					ERROR: 62 compilation errors.  No code generated.
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					
 | 
				
			||||||
Shader version: 310
 | 
					Shader version: 310
 | 
				
			||||||
Requested GL_EXT_shader_io_blocks
 | 
					Requested GL_EXT_shader_io_blocks
 | 
				
			||||||
Requested GL_OES_geometry_shader
 | 
					Requested GL_OES_geometry_shader
 | 
				
			||||||
 | 
					Requested GL_OES_gpu_shader5
 | 
				
			||||||
Requested GL_OES_shader_io_blocks
 | 
					Requested GL_OES_shader_io_blocks
 | 
				
			||||||
gl_FragCoord pixel center is integer
 | 
					gl_FragCoord pixel center is integer
 | 
				
			||||||
gl_FragCoord origin is upper left
 | 
					gl_FragCoord origin is upper left
 | 
				
			||||||
@ -153,8 +164,19 @@ ERROR: node is still EOpNull!
 | 
				
			|||||||
0:33            0.100000
 | 
					0:33            0.100000
 | 
				
			||||||
0:33            0.100000
 | 
					0:33            0.100000
 | 
				
			||||||
0:33            0.100000
 | 
					0:33            0.100000
 | 
				
			||||||
0:33          Construct ivec2 (temp 2-component vector of int)
 | 
					0:33          Constant:
 | 
				
			||||||
0:33            'i' (uniform mediump int)
 | 
					0:33            0 (const int)
 | 
				
			||||||
 | 
					0:33            0 (const int)
 | 
				
			||||||
 | 
					0:34      move second child to first child (temp mediump 4-component vector of int)
 | 
				
			||||||
 | 
					0:34        'iv4' (temp mediump 4-component vector of int)
 | 
				
			||||||
 | 
					0:34        Function Call: textureGatherOffset(isA21;vf3;vi2; (global mediump 4-component vector of int)
 | 
				
			||||||
 | 
					0:34          'isamp2DA' (uniform highp isampler2DArray)
 | 
				
			||||||
 | 
					0:34          Constant:
 | 
				
			||||||
 | 
					0:34            0.100000
 | 
				
			||||||
 | 
					0:34            0.100000
 | 
				
			||||||
 | 
					0:34            0.100000
 | 
				
			||||||
 | 
					0:34          Construct ivec2 (temp 2-component vector of int)
 | 
				
			||||||
 | 
					0:34            'i' (uniform mediump int)
 | 
				
			||||||
0:38  Function Definition: foo23( (global void)
 | 
					0:38  Function Definition: foo23( (global void)
 | 
				
			||||||
0:38    Function Parameters: 
 | 
					0:38    Function Parameters: 
 | 
				
			||||||
0:?     Sequence
 | 
					0:?     Sequence
 | 
				
			||||||
@ -341,6 +363,87 @@ ERROR: node is still EOpNull!
 | 
				
			|||||||
0:194        move second child to first child (temp highp int)
 | 
					0:194        move second child to first child (temp highp int)
 | 
				
			||||||
0:194          'p' (temp highp int)
 | 
					0:194          'p' (temp highp int)
 | 
				
			||||||
0:194          'gl_PrimitiveID' (flat in highp int PrimitiveID)
 | 
					0:194          'gl_PrimitiveID' (flat in highp int PrimitiveID)
 | 
				
			||||||
 | 
					0:207  Function Definition: pfooBad( (global void)
 | 
				
			||||||
 | 
					0:207    Function Parameters: 
 | 
				
			||||||
 | 
					0:?     Sequence
 | 
				
			||||||
 | 
					0:210      move second child to first child (temp mediump 2-component vector of float)
 | 
				
			||||||
 | 
					0:210        'h' (temp mediump 2-component vector of float)
 | 
				
			||||||
 | 
					0:210        Function Call: fma(vf2;vf2;vf2; (global mediump 2-component vector of float)
 | 
				
			||||||
 | 
					0:210          'inf' (smooth in mediump 2-component vector of float)
 | 
				
			||||||
 | 
					0:210          'ing' (smooth in mediump 2-component vector of float)
 | 
				
			||||||
 | 
					0:210          'h' (temp mediump 2-component vector of float)
 | 
				
			||||||
 | 
					0:211      Function Call: textureGatherOffset(s21;vf2;vi2; (global highp 4-component vector of float)
 | 
				
			||||||
 | 
					0:211        direct index (temp highp sampler2D)
 | 
				
			||||||
 | 
					0:211          'sArray' (uniform 4-element array of highp sampler2D)
 | 
				
			||||||
 | 
					0:211          Constant:
 | 
				
			||||||
 | 
					0:211            0 (const int)
 | 
				
			||||||
 | 
					0:211        Constant:
 | 
				
			||||||
 | 
					0:211          0.100000
 | 
				
			||||||
 | 
					0:211          0.100000
 | 
				
			||||||
 | 
					0:211        Convert float to int (temp 2-component vector of int)
 | 
				
			||||||
 | 
					0:211          'inf' (smooth in mediump 2-component vector of float)
 | 
				
			||||||
 | 
					0:212      Function Call: textureGatherOffsets(s21;vf2;vi2[4]; (global highp 4-component vector of float)
 | 
				
			||||||
 | 
					0:212        direct index (temp highp sampler2D)
 | 
				
			||||||
 | 
					0:212          'sArray' (uniform 4-element array of highp sampler2D)
 | 
				
			||||||
 | 
					0:212          Constant:
 | 
				
			||||||
 | 
					0:212            0 (const int)
 | 
				
			||||||
 | 
					0:212        Constant:
 | 
				
			||||||
 | 
					0:212          0.100000
 | 
				
			||||||
 | 
					0:212          0.100000
 | 
				
			||||||
 | 
					0:212        Constant:
 | 
				
			||||||
 | 
					0:212          0 (const int)
 | 
				
			||||||
 | 
					0:212          0 (const int)
 | 
				
			||||||
 | 
					0:212          0 (const int)
 | 
				
			||||||
 | 
					0:212          0 (const int)
 | 
				
			||||||
 | 
					0:212          0 (const int)
 | 
				
			||||||
 | 
					0:212          0 (const int)
 | 
				
			||||||
 | 
					0:212          0 (const int)
 | 
				
			||||||
 | 
					0:212          0 (const int)
 | 
				
			||||||
 | 
					0:217  Function Definition: pfoo( (global void)
 | 
				
			||||||
 | 
					0:217    Function Parameters: 
 | 
				
			||||||
 | 
					0:?     Sequence
 | 
				
			||||||
 | 
					0:220      move second child to first child (temp mediump 2-component vector of float)
 | 
				
			||||||
 | 
					0:220        'h' (temp mediump 2-component vector of float)
 | 
				
			||||||
 | 
					0:220        Function Call: fma(vf2;vf2;vf2; (global mediump 2-component vector of float)
 | 
				
			||||||
 | 
					0:220          'inf' (smooth in mediump 2-component vector of float)
 | 
				
			||||||
 | 
					0:220          'ing' (smooth in mediump 2-component vector of float)
 | 
				
			||||||
 | 
					0:220          'h' (temp mediump 2-component vector of float)
 | 
				
			||||||
 | 
					0:221      Function Call: textureGatherOffset(s21;vf2;vi2; (global highp 4-component vector of float)
 | 
				
			||||||
 | 
					0:221        direct index (temp highp sampler2D)
 | 
				
			||||||
 | 
					0:221          'sArray' (uniform 4-element array of highp sampler2D)
 | 
				
			||||||
 | 
					0:221          Constant:
 | 
				
			||||||
 | 
					0:221            0 (const int)
 | 
				
			||||||
 | 
					0:221        Constant:
 | 
				
			||||||
 | 
					0:221          0.100000
 | 
				
			||||||
 | 
					0:221          0.100000
 | 
				
			||||||
 | 
					0:221        Convert float to int (temp 2-component vector of int)
 | 
				
			||||||
 | 
					0:221          'inf' (smooth in mediump 2-component vector of float)
 | 
				
			||||||
 | 
					0:222      Function Call: textureGatherOffsets(s21;vf2;vi2[4]; (global highp 4-component vector of float)
 | 
				
			||||||
 | 
					0:222        direct index (temp highp sampler2D)
 | 
				
			||||||
 | 
					0:222          'sArray' (uniform 4-element array of highp sampler2D)
 | 
				
			||||||
 | 
					0:222          Constant:
 | 
				
			||||||
 | 
					0:222            0 (const int)
 | 
				
			||||||
 | 
					0:222        Constant:
 | 
				
			||||||
 | 
					0:222          0.100000
 | 
				
			||||||
 | 
					0:222          0.100000
 | 
				
			||||||
 | 
					0:222        Constant:
 | 
				
			||||||
 | 
					0:222          0 (const int)
 | 
				
			||||||
 | 
					0:222          0 (const int)
 | 
				
			||||||
 | 
					0:222          0 (const int)
 | 
				
			||||||
 | 
					0:222          0 (const int)
 | 
				
			||||||
 | 
					0:222          0 (const int)
 | 
				
			||||||
 | 
					0:222          0 (const int)
 | 
				
			||||||
 | 
					0:222          0 (const int)
 | 
				
			||||||
 | 
					0:222          0 (const int)
 | 
				
			||||||
 | 
					0:223      Function Call: textureGatherOffsets(s21;vf2;vi2[4]; (global highp 4-component vector of float)
 | 
				
			||||||
 | 
					0:223        direct index (temp highp sampler2D)
 | 
				
			||||||
 | 
					0:223          'sArray' (uniform 4-element array of highp sampler2D)
 | 
				
			||||||
 | 
					0:223          Constant:
 | 
				
			||||||
 | 
					0:223            0 (const int)
 | 
				
			||||||
 | 
					0:223        Constant:
 | 
				
			||||||
 | 
					0:223          0.100000
 | 
				
			||||||
 | 
					0:223          0.100000
 | 
				
			||||||
 | 
					0:223        'offsets' (uniform 4-element array of mediump 2-component vector of int)
 | 
				
			||||||
0:?   Linker Objects
 | 
					0:?   Linker Objects
 | 
				
			||||||
0:?     'gl_FragCoord' (smooth in mediump 4-component vector of float)
 | 
					0:?     'gl_FragCoord' (smooth in mediump 4-component vector of float)
 | 
				
			||||||
0:?     'v3' (layout(location=2 ) smooth in mediump 3-component vector of float)
 | 
					0:?     'v3' (layout(location=2 ) smooth in mediump 3-component vector of float)
 | 
				
			||||||
@ -389,6 +492,24 @@ ERROR: node is still EOpNull!
 | 
				
			|||||||
0:?     'arrayedInst' (in 4-element array of block{in mediump float f})
 | 
					0:?     'arrayedInst' (in 4-element array of block{in mediump float f})
 | 
				
			||||||
0:?     'gl_FragDepth' (gl_FragDepth highp float FragDepth)
 | 
					0:?     'gl_FragDepth' (gl_FragDepth highp float FragDepth)
 | 
				
			||||||
0:?     'gl_FragDepth' (gl_FragDepth highp float FragDepth)
 | 
					0:?     'gl_FragDepth' (gl_FragDepth highp float FragDepth)
 | 
				
			||||||
 | 
					0:?     'inf' (smooth in mediump 2-component vector of float)
 | 
				
			||||||
 | 
					0:?     'ing' (smooth in mediump 2-component vector of float)
 | 
				
			||||||
 | 
					0:?     'offsets' (uniform 4-element array of mediump 2-component vector of int)
 | 
				
			||||||
 | 
					0:?     'sArray' (uniform 4-element array of highp sampler2D)
 | 
				
			||||||
 | 
					0:?     'sIndex' (uniform mediump int)
 | 
				
			||||||
 | 
					0:?     'auArray' (layout(binding=0 offset=0 ) uniform 2-element array of highp atomic_uint)
 | 
				
			||||||
 | 
					0:?     'ubInst' (layout(column_major shared ) uniform 4-element array of block{layout(column_major shared ) uniform mediump int i})
 | 
				
			||||||
 | 
					0:?     'bbInst' (layout(column_major shared ) buffer 4-element array of block{layout(column_major shared ) buffer mediump int i})
 | 
				
			||||||
 | 
					0:?     'iArray' (writeonly uniform 5-element array of highp image2D)
 | 
				
			||||||
 | 
					0:?     'constOffsets' (const 4-element array of mediump 2-component vector of int)
 | 
				
			||||||
 | 
					0:?       0 (const int)
 | 
				
			||||||
 | 
					0:?       0 (const int)
 | 
				
			||||||
 | 
					0:?       0 (const int)
 | 
				
			||||||
 | 
					0:?       0 (const int)
 | 
				
			||||||
 | 
					0:?       0 (const int)
 | 
				
			||||||
 | 
					0:?       0 (const int)
 | 
				
			||||||
 | 
					0:?       0 (const int)
 | 
				
			||||||
 | 
					0:?       0 (const int)
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					
 | 
				
			||||||
Linked fragment stage:
 | 
					Linked fragment stage:
 | 
				
			||||||
@ -398,6 +519,7 @@ ERROR: Linking fragment stage: when more than one fragment shader output, all mu
 | 
				
			|||||||
Shader version: 310
 | 
					Shader version: 310
 | 
				
			||||||
Requested GL_EXT_shader_io_blocks
 | 
					Requested GL_EXT_shader_io_blocks
 | 
				
			||||||
Requested GL_OES_geometry_shader
 | 
					Requested GL_OES_geometry_shader
 | 
				
			||||||
 | 
					Requested GL_OES_gpu_shader5
 | 
				
			||||||
Requested GL_OES_shader_io_blocks
 | 
					Requested GL_OES_shader_io_blocks
 | 
				
			||||||
gl_FragCoord pixel center is integer
 | 
					gl_FragCoord pixel center is integer
 | 
				
			||||||
gl_FragCoord origin is upper left
 | 
					gl_FragCoord origin is upper left
 | 
				
			||||||
@ -484,8 +606,19 @@ ERROR: node is still EOpNull!
 | 
				
			|||||||
0:33            0.100000
 | 
					0:33            0.100000
 | 
				
			||||||
0:33            0.100000
 | 
					0:33            0.100000
 | 
				
			||||||
0:33            0.100000
 | 
					0:33            0.100000
 | 
				
			||||||
0:33          Construct ivec2 (temp 2-component vector of int)
 | 
					0:33          Constant:
 | 
				
			||||||
0:33            'i' (uniform mediump int)
 | 
					0:33            0 (const int)
 | 
				
			||||||
 | 
					0:33            0 (const int)
 | 
				
			||||||
 | 
					0:34      move second child to first child (temp mediump 4-component vector of int)
 | 
				
			||||||
 | 
					0:34        'iv4' (temp mediump 4-component vector of int)
 | 
				
			||||||
 | 
					0:34        Function Call: textureGatherOffset(isA21;vf3;vi2; (global mediump 4-component vector of int)
 | 
				
			||||||
 | 
					0:34          'isamp2DA' (uniform highp isampler2DArray)
 | 
				
			||||||
 | 
					0:34          Constant:
 | 
				
			||||||
 | 
					0:34            0.100000
 | 
				
			||||||
 | 
					0:34            0.100000
 | 
				
			||||||
 | 
					0:34            0.100000
 | 
				
			||||||
 | 
					0:34          Construct ivec2 (temp 2-component vector of int)
 | 
				
			||||||
 | 
					0:34            'i' (uniform mediump int)
 | 
				
			||||||
0:38  Function Definition: foo23( (global void)
 | 
					0:38  Function Definition: foo23( (global void)
 | 
				
			||||||
0:38    Function Parameters: 
 | 
					0:38    Function Parameters: 
 | 
				
			||||||
0:?     Sequence
 | 
					0:?     Sequence
 | 
				
			||||||
@ -672,6 +805,87 @@ ERROR: node is still EOpNull!
 | 
				
			|||||||
0:194        move second child to first child (temp highp int)
 | 
					0:194        move second child to first child (temp highp int)
 | 
				
			||||||
0:194          'p' (temp highp int)
 | 
					0:194          'p' (temp highp int)
 | 
				
			||||||
0:194          'gl_PrimitiveID' (flat in highp int PrimitiveID)
 | 
					0:194          'gl_PrimitiveID' (flat in highp int PrimitiveID)
 | 
				
			||||||
 | 
					0:207  Function Definition: pfooBad( (global void)
 | 
				
			||||||
 | 
					0:207    Function Parameters: 
 | 
				
			||||||
 | 
					0:?     Sequence
 | 
				
			||||||
 | 
					0:210      move second child to first child (temp mediump 2-component vector of float)
 | 
				
			||||||
 | 
					0:210        'h' (temp mediump 2-component vector of float)
 | 
				
			||||||
 | 
					0:210        Function Call: fma(vf2;vf2;vf2; (global mediump 2-component vector of float)
 | 
				
			||||||
 | 
					0:210          'inf' (smooth in mediump 2-component vector of float)
 | 
				
			||||||
 | 
					0:210          'ing' (smooth in mediump 2-component vector of float)
 | 
				
			||||||
 | 
					0:210          'h' (temp mediump 2-component vector of float)
 | 
				
			||||||
 | 
					0:211      Function Call: textureGatherOffset(s21;vf2;vi2; (global highp 4-component vector of float)
 | 
				
			||||||
 | 
					0:211        direct index (temp highp sampler2D)
 | 
				
			||||||
 | 
					0:211          'sArray' (uniform 4-element array of highp sampler2D)
 | 
				
			||||||
 | 
					0:211          Constant:
 | 
				
			||||||
 | 
					0:211            0 (const int)
 | 
				
			||||||
 | 
					0:211        Constant:
 | 
				
			||||||
 | 
					0:211          0.100000
 | 
				
			||||||
 | 
					0:211          0.100000
 | 
				
			||||||
 | 
					0:211        Convert float to int (temp 2-component vector of int)
 | 
				
			||||||
 | 
					0:211          'inf' (smooth in mediump 2-component vector of float)
 | 
				
			||||||
 | 
					0:212      Function Call: textureGatherOffsets(s21;vf2;vi2[4]; (global highp 4-component vector of float)
 | 
				
			||||||
 | 
					0:212        direct index (temp highp sampler2D)
 | 
				
			||||||
 | 
					0:212          'sArray' (uniform 4-element array of highp sampler2D)
 | 
				
			||||||
 | 
					0:212          Constant:
 | 
				
			||||||
 | 
					0:212            0 (const int)
 | 
				
			||||||
 | 
					0:212        Constant:
 | 
				
			||||||
 | 
					0:212          0.100000
 | 
				
			||||||
 | 
					0:212          0.100000
 | 
				
			||||||
 | 
					0:212        Constant:
 | 
				
			||||||
 | 
					0:212          0 (const int)
 | 
				
			||||||
 | 
					0:212          0 (const int)
 | 
				
			||||||
 | 
					0:212          0 (const int)
 | 
				
			||||||
 | 
					0:212          0 (const int)
 | 
				
			||||||
 | 
					0:212          0 (const int)
 | 
				
			||||||
 | 
					0:212          0 (const int)
 | 
				
			||||||
 | 
					0:212          0 (const int)
 | 
				
			||||||
 | 
					0:212          0 (const int)
 | 
				
			||||||
 | 
					0:217  Function Definition: pfoo( (global void)
 | 
				
			||||||
 | 
					0:217    Function Parameters: 
 | 
				
			||||||
 | 
					0:?     Sequence
 | 
				
			||||||
 | 
					0:220      move second child to first child (temp mediump 2-component vector of float)
 | 
				
			||||||
 | 
					0:220        'h' (temp mediump 2-component vector of float)
 | 
				
			||||||
 | 
					0:220        Function Call: fma(vf2;vf2;vf2; (global mediump 2-component vector of float)
 | 
				
			||||||
 | 
					0:220          'inf' (smooth in mediump 2-component vector of float)
 | 
				
			||||||
 | 
					0:220          'ing' (smooth in mediump 2-component vector of float)
 | 
				
			||||||
 | 
					0:220          'h' (temp mediump 2-component vector of float)
 | 
				
			||||||
 | 
					0:221      Function Call: textureGatherOffset(s21;vf2;vi2; (global highp 4-component vector of float)
 | 
				
			||||||
 | 
					0:221        direct index (temp highp sampler2D)
 | 
				
			||||||
 | 
					0:221          'sArray' (uniform 4-element array of highp sampler2D)
 | 
				
			||||||
 | 
					0:221          Constant:
 | 
				
			||||||
 | 
					0:221            0 (const int)
 | 
				
			||||||
 | 
					0:221        Constant:
 | 
				
			||||||
 | 
					0:221          0.100000
 | 
				
			||||||
 | 
					0:221          0.100000
 | 
				
			||||||
 | 
					0:221        Convert float to int (temp 2-component vector of int)
 | 
				
			||||||
 | 
					0:221          'inf' (smooth in mediump 2-component vector of float)
 | 
				
			||||||
 | 
					0:222      Function Call: textureGatherOffsets(s21;vf2;vi2[4]; (global highp 4-component vector of float)
 | 
				
			||||||
 | 
					0:222        direct index (temp highp sampler2D)
 | 
				
			||||||
 | 
					0:222          'sArray' (uniform 4-element array of highp sampler2D)
 | 
				
			||||||
 | 
					0:222          Constant:
 | 
				
			||||||
 | 
					0:222            0 (const int)
 | 
				
			||||||
 | 
					0:222        Constant:
 | 
				
			||||||
 | 
					0:222          0.100000
 | 
				
			||||||
 | 
					0:222          0.100000
 | 
				
			||||||
 | 
					0:222        Constant:
 | 
				
			||||||
 | 
					0:222          0 (const int)
 | 
				
			||||||
 | 
					0:222          0 (const int)
 | 
				
			||||||
 | 
					0:222          0 (const int)
 | 
				
			||||||
 | 
					0:222          0 (const int)
 | 
				
			||||||
 | 
					0:222          0 (const int)
 | 
				
			||||||
 | 
					0:222          0 (const int)
 | 
				
			||||||
 | 
					0:222          0 (const int)
 | 
				
			||||||
 | 
					0:222          0 (const int)
 | 
				
			||||||
 | 
					0:223      Function Call: textureGatherOffsets(s21;vf2;vi2[4]; (global highp 4-component vector of float)
 | 
				
			||||||
 | 
					0:223        direct index (temp highp sampler2D)
 | 
				
			||||||
 | 
					0:223          'sArray' (uniform 4-element array of highp sampler2D)
 | 
				
			||||||
 | 
					0:223          Constant:
 | 
				
			||||||
 | 
					0:223            0 (const int)
 | 
				
			||||||
 | 
					0:223        Constant:
 | 
				
			||||||
 | 
					0:223          0.100000
 | 
				
			||||||
 | 
					0:223          0.100000
 | 
				
			||||||
 | 
					0:223        'offsets' (uniform 4-element array of mediump 2-component vector of int)
 | 
				
			||||||
0:?   Linker Objects
 | 
					0:?   Linker Objects
 | 
				
			||||||
0:?     'gl_FragCoord' (smooth in mediump 4-component vector of float)
 | 
					0:?     'gl_FragCoord' (smooth in mediump 4-component vector of float)
 | 
				
			||||||
0:?     'v3' (layout(location=2 ) smooth in mediump 3-component vector of float)
 | 
					0:?     'v3' (layout(location=2 ) smooth in mediump 3-component vector of float)
 | 
				
			||||||
@ -720,4 +934,22 @@ ERROR: node is still EOpNull!
 | 
				
			|||||||
0:?     'arrayedInst' (in 4-element array of block{in mediump float f})
 | 
					0:?     'arrayedInst' (in 4-element array of block{in mediump float f})
 | 
				
			||||||
0:?     'gl_FragDepth' (gl_FragDepth highp float FragDepth)
 | 
					0:?     'gl_FragDepth' (gl_FragDepth highp float FragDepth)
 | 
				
			||||||
0:?     'gl_FragDepth' (gl_FragDepth highp float FragDepth)
 | 
					0:?     'gl_FragDepth' (gl_FragDepth highp float FragDepth)
 | 
				
			||||||
 | 
					0:?     'inf' (smooth in mediump 2-component vector of float)
 | 
				
			||||||
 | 
					0:?     'ing' (smooth in mediump 2-component vector of float)
 | 
				
			||||||
 | 
					0:?     'offsets' (uniform 4-element array of mediump 2-component vector of int)
 | 
				
			||||||
 | 
					0:?     'sArray' (uniform 4-element array of highp sampler2D)
 | 
				
			||||||
 | 
					0:?     'sIndex' (uniform mediump int)
 | 
				
			||||||
 | 
					0:?     'auArray' (layout(binding=0 offset=0 ) uniform 2-element array of highp atomic_uint)
 | 
				
			||||||
 | 
					0:?     'ubInst' (layout(column_major shared ) uniform 4-element array of block{layout(column_major shared ) uniform mediump int i})
 | 
				
			||||||
 | 
					0:?     'bbInst' (layout(column_major shared ) buffer 4-element array of block{layout(column_major shared ) buffer mediump int i})
 | 
				
			||||||
 | 
					0:?     'iArray' (writeonly uniform 5-element array of highp image2D)
 | 
				
			||||||
 | 
					0:?     'constOffsets' (const 4-element array of mediump 2-component vector of int)
 | 
				
			||||||
 | 
					0:?       0 (const int)
 | 
				
			||||||
 | 
					0:?       0 (const int)
 | 
				
			||||||
 | 
					0:?       0 (const int)
 | 
				
			||||||
 | 
					0:?       0 (const int)
 | 
				
			||||||
 | 
					0:?       0 (const int)
 | 
				
			||||||
 | 
					0:?       0 (const int)
 | 
				
			||||||
 | 
					0:?       0 (const int)
 | 
				
			||||||
 | 
					0:?       0 (const int)
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
				
			|||||||
@ -31,7 +31,9 @@ ERROR: 0:80: '' : array size required
 | 
				
			|||||||
ERROR: 0:86: 'location' : overlapping use of location 4
 | 
					ERROR: 0:86: 'location' : overlapping use of location 4
 | 
				
			||||||
ERROR: 0:90: 'location' : overlapping use of location 4
 | 
					ERROR: 0:90: 'location' : overlapping use of location 4
 | 
				
			||||||
ERROR: 0:94: 'precise' : Reserved word. 
 | 
					ERROR: 0:94: 'precise' : Reserved word. 
 | 
				
			||||||
ERROR: 0:95: 'fma' : no matching overloaded function found 
 | 
					ERROR: 0:95: 'fma' : required extension not requested: Possible extensions include:
 | 
				
			||||||
 | 
					GL_EXT_gpu_shader5
 | 
				
			||||||
 | 
					GL_OES_gpu_shader5
 | 
				
			||||||
ERROR: 0:104: 'sample' : Reserved word. 
 | 
					ERROR: 0:104: 'sample' : Reserved word. 
 | 
				
			||||||
ERROR: 0:106: 'vertices' : can only apply to a standalone qualifier 
 | 
					ERROR: 0:106: 'vertices' : can only apply to a standalone qualifier 
 | 
				
			||||||
ERROR: 0:107: 'vertices' : inconsistent output number of vertices for array size of misSized
 | 
					ERROR: 0:107: 'vertices' : inconsistent output number of vertices for array size of misSized
 | 
				
			||||||
@ -188,8 +190,10 @@ ERROR: node is still EOpNull!
 | 
				
			|||||||
0:?     Sequence
 | 
					0:?     Sequence
 | 
				
			||||||
0:95      move second child to first child (temp highp float)
 | 
					0:95      move second child to first child (temp highp float)
 | 
				
			||||||
0:95        'd' (temp highp float)
 | 
					0:95        'd' (temp highp float)
 | 
				
			||||||
0:95        Constant:
 | 
					0:95        Function Call: fma(f1;f1;f1; (global highp float)
 | 
				
			||||||
0:95          0.000000
 | 
					0:95          'd' (temp highp float)
 | 
				
			||||||
 | 
					0:95          'd' (temp highp float)
 | 
				
			||||||
 | 
					0:95          'd' (temp highp float)
 | 
				
			||||||
0:112  Function Definition: pointSize2( (global void)
 | 
					0:112  Function Definition: pointSize2( (global void)
 | 
				
			||||||
0:112    Function Parameters: 
 | 
					0:112    Function Parameters: 
 | 
				
			||||||
0:114    Sequence
 | 
					0:114    Sequence
 | 
				
			||||||
@ -390,8 +394,10 @@ ERROR: node is still EOpNull!
 | 
				
			|||||||
0:?     Sequence
 | 
					0:?     Sequence
 | 
				
			||||||
0:95      move second child to first child (temp highp float)
 | 
					0:95      move second child to first child (temp highp float)
 | 
				
			||||||
0:95        'd' (temp highp float)
 | 
					0:95        'd' (temp highp float)
 | 
				
			||||||
0:95        Constant:
 | 
					0:95        Function Call: fma(f1;f1;f1; (global highp float)
 | 
				
			||||||
0:95          0.000000
 | 
					0:95          'd' (temp highp float)
 | 
				
			||||||
 | 
					0:95          'd' (temp highp float)
 | 
				
			||||||
 | 
					0:95          'd' (temp highp float)
 | 
				
			||||||
0:112  Function Definition: pointSize2( (global void)
 | 
					0:112  Function Definition: pointSize2( (global void)
 | 
				
			||||||
0:112    Function Parameters: 
 | 
					0:112    Function Parameters: 
 | 
				
			||||||
0:114    Sequence
 | 
					0:114    Sequence
 | 
				
			||||||
 | 
				
			|||||||
@ -27,10 +27,25 @@ ERROR: 0:127: 'flat/smooth/noperspective' : cannot use interpolation qualifiers
 | 
				
			|||||||
ERROR: 0:131: 'flat/smooth/noperspective' : cannot use interpolation qualifiers on an interface block 
 | 
					ERROR: 0:131: 'flat/smooth/noperspective' : cannot use interpolation qualifiers on an interface block 
 | 
				
			||||||
ERROR: 0:135: 'centroid' : cannot use centroid qualifier on an interface block 
 | 
					ERROR: 0:135: 'centroid' : cannot use centroid qualifier on an interface block 
 | 
				
			||||||
ERROR: 0:139: 'invariant' : cannot use invariant qualifier on an interface block 
 | 
					ERROR: 0:139: 'invariant' : cannot use invariant qualifier on an interface block 
 | 
				
			||||||
ERROR: 26 compilation errors.  No code generated.
 | 
					ERROR: 0:155: 'precise' : Reserved word. 
 | 
				
			||||||
 | 
					ERROR: 0:156: 'fma' : required extension not requested: Possible extensions include:
 | 
				
			||||||
 | 
					GL_EXT_gpu_shader5
 | 
				
			||||||
 | 
					GL_OES_gpu_shader5
 | 
				
			||||||
 | 
					ERROR: 0:157: 'variable indexing sampler array' : not supported for this version or the enabled extensions 
 | 
				
			||||||
 | 
					ERROR: 0:161: 'variable indexing uniform block array' : not supported for this version or the enabled extensions 
 | 
				
			||||||
 | 
					ERROR: 0:162: 'variable indexing buffer block array' : not supported with this profile: es
 | 
				
			||||||
 | 
					ERROR: 0:164: 'variable indexing sampler array' : not supported for this version or the enabled extensions 
 | 
				
			||||||
 | 
					ERROR: 0:165: 'non-constant offset argument' : not supported for this version or the enabled extensions 
 | 
				
			||||||
 | 
					ERROR: 0:166: 'textureGatherOffsets' : required extension not requested: Possible extensions include:
 | 
				
			||||||
 | 
					GL_EXT_gpu_shader5
 | 
				
			||||||
 | 
					GL_OES_gpu_shader5
 | 
				
			||||||
 | 
					ERROR: 0:177: 'variable indexing buffer block array' : not supported with this profile: es
 | 
				
			||||||
 | 
					ERROR: 0:182: 'textureGatherOffsets(...)' : must be a compile-time constant: offsets argument
 | 
				
			||||||
 | 
					ERROR: 36 compilation errors.  No code generated.
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					
 | 
				
			||||||
Shader version: 310
 | 
					Shader version: 310
 | 
				
			||||||
 | 
					Requested GL_OES_gpu_shader5
 | 
				
			||||||
Requested GL_OES_shader_io_blocks
 | 
					Requested GL_OES_shader_io_blocks
 | 
				
			||||||
ERROR: node is still EOpNull!
 | 
					ERROR: node is still EOpNull!
 | 
				
			||||||
0:12  Function Definition: main( (global void)
 | 
					0:12  Function Definition: main( (global void)
 | 
				
			||||||
@ -202,6 +217,154 @@ ERROR: node is still EOpNull!
 | 
				
			|||||||
0:119        'anon@1' (out block{gl_Position highp 4-component vector of float Position gl_Position, })
 | 
					0:119        'anon@1' (out block{gl_Position highp 4-component vector of float Position gl_Position, })
 | 
				
			||||||
0:119        Constant:
 | 
					0:119        Constant:
 | 
				
			||||||
0:119          1 (const uint)
 | 
					0:119          1 (const uint)
 | 
				
			||||||
 | 
					0:153  Function Definition: pfooBad( (global void)
 | 
				
			||||||
 | 
					0:153    Function Parameters: 
 | 
				
			||||||
 | 
					0:?     Sequence
 | 
				
			||||||
 | 
					0:156      move second child to first child (temp highp 2-component vector of float)
 | 
				
			||||||
 | 
					0:156        'h' (temp highp 2-component vector of float)
 | 
				
			||||||
 | 
					0:156        Function Call: fma(vf2;vf2;vf2; (global highp 2-component vector of float)
 | 
				
			||||||
 | 
					0:156          'inf' (in highp 2-component vector of float)
 | 
				
			||||||
 | 
					0:156          'ing' (in highp 2-component vector of float)
 | 
				
			||||||
 | 
					0:156          'h' (temp highp 2-component vector of float)
 | 
				
			||||||
 | 
					0:157      indirect index (temp highp sampler2D)
 | 
				
			||||||
 | 
					0:157        'sArray' (uniform 4-element array of highp sampler2D)
 | 
				
			||||||
 | 
					0:157        add (temp highp int)
 | 
				
			||||||
 | 
					0:157          'sIndex' (uniform highp int)
 | 
				
			||||||
 | 
					0:157          Constant:
 | 
				
			||||||
 | 
					0:157            1 (const int)
 | 
				
			||||||
 | 
					0:158      indirect index (layout(binding=0 offset=0 ) temp highp atomic_uint)
 | 
				
			||||||
 | 
					0:158        'auArray' (layout(binding=0 offset=0 ) uniform 2-element array of highp atomic_uint)
 | 
				
			||||||
 | 
					0:158        add (temp highp int)
 | 
				
			||||||
 | 
					0:158          'sIndex' (uniform highp int)
 | 
				
			||||||
 | 
					0:158          Constant:
 | 
				
			||||||
 | 
					0:158            1 (const int)
 | 
				
			||||||
 | 
					0:159      direct index (layout(column_major shared ) temp block{layout(column_major shared ) uniform highp int i})
 | 
				
			||||||
 | 
					0:159        'ubInst' (layout(column_major shared ) uniform 4-element array of block{layout(column_major shared ) uniform highp int i})
 | 
				
			||||||
 | 
					0:159        Constant:
 | 
				
			||||||
 | 
					0:159          1 (const int)
 | 
				
			||||||
 | 
					0:160      direct index (layout(column_major shared ) temp block{layout(column_major shared ) buffer highp int i})
 | 
				
			||||||
 | 
					0:160        'bbInst' (layout(column_major shared ) buffer 4-element array of block{layout(column_major shared ) buffer highp int i})
 | 
				
			||||||
 | 
					0:160        Constant:
 | 
				
			||||||
 | 
					0:160          2 (const int)
 | 
				
			||||||
 | 
					0:161      indirect index (layout(column_major shared ) temp block{layout(column_major shared ) uniform highp int i})
 | 
				
			||||||
 | 
					0:161        'ubInst' (layout(column_major shared ) uniform 4-element array of block{layout(column_major shared ) uniform highp int i})
 | 
				
			||||||
 | 
					0:161        add (temp highp int)
 | 
				
			||||||
 | 
					0:161          'sIndex' (uniform highp int)
 | 
				
			||||||
 | 
					0:161          Constant:
 | 
				
			||||||
 | 
					0:161            1 (const int)
 | 
				
			||||||
 | 
					0:162      indirect index (layout(column_major shared ) temp block{layout(column_major shared ) buffer highp int i})
 | 
				
			||||||
 | 
					0:162        'bbInst' (layout(column_major shared ) buffer 4-element array of block{layout(column_major shared ) buffer highp int i})
 | 
				
			||||||
 | 
					0:162        'sIndex' (uniform highp int)
 | 
				
			||||||
 | 
					0:163      direct index (writeonly temp highp image2D)
 | 
				
			||||||
 | 
					0:163        'iArray' (writeonly uniform 5-element array of highp image2D)
 | 
				
			||||||
 | 
					0:163        Constant:
 | 
				
			||||||
 | 
					0:163          2 (const int)
 | 
				
			||||||
 | 
					0:164      indirect index (writeonly temp highp image2D)
 | 
				
			||||||
 | 
					0:164        'iArray' (writeonly uniform 5-element array of highp image2D)
 | 
				
			||||||
 | 
					0:164        component-wise multiply (temp highp int)
 | 
				
			||||||
 | 
					0:164          'sIndex' (uniform highp int)
 | 
				
			||||||
 | 
					0:164          Constant:
 | 
				
			||||||
 | 
					0:164            2 (const int)
 | 
				
			||||||
 | 
					0:165      Function Call: textureGatherOffset(s21;vf2;vi2; (global highp 4-component vector of float)
 | 
				
			||||||
 | 
					0:165        direct index (temp highp sampler2D)
 | 
				
			||||||
 | 
					0:165          'sArray' (uniform 4-element array of highp sampler2D)
 | 
				
			||||||
 | 
					0:165          Constant:
 | 
				
			||||||
 | 
					0:165            0 (const int)
 | 
				
			||||||
 | 
					0:165        Constant:
 | 
				
			||||||
 | 
					0:165          0.100000
 | 
				
			||||||
 | 
					0:165          0.100000
 | 
				
			||||||
 | 
					0:165        Convert float to int (temp 2-component vector of int)
 | 
				
			||||||
 | 
					0:165          'inf' (in highp 2-component vector of float)
 | 
				
			||||||
 | 
					0:166      Function Call: textureGatherOffsets(s21;vf2;vi2[4]; (global highp 4-component vector of float)
 | 
				
			||||||
 | 
					0:166        direct index (temp highp sampler2D)
 | 
				
			||||||
 | 
					0:166          'sArray' (uniform 4-element array of highp sampler2D)
 | 
				
			||||||
 | 
					0:166          Constant:
 | 
				
			||||||
 | 
					0:166            0 (const int)
 | 
				
			||||||
 | 
					0:166        Constant:
 | 
				
			||||||
 | 
					0:166          0.100000
 | 
				
			||||||
 | 
					0:166          0.100000
 | 
				
			||||||
 | 
					0:166        Constant:
 | 
				
			||||||
 | 
					0:166          0 (const int)
 | 
				
			||||||
 | 
					0:166          0 (const int)
 | 
				
			||||||
 | 
					0:166          0 (const int)
 | 
				
			||||||
 | 
					0:166          0 (const int)
 | 
				
			||||||
 | 
					0:166          0 (const int)
 | 
				
			||||||
 | 
					0:166          0 (const int)
 | 
				
			||||||
 | 
					0:166          0 (const int)
 | 
				
			||||||
 | 
					0:166          0 (const int)
 | 
				
			||||||
 | 
					0:171  Function Definition: pfoo( (global void)
 | 
				
			||||||
 | 
					0:171    Function Parameters: 
 | 
				
			||||||
 | 
					0:?     Sequence
 | 
				
			||||||
 | 
					0:174      move second child to first child (temp highp 2-component vector of float)
 | 
				
			||||||
 | 
					0:174        'h' (temp highp 2-component vector of float)
 | 
				
			||||||
 | 
					0:174        Function Call: fma(vf2;vf2;vf2; (global highp 2-component vector of float)
 | 
				
			||||||
 | 
					0:174          'inf' (in highp 2-component vector of float)
 | 
				
			||||||
 | 
					0:174          'ing' (in highp 2-component vector of float)
 | 
				
			||||||
 | 
					0:174          'h' (temp highp 2-component vector of float)
 | 
				
			||||||
 | 
					0:175      indirect index (temp highp sampler2D)
 | 
				
			||||||
 | 
					0:175        'sArray' (uniform 4-element array of highp sampler2D)
 | 
				
			||||||
 | 
					0:175        add (temp highp int)
 | 
				
			||||||
 | 
					0:175          'sIndex' (uniform highp int)
 | 
				
			||||||
 | 
					0:175          Constant:
 | 
				
			||||||
 | 
					0:175            1 (const int)
 | 
				
			||||||
 | 
					0:176      indirect index (layout(column_major shared ) temp block{layout(column_major shared ) uniform highp int i})
 | 
				
			||||||
 | 
					0:176        'ubInst' (layout(column_major shared ) uniform 4-element array of block{layout(column_major shared ) uniform highp int i})
 | 
				
			||||||
 | 
					0:176        add (temp highp int)
 | 
				
			||||||
 | 
					0:176          'sIndex' (uniform highp int)
 | 
				
			||||||
 | 
					0:176          Constant:
 | 
				
			||||||
 | 
					0:176            1 (const int)
 | 
				
			||||||
 | 
					0:177      indirect index (layout(column_major shared ) temp block{layout(column_major shared ) buffer highp int i})
 | 
				
			||||||
 | 
					0:177        'bbInst' (layout(column_major shared ) buffer 4-element array of block{layout(column_major shared ) buffer highp int i})
 | 
				
			||||||
 | 
					0:177        subtract (temp highp int)
 | 
				
			||||||
 | 
					0:177          'sIndex' (uniform highp int)
 | 
				
			||||||
 | 
					0:177          Constant:
 | 
				
			||||||
 | 
					0:177            2 (const int)
 | 
				
			||||||
 | 
					0:178      direct index (writeonly temp highp image2D)
 | 
				
			||||||
 | 
					0:178        'iArray' (writeonly uniform 5-element array of highp image2D)
 | 
				
			||||||
 | 
					0:178        Constant:
 | 
				
			||||||
 | 
					0:178          2 (const int)
 | 
				
			||||||
 | 
					0:179      indirect index (writeonly temp highp image2D)
 | 
				
			||||||
 | 
					0:179        'iArray' (writeonly uniform 5-element array of highp image2D)
 | 
				
			||||||
 | 
					0:179        subtract (temp highp int)
 | 
				
			||||||
 | 
					0:179          'sIndex' (uniform highp int)
 | 
				
			||||||
 | 
					0:179          Constant:
 | 
				
			||||||
 | 
					0:179            2 (const int)
 | 
				
			||||||
 | 
					0:180      Function Call: textureGatherOffset(s21;vf2;vi2; (global highp 4-component vector of float)
 | 
				
			||||||
 | 
					0:180        direct index (temp highp sampler2D)
 | 
				
			||||||
 | 
					0:180          'sArray' (uniform 4-element array of highp sampler2D)
 | 
				
			||||||
 | 
					0:180          Constant:
 | 
				
			||||||
 | 
					0:180            0 (const int)
 | 
				
			||||||
 | 
					0:180        Constant:
 | 
				
			||||||
 | 
					0:180          0.100000
 | 
				
			||||||
 | 
					0:180          0.100000
 | 
				
			||||||
 | 
					0:180        Convert float to int (temp 2-component vector of int)
 | 
				
			||||||
 | 
					0:180          'inf' (in highp 2-component vector of float)
 | 
				
			||||||
 | 
					0:181      Function Call: textureGatherOffsets(s21;vf2;vi2[4]; (global highp 4-component vector of float)
 | 
				
			||||||
 | 
					0:181        direct index (temp highp sampler2D)
 | 
				
			||||||
 | 
					0:181          'sArray' (uniform 4-element array of highp sampler2D)
 | 
				
			||||||
 | 
					0:181          Constant:
 | 
				
			||||||
 | 
					0:181            0 (const int)
 | 
				
			||||||
 | 
					0:181        Constant:
 | 
				
			||||||
 | 
					0:181          0.100000
 | 
				
			||||||
 | 
					0:181          0.100000
 | 
				
			||||||
 | 
					0:181        Constant:
 | 
				
			||||||
 | 
					0:181          0 (const int)
 | 
				
			||||||
 | 
					0:181          0 (const int)
 | 
				
			||||||
 | 
					0:181          0 (const int)
 | 
				
			||||||
 | 
					0:181          0 (const int)
 | 
				
			||||||
 | 
					0:181          0 (const int)
 | 
				
			||||||
 | 
					0:181          0 (const int)
 | 
				
			||||||
 | 
					0:181          0 (const int)
 | 
				
			||||||
 | 
					0:181          0 (const int)
 | 
				
			||||||
 | 
					0:182      Function Call: textureGatherOffsets(s21;vf2;vi2[4]; (global highp 4-component vector of float)
 | 
				
			||||||
 | 
					0:182        direct index (temp highp sampler2D)
 | 
				
			||||||
 | 
					0:182          'sArray' (uniform 4-element array of highp sampler2D)
 | 
				
			||||||
 | 
					0:182          Constant:
 | 
				
			||||||
 | 
					0:182            0 (const int)
 | 
				
			||||||
 | 
					0:182        Constant:
 | 
				
			||||||
 | 
					0:182          0.100000
 | 
				
			||||||
 | 
					0:182          0.100000
 | 
				
			||||||
 | 
					0:182        'offsets' (uniform 4-element array of highp 2-component vector of int)
 | 
				
			||||||
0:?   Linker Objects
 | 
					0:?   Linker Objects
 | 
				
			||||||
0:?     's' (shared highp 4-component vector of float)
 | 
					0:?     's' (shared highp 4-component vector of float)
 | 
				
			||||||
0:?     'v' (buffer highp 4-component vector of float)
 | 
					0:?     'v' (buffer highp 4-component vector of float)
 | 
				
			||||||
@ -233,6 +396,24 @@ ERROR: node is still EOpNull!
 | 
				
			|||||||
0:?     'fmon' (flat out block{out highp int i})
 | 
					0:?     'fmon' (flat out block{out highp int i})
 | 
				
			||||||
0:?     'cmon' (centroid out block{out highp int i})
 | 
					0:?     'cmon' (centroid out block{out highp int i})
 | 
				
			||||||
0:?     'imon' (invariant out block{out highp int i})
 | 
					0:?     'imon' (invariant out block{out highp int i})
 | 
				
			||||||
 | 
					0:?     'inf' (in highp 2-component vector of float)
 | 
				
			||||||
 | 
					0:?     'ing' (in highp 2-component vector of float)
 | 
				
			||||||
 | 
					0:?     'offsets' (uniform 4-element array of highp 2-component vector of int)
 | 
				
			||||||
 | 
					0:?     'sArray' (uniform 4-element array of highp sampler2D)
 | 
				
			||||||
 | 
					0:?     'sIndex' (uniform highp int)
 | 
				
			||||||
 | 
					0:?     'auArray' (layout(binding=0 offset=0 ) uniform 2-element array of highp atomic_uint)
 | 
				
			||||||
 | 
					0:?     'ubInst' (layout(column_major shared ) uniform 4-element array of block{layout(column_major shared ) uniform highp int i})
 | 
				
			||||||
 | 
					0:?     'bbInst' (layout(column_major shared ) buffer 4-element array of block{layout(column_major shared ) buffer highp int i})
 | 
				
			||||||
 | 
					0:?     'iArray' (writeonly uniform 5-element array of highp image2D)
 | 
				
			||||||
 | 
					0:?     'constOffsets' (const 4-element array of highp 2-component vector of int)
 | 
				
			||||||
 | 
					0:?       0 (const int)
 | 
				
			||||||
 | 
					0:?       0 (const int)
 | 
				
			||||||
 | 
					0:?       0 (const int)
 | 
				
			||||||
 | 
					0:?       0 (const int)
 | 
				
			||||||
 | 
					0:?       0 (const int)
 | 
				
			||||||
 | 
					0:?       0 (const int)
 | 
				
			||||||
 | 
					0:?       0 (const int)
 | 
				
			||||||
 | 
					0:?       0 (const int)
 | 
				
			||||||
0:?     'gl_VertexID' (gl_VertexId highp int VertexId)
 | 
					0:?     'gl_VertexID' (gl_VertexId highp int VertexId)
 | 
				
			||||||
0:?     'gl_InstanceID' (gl_InstanceId highp int InstanceId)
 | 
					0:?     'gl_InstanceID' (gl_InstanceId highp int InstanceId)
 | 
				
			||||||
 | 
					
 | 
				
			||||||
@ -241,6 +422,7 @@ Linked vertex stage:
 | 
				
			|||||||
 | 
					
 | 
				
			||||||
 | 
					
 | 
				
			||||||
Shader version: 310
 | 
					Shader version: 310
 | 
				
			||||||
 | 
					Requested GL_OES_gpu_shader5
 | 
				
			||||||
Requested GL_OES_shader_io_blocks
 | 
					Requested GL_OES_shader_io_blocks
 | 
				
			||||||
ERROR: node is still EOpNull!
 | 
					ERROR: node is still EOpNull!
 | 
				
			||||||
0:12  Function Definition: main( (global void)
 | 
					0:12  Function Definition: main( (global void)
 | 
				
			||||||
@ -412,6 +594,154 @@ ERROR: node is still EOpNull!
 | 
				
			|||||||
0:119        'anon@1' (out block{gl_Position highp 4-component vector of float Position gl_Position, })
 | 
					0:119        'anon@1' (out block{gl_Position highp 4-component vector of float Position gl_Position, })
 | 
				
			||||||
0:119        Constant:
 | 
					0:119        Constant:
 | 
				
			||||||
0:119          1 (const uint)
 | 
					0:119          1 (const uint)
 | 
				
			||||||
 | 
					0:153  Function Definition: pfooBad( (global void)
 | 
				
			||||||
 | 
					0:153    Function Parameters: 
 | 
				
			||||||
 | 
					0:?     Sequence
 | 
				
			||||||
 | 
					0:156      move second child to first child (temp highp 2-component vector of float)
 | 
				
			||||||
 | 
					0:156        'h' (temp highp 2-component vector of float)
 | 
				
			||||||
 | 
					0:156        Function Call: fma(vf2;vf2;vf2; (global highp 2-component vector of float)
 | 
				
			||||||
 | 
					0:156          'inf' (in highp 2-component vector of float)
 | 
				
			||||||
 | 
					0:156          'ing' (in highp 2-component vector of float)
 | 
				
			||||||
 | 
					0:156          'h' (temp highp 2-component vector of float)
 | 
				
			||||||
 | 
					0:157      indirect index (temp highp sampler2D)
 | 
				
			||||||
 | 
					0:157        'sArray' (uniform 4-element array of highp sampler2D)
 | 
				
			||||||
 | 
					0:157        add (temp highp int)
 | 
				
			||||||
 | 
					0:157          'sIndex' (uniform highp int)
 | 
				
			||||||
 | 
					0:157          Constant:
 | 
				
			||||||
 | 
					0:157            1 (const int)
 | 
				
			||||||
 | 
					0:158      indirect index (layout(binding=0 offset=0 ) temp highp atomic_uint)
 | 
				
			||||||
 | 
					0:158        'auArray' (layout(binding=0 offset=0 ) uniform 2-element array of highp atomic_uint)
 | 
				
			||||||
 | 
					0:158        add (temp highp int)
 | 
				
			||||||
 | 
					0:158          'sIndex' (uniform highp int)
 | 
				
			||||||
 | 
					0:158          Constant:
 | 
				
			||||||
 | 
					0:158            1 (const int)
 | 
				
			||||||
 | 
					0:159      direct index (layout(column_major shared ) temp block{layout(column_major shared ) uniform highp int i})
 | 
				
			||||||
 | 
					0:159        'ubInst' (layout(column_major shared ) uniform 4-element array of block{layout(column_major shared ) uniform highp int i})
 | 
				
			||||||
 | 
					0:159        Constant:
 | 
				
			||||||
 | 
					0:159          1 (const int)
 | 
				
			||||||
 | 
					0:160      direct index (layout(column_major shared ) temp block{layout(column_major shared ) buffer highp int i})
 | 
				
			||||||
 | 
					0:160        'bbInst' (layout(column_major shared ) buffer 4-element array of block{layout(column_major shared ) buffer highp int i})
 | 
				
			||||||
 | 
					0:160        Constant:
 | 
				
			||||||
 | 
					0:160          2 (const int)
 | 
				
			||||||
 | 
					0:161      indirect index (layout(column_major shared ) temp block{layout(column_major shared ) uniform highp int i})
 | 
				
			||||||
 | 
					0:161        'ubInst' (layout(column_major shared ) uniform 4-element array of block{layout(column_major shared ) uniform highp int i})
 | 
				
			||||||
 | 
					0:161        add (temp highp int)
 | 
				
			||||||
 | 
					0:161          'sIndex' (uniform highp int)
 | 
				
			||||||
 | 
					0:161          Constant:
 | 
				
			||||||
 | 
					0:161            1 (const int)
 | 
				
			||||||
 | 
					0:162      indirect index (layout(column_major shared ) temp block{layout(column_major shared ) buffer highp int i})
 | 
				
			||||||
 | 
					0:162        'bbInst' (layout(column_major shared ) buffer 4-element array of block{layout(column_major shared ) buffer highp int i})
 | 
				
			||||||
 | 
					0:162        'sIndex' (uniform highp int)
 | 
				
			||||||
 | 
					0:163      direct index (writeonly temp highp image2D)
 | 
				
			||||||
 | 
					0:163        'iArray' (writeonly uniform 5-element array of highp image2D)
 | 
				
			||||||
 | 
					0:163        Constant:
 | 
				
			||||||
 | 
					0:163          2 (const int)
 | 
				
			||||||
 | 
					0:164      indirect index (writeonly temp highp image2D)
 | 
				
			||||||
 | 
					0:164        'iArray' (writeonly uniform 5-element array of highp image2D)
 | 
				
			||||||
 | 
					0:164        component-wise multiply (temp highp int)
 | 
				
			||||||
 | 
					0:164          'sIndex' (uniform highp int)
 | 
				
			||||||
 | 
					0:164          Constant:
 | 
				
			||||||
 | 
					0:164            2 (const int)
 | 
				
			||||||
 | 
					0:165      Function Call: textureGatherOffset(s21;vf2;vi2; (global highp 4-component vector of float)
 | 
				
			||||||
 | 
					0:165        direct index (temp highp sampler2D)
 | 
				
			||||||
 | 
					0:165          'sArray' (uniform 4-element array of highp sampler2D)
 | 
				
			||||||
 | 
					0:165          Constant:
 | 
				
			||||||
 | 
					0:165            0 (const int)
 | 
				
			||||||
 | 
					0:165        Constant:
 | 
				
			||||||
 | 
					0:165          0.100000
 | 
				
			||||||
 | 
					0:165          0.100000
 | 
				
			||||||
 | 
					0:165        Convert float to int (temp 2-component vector of int)
 | 
				
			||||||
 | 
					0:165          'inf' (in highp 2-component vector of float)
 | 
				
			||||||
 | 
					0:166      Function Call: textureGatherOffsets(s21;vf2;vi2[4]; (global highp 4-component vector of float)
 | 
				
			||||||
 | 
					0:166        direct index (temp highp sampler2D)
 | 
				
			||||||
 | 
					0:166          'sArray' (uniform 4-element array of highp sampler2D)
 | 
				
			||||||
 | 
					0:166          Constant:
 | 
				
			||||||
 | 
					0:166            0 (const int)
 | 
				
			||||||
 | 
					0:166        Constant:
 | 
				
			||||||
 | 
					0:166          0.100000
 | 
				
			||||||
 | 
					0:166          0.100000
 | 
				
			||||||
 | 
					0:166        Constant:
 | 
				
			||||||
 | 
					0:166          0 (const int)
 | 
				
			||||||
 | 
					0:166          0 (const int)
 | 
				
			||||||
 | 
					0:166          0 (const int)
 | 
				
			||||||
 | 
					0:166          0 (const int)
 | 
				
			||||||
 | 
					0:166          0 (const int)
 | 
				
			||||||
 | 
					0:166          0 (const int)
 | 
				
			||||||
 | 
					0:166          0 (const int)
 | 
				
			||||||
 | 
					0:166          0 (const int)
 | 
				
			||||||
 | 
					0:171  Function Definition: pfoo( (global void)
 | 
				
			||||||
 | 
					0:171    Function Parameters: 
 | 
				
			||||||
 | 
					0:?     Sequence
 | 
				
			||||||
 | 
					0:174      move second child to first child (temp highp 2-component vector of float)
 | 
				
			||||||
 | 
					0:174        'h' (temp highp 2-component vector of float)
 | 
				
			||||||
 | 
					0:174        Function Call: fma(vf2;vf2;vf2; (global highp 2-component vector of float)
 | 
				
			||||||
 | 
					0:174          'inf' (in highp 2-component vector of float)
 | 
				
			||||||
 | 
					0:174          'ing' (in highp 2-component vector of float)
 | 
				
			||||||
 | 
					0:174          'h' (temp highp 2-component vector of float)
 | 
				
			||||||
 | 
					0:175      indirect index (temp highp sampler2D)
 | 
				
			||||||
 | 
					0:175        'sArray' (uniform 4-element array of highp sampler2D)
 | 
				
			||||||
 | 
					0:175        add (temp highp int)
 | 
				
			||||||
 | 
					0:175          'sIndex' (uniform highp int)
 | 
				
			||||||
 | 
					0:175          Constant:
 | 
				
			||||||
 | 
					0:175            1 (const int)
 | 
				
			||||||
 | 
					0:176      indirect index (layout(column_major shared ) temp block{layout(column_major shared ) uniform highp int i})
 | 
				
			||||||
 | 
					0:176        'ubInst' (layout(column_major shared ) uniform 4-element array of block{layout(column_major shared ) uniform highp int i})
 | 
				
			||||||
 | 
					0:176        add (temp highp int)
 | 
				
			||||||
 | 
					0:176          'sIndex' (uniform highp int)
 | 
				
			||||||
 | 
					0:176          Constant:
 | 
				
			||||||
 | 
					0:176            1 (const int)
 | 
				
			||||||
 | 
					0:177      indirect index (layout(column_major shared ) temp block{layout(column_major shared ) buffer highp int i})
 | 
				
			||||||
 | 
					0:177        'bbInst' (layout(column_major shared ) buffer 4-element array of block{layout(column_major shared ) buffer highp int i})
 | 
				
			||||||
 | 
					0:177        subtract (temp highp int)
 | 
				
			||||||
 | 
					0:177          'sIndex' (uniform highp int)
 | 
				
			||||||
 | 
					0:177          Constant:
 | 
				
			||||||
 | 
					0:177            2 (const int)
 | 
				
			||||||
 | 
					0:178      direct index (writeonly temp highp image2D)
 | 
				
			||||||
 | 
					0:178        'iArray' (writeonly uniform 5-element array of highp image2D)
 | 
				
			||||||
 | 
					0:178        Constant:
 | 
				
			||||||
 | 
					0:178          2 (const int)
 | 
				
			||||||
 | 
					0:179      indirect index (writeonly temp highp image2D)
 | 
				
			||||||
 | 
					0:179        'iArray' (writeonly uniform 5-element array of highp image2D)
 | 
				
			||||||
 | 
					0:179        subtract (temp highp int)
 | 
				
			||||||
 | 
					0:179          'sIndex' (uniform highp int)
 | 
				
			||||||
 | 
					0:179          Constant:
 | 
				
			||||||
 | 
					0:179            2 (const int)
 | 
				
			||||||
 | 
					0:180      Function Call: textureGatherOffset(s21;vf2;vi2; (global highp 4-component vector of float)
 | 
				
			||||||
 | 
					0:180        direct index (temp highp sampler2D)
 | 
				
			||||||
 | 
					0:180          'sArray' (uniform 4-element array of highp sampler2D)
 | 
				
			||||||
 | 
					0:180          Constant:
 | 
				
			||||||
 | 
					0:180            0 (const int)
 | 
				
			||||||
 | 
					0:180        Constant:
 | 
				
			||||||
 | 
					0:180          0.100000
 | 
				
			||||||
 | 
					0:180          0.100000
 | 
				
			||||||
 | 
					0:180        Convert float to int (temp 2-component vector of int)
 | 
				
			||||||
 | 
					0:180          'inf' (in highp 2-component vector of float)
 | 
				
			||||||
 | 
					0:181      Function Call: textureGatherOffsets(s21;vf2;vi2[4]; (global highp 4-component vector of float)
 | 
				
			||||||
 | 
					0:181        direct index (temp highp sampler2D)
 | 
				
			||||||
 | 
					0:181          'sArray' (uniform 4-element array of highp sampler2D)
 | 
				
			||||||
 | 
					0:181          Constant:
 | 
				
			||||||
 | 
					0:181            0 (const int)
 | 
				
			||||||
 | 
					0:181        Constant:
 | 
				
			||||||
 | 
					0:181          0.100000
 | 
				
			||||||
 | 
					0:181          0.100000
 | 
				
			||||||
 | 
					0:181        Constant:
 | 
				
			||||||
 | 
					0:181          0 (const int)
 | 
				
			||||||
 | 
					0:181          0 (const int)
 | 
				
			||||||
 | 
					0:181          0 (const int)
 | 
				
			||||||
 | 
					0:181          0 (const int)
 | 
				
			||||||
 | 
					0:181          0 (const int)
 | 
				
			||||||
 | 
					0:181          0 (const int)
 | 
				
			||||||
 | 
					0:181          0 (const int)
 | 
				
			||||||
 | 
					0:181          0 (const int)
 | 
				
			||||||
 | 
					0:182      Function Call: textureGatherOffsets(s21;vf2;vi2[4]; (global highp 4-component vector of float)
 | 
				
			||||||
 | 
					0:182        direct index (temp highp sampler2D)
 | 
				
			||||||
 | 
					0:182          'sArray' (uniform 4-element array of highp sampler2D)
 | 
				
			||||||
 | 
					0:182          Constant:
 | 
				
			||||||
 | 
					0:182            0 (const int)
 | 
				
			||||||
 | 
					0:182        Constant:
 | 
				
			||||||
 | 
					0:182          0.100000
 | 
				
			||||||
 | 
					0:182          0.100000
 | 
				
			||||||
 | 
					0:182        'offsets' (uniform 4-element array of highp 2-component vector of int)
 | 
				
			||||||
0:?   Linker Objects
 | 
					0:?   Linker Objects
 | 
				
			||||||
0:?     's' (shared highp 4-component vector of float)
 | 
					0:?     's' (shared highp 4-component vector of float)
 | 
				
			||||||
0:?     'v' (buffer highp 4-component vector of float)
 | 
					0:?     'v' (buffer highp 4-component vector of float)
 | 
				
			||||||
@ -443,6 +773,24 @@ ERROR: node is still EOpNull!
 | 
				
			|||||||
0:?     'fmon' (flat out block{out highp int i})
 | 
					0:?     'fmon' (flat out block{out highp int i})
 | 
				
			||||||
0:?     'cmon' (centroid out block{out highp int i})
 | 
					0:?     'cmon' (centroid out block{out highp int i})
 | 
				
			||||||
0:?     'imon' (invariant out block{out highp int i})
 | 
					0:?     'imon' (invariant out block{out highp int i})
 | 
				
			||||||
 | 
					0:?     'inf' (in highp 2-component vector of float)
 | 
				
			||||||
 | 
					0:?     'ing' (in highp 2-component vector of float)
 | 
				
			||||||
 | 
					0:?     'offsets' (uniform 4-element array of highp 2-component vector of int)
 | 
				
			||||||
 | 
					0:?     'sArray' (uniform 4-element array of highp sampler2D)
 | 
				
			||||||
 | 
					0:?     'sIndex' (uniform highp int)
 | 
				
			||||||
 | 
					0:?     'auArray' (layout(binding=0 offset=0 ) uniform 2-element array of highp atomic_uint)
 | 
				
			||||||
 | 
					0:?     'ubInst' (layout(column_major shared ) uniform 4-element array of block{layout(column_major shared ) uniform highp int i})
 | 
				
			||||||
 | 
					0:?     'bbInst' (layout(column_major shared ) buffer 4-element array of block{layout(column_major shared ) buffer highp int i})
 | 
				
			||||||
 | 
					0:?     'iArray' (writeonly uniform 5-element array of highp image2D)
 | 
				
			||||||
 | 
					0:?     'constOffsets' (const 4-element array of highp 2-component vector of int)
 | 
				
			||||||
 | 
					0:?       0 (const int)
 | 
				
			||||||
 | 
					0:?       0 (const int)
 | 
				
			||||||
 | 
					0:?       0 (const int)
 | 
				
			||||||
 | 
					0:?       0 (const int)
 | 
				
			||||||
 | 
					0:?       0 (const int)
 | 
				
			||||||
 | 
					0:?       0 (const int)
 | 
				
			||||||
 | 
					0:?       0 (const int)
 | 
				
			||||||
 | 
					0:?       0 (const int)
 | 
				
			||||||
0:?     'gl_VertexID' (gl_VertexId highp int VertexId)
 | 
					0:?     'gl_VertexID' (gl_VertexId highp int VertexId)
 | 
				
			||||||
0:?     'gl_InstanceID' (gl_InstanceId highp int InstanceId)
 | 
					0:?     'gl_InstanceID' (gl_InstanceId highp int InstanceId)
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
				
			|||||||
@ -1,4 +1,3 @@
 | 
				
			|||||||
Warning, version 310 is not yet complete; most version-specific features are present, but some are missing.
 | 
					Warning, version 310 is not yet complete; most version-specific features are present, but some are missing.
 | 
				
			||||||
WARNING: 0:5: '#extension' : extension is only partially supported: GL_EXT_gpu_shader5
 | 
					 | 
				
			||||||
WARNING: 0:6: '#extension' : extension not supported: GL_EXT_shader_texture_image_samples
 | 
					WARNING: 0:6: '#extension' : extension not supported: GL_EXT_shader_texture_image_samples
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
				
			|||||||
@ -493,20 +493,25 @@ void TBuiltIns::initialize(int version, EProfile profile)
 | 
				
			|||||||
            "\n");
 | 
					            "\n");
 | 
				
			||||||
    }
 | 
					    }
 | 
				
			||||||
 | 
					
 | 
				
			||||||
    if (profile != EEsProfile && version >= 400) {
 | 
					    if ((profile != EEsProfile && version >= 400) ||
 | 
				
			||||||
 | 
					        (profile == EEsProfile && version >= 310)) {    // GL_OES_gpu_shader5
 | 
				
			||||||
 | 
					
 | 
				
			||||||
        commonBuiltins.append(
 | 
					        commonBuiltins.append(
 | 
				
			||||||
            "float  fma(float,  float,  float );"
 | 
					            "float  fma(float,  float,  float );"
 | 
				
			||||||
            "vec2   fma(vec2,   vec2,   vec2  );"
 | 
					            "vec2   fma(vec2,   vec2,   vec2  );"
 | 
				
			||||||
            "vec3   fma(vec3,   vec3,   vec3  );"
 | 
					            "vec3   fma(vec3,   vec3,   vec3  );"
 | 
				
			||||||
            "vec4   fma(vec4,   vec4,   vec4  );"
 | 
					            "vec4   fma(vec4,   vec4,   vec4  );"
 | 
				
			||||||
 | 
					            "\n");
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					        if (profile != EEsProfile) {
 | 
				
			||||||
 | 
					            commonBuiltins.append(
 | 
				
			||||||
                "double fma(double, double, double);"
 | 
					                "double fma(double, double, double);"
 | 
				
			||||||
                "dvec2  fma(dvec2,  dvec2,  dvec2 );"
 | 
					                "dvec2  fma(dvec2,  dvec2,  dvec2 );"
 | 
				
			||||||
                "dvec3  fma(dvec3,  dvec3,  dvec3 );"
 | 
					                "dvec3  fma(dvec3,  dvec3,  dvec3 );"
 | 
				
			||||||
                "dvec4  fma(dvec4,  dvec4,  dvec4 );"
 | 
					                "dvec4  fma(dvec4,  dvec4,  dvec4 );"
 | 
				
			||||||
            
 | 
					 | 
				
			||||||
                "\n");
 | 
					                "\n");
 | 
				
			||||||
        }
 | 
					        }
 | 
				
			||||||
 | 
					    }
 | 
				
			||||||
 | 
					
 | 
				
			||||||
    if ((profile == EEsProfile && version >= 310) ||
 | 
					    if ((profile == EEsProfile && version >= 310) ||
 | 
				
			||||||
        (profile != EEsProfile && version >= 400)) {
 | 
					        (profile != EEsProfile && version >= 400)) {
 | 
				
			||||||
@ -2221,9 +2226,6 @@ void TBuiltIns::addGatherFunctions(TSampler sampler, TString& typeName, int vers
 | 
				
			|||||||
 | 
					
 | 
				
			||||||
    for (int offset = 0; offset < 3; ++offset) { // loop over three forms of offset in the call name:  none, Offset, and Offsets
 | 
					    for (int offset = 0; offset < 3; ++offset) { // loop over three forms of offset in the call name:  none, Offset, and Offsets
 | 
				
			||||||
 | 
					
 | 
				
			||||||
        if (profile == EEsProfile && offset == 2)
 | 
					 | 
				
			||||||
            continue;
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
        for (int comp = 0; comp < 2; ++comp) { // loop over presence of comp argument
 | 
					        for (int comp = 0; comp < 2; ++comp) { // loop over presence of comp argument
 | 
				
			||||||
 | 
					
 | 
				
			||||||
            if (comp > 0 && sampler.shadow)
 | 
					            if (comp > 0 && sampler.shadow)
 | 
				
			||||||
@ -2802,8 +2804,11 @@ void IdentifyBuiltIns(int version, EProfile profile, EShLanguage language, TSymb
 | 
				
			|||||||
    //
 | 
					    //
 | 
				
			||||||
 | 
					
 | 
				
			||||||
    // N.B.: a symbol should only be tagged once, and this function is called multiple times, once
 | 
					    // N.B.: a symbol should only be tagged once, and this function is called multiple times, once
 | 
				
			||||||
    // per stage that's used for this profile.  So, stick common ones in the fragment stage to
 | 
					    // per stage that's used for this profile.  So
 | 
				
			||||||
    // ensure they are tagged exactly once.
 | 
					    //  - generally, stick common ones in the fragment stage to ensure they are tagged exactly once
 | 
				
			||||||
 | 
					    //  - for ES, which has different precisions for different stages, the coarsest-grained tagging 
 | 
				
			||||||
 | 
					    //    for a built-in used in many stages needs to be once for the fragment stage and once for
 | 
				
			||||||
 | 
					    //    the vertex stage
 | 
				
			||||||
 | 
					
 | 
				
			||||||
    switch(language) {
 | 
					    switch(language) {
 | 
				
			||||||
    case EShLangVertex:
 | 
					    case EShLangVertex:
 | 
				
			||||||
@ -2822,6 +2827,15 @@ void IdentifyBuiltIns(int version, EProfile profile, EShLanguage language, TSymb
 | 
				
			|||||||
        BuiltInVariable("gl_MultiTexCoord7", EbvMultiTexCoord7, symbolTable);
 | 
					        BuiltInVariable("gl_MultiTexCoord7", EbvMultiTexCoord7, symbolTable);
 | 
				
			||||||
        BuiltInVariable("gl_FogCoord",       EbvFogFragCoord,   symbolTable);
 | 
					        BuiltInVariable("gl_FogCoord",       EbvFogFragCoord,   symbolTable);
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					        if (profile == EEsProfile) {
 | 
				
			||||||
 | 
					            symbolTable.setFunctionExtensions("texture2DGradEXT",     1, &E_GL_EXT_shader_texture_lod);
 | 
				
			||||||
 | 
					            symbolTable.setFunctionExtensions("texture2DProjGradEXT", 1, &E_GL_EXT_shader_texture_lod);
 | 
				
			||||||
 | 
					            symbolTable.setFunctionExtensions("textureCubeGradEXT",   1, &E_GL_EXT_shader_texture_lod);
 | 
				
			||||||
 | 
					            symbolTable.setFunctionExtensions("textureGatherOffsets", Num_AEP_gpu_shader5, AEP_gpu_shader5);
 | 
				
			||||||
 | 
					            if (version >= 310)
 | 
				
			||||||
 | 
					                symbolTable.setFunctionExtensions("fma", Num_AEP_gpu_shader5, AEP_gpu_shader5);
 | 
				
			||||||
 | 
					        }
 | 
				
			||||||
 | 
					
 | 
				
			||||||
        // Fall through
 | 
					        // Fall through
 | 
				
			||||||
 | 
					
 | 
				
			||||||
    case EShLangTessControl:
 | 
					    case EShLangTessControl:
 | 
				
			||||||
@ -2931,15 +2945,21 @@ void IdentifyBuiltIns(int version, EProfile profile, EShLanguage language, TSymb
 | 
				
			|||||||
 | 
					
 | 
				
			||||||
        // built-in functions
 | 
					        // built-in functions
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					        if (profile == EEsProfile) {
 | 
				
			||||||
 | 
					            symbolTable.setFunctionExtensions("texture2DLodEXT",      1, &E_GL_EXT_shader_texture_lod);
 | 
				
			||||||
 | 
					            symbolTable.setFunctionExtensions("texture2DProjLodEXT",  1, &E_GL_EXT_shader_texture_lod);
 | 
				
			||||||
 | 
					            symbolTable.setFunctionExtensions("textureCubeLodEXT",    1, &E_GL_EXT_shader_texture_lod);
 | 
				
			||||||
 | 
					            symbolTable.setFunctionExtensions("texture2DGradEXT",     1, &E_GL_EXT_shader_texture_lod);
 | 
				
			||||||
 | 
					            symbolTable.setFunctionExtensions("texture2DProjGradEXT", 1, &E_GL_EXT_shader_texture_lod);
 | 
				
			||||||
 | 
					            symbolTable.setFunctionExtensions("textureCubeGradEXT",   1, &E_GL_EXT_shader_texture_lod);
 | 
				
			||||||
 | 
					            symbolTable.setFunctionExtensions("textureGatherOffsets", Num_AEP_gpu_shader5, AEP_gpu_shader5);
 | 
				
			||||||
            if (version == 100) {
 | 
					            if (version == 100) {
 | 
				
			||||||
                symbolTable.setFunctionExtensions("dFdx",   1, &E_GL_OES_standard_derivatives);
 | 
					                symbolTable.setFunctionExtensions("dFdx",   1, &E_GL_OES_standard_derivatives);
 | 
				
			||||||
                symbolTable.setFunctionExtensions("dFdy",   1, &E_GL_OES_standard_derivatives);
 | 
					                symbolTable.setFunctionExtensions("dFdy",   1, &E_GL_OES_standard_derivatives);
 | 
				
			||||||
                symbolTable.setFunctionExtensions("fwidth", 1, &E_GL_OES_standard_derivatives);
 | 
					                symbolTable.setFunctionExtensions("fwidth", 1, &E_GL_OES_standard_derivatives);
 | 
				
			||||||
            }
 | 
					            }
 | 
				
			||||||
        if (profile == EEsProfile) {
 | 
					            if (version >= 310)
 | 
				
			||||||
            symbolTable.setFunctionExtensions("texture2DLodEXT",     1, &E_GL_EXT_shader_texture_lod);
 | 
					                symbolTable.setFunctionExtensions("fma", Num_AEP_gpu_shader5, AEP_gpu_shader5);
 | 
				
			||||||
            symbolTable.setFunctionExtensions("texture2DProjLodEXT", 1, &E_GL_EXT_shader_texture_lod);
 | 
					 | 
				
			||||||
            symbolTable.setFunctionExtensions("textureCubeLodEXT",   1, &E_GL_EXT_shader_texture_lod);
 | 
					 | 
				
			||||||
        } else if (version < 130) {
 | 
					        } else if (version < 130) {
 | 
				
			||||||
            symbolTable.setFunctionExtensions("texture1DLod",        1, &E_GL_ARB_shader_texture_lod);
 | 
					            symbolTable.setFunctionExtensions("texture1DLod",        1, &E_GL_ARB_shader_texture_lod);
 | 
				
			||||||
            symbolTable.setFunctionExtensions("texture2DLod",        1, &E_GL_ARB_shader_texture_lod);
 | 
					            symbolTable.setFunctionExtensions("texture2DLod",        1, &E_GL_ARB_shader_texture_lod);
 | 
				
			||||||
@ -2973,12 +2993,6 @@ void IdentifyBuiltIns(int version, EProfile profile, EShLanguage language, TSymb
 | 
				
			|||||||
            symbolTable.setFunctionExtensions("shadow2DRectProjGradARB",  1, &E_GL_ARB_shader_texture_lod);
 | 
					            symbolTable.setFunctionExtensions("shadow2DRectProjGradARB",  1, &E_GL_ARB_shader_texture_lod);
 | 
				
			||||||
        }
 | 
					        }
 | 
				
			||||||
 | 
					
 | 
				
			||||||
        if (profile == EEsProfile) {
 | 
					 | 
				
			||||||
            symbolTable.setFunctionExtensions("texture2DGradEXT",     1, &E_GL_EXT_shader_texture_lod);
 | 
					 | 
				
			||||||
            symbolTable.setFunctionExtensions("texture2DProjGradEXT", 1, &E_GL_EXT_shader_texture_lod);
 | 
					 | 
				
			||||||
            symbolTable.setFunctionExtensions("textureCubeGradEXT",   1, &E_GL_EXT_shader_texture_lod);
 | 
					 | 
				
			||||||
        }
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
        // E_GL_ARB_shader_image_load_store
 | 
					        // E_GL_ARB_shader_image_load_store
 | 
				
			||||||
        if (profile != EEsProfile && version < 420)
 | 
					        if (profile != EEsProfile && version < 420)
 | 
				
			||||||
            symbolTable.setFunctionExtensions("memoryBarrier", 1, &E_GL_ARB_shader_image_load_store);
 | 
					            symbolTable.setFunctionExtensions("memoryBarrier", 1, &E_GL_ARB_shader_image_load_store);
 | 
				
			||||||
 | 
				
			|||||||
@ -505,13 +505,19 @@ TIntermTyped* TParseContext::handleBracketDereference(TSourceLoc loc, TIntermTyp
 | 
				
			|||||||
                else
 | 
					                else
 | 
				
			||||||
                    error(loc, "", "[", "array must be redeclared with a size before being indexed with a variable");
 | 
					                    error(loc, "", "[", "array must be redeclared with a size before being indexed with a variable");
 | 
				
			||||||
            }
 | 
					            }
 | 
				
			||||||
            if (base->getBasicType() == EbtBlock)
 | 
					            if (base->getBasicType() == EbtBlock) {
 | 
				
			||||||
                requireProfile(base->getLoc(), ~EEsProfile, "variable indexing block array");
 | 
					                if (base->getQualifier().storage == EvqBuffer)
 | 
				
			||||||
            else if (language == EShLangFragment && base->getQualifier().isPipeOutput())
 | 
					                    requireProfile(base->getLoc(), ~EEsProfile, "variable indexing buffer block array");
 | 
				
			||||||
 | 
					                else if (base->getQualifier().storage == EvqUniform)
 | 
				
			||||||
 | 
					                    profileRequires(base->getLoc(), EEsProfile, 0, Num_AEP_gpu_shader5, AEP_gpu_shader5, "variable indexing uniform block array");
 | 
				
			||||||
 | 
					                else
 | 
				
			||||||
 | 
					                    requireProfile(base->getLoc(), ~EEsProfile, "variable indexing in/out block array");
 | 
				
			||||||
 | 
					            } else if (language == EShLangFragment && base->getQualifier().isPipeOutput())
 | 
				
			||||||
                requireProfile(base->getLoc(), ~EEsProfile, "variable indexing fragment shader ouput array");
 | 
					                requireProfile(base->getLoc(), ~EEsProfile, "variable indexing fragment shader ouput array");
 | 
				
			||||||
            else if (base->getBasicType() == EbtSampler && version >= 130) {
 | 
					            else if (base->getBasicType() == EbtSampler && version >= 130) {
 | 
				
			||||||
                const char* explanation = "variable indexing sampler array";
 | 
					                const char* explanation = "variable indexing sampler array";
 | 
				
			||||||
                requireProfile(base->getLoc(), ECoreProfile | ECompatibilityProfile, explanation);
 | 
					                requireProfile(base->getLoc(), EEsProfile | ECoreProfile | ECompatibilityProfile, explanation);
 | 
				
			||||||
 | 
					                profileRequires(base->getLoc(), EEsProfile, 0, Num_AEP_gpu_shader5, AEP_gpu_shader5, explanation);
 | 
				
			||||||
                profileRequires(base->getLoc(), ECoreProfile | ECompatibilityProfile, 400, nullptr, explanation);
 | 
					                profileRequires(base->getLoc(), ECoreProfile | ECompatibilityProfile, 400, nullptr, explanation);
 | 
				
			||||||
            }
 | 
					            }
 | 
				
			||||||
 | 
					
 | 
				
			||||||
@ -1332,6 +1338,9 @@ void TParseContext::nonOpBuiltInCheck(TSourceLoc loc, const TFunction& fnCandida
 | 
				
			|||||||
                    profileRequires(loc, ~EEsProfile, 400, E_GL_ARB_texture_gather, feature);
 | 
					                    profileRequires(loc, ~EEsProfile, 400, E_GL_ARB_texture_gather, feature);
 | 
				
			||||||
                else
 | 
					                else
 | 
				
			||||||
                    profileRequires(loc, ~EEsProfile, 400, E_GL_ARB_gpu_shader5, feature);
 | 
					                    profileRequires(loc, ~EEsProfile, 400, E_GL_ARB_gpu_shader5, feature);
 | 
				
			||||||
 | 
					                int offsetArg = fnCandidate[0].type->getSampler().shadow ? 3 : 2;
 | 
				
			||||||
 | 
					                if (! callNode.getSequence()[offsetArg]->getAsConstantUnion())
 | 
				
			||||||
 | 
					                    profileRequires(loc, EEsProfile, 0, Num_AEP_gpu_shader5, AEP_gpu_shader5, "non-constant offset argument");
 | 
				
			||||||
                if (! fnCandidate[0].type->getSampler().shadow)
 | 
					                if (! fnCandidate[0].type->getSampler().shadow)
 | 
				
			||||||
                    compArg = 3;
 | 
					                    compArg = 3;
 | 
				
			||||||
            } else if (fnCandidate.getName().compare("textureGatherOffsets") == 0) {
 | 
					            } else if (fnCandidate.getName().compare("textureGatherOffsets") == 0) {
 | 
				
			||||||
 | 
				
			|||||||
@ -941,12 +941,14 @@ int TScanContext::tokenizeIdentifier()
 | 
				
			|||||||
        return keyword;
 | 
					        return keyword;
 | 
				
			||||||
 | 
					
 | 
				
			||||||
    case PRECISE:
 | 
					    case PRECISE:
 | 
				
			||||||
        if (parseContext.profile == EEsProfile && parseContext.version >= 310)
 | 
					        if ((parseContext.profile == EEsProfile && parseContext.extensionsTurnedOn(Num_AEP_gpu_shader5, AEP_gpu_shader5)) || 
 | 
				
			||||||
            reservedWord();
 | 
					            (parseContext.profile != EEsProfile && parseContext.version >= 400))
 | 
				
			||||||
        else if (parseContext.profile == EEsProfile ||
 | 
					 | 
				
			||||||
            (parseContext.profile != EEsProfile && parseContext.version < 400))
 | 
					 | 
				
			||||||
            return identifierOrType();
 | 
					 | 
				
			||||||
            return keyword;
 | 
					            return keyword;
 | 
				
			||||||
 | 
					        if (parseContext.profile == EEsProfile && parseContext.version == 310) {
 | 
				
			||||||
 | 
					            reservedWord();
 | 
				
			||||||
 | 
					            return keyword;
 | 
				
			||||||
 | 
					        }
 | 
				
			||||||
 | 
					        return identifierOrType();
 | 
				
			||||||
 | 
					
 | 
				
			||||||
    case INVARIANT:
 | 
					    case INVARIANT:
 | 
				
			||||||
        if (parseContext.profile != EEsProfile && parseContext.version < 120)
 | 
					        if (parseContext.profile != EEsProfile && parseContext.version < 120)
 | 
				
			||||||
 | 
				
			|||||||
@ -183,7 +183,7 @@ void TParseContext::initializeExtensionBehavior()
 | 
				
			|||||||
    extensionBehavior[E_GL_OES_texture_storage_multisample_2d_array] = EBhDisablePartial;
 | 
					    extensionBehavior[E_GL_OES_texture_storage_multisample_2d_array] = EBhDisablePartial;
 | 
				
			||||||
    extensionBehavior[E_GL_EXT_geometry_shader]                      = EBhDisable;
 | 
					    extensionBehavior[E_GL_EXT_geometry_shader]                      = EBhDisable;
 | 
				
			||||||
    extensionBehavior[E_GL_EXT_geometry_point_size]                  = EBhDisable;
 | 
					    extensionBehavior[E_GL_EXT_geometry_point_size]                  = EBhDisable;
 | 
				
			||||||
    extensionBehavior[E_GL_EXT_gpu_shader5]                          = EBhDisablePartial;
 | 
					    extensionBehavior[E_GL_EXT_gpu_shader5]                          = EBhDisable;
 | 
				
			||||||
    extensionBehavior[E_GL_EXT_primitive_bounding_box]               = EBhDisablePartial;
 | 
					    extensionBehavior[E_GL_EXT_primitive_bounding_box]               = EBhDisablePartial;
 | 
				
			||||||
    extensionBehavior[E_GL_EXT_shader_io_blocks]                     = EBhDisable;
 | 
					    extensionBehavior[E_GL_EXT_shader_io_blocks]                     = EBhDisable;
 | 
				
			||||||
    extensionBehavior[E_GL_EXT_tessellation_shader]                  = EBhDisable;
 | 
					    extensionBehavior[E_GL_EXT_tessellation_shader]                  = EBhDisable;
 | 
				
			||||||
@ -194,7 +194,7 @@ void TParseContext::initializeExtensionBehavior()
 | 
				
			|||||||
    // OES matching AEP
 | 
					    // OES matching AEP
 | 
				
			||||||
    extensionBehavior[E_GL_OES_geometry_shader]          = EBhDisable;
 | 
					    extensionBehavior[E_GL_OES_geometry_shader]          = EBhDisable;
 | 
				
			||||||
    extensionBehavior[E_GL_OES_geometry_point_size]      = EBhDisable;
 | 
					    extensionBehavior[E_GL_OES_geometry_point_size]      = EBhDisable;
 | 
				
			||||||
    extensionBehavior[E_GL_OES_gpu_shader5]              = EBhDisablePartial;
 | 
					    extensionBehavior[E_GL_OES_gpu_shader5]              = EBhDisable;
 | 
				
			||||||
    extensionBehavior[E_GL_OES_primitive_bounding_box]   = EBhDisablePartial;
 | 
					    extensionBehavior[E_GL_OES_primitive_bounding_box]   = EBhDisablePartial;
 | 
				
			||||||
    extensionBehavior[E_GL_OES_shader_io_blocks]         = EBhDisable;
 | 
					    extensionBehavior[E_GL_OES_shader_io_blocks]         = EBhDisable;
 | 
				
			||||||
    extensionBehavior[E_GL_OES_tessellation_shader]      = EBhDisable;
 | 
					    extensionBehavior[E_GL_OES_tessellation_shader]      = EBhDisable;
 | 
				
			||||||
 | 
				
			|||||||
		Loading…
	
	
			
			x
			
			
		
	
		Reference in New Issue
	
	Block a user