mirror of
				https://gitlab.winehq.org/wine/vkd3d.git
				synced 2025-09-12 18:50:22 -07:00 
			
		
		
		
	Based on a patch by Nikolay Sivov. Co-authored-by: Nikolay Sivov <nsivov@codeweavers.com>
		
			
				
	
	
		
			100 lines
		
	
	
		
			2.0 KiB
		
	
	
	
		
			Plaintext
		
	
	
	
	
	
			
		
		
	
	
			100 lines
		
	
	
		
			2.0 KiB
		
	
	
	
		
			Plaintext
		
	
	
	
	
	
| [vertex shader]
 | |
| void main(float4 pos : position, out float tex : texcoord, out float4 out_pos : sv_position)
 | |
| {
 | |
|     tex = pos.x;
 | |
|     out_pos = pos;
 | |
| }
 | |
| 
 | |
| [pixel shader todo(sm<6)]
 | |
| float4 main(float tex : texcoord) : sv_target
 | |
| {
 | |
|     int i;
 | |
|     float x = 0.0;
 | |
|     [unroll] for (i = 0; i < 10; i++)
 | |
|     {
 | |
|         x += i;
 | |
|         if (tex > 0.5 && i == 5)
 | |
|             break;
 | |
|         if (tex > -0.5 && i >= 7)
 | |
|             continue;
 | |
|         x -= 1;
 | |
|     }
 | |
|     return float4(i, x, 0.0, 0.0);
 | |
| }
 | |
| 
 | |
| [test]
 | |
| todo(sm<6 | glsl) draw quad
 | |
| probe (  0, 0, 159, 480) rgba (10.0, 35.0, 0.0, 0.0)
 | |
| probe (161, 0, 479, 480) rgba (10.0, 38.0, 0.0, 0.0)
 | |
| probe (481, 0, 640, 480) rgba ( 5.0, 10.0, 0.0, 0.0)
 | |
| 
 | |
| [require]
 | |
| shader model >= 4.0
 | |
| 
 | |
| % Identical to the previous, except we prevent DXC from unrolling the
 | |
| % loop so we can test non-trivial control flow
 | |
| [pixel shader]
 | |
| uniform uint iter;
 | |
| 
 | |
| float4 main(float tex : texcoord) : sv_target
 | |
| {
 | |
|     int i;
 | |
|     float x = 0.0;
 | |
|     for (i = 0; i < iter; i++)
 | |
|     {
 | |
|         x += i;
 | |
|         if (tex > 0.5 && i == 5)
 | |
|             break;
 | |
|         if (tex > -0.5 && i >= 7)
 | |
|             continue;
 | |
|         x -= 1;
 | |
|     }
 | |
|     return float4(i, x, 0.0, 0.0);
 | |
| }
 | |
| 
 | |
| [test]
 | |
| uniform 0 uint4 10 0 0 0
 | |
| todo(glsl) draw quad
 | |
| probe (  0, 0, 159, 480) rgba (10.0, 35.0, 0.0, 0.0)
 | |
| probe (161, 0, 479, 480) rgba (10.0, 38.0, 0.0, 0.0)
 | |
| probe (481, 0, 640, 480) rgba ( 5.0, 10.0, 0.0, 0.0)
 | |
| 
 | |
| 
 | |
| [require]
 | |
| % Reset requirements
 | |
| 
 | |
| [pixel shader]
 | |
| float4 main(float tex : texcoord) : sv_target
 | |
| {
 | |
|     int i;
 | |
|     float x = 0.0;
 | |
|     [unroll] [attr1] for (i = 0; i < 10; i++)
 | |
|     {
 | |
|         x += i;
 | |
|     }
 | |
|     return float4(i, x, 0.0, 0.0);
 | |
| }
 | |
| 
 | |
| [test]
 | |
| todo(glsl) draw quad
 | |
| probe (0, 0) rgba (10.0, 45.0, 0.0, 0.0)
 | |
| 
 | |
| [pixel shader fail(sm<6)]
 | |
| float4 main(float tex : texcoord) : sv_target
 | |
| {
 | |
|     int i;
 | |
|     float x = 0.0;
 | |
|     [unroll] [unroll] for (i = 0; i < 10; i++)
 | |
|     {
 | |
|         x += i;
 | |
|     }
 | |
|     return float4(i, x, 0.0, 0.0);
 | |
| }
 | |
| 
 | |
| [pixel shader fail]
 | |
| float4 main() : sv_target
 | |
| {
 | |
|     break;
 | |
|     return float4(0.0, 0.0, 0.0, 0.0);
 | |
| }
 |