Merge pull request #2806 from ZhiqianXia/bestFunctionMatching
#extension GL_ARB_gpu_shader5 support the implicit conversion ,
This commit is contained in:
		
						commit
						7141f89a89
					
				
							
								
								
									
										20
									
								
								Test/BestMatchFunction.vert
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										20
									
								
								Test/BestMatchFunction.vert
									
									
									
									
									
										Normal file
									
								
							@ -0,0 +1,20 @@
 | 
				
			|||||||
 | 
					#version 150
 | 
				
			||||||
 | 
					#extension GL_ARB_gpu_shader5 : require
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					uniform ivec4 u1;
 | 
				
			||||||
 | 
					uniform uvec4 u2;
 | 
				
			||||||
 | 
					out     vec4  result;
 | 
				
			||||||
 | 
					vec4 f(in vec4 a, in vec4 b){ return a * b;}           // choice 1
 | 
				
			||||||
 | 
					vec4 f(in uvec4 a, in uvec4 b){ return vec4(a - b);}   // choice 2
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					void main()
 | 
				
			||||||
 | 
					{
 | 
				
			||||||
 | 
					    result = f(u1, u2); // should match choice 2. which have less implicit conversion. 
 | 
				
			||||||
 | 
					    switch (gl_VertexID)
 | 
				
			||||||
 | 
					    {
 | 
				
			||||||
 | 
					      case 0: gl_Position = vec4(-1.0, 1.0, 0.0, 1.0); break;
 | 
				
			||||||
 | 
					      case 1: gl_Position = vec4( 1.0, 1.0, 0.0, 1.0); break;
 | 
				
			||||||
 | 
					      case 2: gl_Position = vec4(-1.0,-1.0, 0.0, 1.0); break;
 | 
				
			||||||
 | 
					      case 3: gl_Position = vec4( 1.0,-1.0, 0.0, 1.0); break;
 | 
				
			||||||
 | 
					    }
 | 
				
			||||||
 | 
					}
 | 
				
			||||||
							
								
								
									
										206
									
								
								Test/baseResults/BestMatchFunction.vert.out
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										206
									
								
								Test/baseResults/BestMatchFunction.vert.out
									
									
									
									
									
										Normal file
									
								
							@ -0,0 +1,206 @@
 | 
				
			|||||||
 | 
					BestMatchFunction.vert
 | 
				
			||||||
 | 
					WARNING: 0:2: '#extension' : extension is only partially supported: GL_ARB_gpu_shader5
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					Shader version: 150
 | 
				
			||||||
 | 
					Requested GL_ARB_gpu_shader5
 | 
				
			||||||
 | 
					0:? Sequence
 | 
				
			||||||
 | 
					0:7  Function Definition: f(vf4;vf4; ( global 4-component vector of float)
 | 
				
			||||||
 | 
					0:7    Function Parameters: 
 | 
				
			||||||
 | 
					0:7      'a' ( in 4-component vector of float)
 | 
				
			||||||
 | 
					0:7      'b' ( in 4-component vector of float)
 | 
				
			||||||
 | 
					0:7    Sequence
 | 
				
			||||||
 | 
					0:7      Branch: Return with expression
 | 
				
			||||||
 | 
					0:7        component-wise multiply ( temp 4-component vector of float)
 | 
				
			||||||
 | 
					0:7          'a' ( in 4-component vector of float)
 | 
				
			||||||
 | 
					0:7          'b' ( in 4-component vector of float)
 | 
				
			||||||
 | 
					0:8  Function Definition: f(vu4;vu4; ( global 4-component vector of float)
 | 
				
			||||||
 | 
					0:8    Function Parameters: 
 | 
				
			||||||
 | 
					0:8      'a' ( in 4-component vector of uint)
 | 
				
			||||||
 | 
					0:8      'b' ( in 4-component vector of uint)
 | 
				
			||||||
 | 
					0:8    Sequence
 | 
				
			||||||
 | 
					0:8      Branch: Return with expression
 | 
				
			||||||
 | 
					0:8        Convert uint to float ( temp 4-component vector of float)
 | 
				
			||||||
 | 
					0:8          subtract ( temp 4-component vector of uint)
 | 
				
			||||||
 | 
					0:8            'a' ( in 4-component vector of uint)
 | 
				
			||||||
 | 
					0:8            'b' ( in 4-component vector of uint)
 | 
				
			||||||
 | 
					0:10  Function Definition: main( ( global void)
 | 
				
			||||||
 | 
					0:10    Function Parameters: 
 | 
				
			||||||
 | 
					0:12    Sequence
 | 
				
			||||||
 | 
					0:12      move second child to first child ( temp 4-component vector of float)
 | 
				
			||||||
 | 
					0:12        'result' ( smooth out 4-component vector of float)
 | 
				
			||||||
 | 
					0:12        Function Call: f(vu4;vu4; ( global 4-component vector of float)
 | 
				
			||||||
 | 
					0:12          Convert int to uint ( temp 4-component vector of uint)
 | 
				
			||||||
 | 
					0:12            'u1' ( uniform 4-component vector of int)
 | 
				
			||||||
 | 
					0:12          'u2' ( uniform 4-component vector of uint)
 | 
				
			||||||
 | 
					0:13      switch
 | 
				
			||||||
 | 
					0:13      condition
 | 
				
			||||||
 | 
					0:13        'gl_VertexID' ( gl_VertexId int VertexId)
 | 
				
			||||||
 | 
					0:13      body
 | 
				
			||||||
 | 
					0:13        Sequence
 | 
				
			||||||
 | 
					0:15          case:  with expression
 | 
				
			||||||
 | 
					0:15            Constant:
 | 
				
			||||||
 | 
					0:15              0 (const int)
 | 
				
			||||||
 | 
					0:?           Sequence
 | 
				
			||||||
 | 
					0:15            move second child to first child ( temp 4-component vector of float)
 | 
				
			||||||
 | 
					0:15              gl_Position: direct index for structure ( gl_Position 4-component vector of float Position)
 | 
				
			||||||
 | 
					0:15                'anon@0' ( out block{ gl_Position 4-component vector of float Position gl_Position,  gl_PointSize float PointSize gl_PointSize,  out unsized 1-element array of float ClipDistance gl_ClipDistance})
 | 
				
			||||||
 | 
					0:15                Constant:
 | 
				
			||||||
 | 
					0:15                  0 (const uint)
 | 
				
			||||||
 | 
					0:15              Constant:
 | 
				
			||||||
 | 
					0:15                -1.000000
 | 
				
			||||||
 | 
					0:15                1.000000
 | 
				
			||||||
 | 
					0:15                0.000000
 | 
				
			||||||
 | 
					0:15                1.000000
 | 
				
			||||||
 | 
					0:15            Branch: Break
 | 
				
			||||||
 | 
					0:16          case:  with expression
 | 
				
			||||||
 | 
					0:16            Constant:
 | 
				
			||||||
 | 
					0:16              1 (const int)
 | 
				
			||||||
 | 
					0:?           Sequence
 | 
				
			||||||
 | 
					0:16            move second child to first child ( temp 4-component vector of float)
 | 
				
			||||||
 | 
					0:16              gl_Position: direct index for structure ( gl_Position 4-component vector of float Position)
 | 
				
			||||||
 | 
					0:16                'anon@0' ( out block{ gl_Position 4-component vector of float Position gl_Position,  gl_PointSize float PointSize gl_PointSize,  out unsized 1-element array of float ClipDistance gl_ClipDistance})
 | 
				
			||||||
 | 
					0:16                Constant:
 | 
				
			||||||
 | 
					0:16                  0 (const uint)
 | 
				
			||||||
 | 
					0:16              Constant:
 | 
				
			||||||
 | 
					0:16                1.000000
 | 
				
			||||||
 | 
					0:16                1.000000
 | 
				
			||||||
 | 
					0:16                0.000000
 | 
				
			||||||
 | 
					0:16                1.000000
 | 
				
			||||||
 | 
					0:16            Branch: Break
 | 
				
			||||||
 | 
					0:17          case:  with expression
 | 
				
			||||||
 | 
					0:17            Constant:
 | 
				
			||||||
 | 
					0:17              2 (const int)
 | 
				
			||||||
 | 
					0:?           Sequence
 | 
				
			||||||
 | 
					0:17            move second child to first child ( temp 4-component vector of float)
 | 
				
			||||||
 | 
					0:17              gl_Position: direct index for structure ( gl_Position 4-component vector of float Position)
 | 
				
			||||||
 | 
					0:17                'anon@0' ( out block{ gl_Position 4-component vector of float Position gl_Position,  gl_PointSize float PointSize gl_PointSize,  out unsized 1-element array of float ClipDistance gl_ClipDistance})
 | 
				
			||||||
 | 
					0:17                Constant:
 | 
				
			||||||
 | 
					0:17                  0 (const uint)
 | 
				
			||||||
 | 
					0:17              Constant:
 | 
				
			||||||
 | 
					0:17                -1.000000
 | 
				
			||||||
 | 
					0:17                -1.000000
 | 
				
			||||||
 | 
					0:17                0.000000
 | 
				
			||||||
 | 
					0:17                1.000000
 | 
				
			||||||
 | 
					0:17            Branch: Break
 | 
				
			||||||
 | 
					0:18          case:  with expression
 | 
				
			||||||
 | 
					0:18            Constant:
 | 
				
			||||||
 | 
					0:18              3 (const int)
 | 
				
			||||||
 | 
					0:?           Sequence
 | 
				
			||||||
 | 
					0:18            move second child to first child ( temp 4-component vector of float)
 | 
				
			||||||
 | 
					0:18              gl_Position: direct index for structure ( gl_Position 4-component vector of float Position)
 | 
				
			||||||
 | 
					0:18                'anon@0' ( out block{ gl_Position 4-component vector of float Position gl_Position,  gl_PointSize float PointSize gl_PointSize,  out unsized 1-element array of float ClipDistance gl_ClipDistance})
 | 
				
			||||||
 | 
					0:18                Constant:
 | 
				
			||||||
 | 
					0:18                  0 (const uint)
 | 
				
			||||||
 | 
					0:18              Constant:
 | 
				
			||||||
 | 
					0:18                1.000000
 | 
				
			||||||
 | 
					0:18                -1.000000
 | 
				
			||||||
 | 
					0:18                0.000000
 | 
				
			||||||
 | 
					0:18                1.000000
 | 
				
			||||||
 | 
					0:18            Branch: Break
 | 
				
			||||||
 | 
					0:?   Linker Objects
 | 
				
			||||||
 | 
					0:?     'u1' ( uniform 4-component vector of int)
 | 
				
			||||||
 | 
					0:?     'u2' ( uniform 4-component vector of uint)
 | 
				
			||||||
 | 
					0:?     'result' ( smooth out 4-component vector of float)
 | 
				
			||||||
 | 
					0:?     'anon@0' ( out block{ gl_Position 4-component vector of float Position gl_Position,  gl_PointSize float PointSize gl_PointSize,  out unsized 1-element array of float ClipDistance gl_ClipDistance})
 | 
				
			||||||
 | 
					0:?     'gl_VertexID' ( gl_VertexId int VertexId)
 | 
				
			||||||
 | 
					0:?     'gl_InstanceID' ( gl_InstanceId int InstanceId)
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					Linked vertex stage:
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					Shader version: 150
 | 
				
			||||||
 | 
					Requested GL_ARB_gpu_shader5
 | 
				
			||||||
 | 
					0:? Sequence
 | 
				
			||||||
 | 
					0:8  Function Definition: f(vu4;vu4; ( global 4-component vector of float)
 | 
				
			||||||
 | 
					0:8    Function Parameters: 
 | 
				
			||||||
 | 
					0:8      'a' ( in 4-component vector of uint)
 | 
				
			||||||
 | 
					0:8      'b' ( in 4-component vector of uint)
 | 
				
			||||||
 | 
					0:8    Sequence
 | 
				
			||||||
 | 
					0:8      Branch: Return with expression
 | 
				
			||||||
 | 
					0:8        Convert uint to float ( temp 4-component vector of float)
 | 
				
			||||||
 | 
					0:8          subtract ( temp 4-component vector of uint)
 | 
				
			||||||
 | 
					0:8            'a' ( in 4-component vector of uint)
 | 
				
			||||||
 | 
					0:8            'b' ( in 4-component vector of uint)
 | 
				
			||||||
 | 
					0:10  Function Definition: main( ( global void)
 | 
				
			||||||
 | 
					0:10    Function Parameters: 
 | 
				
			||||||
 | 
					0:12    Sequence
 | 
				
			||||||
 | 
					0:12      move second child to first child ( temp 4-component vector of float)
 | 
				
			||||||
 | 
					0:12        'result' ( smooth out 4-component vector of float)
 | 
				
			||||||
 | 
					0:12        Function Call: f(vu4;vu4; ( global 4-component vector of float)
 | 
				
			||||||
 | 
					0:12          Convert int to uint ( temp 4-component vector of uint)
 | 
				
			||||||
 | 
					0:12            'u1' ( uniform 4-component vector of int)
 | 
				
			||||||
 | 
					0:12          'u2' ( uniform 4-component vector of uint)
 | 
				
			||||||
 | 
					0:13      switch
 | 
				
			||||||
 | 
					0:13      condition
 | 
				
			||||||
 | 
					0:13        'gl_VertexID' ( gl_VertexId int VertexId)
 | 
				
			||||||
 | 
					0:13      body
 | 
				
			||||||
 | 
					0:13        Sequence
 | 
				
			||||||
 | 
					0:15          case:  with expression
 | 
				
			||||||
 | 
					0:15            Constant:
 | 
				
			||||||
 | 
					0:15              0 (const int)
 | 
				
			||||||
 | 
					0:?           Sequence
 | 
				
			||||||
 | 
					0:15            move second child to first child ( temp 4-component vector of float)
 | 
				
			||||||
 | 
					0:15              gl_Position: direct index for structure ( gl_Position 4-component vector of float Position)
 | 
				
			||||||
 | 
					0:15                'anon@0' ( out block{ gl_Position 4-component vector of float Position gl_Position,  gl_PointSize float PointSize gl_PointSize,  out 1-element array of float ClipDistance gl_ClipDistance})
 | 
				
			||||||
 | 
					0:15                Constant:
 | 
				
			||||||
 | 
					0:15                  0 (const uint)
 | 
				
			||||||
 | 
					0:15              Constant:
 | 
				
			||||||
 | 
					0:15                -1.000000
 | 
				
			||||||
 | 
					0:15                1.000000
 | 
				
			||||||
 | 
					0:15                0.000000
 | 
				
			||||||
 | 
					0:15                1.000000
 | 
				
			||||||
 | 
					0:15            Branch: Break
 | 
				
			||||||
 | 
					0:16          case:  with expression
 | 
				
			||||||
 | 
					0:16            Constant:
 | 
				
			||||||
 | 
					0:16              1 (const int)
 | 
				
			||||||
 | 
					0:?           Sequence
 | 
				
			||||||
 | 
					0:16            move second child to first child ( temp 4-component vector of float)
 | 
				
			||||||
 | 
					0:16              gl_Position: direct index for structure ( gl_Position 4-component vector of float Position)
 | 
				
			||||||
 | 
					0:16                'anon@0' ( out block{ gl_Position 4-component vector of float Position gl_Position,  gl_PointSize float PointSize gl_PointSize,  out 1-element array of float ClipDistance gl_ClipDistance})
 | 
				
			||||||
 | 
					0:16                Constant:
 | 
				
			||||||
 | 
					0:16                  0 (const uint)
 | 
				
			||||||
 | 
					0:16              Constant:
 | 
				
			||||||
 | 
					0:16                1.000000
 | 
				
			||||||
 | 
					0:16                1.000000
 | 
				
			||||||
 | 
					0:16                0.000000
 | 
				
			||||||
 | 
					0:16                1.000000
 | 
				
			||||||
 | 
					0:16            Branch: Break
 | 
				
			||||||
 | 
					0:17          case:  with expression
 | 
				
			||||||
 | 
					0:17            Constant:
 | 
				
			||||||
 | 
					0:17              2 (const int)
 | 
				
			||||||
 | 
					0:?           Sequence
 | 
				
			||||||
 | 
					0:17            move second child to first child ( temp 4-component vector of float)
 | 
				
			||||||
 | 
					0:17              gl_Position: direct index for structure ( gl_Position 4-component vector of float Position)
 | 
				
			||||||
 | 
					0:17                'anon@0' ( out block{ gl_Position 4-component vector of float Position gl_Position,  gl_PointSize float PointSize gl_PointSize,  out 1-element array of float ClipDistance gl_ClipDistance})
 | 
				
			||||||
 | 
					0:17                Constant:
 | 
				
			||||||
 | 
					0:17                  0 (const uint)
 | 
				
			||||||
 | 
					0:17              Constant:
 | 
				
			||||||
 | 
					0:17                -1.000000
 | 
				
			||||||
 | 
					0:17                -1.000000
 | 
				
			||||||
 | 
					0:17                0.000000
 | 
				
			||||||
 | 
					0:17                1.000000
 | 
				
			||||||
 | 
					0:17            Branch: Break
 | 
				
			||||||
 | 
					0:18          case:  with expression
 | 
				
			||||||
 | 
					0:18            Constant:
 | 
				
			||||||
 | 
					0:18              3 (const int)
 | 
				
			||||||
 | 
					0:?           Sequence
 | 
				
			||||||
 | 
					0:18            move second child to first child ( temp 4-component vector of float)
 | 
				
			||||||
 | 
					0:18              gl_Position: direct index for structure ( gl_Position 4-component vector of float Position)
 | 
				
			||||||
 | 
					0:18                'anon@0' ( out block{ gl_Position 4-component vector of float Position gl_Position,  gl_PointSize float PointSize gl_PointSize,  out 1-element array of float ClipDistance gl_ClipDistance})
 | 
				
			||||||
 | 
					0:18                Constant:
 | 
				
			||||||
 | 
					0:18                  0 (const uint)
 | 
				
			||||||
 | 
					0:18              Constant:
 | 
				
			||||||
 | 
					0:18                1.000000
 | 
				
			||||||
 | 
					0:18                -1.000000
 | 
				
			||||||
 | 
					0:18                0.000000
 | 
				
			||||||
 | 
					0:18                1.000000
 | 
				
			||||||
 | 
					0:18            Branch: Break
 | 
				
			||||||
 | 
					0:?   Linker Objects
 | 
				
			||||||
 | 
					0:?     'u1' ( uniform 4-component vector of int)
 | 
				
			||||||
 | 
					0:?     'u2' ( uniform 4-component vector of uint)
 | 
				
			||||||
 | 
					0:?     'result' ( smooth out 4-component vector of float)
 | 
				
			||||||
 | 
					0:?     'anon@0' ( out block{ gl_Position 4-component vector of float Position gl_Position,  gl_PointSize float PointSize gl_PointSize,  out 1-element array of float ClipDistance gl_ClipDistance})
 | 
				
			||||||
 | 
					0:?     'gl_VertexID' ( gl_VertexId int VertexId)
 | 
				
			||||||
 | 
					0:?     'gl_InstanceID' ( gl_InstanceId int InstanceId)
 | 
				
			||||||
 | 
					
 | 
				
			||||||
@ -6652,8 +6652,10 @@ const TFunction* TParseContext::findFunction(const TSourceLoc& loc, const TFunct
 | 
				
			|||||||
                      : findFunctionExact(loc, call, builtIn));
 | 
					                      : findFunctionExact(loc, call, builtIn));
 | 
				
			||||||
    else if (version < 120)
 | 
					    else if (version < 120)
 | 
				
			||||||
        function = findFunctionExact(loc, call, builtIn);
 | 
					        function = findFunctionExact(loc, call, builtIn);
 | 
				
			||||||
    else if (version < 400)
 | 
					    else if (version < 400) {
 | 
				
			||||||
        function = extensionTurnedOn(E_GL_ARB_gpu_shader_fp64) ? findFunction400(loc, call, builtIn) : findFunction120(loc, call, builtIn);
 | 
					        bool needfindFunction400 = extensionTurnedOn(E_GL_ARB_gpu_shader_fp64) || extensionTurnedOn(E_GL_ARB_gpu_shader5);
 | 
				
			||||||
 | 
					        function = needfindFunction400 ? findFunction400(loc, call, builtIn) : findFunction120(loc, call, builtIn);
 | 
				
			||||||
 | 
					    }
 | 
				
			||||||
    else if (explicitTypesEnabled)
 | 
					    else if (explicitTypesEnabled)
 | 
				
			||||||
        function = findFunctionExplicitTypes(loc, call, builtIn);
 | 
					        function = findFunctionExplicitTypes(loc, call, builtIn);
 | 
				
			||||||
    else
 | 
					    else
 | 
				
			||||||
 | 
				
			|||||||
@ -287,6 +287,7 @@ INSTANTIATE_TEST_SUITE_P(
 | 
				
			|||||||
        "atomicCounterARBOps.vert",
 | 
					        "atomicCounterARBOps.vert",
 | 
				
			||||||
        "GL_EXT_shader_integer_mix.vert",
 | 
					        "GL_EXT_shader_integer_mix.vert",
 | 
				
			||||||
        "GL_ARB_draw_instanced.vert",
 | 
					        "GL_ARB_draw_instanced.vert",
 | 
				
			||||||
 | 
					        "BestMatchFunction.vert",
 | 
				
			||||||
    })),
 | 
					    })),
 | 
				
			||||||
    FileNameAsCustomTestSuffix
 | 
					    FileNameAsCustomTestSuffix
 | 
				
			||||||
);
 | 
					);
 | 
				
			||||||
 | 
				
			|||||||
		Loading…
	
	
			
			x
			
			
		
	
		Reference in New Issue
	
	Block a user