cast.2fp.implicit.hlsl 1.8 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263
  1. // Run: %dxc -T ps_6_0 -E main
  2. // CHECK: [[v2float_1_0:%\d+]] = OpConstantComposite %v2float %float_1 %float_0
  3. // CHECK: [[v3float_0_4_n3:%\d+]] = OpConstantComposite %v3float %float_0 %float_4 %float_n3
  4. void main() {
  5. // CHECK-LABEL: %bb_entry = OpLabel
  6. float f;
  7. bool from1;
  8. uint from2;
  9. int from3;
  10. float1 vf1;
  11. float2 vf2;
  12. float3 vf3;
  13. bool1 vfrom1;
  14. uint2 vfrom2;
  15. int3 vfrom3;
  16. // From constant (implicit)
  17. // CHECK: OpStore %f %float_1
  18. f = true;
  19. // CHECK-NEXT: OpStore %f %float_3
  20. f = 3u;
  21. // From constant expr
  22. // CHECK-NEXT: OpStore %f %float_n1
  23. f = 5 - 6;
  24. // From variable (implicit)
  25. // CHECK-NEXT: [[from1:%\d+]] = OpLoad %bool %from1
  26. // CHECK-NEXT: [[c1:%\d+]] = OpSelect %float [[from1]] %float_1 %float_0
  27. // CHECK-NEXT: OpStore %f [[c1]]
  28. f = from1;
  29. // CHECK-NEXT: [[from2:%\d+]] = OpLoad %uint %from2
  30. // CHECK-NEXT: [[c2:%\d+]] = OpConvertUToF %float [[from2]]
  31. // CHECK-NEXT: OpStore %f [[c2]]
  32. f = from2;
  33. // CHECK-NEXT: [[from3:%\d+]] = OpLoad %int %from3
  34. // CHECK-NEXT: [[c3:%\d+]] = OpConvertSToF %float [[from3]]
  35. // CHECK-NEXT: OpStore %f [[c3]]
  36. f = from3;
  37. // Vector cases
  38. // CHECK: OpStore %vfc2 [[v2float_1_0]]
  39. // CHECK: OpStore %vfc3 [[v3float_0_4_n3]]
  40. float2 vfc2 = {true, false};
  41. float3 vfc3 = {false, 4u, -3}; // Mixed
  42. // CHECK-NEXT: [[vfrom1:%\d+]] = OpLoad %bool %vfrom1
  43. // CHECK-NEXT: [[vc1:%\d+]] = OpSelect %float [[vfrom1]] %float_1 %float_0
  44. // CHECK-NEXT: OpStore %vf1 [[vc1]]
  45. vf1 = vfrom1;
  46. // CHECK-NEXT: [[vfrom2:%\d+]] = OpLoad %v2uint %vfrom2
  47. // CHECK-NEXT: [[vc2:%\d+]] = OpConvertUToF %v2float [[vfrom2]]
  48. // CHECK-NEXT: OpStore %vf2 [[vc2]]
  49. vf2 = vfrom2;
  50. // CHECK-NEXT: [[vfrom3:%\d+]] = OpLoad %v3int %vfrom3
  51. // CHECK-NEXT: [[vc3:%\d+]] = OpConvertSToF %v3float [[vfrom3]]
  52. // CHECK-NEXT: OpStore %vf3 [[vc3]]
  53. vf3 = vfrom3;
  54. }