loop7.hlsl 869 B

1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950
  1. // RUN: %dxc -E main -Od -T ps_6_0 %s | FileCheck %s
  2. // CHECK: @main
  3. struct S {
  4. uint flags;
  5. };
  6. #define FLAG_0 0x4
  7. #define FLAG_1 0x20
  8. #define FLAG_2 0x100
  9. Texture2D t0 : register(t0);
  10. Texture2D t1 : register(t1);
  11. bool has_flag(uint flags, uint flag) {
  12. return (flags & flag) != 0;
  13. }
  14. float foo(S s, bool add_flag) {
  15. Texture2D textures[10] = {
  16. t0, t1, t0, t1, t0,
  17. t1, t0, t1, t0, t1,
  18. };
  19. if (add_flag) {
  20. s.flags |= FLAG_2;
  21. }
  22. uint low = has_flag(s.flags, FLAG_0) ? 0 : 1; // Should be 0
  23. uint high = has_flag(s.flags, FLAG_1) ? 10 : 11; // Should be 11
  24. float ret = 0;
  25. [unroll]
  26. for (uint i = low; i*2 <= high; i++) { // Only 0, 1, 2
  27. ret += textures[i].Load(i).x;
  28. }
  29. return ret;
  30. }
  31. [RootSignature("DescriptorTable(SRV(t0), SRV(t1))")]
  32. float main() : SV_Target {
  33. S s = (S)0;
  34. s.flags |= FLAG_0;
  35. return foo(s, false);
  36. }