mirror of
				https://gitlab.winehq.org/wine/vkd3d.git
				synced 2025-09-12 18:50:22 -07:00 
			
		
		
		
	
		
			
				
	
	
		
			114 lines
		
	
	
		
			2.6 KiB
		
	
	
	
		
			Plaintext
		
	
	
	
	
	
			
		
		
	
	
			114 lines
		
	
	
		
			2.6 KiB
		
	
	
	
		
			Plaintext
		
	
	
	
	
	
| % The main objective of this test is to see if operations for SM1 vertex shaders work, because they
 | |
| % have a different instruction set than pixel shaders.
 | |
| 
 | |
| % Considerations so that the vertex shader output matches the pixel shader input properly on all
 | |
| % backends:
 | |
| % - sv_position must be the last field in the output signature.
 | |
| % - the d3d9 backend, on Windows, clamps the value of the COLORX semantics before passing it to
 | |
| %   the pixel shader, so their values must be between 0.0 and 1.0.
 | |
| 
 | |
| [pixel shader]
 | |
| float4 main(in float4 res : COLOR1) : sv_target
 | |
| {
 | |
|     return res;
 | |
| }
 | |
| 
 | |
| 
 | |
| % Check that -0.0f is not less than 0.0f
 | |
| [vertex shader]
 | |
| float a;
 | |
| 
 | |
| void main(out float4 res : COLOR1, in float4 pos : position, out float4 out_pos : sv_position)
 | |
| {
 | |
|     out_pos = pos;
 | |
| 
 | |
|     res = -0.0f < a;
 | |
| }
 | |
| 
 | |
| [test]
 | |
| if(sm<4)  uniform 0 float 0.0
 | |
| if(sm>=4) uniform 0 float4 0.0 0.0 0.0 0.0
 | |
| todo(glsl) draw quad
 | |
| probe all rgba (0.0, 0.0, 0.0, 0.0)
 | |
| 
 | |
| 
 | |
| [vertex shader]
 | |
| int a, b;
 | |
| 
 | |
| void main(out float4 res : COLOR1, in float4 pos : position, out float4 out_pos : sv_position)
 | |
| {
 | |
|     out_pos = pos;
 | |
| 
 | |
|     res.x = a == b;
 | |
|     res.y = a != b;
 | |
|     res.z = a > b;
 | |
|     res.w = b >= a;
 | |
| }
 | |
| 
 | |
| [test]
 | |
| if(sm<4)  uniform 0 float 3
 | |
| if(sm<4)  uniform 4 float 4
 | |
| if(sm>=4) uniform 0 int4 3 4 0 0
 | |
| todo(glsl) draw quad
 | |
| probe all rgba (0.0, 1.0, 0.0, 1.0)
 | |
| if(sm<4)  uniform 0 float -2
 | |
| if(sm<4)  uniform 4 float -2
 | |
| if(sm>=4) uniform 0 int4 -2 -2 0 0
 | |
| todo(glsl) draw quad
 | |
| probe all rgba (1.0, 0.0, 0.0, 1.0)
 | |
| 
 | |
| 
 | |
| [vertex shader]
 | |
| int a, b;
 | |
| 
 | |
| void main(out float4 res : COLOR1, in float4 pos : position, out float4 out_pos : sv_position)
 | |
| {
 | |
|     out_pos = pos;
 | |
| 
 | |
|     res.x = a && b;
 | |
|     res.y = a || b;
 | |
|     res.z = b && a;
 | |
|     res.w = b || a;
 | |
| }
 | |
| 
 | |
| [test]
 | |
| if(sm<4)  uniform 0 float 0
 | |
| if(sm<4)  uniform 4 float 2
 | |
| if(sm>=4) uniform 0 int4 0 2 0 0
 | |
| todo(glsl) draw quad
 | |
| probe all rgba (0.0, 1.0, 0.0, 1.0)
 | |
| if(sm<4)  uniform 0 float -2
 | |
| if(sm<4)  uniform 4 float 8
 | |
| if(sm>=4) uniform 0 int4 -2 8 0 0
 | |
| todo(glsl) draw quad
 | |
| probe all rgba (1.0, 1.0, 1.0, 1.0)
 | |
| 
 | |
| 
 | |
| [require]
 | |
| % The ternary operator works differently in sm6. See sm6-ternary.shader_test.
 | |
| shader model < 6.0
 | |
| 
 | |
| [vertex shader todo(sm<4)]
 | |
| int a, b, c;
 | |
| 
 | |
| void main(out float4 res : COLOR1, in float4 pos : position, out float4 out_pos : sv_position)
 | |
| {
 | |
|     out_pos = pos;
 | |
| 
 | |
|     res = a ? b/1000.0 : c/1000.0;
 | |
| }
 | |
| 
 | |
| [test]
 | |
| if(sm<4)  uniform 0 float 0
 | |
| if(sm<4)  uniform 4 float 100
 | |
| if(sm<4)  uniform 8 float 200
 | |
| if(sm>=4) uniform 0 int4 0 100 200 0
 | |
| todo(sm<4 | glsl) draw quad
 | |
| probe all rgba (0.2, 0.2, 0.2, 0.2)
 | |
| if(sm<4)  uniform 0 float -4
 | |
| if(sm<4)  uniform 4 float 100
 | |
| if(sm<4)  uniform 8 float 200
 | |
| if(sm>=4) uniform 0 int4 -4 100 200 0
 | |
| todo(sm<4 | glsl) draw quad
 | |
| probe all rgba (0.1, 0.1, 0.1, 0.1)
 |