binary-op.assign.image.hlsl 3.2 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869
  1. // Run: %dxc -T vs_6_0 -E main
  2. RWBuffer<uint> MyRWBuffer;
  3. RWTexture2D<int> MyRWTexture;
  4. RWBuffer<uint4> MyRWBuffer4;
  5. RWTexture3D<uint3> MyRWTexture3;
  6. // CHECK: [[c25:%\d+]] = OpConstantComposite %v3uint %uint_25 %uint_25 %uint_25
  7. // CHECK: [[c26:%\d+]] = OpConstantComposite %v4uint %uint_26 %uint_26 %uint_26 %uint_26
  8. // CHECK: [[c28:%\d+]] = OpConstantComposite %v2uint %uint_28 %uint_28
  9. void main() {
  10. // <scalar-value>.x
  11. // CHECK: [[buf:%\d+]] = OpLoad %type_buffer_image %MyRWBuffer
  12. // CHECK-NEXT: OpImageWrite [[buf]] %uint_1 %uint_15
  13. MyRWBuffer[1].x = 15;
  14. // <scalar-value>.x
  15. // CHECK: [[tex:%\d+]] = OpLoad %type_2d_image %MyRWTexture
  16. // CHECK-NEXT: OpImageWrite [[tex]] {{%\d+}} %int_16
  17. MyRWTexture[uint2(2, 3)].x = 16;
  18. // Out-of-order swizzling
  19. // CHECK: [[buf:%\d+]] = OpLoad %type_buffer_image_0 %MyRWBuffer4
  20. // CHECK-NEXT: [[old:%\d+]] = OpImageRead %v4uint [[buf]] %uint_4 None
  21. // CHECK-NEXT: [[new:%\d+]] = OpVectorShuffle %v4uint [[old]] [[c25]] 6 1 4 5
  22. // CHECK-NEXT: [[buf:%\d+]] = OpLoad %type_buffer_image_0 %MyRWBuffer4
  23. // CHECK-NEXT: OpImageWrite [[buf]] %uint_4 [[new]]
  24. MyRWBuffer4[4].zwx = 25;
  25. // Swizzling resulting in the original vector
  26. // CHECK: [[buf:%\d+]] = OpLoad %type_buffer_image_0 %MyRWBuffer4
  27. // CHECK-NEXT: OpImageWrite [[buf]] %uint_4 [[c26]]
  28. MyRWBuffer4[4].xyzw = 26;
  29. // Selecting one element
  30. // CHECK: [[tex:%\d+]] = OpLoad %type_3d_image %MyRWTexture3
  31. // CHECK-NEXT: [[old:%\d+]] = OpImageRead %v4uint [[tex]] {{%\d+}} None
  32. // CHECK-NEXT: [[v3:%\d+]] = OpVectorShuffle %v3uint [[old]] [[old]] 0 1 2
  33. // CHECK-NEXT: [[new:%\d+]] = OpCompositeInsert %v3uint %uint_27 [[v3]] 1
  34. // CHECK-NEXT: [[tex:%\d+]] = OpLoad %type_3d_image %MyRWTexture3
  35. // CHECK-NEXT: OpImageWrite [[tex]] {{%\d+}} [[new]]
  36. MyRWTexture3[uint3(5, 6, 7)].y = 27;
  37. // In-order swizzling
  38. // CHECK: [[tex:%\d+]] = OpLoad %type_3d_image %MyRWTexture3
  39. // CHECK-NEXT: [[old:%\d+]] = OpImageRead %v4uint [[tex]] {{%\d+}} None
  40. // CHECK-NEXT: [[v3:%\d+]] = OpVectorShuffle %v3uint [[old]] [[old]] 0 1 2
  41. // CHECK-NEXT: [[new:%\d+]] = OpVectorShuffle %v3uint [[v3]] [[c28]] 3 4 2
  42. // CHECK-NEXT: [[tex:%\d+]] = OpLoad %type_3d_image %MyRWTexture3
  43. // CHECK-NEXT: OpImageWrite [[tex]] {{%\d+}} [[new]]
  44. MyRWTexture3[uint3(8, 9, 10)].xy = 28;
  45. // CHECK: [[buf:%\d+]] = OpLoad %type_buffer_image %MyRWBuffer
  46. // CHECK-NEXT: [[old:%\d+]] = OpImageRead %v4uint [[buf]] %uint_11 None
  47. // CHECK-NEXT: [[val:%\d+]] = OpCompositeExtract %uint [[old]] 0
  48. // CHECK-NEXT: [[add:%\d+]] = OpIAdd %uint [[val]] %uint_30
  49. // CHECK-NEXT: [[buf:%\d+]] = OpLoad %type_buffer_image %MyRWBuffer
  50. // CHECK-NEXT: OpImageWrite [[buf]] %uint_11 [[add]]
  51. MyRWBuffer[11] += 30;
  52. // CHECK: [[tex:%\d+]] = OpLoad %type_2d_image %MyRWTexture
  53. // CHECK-NEXT: [[old:%\d+]] = OpImageRead %v4int [[tex]] {{%\d+}} None
  54. // CHECK-NEXT: [[val:%\d+]] = OpCompositeExtract %int [[old]] 0
  55. // CHECK-NEXT: [[mul:%\d+]] = OpIMul %int [[val]] %int_31
  56. // CHECK-NEXT: [[tex:%\d+]] = OpLoad %type_2d_image %MyRWTexture
  57. // CHECK-NEXT: OpImageWrite [[tex]] {{%\d+}} [[mul]]
  58. MyRWTexture[uint2(12, 13)] *= 31;
  59. }