cast.vector.trunc.hlsl 2.3 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960
  1. // Run: %dxc -T vs_6_0 -E main
  2. // CHECK: [[v4f32c:%\d+]] = OpConstantComposite %v4float %float_1 %float_2 %float_3 %float_4
  3. // CHECK: [[v3f32c:%\d+]] = OpConstantComposite %v3float %float_5 %float_6 %float_7
  4. // CHECK: [[v2f32c:%\d+]] = OpConstantComposite %v2float %float_8 %float_9
  5. void main() {
  6. // CHECK-LABEL: %bb_entry = OpLabel
  7. // From constant
  8. // CHECK: [[c1:%\d+]] = OpCompositeExtract %float [[v4f32c]] 0
  9. // CHECK-NEXT: [[c2:%\d+]] = OpCompositeExtract %float [[v4f32c]] 1
  10. // CHECK-NEXT: [[c3:%\d+]] = OpCompositeExtract %float [[v4f32c]] 2
  11. // CHECK-NEXT: [[vf3:%\d+]] = OpCompositeConstruct %v3float [[c1]] [[c2]] [[c3]]
  12. // CHECK-NEXT: OpStore %vf3 [[vf3]]
  13. float3 vf3 = float4(1, 2, 3, 4);
  14. // CHECK-NEXT: [[c5:%\d+]] = OpCompositeExtract %float [[v3f32c]] 0
  15. // CHECK-NEXT: OpStore %vf1 [[c5]]
  16. float1 vf1;
  17. vf1 = float3(5, 6, 7);
  18. // CHECK-NEXT: [[c8:%\d+]] = OpCompositeExtract %float [[v2f32c]] 0
  19. // CHECK-NEXT: OpStore %sfa [[c8]]
  20. float sfa = float2(8, 9);
  21. // CHECK-NEXT: OpStore %sfb %float_10
  22. float sfb;
  23. sfb = float1(10);
  24. // From variable
  25. int4 vi4;
  26. // CHECK-NEXT: [[vi4:%\d+]] = OpLoad %v4int %vi4
  27. // CHECK-NEXT: [[e1:%\d+]] = OpCompositeExtract %int [[vi4]] 0
  28. // CHECK-NEXT: [[e2:%\d+]] = OpCompositeExtract %int [[vi4]] 1
  29. // CHECK-NEXT: [[e3:%\d+]] = OpCompositeExtract %int [[vi4]] 2
  30. // CHECK-NEXT: [[vi3:%\d+]] = OpCompositeConstruct %v3int [[e1]] [[e2]] [[e3]]
  31. // CHECK-NEXT: OpStore %vi3 [[vi3]]
  32. int3 vi3;
  33. vi3 = vi4;
  34. // CHECK-NEXT: [[vi3_1:%\d+]] = OpLoad %v3int %vi3
  35. // CHECK-NEXT: [[e4:%\d+]] = OpCompositeExtract %int [[vi3_1]] 0
  36. // CHECK-NEXT: OpStore %vi1 [[e4]]
  37. int1 vi1 = vi3;
  38. // CHECK-NEXT: [[vi3_2:%\d+]] = OpLoad %v3int %vi3
  39. // CHECK-NEXT: [[e5:%\d+]] = OpCompositeExtract %int [[vi3_2]] 0
  40. // CHECK-NEXT: OpStore %sia [[e5]]
  41. int sia;
  42. sia = vi3;
  43. // CHECK-NEXT: [[vi1:%\d+]] = OpLoad %int %vi1
  44. // CHECK-NEXT: OpStore %sib [[vi1]]
  45. int sib = vi1;
  46. // Used in expression
  47. // CHECK-NEXT: [[sia:%\d+]] = OpLoad %int %sia
  48. // CHECK-NEXT: [[cc0:%\d+]] = OpCompositeConstruct %v3int [[sia]] [[sia]] [[sia]]
  49. // CHECK-NEXT: [[vi3_3:%\d+]] = OpLoad %v3int %vi3
  50. // CHECK-NEXT: [[add:%\d+]] = OpIAdd %v3int [[cc0]] [[vi3_3]]
  51. // CHECK-NEXT: [[e6:%\d+]] = OpCompositeExtract %int [[add]] 0
  52. // CHECK-NEXT: OpStore %sib [[e6]]
  53. sib = sia + vi3;
  54. }