This simplifies and enforces use of precision in many more places, to help avoid accidental loss of RelaxedPrecision through intermediate operations. Known fixes are: - ?: - function return values with mis-matched precision - precision of function return values when a copy was needed to fix types
		
			
				
	
	
		
			63 lines
		
	
	
		
			1.3 KiB
		
	
	
	
		
			GLSL
		
	
	
	
	
	
			
		
		
	
	
			63 lines
		
	
	
		
			1.3 KiB
		
	
	
	
		
			GLSL
		
	
	
	
	
	
#version 310 es
 | 
						|
precision mediump float;
 | 
						|
in lowp float lowfin;
 | 
						|
in mediump float mediumfin;
 | 
						|
in highp vec4 highfin;
 | 
						|
 | 
						|
highp int uniform_high;
 | 
						|
mediump int uniform_medium;
 | 
						|
lowp int uniform_low;
 | 
						|
bvec2 ub2;
 | 
						|
 | 
						|
out mediump vec4 mediumfout;
 | 
						|
 | 
						|
highp float global_highp;
 | 
						|
 | 
						|
lowp vec2 foo(mediump vec3 mv3)
 | 
						|
{
 | 
						|
    return highfin.xy;
 | 
						|
}
 | 
						|
 | 
						|
bool boolfun(bvec2 bv2)
 | 
						|
{
 | 
						|
    return bv2 == bvec2(false, true);
 | 
						|
}
 | 
						|
 | 
						|
struct S {
 | 
						|
    highp float a;
 | 
						|
    lowp float b;
 | 
						|
};
 | 
						|
 | 
						|
in S s;
 | 
						|
 | 
						|
void main()
 | 
						|
{
 | 
						|
    lowp int sum = uniform_medium + uniform_high;
 | 
						|
 | 
						|
    sum += uniform_high;
 | 
						|
    sum += uniform_low;
 | 
						|
    
 | 
						|
    // test maxing precisions of args to get precision of builtin
 | 
						|
    lowp float arg1 = 3.2;
 | 
						|
    mediump float arg2 = 1023908.2;
 | 
						|
    lowp float d = distance(lowfin, mediumfin);
 | 
						|
 | 
						|
    global_highp = length(highfin);
 | 
						|
 | 
						|
    highp vec4 local_highp = vec4(global_highp);
 | 
						|
 | 
						|
    mediumfout = vec4(sin(d)) + arg2 + local_highp;
 | 
						|
 | 
						|
    sum += 4 + ((ivec2(uniform_low) * ivec2(uniform_high) + ivec2((/* comma operator */uniform_low, uniform_high)))).x;
 | 
						|
 | 
						|
    mediumfout += vec4(sum);
 | 
						|
 | 
						|
    if (boolfun(ub2))
 | 
						|
        ++mediumfout;
 | 
						|
    
 | 
						|
    mediumfout *= s.a;
 | 
						|
    mediumfout *= s.b;
 | 
						|
 | 
						|
    mediumfout = ((mediumfin * mediumfin > 4.2) ? 2.0 * mediumfout : 3.0 * mediumfout);
 | 
						|
}
 |