cast.2uint.implicit.hlsl 3.5 KB

1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950515253545556575859606162636465666768697071727374757677787980818283848586878889909192
  1. // Run: %dxc -T ps_6_0 -E main
  2. // CHECK: [[v2uint_1_0:%\d+]] = OpConstantComposite %v2uint %uint_1 %uint_0
  3. // CHECK: [[v3uint_0_2_3:%\d+]] = OpConstantComposite %v3uint %uint_0 %uint_2 %uint_3
  4. // CHECK: [[v3u1:%\d+]] = OpConstantComposite %v3uint %uint_1 %uint_1 %uint_1
  5. // CHECK: [[v3u0:%\d+]] = OpConstantComposite %v3uint %uint_0 %uint_0 %uint_0
  6. void main() {
  7. // CHECK-LABEL: %bb_entry = OpLabel
  8. uint i;
  9. bool from1;
  10. int from2;
  11. float from3;
  12. uint1 vi1;
  13. uint2 vi2;
  14. uint3 vi3;
  15. bool1 vfrom1;
  16. int2 vfrom2;
  17. float3 vfrom3;
  18. // From constant (implicit)
  19. // CHECK: OpStore %i %uint_1
  20. i = true;
  21. // CHECK-NEXT: OpStore %i %uint_0
  22. i = 0.0;
  23. // From constant expr
  24. // CHECK-NEXT: OpStore %i %uint_3
  25. i = 4.3 - 1.1;
  26. // From variable (implicit)
  27. // CHECK-NEXT: [[from1:%\d+]] = OpLoad %bool %from1
  28. // CHECK-NEXT: [[c1:%\d+]] = OpSelect %uint [[from1]] %uint_1 %uint_0
  29. // CHECK-NEXT: OpStore %i [[c1]]
  30. i = from1;
  31. // CHECK-NEXT: [[from2:%\d+]] = OpLoad %int %from2
  32. // CHECK-NEXT: [[c2:%\d+]] = OpBitcast %uint [[from2]]
  33. // CHECK-NEXT: OpStore %i [[c2]]
  34. i = from2;
  35. // CHECK-NEXT: [[from3:%\d+]] = OpLoad %float %from3
  36. // CHECK-NEXT: [[c3:%\d+]] = OpConvertFToU %uint [[from3]]
  37. // CHECK-NEXT: OpStore %i [[c3]]
  38. i = from3;
  39. // Vector cases
  40. // CHECK: OpStore %vic2 [[v2uint_1_0]]
  41. // CHECK: OpStore %vic3 [[v3uint_0_2_3]]
  42. uint2 vic2 = {true, false};
  43. uint3 vic3 = {false, 1.1 + 1.2, 3}; // Mixed
  44. // CHECK-NEXT: [[vfrom1:%\d+]] = OpLoad %bool %vfrom1
  45. // CHECK-NEXT: [[vc1:%\d+]] = OpSelect %uint [[vfrom1]] %uint_1 %uint_0
  46. // CHECK-NEXT: OpStore %vi1 [[vc1]]
  47. vi1 = vfrom1;
  48. // CHECK-NEXT: [[vfrom2:%\d+]] = OpLoad %v2int %vfrom2
  49. // CHECK-NEXT: [[vc2:%\d+]] = OpBitcast %v2uint [[vfrom2]]
  50. // CHECK-NEXT: OpStore %vi2 [[vc2]]
  51. vi2 = vfrom2;
  52. // CHECK-NEXT: [[vfrom3:%\d+]] = OpLoad %v3float %vfrom3
  53. // CHECK-NEXT: [[vc3:%\d+]] = OpConvertFToU %v3uint [[vfrom3]]
  54. // CHECK-NEXT: OpStore %vi3 [[vc3]]
  55. vi3 = vfrom3;
  56. int2x3 intMat;
  57. float2x3 floatMat;
  58. uint2x3 uintMat;
  59. bool2x3 boolMat;
  60. // CHECK: [[boolMat:%\d+]] = OpLoad %_arr_v3bool_uint_2 %boolMat
  61. // CHECK-NEXT: [[boolMat0:%\d+]] = OpCompositeExtract %v3bool [[boolMat]] 0
  62. // CHECK-NEXT: [[uintMat0:%\d+]] = OpSelect %v3uint [[boolMat0]] [[v3u1]] [[v3u0]]
  63. // CHECK-NEXT: [[boolMat1:%\d+]] = OpCompositeExtract %v3bool [[boolMat]] 1
  64. // CHECK-NEXT: [[uintMat1:%\d+]] = OpSelect %v3uint [[boolMat1]] [[v3u1]] [[v3u0]]
  65. // CHECK-NEXT: {{%\d+}} = OpCompositeConstruct %_arr_v3uint_uint_2 [[uintMat0]] [[uintMat1]]
  66. uintMat = boolMat;
  67. // CHECK: [[intMat:%\d+]] = OpLoad %_arr_v3int_uint_2 %intMat
  68. // CHECK-NEXT: [[intMat0:%\d+]] = OpCompositeExtract %v3int [[intMat]] 0
  69. // CHECK-NEXT: [[uintMat0:%\d+]] = OpBitcast %v3uint [[intMat0]]
  70. // CHECK-NEXT: [[intMat1:%\d+]] = OpCompositeExtract %v3int [[intMat]] 1
  71. // CHECK-NEXT: [[uintMat1:%\d+]] = OpBitcast %v3uint [[intMat1]]
  72. // CHECK-NEXT: {{%\d+}} = OpCompositeConstruct %_arr_v3uint_uint_2 [[uintMat0]] [[uintMat1]]
  73. uintMat = intMat;
  74. // CHECK: [[floatMat:%\d+]] = OpLoad %mat2v3float %floatMat
  75. // CHECK-NEXT: [[floatMat0:%\d+]] = OpCompositeExtract %v3float [[floatMat]] 0
  76. // CHECK-NEXT: [[uintMat0:%\d+]] = OpConvertFToU %v3uint [[floatMat0]]
  77. // CHECK-NEXT: [[floatMat1:%\d+]] = OpCompositeExtract %v3float [[floatMat]] 1
  78. // CHECK-NEXT: [[uintMat1:%\d+]] = OpConvertFToU %v3uint [[floatMat1]]
  79. // CHECK-NEXT: {{%\d+}} = OpCompositeConstruct %_arr_v3uint_uint_2 [[uintMat0]] [[uintMat1]]
  80. uintMat = floatMat;
  81. }