method.byte-address-buffer.store.hlsl 3.8 KB

12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849505152535455565758596061626364656667686970
  1. // Run: %dxc -T cs_6_0 -E main
  2. RWByteAddressBuffer outBuffer;
  3. [numthreads(1, 1, 1)]
  4. void main() {
  5. uint addr = 0;
  6. uint words1 = 1;
  7. uint2 words2 = uint2(1, 2);
  8. uint3 words3 = uint3(1, 2, 3);
  9. uint4 words4 = uint4(1, 2, 3, 4);
  10. // CHECK: [[byteAddr1:%\d+]] = OpLoad %uint %addr
  11. // CHECK-NEXT: [[baseAddr1:%\d+]] = OpShiftRightLogical %uint [[byteAddr1]] %uint_2
  12. // CHECK-NEXT: [[words1:%\d+]] = OpLoad %uint %words1
  13. // CHECK-NEXT: [[out1_outBufPtr0:%\d+]] = OpAccessChain %_ptr_Uniform_uint %outBuffer %uint_0 [[baseAddr1]]
  14. // CHECK-NEXT: OpStore [[out1_outBufPtr0]] [[words1]]
  15. outBuffer.Store(addr, words1);
  16. // CHECK: [[byteAddr2:%\d+]] = OpLoad %uint %addr
  17. // CHECK-NEXT: [[baseAddr2:%\d+]] = OpShiftRightLogical %uint [[byteAddr2]] %uint_2
  18. // CHECK-NEXT: [[words2:%\d+]] = OpLoad %v2uint %words2
  19. // CHECK-NEXT: [[words2_0:%\d+]] = OpCompositeExtract %uint [[words2]] 0
  20. // CHECK-NEXT: [[out2_outBufPtr0:%\d+]] = OpAccessChain %_ptr_Uniform_uint %outBuffer %uint_0 [[baseAddr2]]
  21. // CHECK-NEXT: OpStore [[out2_outBufPtr0]] [[words2_0]]
  22. // CHECK-NEXT: [[words2_1:%\d+]] = OpCompositeExtract %uint [[words2]] 1
  23. // CHECK-NEXT: [[baseAddr2_plus1:%\d+]] = OpIAdd %uint [[baseAddr2]] %uint_1
  24. // CHECK-NEXT: [[out2_outBufPtr1:%\d+]] = OpAccessChain %_ptr_Uniform_uint %outBuffer %uint_0 [[baseAddr2_plus1]]
  25. // CHECK-NEXT: OpStore [[out2_outBufPtr1]] [[words2_1]]
  26. outBuffer.Store2(addr, words2);
  27. // CHECK: [[byteAddr3:%\d+]] = OpLoad %uint %addr
  28. // CHECK-NEXT: [[baseAddr3:%\d+]] = OpShiftRightLogical %uint [[byteAddr3]] %uint_2
  29. // CHECK-NEXT: [[words3:%\d+]] = OpLoad %v3uint %words3
  30. // CHECK-NEXT: [[word3_0:%\d+]] = OpCompositeExtract %uint [[words3]] 0
  31. // CHECK-NEXT: [[out3_outBufPtr0:%\d+]] = OpAccessChain %_ptr_Uniform_uint %outBuffer %uint_0 [[baseAddr3]]
  32. // CHECK-NEXT: OpStore [[out3_outBufPtr0]] [[word3_0]]
  33. // CHECK-NEXT: [[words3_1:%\d+]] = OpCompositeExtract %uint [[words3]] 1
  34. // CHECK-NEXT: [[baseAddr3_plus1:%\d+]] = OpIAdd %uint [[baseAddr3]] %uint_1
  35. // CHECK-NEXT: [[out3_outBufPtr1:%\d+]] = OpAccessChain %_ptr_Uniform_uint %outBuffer %uint_0 [[baseAddr3_plus1]]
  36. // CHECK-NEXT: OpStore [[out3_outBufPtr1]] [[words3_1]]
  37. // CHECK-NEXT: [[word3_2:%\d+]] = OpCompositeExtract %uint [[words3]] 2
  38. // CHECK-NEXT: [[baseAddr3_plus2:%\d+]] = OpIAdd %uint [[baseAddr3]] %uint_2
  39. // CHECK-NEXT: [[out3_outBufPtr2:%\d+]] = OpAccessChain %_ptr_Uniform_uint %outBuffer %uint_0 [[baseAddr3_plus2]]
  40. // CHECK-NEXT: OpStore [[out3_outBufPtr2]] [[word3_2]]
  41. outBuffer.Store3(addr, words3);
  42. // CHECK: [[byteAddr:%\d+]] = OpLoad %uint %addr
  43. // CHECK-NEXT: [[baseAddr:%\d+]] = OpShiftRightLogical %uint [[byteAddr]] %uint_2
  44. // CHECK-NEXT: [[words4:%\d+]] = OpLoad %v4uint %words4
  45. // CHECK-NEXT: [[word0:%\d+]] = OpCompositeExtract %uint [[words4]] 0
  46. // CHECK-NEXT: [[outBufPtr0:%\d+]] = OpAccessChain %_ptr_Uniform_uint %outBuffer %uint_0 [[baseAddr]]
  47. // CHECK-NEXT: OpStore [[outBufPtr0]] [[word0]]
  48. // CHECK-NEXT: [[word1:%\d+]] = OpCompositeExtract %uint [[words4]] 1
  49. // CHECK-NEXT: [[baseAddr_plus1:%\d+]] = OpIAdd %uint [[baseAddr]] %uint_1
  50. // CHECK-NEXT: [[outBufPtr1:%\d+]] = OpAccessChain %_ptr_Uniform_uint %outBuffer %uint_0 [[baseAddr_plus1]]
  51. // CHECK-NEXT: OpStore [[outBufPtr1]] [[word1]]
  52. // CHECK-NEXT: [[word2:%\d+]] = OpCompositeExtract %uint [[words4]] 2
  53. // CHECK-NEXT: [[baseAddr_plus2:%\d+]] = OpIAdd %uint [[baseAddr]] %uint_2
  54. // CHECK-NEXT: [[outBufPtr2:%\d+]] = OpAccessChain %_ptr_Uniform_uint %outBuffer %uint_0 [[baseAddr_plus2]]
  55. // CHECK-NEXT: OpStore [[outBufPtr2]] [[word2]]
  56. // CHECK-NEXT: [[word3:%\d+]] = OpCompositeExtract %uint [[words4]] 3
  57. // CHECK-NEXT: [[baseAddr_plus3:%\d+]] = OpIAdd %uint [[baseAddr]] %uint_3
  58. // CHECK-NEXT: [[outBufPtr3:%\d+]] = OpAccessChain %_ptr_Uniform_uint %outBuffer %uint_0 [[baseAddr_plus3]]
  59. // CHECK-NEXT: OpStore [[outBufPtr3]] [[word3]]
  60. outBuffer.Store4(addr, words4);
  61. }