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>
		
			
				
	
	
		
			248 lines
		
	
	
		
			3.5 KiB
		
	
	
	
		
			Plaintext
		
	
	
	
	
	
			
		
		
	
	
			248 lines
		
	
	
		
			3.5 KiB
		
	
	
	
		
			Plaintext
		
	
	
	
	
	
| % TODO: dxcompiler emits no loops for any of these test shaders.
 | |
| 
 | |
| [pixel shader]
 | |
| float a;
 | |
| 
 | |
| float4 main() : sv_target
 | |
| {
 | |
|     float res = 0;
 | |
| 
 | |
|     for (int i = 0; i < 10; ++i)
 | |
|     {
 | |
|         res += a;
 | |
|         // The temp copy of 'a' must reserve its registers for the rest of the loop.
 | |
|         // It shall not be overwritten.
 | |
|     }
 | |
|     return res;
 | |
| }
 | |
| 
 | |
| [test]
 | |
| uniform 0 float 5.0
 | |
| todo(glsl) draw quad
 | |
| probe (0, 0) rgba (50.0, 50.0, 50.0, 50.0)
 | |
| 
 | |
| 
 | |
| [pixel shader]
 | |
| float a;
 | |
| 
 | |
| float4 main() : sv_target
 | |
| {
 | |
|     float res = 0;
 | |
| 
 | |
|     for (int i = 0; i < 10; ++i)
 | |
|     {
 | |
|         res += a;
 | |
|         // The temp copy of 'a' must reserve its registers for the rest of the loop.
 | |
|         // It shall not be overwritten.
 | |
|         i++;
 | |
|     }
 | |
|     return res;
 | |
| }
 | |
| 
 | |
| [test]
 | |
| uniform 0 float 4.0
 | |
| todo(glsl) draw quad
 | |
| probe (0, 0) rgba (20.0, 20.0, 20.0, 20.0)
 | |
| 
 | |
| [pixel shader]
 | |
| float a;
 | |
| 
 | |
| float4 main() : sv_target
 | |
| {
 | |
|     int i = 0;
 | |
|     float res = a;
 | |
| 
 | |
|     while (i < 10)
 | |
|     {
 | |
|        if (i == 5)
 | |
|        {
 | |
|            res += 0.1f;
 | |
|            break;
 | |
|        }
 | |
|        res += 1.0f;
 | |
|        i++;
 | |
|        if (i == 2) continue;
 | |
|        res += 100.f;
 | |
|     }
 | |
| 
 | |
|     return res;
 | |
| }
 | |
| 
 | |
| [test]
 | |
| uniform 0 float 4.0
 | |
| todo(glsl) draw quad
 | |
| probe (0, 0) rgba (409.1, 409.1, 409.1, 409.1)
 | |
| 
 | |
| [pixel shader]
 | |
| float a;
 | |
| 
 | |
| float4 main() : sv_target
 | |
| {
 | |
|     int i = 0;
 | |
|     float res = a;
 | |
| 
 | |
|     do
 | |
|     {
 | |
|        res += 1.0f;
 | |
|        if (i == 5)
 | |
|        {
 | |
|            res += 0.1f;
 | |
|            break;
 | |
|        }
 | |
|        i++;
 | |
|        if (i == 2) continue;
 | |
|        res += 100.f;
 | |
|     }
 | |
|     while (i < 10);
 | |
| 
 | |
|     return res;
 | |
| }
 | |
| 
 | |
| [test]
 | |
| uniform 0 float 4.0
 | |
| todo(glsl) draw quad
 | |
| probe (0, 0) rgba (410.1, 410.1, 410.1, 410.1)
 | |
| 
 | |
| % loop attribute by itself
 | |
| [pixel shader todo(sm<4)]
 | |
| float4 main() : sv_target
 | |
| {
 | |
|     float ret = 0.0;
 | |
| 
 | |
|     [loop] for (int i = 0; i < 10; ++i)
 | |
|     {
 | |
|         ret += 1.0;
 | |
|     }
 | |
| 
 | |
|     return ret;
 | |
| }
 | |
