 4d2298bfd7
			
		
	
	
		4d2298bfd7
		
			
		
	
	
	
	
		
			
			Swizzled out operands were added in bbbd9a2a. This was sufficient for most tests, but we ran into problems with umulExtended and imulExtended, which have two. This CL converts the tracking values to vectors so multiple operands can be supported. Test: KHR-GLES31.core.shader_bitfield_operation.* Test: ctest
		
			
				
	
	
		
			150 lines
		
	
	
		
			2.8 KiB
		
	
	
	
		
			GLSL
		
	
	
	
	
	
			
		
		
	
	
			150 lines
		
	
	
		
			2.8 KiB
		
	
	
	
		
			GLSL
		
	
	
	
	
	
| #version 450
 | |
| 
 | |
| flat in ivec4 uiv4;
 | |
| in vec4 uv4;
 | |
| bool ub;
 | |
| bvec4 ub41, ub42;
 | |
| in float uf;
 | |
| flat in int ui;
 | |
| flat in uvec4 uuv4;
 | |
| flat in uint uui;
 | |
| 
 | |
| out vec4 FragColor;
 | |
| 
 | |
| void main()
 | |
| {
 | |
|     vec4 v;
 | |
| 	float f;
 | |
| 	bool b;
 | |
| 	bvec4 bv4;
 | |
| 	int i;
 | |
| 	uint u;
 | |
| 
 | |
| 	// floating point
 | |
|     v = radians(uv4);
 | |
|     v += degrees(v);
 | |
|     v += (i = ui*ui, sin(v));
 | |
|     v += cos(v);
 | |
|     v += tan(v);
 | |
|     v += asin(v);
 | |
|     v += acos(v);
 | |
| 
 | |
|     v += atan(v);
 | |
|     v += sinh(v);
 | |
|     v += cosh(v);
 | |
|     v += tanh(v);
 | |
|     v += asinh(v);
 | |
|     v += acosh(v);
 | |
|     v += atanh(v);
 | |
| 
 | |
|     v += pow(v, v);
 | |
|     v += exp(v);
 | |
|     v += log(v);
 | |
|     v += exp2(v);
 | |
|     v += log2(v);
 | |
|     v += sqrt(v);
 | |
|     v += inversesqrt(v);
 | |
|     v += abs(v);
 | |
|     v += sign(v);
 | |
|     v += floor(v);
 | |
| 
 | |
|     v += trunc(v);
 | |
|     v += round(v);
 | |
|     v += roundEven(v);
 | |
| 
 | |
|     v += ceil(v);
 | |
|     v += fract(v);
 | |
|     v += mod(v, v);
 | |
|     v += mod(v, v.x);
 | |
| 
 | |
|     v += modf(v, v);
 | |
|     v += modf(v, v.yzxw);
 | |
| 
 | |
|     v += min(v, uv4);
 | |
|     v += max(v, uv4);
 | |
|     v += clamp(v, uv4, uv4);
 | |
|     v += mix(v,v,v);
 | |
| 
 | |
|     v += mix(v,v,ub41);
 | |
|     v += mix(v,v,f);
 | |
| //spv    v += intBitsToFloat(ui);
 | |
| //    v += uintBitsToFloat(uui);
 | |
| //    i += floatBitsToInt(f);
 | |
| //    u += floatBitsToUint(f);
 | |
|     v += fma(v, uv4, v);
 | |
| 
 | |
|     v += step(v,v);
 | |
|     v += smoothstep(v,v,v);
 | |
|     v += step(uf,v);
 | |
|     v += smoothstep(uf,uf,v);
 | |
|     v += normalize(v);
 | |
|     v += faceforward(v, v, v);
 | |
|     v += reflect(v, v);
 | |
|     v += refract(v, v, uf);
 | |
|     v += dFdx(v);
 | |
|     v += dFdy(v);
 | |
|     v += fwidth(v);
 | |
| 
 | |
| 	// signed integer
 | |
| 	i += abs(ui);
 | |
| 	i += sign(i);
 | |
| 	i += min(i, ui);
 | |
| 	i += max(i, ui);
 | |
| 	i += clamp(i, ui, ui);
 | |
| 
 | |
| 	// unsigned integer
 | |
|     u += min(u, uui);
 | |
|     u += max(u, uui);
 | |
|     u += clamp(u, uui, uui);
 | |
| 
 | |
|     // multiple out operands
 | |
|     uvec4 msb;
 | |
|     uvec4 lsb;
 | |
|     umulExtended(uuv4.xyz, uuv4.xyz, msb.xyz, lsb.xyz);
 | |
|     u += msb.x + msb.y + msb.z;
 | |
|     u += lsb.x + lsb.y + lsb.z;
 | |
| 
 | |
| 	//// bool
 | |
| 	b = isnan(uf);
 | |
|     b = isinf(f);
 | |
| 	b = any(lessThan(v, uv4));
 | |
| 	b = (b && any(lessThanEqual(v, uv4)));
 | |
|     b = (b && any(greaterThan(v, uv4)));
 | |
|     b = (b && any(greaterThanEqual(v, uv4)));
 | |
|     b = (b && any(equal(ub41, ub42)));
 | |
|     b = (b && any(notEqual(ub41, ub42)));
 | |
|     b = (b && any(ub41));
 | |
|     b = (b && all(ub41));
 | |
|     b = (b && any(not(ub41)));
 | |
| 	
 | |
| 	i = ((i + ui) * i - ui) / i;
 | |
| 	i = i % ui;
 | |
| 	if (i == ui || i != ui && i == ui ^^ i != 2)
 | |
| 	    ++i;
 | |
| 	
 | |
| 	f = ((uf + uf) * uf - uf) / uf;
 | |
| 
 | |
| 	f += length(v);
 | |
|     f += distance(v, v);
 | |
|     f += dot(v, v);
 | |
|     f += dot(f, uf);
 | |
| 	f += cross(v.xyz, v.xyz).x;
 | |
| 
 | |
| 	if (f == uf || f != uf && f != 2.0)
 | |
| 	    ++f;
 | |
| 
 | |
|     i &= ui;
 | |
|     i |= 0x42;
 | |
|     i ^= ui;
 | |
|     i %= 17;
 | |
|     i >>= 2;
 | |
|     i <<= ui;
 | |
|     i = ~i;
 | |
|     b = !b;
 | |
| 
 | |
|     FragColor = b ? vec4(i) + vec4(f) + v : v;
 | |
| 
 | |
|     mat4 m1 = mat4(1.0), m2 = mat4(0.0);
 | |
|     FragColor += (b ? m1 : m2)[1];
 | |
| }
 |