cast.2bool.explicit.hlsl 3.3 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103
  1. // Run: %dxc -T ps_6_0 -E main
  2. // CHECK: [[v2uint_0_0:%\d+]] = OpConstantComposite %v2uint %uint_0 %uint_0
  3. // CHECK: [[v3float_0_0_0:%\d+]] = OpConstantComposite %v3float %float_0 %float_0 %float_0
  4. // CHECK: [[v2bool_1_1:%\d+]] = OpConstantComposite %v2bool %true %true
  5. void main() {
  6. // CHECK-LABEL: %bb_entry = OpLabel
  7. bool b;
  8. int from1;
  9. uint from2;
  10. float from3;
  11. bool1 vb1;
  12. bool2 vb2;
  13. bool3 vb3;
  14. int1 vfrom1;
  15. uint2 vfrom2;
  16. float3 vfrom3;
  17. // C style cast
  18. // From constant (explicit)
  19. // CHECK: OpStore %b %true
  20. b = (bool)35;
  21. // CHECK-NEXT: OpStore %b %false
  22. b = (bool)0.0;
  23. // From constant expr
  24. // CHECK-NEXT: OpStore %b %true
  25. b = (bool)(3.5 - 3.4);
  26. // From variable (explicit)
  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 = (bool)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 = (bool)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 = (bool)from3;
  39. // C++ function style cast
  40. // CHECK-NEXT: OpStore %b %false
  41. b = bool(0);
  42. // CHECK-NEXT: OpStore %b %true
  43. b = bool(3.5);
  44. // CHECK-NEXT: OpStore %b %true
  45. b = bool(42 + 1);
  46. // CHECK-NEXT: [[from4:%\d+]] = OpLoad %int %from1
  47. // CHECK-NEXT: [[c4:%\d+]] = OpINotEqual %bool [[from4]] %int_0
  48. // CHECK-NEXT: OpStore %b [[c4]]
  49. b = bool(from1);
  50. // CHECK-NEXT: [[from5:%\d+]] = OpLoad %uint %from2
  51. // CHECK-NEXT: [[c5:%\d+]] = OpINotEqual %bool [[from5]] %uint_0
  52. // CHECK-NEXT: OpStore %b [[c5]]
  53. b = bool(from2);
  54. // CHECK-NEXT: [[from6:%\d+]] = OpLoad %float %from3
  55. // CHECK-NEXT: [[c6:%\d+]] = OpFOrdNotEqual %bool [[from6]] %float_0
  56. // CHECK-NEXT: OpStore %b [[c6]]
  57. b = bool(from3);
  58. // Vector cases
  59. // CHECK-NEXT: OpStore %vb1 %true
  60. vb1 = (bool1)42;
  61. // CHECK-NEXT: [[vfrom1:%\d+]] = OpLoad %int %vfrom1
  62. // CHECK-NEXT: [[vc1:%\d+]] = OpINotEqual %bool [[vfrom1]] %int_0
  63. // CHECK-NEXT: OpStore %vb1 [[vc1]]
  64. vb1 = (bool1)vfrom1;
  65. // CHECK-NEXT: [[vfrom2:%\d+]] = OpLoad %v2uint %vfrom2
  66. // CHECK-NEXT: [[vc2:%\d+]] = OpINotEqual %v2bool [[vfrom2]] [[v2uint_0_0]]
  67. // CHECK-NEXT: OpStore %vb2 [[vc2]]
  68. vb2 = (bool2)vfrom2;
  69. // CHECK-NEXT: [[vfrom3:%\d+]] = OpLoad %v3float %vfrom3
  70. // CHECK-NEXT: [[vc3:%\d+]] = OpFOrdNotEqual %v3bool [[vfrom3]] [[v3float_0_0_0]]
  71. // CHECK-NEXT: OpStore %vb3 [[vc3]]
  72. vb3 = (bool3)vfrom3;
  73. // CHECK-NEXT: OpStore %vb1 %true
  74. vb1 = bool1(3.5);
  75. // CHECK-NEXT: OpStore %vb2 [[v2bool_1_1]]
  76. vb2 = bool2(1.1 + 1.2, 3.0);
  77. // CHECK-NEXT: [[vfrom4:%\d+]] = OpLoad %int %vfrom1
  78. // CHECK-NEXT: [[vc4:%\d+]] = OpINotEqual %bool [[vfrom4]] %int_0
  79. // CHECK-NEXT: OpStore %vb1 [[vc4]]
  80. vb1 = bool1(vfrom1);
  81. // CHECK-NEXT: [[vfrom5:%\d+]] = OpLoad %v2uint %vfrom2
  82. // CHECK-NEXT: [[vc5:%\d+]] = OpINotEqual %v2bool [[vfrom5]] [[v2uint_0_0]]
  83. // CHECK-NEXT: OpStore %vb2 [[vc5]]
  84. vb2 = bool2(vfrom2);
  85. // CHECK-NEXT: [[vfrom6:%\d+]] = OpLoad %v3float %vfrom3
  86. // CHECK-NEXT: [[vc6:%\d+]] = OpFOrdNotEqual %v3bool [[vfrom6]] [[v3float_0_0_0]]
  87. // CHECK-NEXT: OpStore %vb3 [[vc6]]
  88. vb3 = bool3(vfrom3);
  89. }