| 
 | |
| [test]
 | |
| todo(sm<4 | glsl) draw quad
 | |
| probe (0, 0) rgba (10.0, 10.0, 10.0, 10.0)
 | |
| 
 | |
| [pixel shader todo(sm<4)]
 | |
| float4 main() : sv_target
 | |
| {
 | |
|     float ret = 0.0;
 | |
|     int i = 0;
 | |
| 
 | |
|     [loop] while (i < 10)
 | |
|     {
 | |
|         ret += 1.0;
 | |
|         i++;
 | |
|     }
 | |
| 
 | |
|     return ret;
 | |
| }
 | |
| 
 | |
| [test]
 | |
| todo(sm<4 | glsl) draw quad
 | |
| probe (0, 0) rgba (10.0, 10.0, 10.0, 10.0)
 | |
| 
 | |
| [pixel shader todo(sm<4)]
 | |
| float4 main() : sv_target
 | |
| {
 | |
|     float ret = 0.0;
 | |
|     int i = 0;
 | |
| 
 | |
|     [loop] do
 | |
|     {
 | |
|         i++;
 | |
|         ret += 1.0;
 | |
|     } while (i < 10);
 | |
| 
 | |
|     return ret;
 | |
| }
 | |
| 
 | |
| [test]
 | |
| todo(sm<4 | glsl) draw quad
 | |
| probe (0, 0) rgba (10.0, 10.0, 10.0, 10.0)
 | |
| 
 | |
| % unroll can't be used with fastopt or loop
 | |
| [pixel shader fail]
 | |
| float4 main() : sv_target
 | |
| {
 | |
|     float ret = 0.0;
 | |
| 
 | |
|     [loop] [unroll(1)] for (int i = 0; i < 10; ++i)
 | |
|     {
 | |
|         ret += 1.0;
 | |
|     }
 | |
| 
 | |
|     return ret;
 | |
| }
 | |
| 
 | |
| [pixel shader fail]
 | |
| float4 main() : sv_target
 | |
| {
 | |
|     float ret = 0.0;
 | |
| 
 | |
|     [fastopt] [unroll(1)] for (int i = 0; i < 10; ++i)
 | |
|     {
 | |
|         ret += 1.0;
 | |
|     }
 | |
| 
 | |
|     return ret;
 | |
| }
 | |
| 
 | |
| [pixel shader fail]
 | |
| float4 main() : sv_target
 | |
| {
 | |
|     float ret = 0.0;
 | |
|     int i = 0;
 | |
| 
 | |
|     [loop] [unroll(1)] while (i < 10)
 | |
|     {
 | |
|         ret += 1.0;
 | |
|         i++;
 | |
|     }
 | |
| 
 | |
|     return ret;
 | |
| }
 | |
| 
 | |
| [pixel shader fail]
 | |
| float4 main() : sv_target
 | |
| {
 | |
|     float ret = 0.0;
 | |
|     int i = 0;
 | |
| 
 | |
|     [fastopt] [unroll(1)] while (i < 10)
 | |
|     {
 | |
|         ret += 1.0;
 | |
|         i++;
 | |
|     }
 | |
| 
 | |
|     return ret;
 | |
| }
 | |
| 
 | |
| [pixel shader fail]
 | |
| float4 main() : sv_target
 | |
| {
 | |
|     float ret = 0.0;
 | |
|     int i = 0;
 | |
| 
 | |
|     [loop] [unroll(1)] do
 | |
|     {
 | |
|         ret += 1.0;
 | |
|         i++;
 | |
|     } while (i < 10)
 | |
| 
 | |
|     return ret;
 | |
| }
 | |
| 
 | |
| [pixel shader fail]
 | |
| float4 main() : sv_target
 | |
| {
 | |
|     float ret = 0.0;
 | |
|     int i = 0;
 | |
| 
 | |
|     [fastopt] [unroll(1)] do
 | |
|     {
 | |
|         ret += 1.0;
 | |
|         i++;
 | |
|     } while (i < 10)
 | |
| 
 | |
|     return ret;
 | |
| }
 |