cast.2bool.implicit.hlsl 3.7 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596
  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. // CHECK: [[v3i0:%\d+]] = OpConstantComposite %v3int %int_0 %int_0 %int_0
  7. // CHECK: [[v3u0:%\d+]] = OpConstantComposite %v3uint %uint_0 %uint_0 %uint_0
  8. void main() {
  9. // CHECK-LABEL: %bb_entry = OpLabel
  10. bool b;
  11. int from1;
  12. uint from2;
  13. float from3;
  14. bool1 vb1;
  15. bool2 vb2;
  16. bool3 vb3;
  17. int1 vfrom1;
  18. uint2 vfrom2;
  19. float3 vfrom3;
  20. // From constant (implicit)
  21. // CHECK: OpStore %b %true
  22. b = 42;
  23. // CHECK-NEXT: OpStore %b %false
  24. b = 0.0;
  25. // From constant expr
  26. // CHECK-NEXT: OpStore %b %false
  27. b = 35 - 35;
  28. // From variable (implicit)
  29. // CHECK-NEXT: [[from1:%\d+]] = OpLoad %int %from1
  30. // CHECK-NEXT: [[c1:%\d+]] = OpINotEqual %bool [[from1]] %int_0
  31. // CHECK-NEXT: OpStore %b [[c1]]
  32. b = from1;
  33. // CHECK-NEXT: [[from2:%\d+]] = OpLoad %uint %from2
  34. // CHECK-NEXT: [[c2:%\d+]] = OpINotEqual %bool [[from2]] %uint_0
  35. // CHECK-NEXT: OpStore %b [[c2]]
  36. b = from2;
  37. // CHECK-NEXT: [[from3:%\d+]] = OpLoad %float %from3
  38. // CHECK-NEXT: [[c3:%\d+]] = OpFOrdNotEqual %bool [[from3]] %float_0
  39. // CHECK-NEXT: OpStore %b [[c3]]
  40. b = from3;
  41. // Vector cases
  42. // CHECK: OpStore %vbc2 [[v2bool_1_0]]
  43. // CHECK: OpStore %vbc3 [[v3bool_0_1_1]]
  44. bool2 vbc2 = {1, 15 - 15};
  45. bool3 vbc3 = {0.0, 1.2 + 1.1, 3}; // Mixed
  46. // CHECK-NEXT: [[vfrom1:%\d+]] = OpLoad %int %vfrom1
  47. // CHECK-NEXT: [[vc1:%\d+]] = OpINotEqual %bool [[vfrom1]] %int_0
  48. // CHECK-NEXT: OpStore %vb1 [[vc1]]
  49. vb1 = vfrom1;
  50. // CHECK-NEXT: [[vfrom2:%\d+]] = OpLoad %v2uint %vfrom2
  51. // CHECK-NEXT: [[vc2:%\d+]] = OpINotEqual %v2bool [[vfrom2]] [[v2uint_0_0]]
  52. // CHECK-NEXT: OpStore %vb2 [[vc2]]
  53. vb2 = vfrom2;
  54. // CHECK-NEXT: [[vfrom3:%\d+]] = OpLoad %v3float %vfrom3
  55. // CHECK-NEXT: [[vc3:%\d+]] = OpFOrdNotEqual %v3bool [[vfrom3]] [[v3float_0_0_0]]
  56. // CHECK-NEXT: OpStore %vb3 [[vc3]]
  57. vb3 = vfrom3;
  58. float2x3 floatMat;
  59. int2x3 intMat;
  60. uint2x3 uintMat;
  61. bool2x3 boolMat;
  62. // CHECK: [[floatMat:%\d+]] = OpLoad %mat2v3float %floatMat
  63. // CHECK-NEXT: [[floatMat0:%\d+]] = OpCompositeExtract %v3float [[floatMat]] 0
  64. // CHECK-NEXT: [[boolMat0:%\d+]] = OpFOrdNotEqual %v3bool [[floatMat0]] [[v3float_0_0_0]]
  65. // CHECK-NEXT: [[floatMat1:%\d+]] = OpCompositeExtract %v3float [[floatMat]] 1
  66. // CHECK-NEXT: [[boolMat1:%\d+]] = OpFOrdNotEqual %v3bool [[floatMat1]] [[v3float_0_0_0]]
  67. // CHECK-NEXT: {{%\d+}} = OpCompositeConstruct %_arr_v3bool_uint_2 [[boolMat0]] [[boolMat1]]
  68. boolMat = floatMat;
  69. // CHECK: [[intMat:%\d+]] = OpLoad %_arr_v3int_uint_2 %intMat
  70. // CHECK-NEXT: [[intMat0:%\d+]] = OpCompositeExtract %v3int [[intMat]] 0
  71. // CHECK-NEXT: [[boolMat0:%\d+]] = OpINotEqual %v3bool [[intMat0]] [[v3i0]]
  72. // CHECK-NEXT: [[intMat1:%\d+]] = OpCompositeExtract %v3int [[intMat]] 1
  73. // CHECK-NEXT: [[boolMat1:%\d+]] = OpINotEqual %v3bool [[intMat1]] [[v3i0]]
  74. // CHECK-NEXT: {{%\d+}} = OpCompositeConstruct %_arr_v3bool_uint_2 [[boolMat0]] [[boolMat1]]
  75. boolMat = intMat;
  76. // CHECK: [[uintMat:%\d+]] = OpLoad %_arr_v3uint_uint_2 %uintMat
  77. // CHECK-NEXT: [[uintMat0:%\d+]] = OpCompositeExtract %v3uint [[uintMat]] 0
  78. // CHECK-NEXT: [[boolMat0:%\d+]] = OpINotEqual %v3bool [[uintMat0]] [[v3u0]]
  79. // CHECK-NEXT: [[uintMat1:%\d+]] = OpCompositeExtract %v3uint [[uintMat]] 1
  80. // CHECK-NEXT: [[boolMat1:%\d+]] = OpINotEqual %v3bool [[uintMat1]] [[v3u0]]
  81. // CHECK-NEXT: {{%\d+}} = OpCompositeConstruct %_arr_v3bool_uint_2 [[boolMat0]] [[boolMat1]]
  82. boolMat = uintMat;
  83. }