cast.2bool.implicit.hlsl 2.0 KB

1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950515253545556575859606162636465
  1. // Run: %dxc -T ps_6_0 -E main
  2. // CHECK: [[v2bool_1_0:%\d+]] = OpConstantComposite %v2bool %true %false
  3. // CHECK: [[v3bool_0_1_1:%\d+]] = OpConstantComposite %v3bool %false %true %true
  4. // CHECK: [[v2uint_0_0:%\d+]] = OpConstantComposite %v2uint %uint_0 %uint_0
  5. // CHECK: [[v3float_0_0_0:%\d+]] = OpConstantComposite %v3float %float_0 %float_0 %float_0
  6. void main() {
  7. // CHECK-LABEL: %bb_entry = OpLabel
  8. bool b;
  9. int from1;
  10. uint from2;
  11. float from3;
  12. bool1 vb1;
  13. bool2 vb2;
  14. bool3 vb3;
  15. int1 vfrom1;
  16. uint2 vfrom2;
  17. float3 vfrom3;
  18. // From constant (implicit)
  19. // CHECK: OpStore %b %true
  20. b = 42;
  21. // CHECK-NEXT: OpStore %b %false
  22. b = 0.0;
  23. // From constant expr
  24. // CHECK-NEXT: OpStore %b %false
  25. b = 35 - 35;
  26. // From variable (implicit)
  27. // CHECK-NEXT: [[from1:%\d+]] = OpLoad %int %from1
  28. // CHECK-NEXT: [[c1:%\d+]] = OpINotEqual %bool [[from1]] %int_0
  29. // CHECK-NEXT: OpStore %b [[c1]]
  30. b = from1;
  31. // CHECK-NEXT: [[from2:%\d+]] = OpLoad %uint %from2
  32. // CHECK-NEXT: [[c2:%\d+]] = OpINotEqual %bool [[from2]] %uint_0
  33. // CHECK-NEXT: OpStore %b [[c2]]
  34. b = from2;
  35. // CHECK-NEXT: [[from3:%\d+]] = OpLoad %float %from3
  36. // CHECK-NEXT: [[c3:%\d+]] = OpFOrdNotEqual %bool [[from3]] %float_0
  37. // CHECK-NEXT: OpStore %b [[c3]]
  38. b = from3;
  39. // Vector cases
  40. // CHECK: OpStore %vbc2 [[v2bool_1_0]]
  41. // CHECK: OpStore %vbc3 [[v3bool_0_1_1]]
  42. bool2 vbc2 = {1, 15 - 15};
  43. bool3 vbc3 = {0.0, 1.2 + 1.1, 3}; // Mixed
  44. // CHECK-NEXT: [[vfrom1:%\d+]] = OpLoad %int %vfrom1
  45. // CHECK-NEXT: [[vc1:%\d+]] = OpINotEqual %bool [[vfrom1]] %int_0
  46. // CHECK-NEXT: OpStore %vb1 [[vc1]]
  47. vb1 = vfrom1;
  48. // CHECK-NEXT: [[vfrom2:%\d+]] = OpLoad %v2uint %vfrom2
  49. // CHECK-NEXT: [[vc2:%\d+]] = OpINotEqual %v2bool [[vfrom2]] [[v2uint_0_0]]
  50. // CHECK-NEXT: OpStore %vb2 [[vc2]]
  51. vb2 = vfrom2;
  52. // CHECK-NEXT: [[vfrom3:%\d+]] = OpLoad %v3float %vfrom3
  53. // CHECK-NEXT: [[vc3:%\d+]] = OpFOrdNotEqual %v3bool [[vfrom3]] [[v3float_0_0_0]]
  54. // CHECK-NEXT: OpStore %vb3 [[vc3]]
  55. vb3 = vfrom3;
  56. }