method.byte-address-buffer.load.hlsl 3.2 KB

1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950515253
  1. // Run: %dxc -T cs_6_0 -E main
  2. ByteAddressBuffer myBuffer;
  3. [numthreads(1, 1, 1)]
  4. void main() {
  5. uint addr = 0;
  6. // CHECK: [[addr1:%\d+]] = OpLoad %uint %addr
  7. // CHECK-NEXT: [[word_addr:%\d+]] = OpShiftRightLogical %uint [[addr1]] %uint_2
  8. // CHECK-NEXT: [[load_ptr:%\d+]] = OpAccessChain %_ptr_Uniform_uint %myBuffer %uint_0 [[word_addr]]
  9. // CHECK-NEXT: {{%\d+}} = OpLoad %uint [[load_ptr]]
  10. uint word = myBuffer.Load(addr);
  11. // CHECK: [[addr3:%\d+]] = OpLoad %uint %addr
  12. // CHECK-NEXT: [[load2_word0Addr:%\d+]] = OpShiftRightLogical %uint [[addr3]] %uint_2
  13. // CHECK-NEXT: [[load_ptr10:%\d+]] = OpAccessChain %_ptr_Uniform_uint %myBuffer %uint_0 [[load2_word0Addr]]
  14. // CHECK-NEXT: [[load2_word0:%\d+]] = OpLoad %uint [[load_ptr10]]
  15. // CHECK-NEXT: [[load2_word1Addr:%\d+]] = OpIAdd %uint [[load2_word0Addr]] %uint_1
  16. // CHECK-NEXT: [[load_ptr11:%\d+]] = OpAccessChain %_ptr_Uniform_uint %myBuffer %uint_0 [[load2_word1Addr]]
  17. // CHECK-NEXT: [[load2_word1:%\d+]] = OpLoad %uint [[load_ptr11]]
  18. // CHECK-NEXT: {{%\d+}} = OpCompositeConstruct %v2uint [[load2_word0]] [[load2_word1]]
  19. uint2 word2 = myBuffer.Load2(addr);
  20. // CHECK: [[addr2:%\d+]] = OpLoad %uint %addr
  21. // CHECK-NEXT: [[load3_word0Addr:%\d+]] = OpShiftRightLogical %uint [[addr2]] %uint_2
  22. // CHECK-NEXT: [[load_ptr7:%\d+]] = OpAccessChain %_ptr_Uniform_uint %myBuffer %uint_0 [[load3_word0Addr]]
  23. // CHECK-NEXT: [[load3_word0:%\d+]] = OpLoad %uint [[load_ptr7]]
  24. // CHECK-NEXT: [[load3_word1Addr:%\d+]] = OpIAdd %uint [[load3_word0Addr]] %uint_1
  25. // CHECK-NEXT: [[load_ptr8:%\d+]] = OpAccessChain %_ptr_Uniform_uint %myBuffer %uint_0 [[load3_word1Addr]]
  26. // CHECK-NEXT: [[load3_word1:%\d+]] = OpLoad %uint [[load_ptr8]]
  27. // CHECK-NEXT: [[load3_word2Addr:%\d+]] = OpIAdd %uint [[load3_word0Addr]] %uint_2
  28. // CHECK-NEXT: [[load_ptr9:%\d+]] = OpAccessChain %_ptr_Uniform_uint %myBuffer %uint_0 [[load3_word2Addr]]
  29. // CHECK-NEXT: [[load3_word2:%\d+]] = OpLoad %uint [[load_ptr9]]
  30. // CHECK-NEXT: {{%\d+}} = OpCompositeConstruct %v3uint [[load3_word0]] [[load3_word1]] [[load3_word2]]
  31. uint3 word3 = myBuffer.Load3(addr);
  32. // CHECK: [[addr:%\d+]] = OpLoad %uint %addr
  33. // CHECK-NEXT: [[load4_word0Addr:%\d+]] = OpShiftRightLogical %uint [[addr]] %uint_2
  34. // CHECK-NEXT: [[load_ptr3:%\d+]] = OpAccessChain %_ptr_Uniform_uint %myBuffer %uint_0 [[load4_word0Addr]]
  35. // CHECK-NEXT: [[load4_word0:%\d+]] = OpLoad %uint [[load_ptr3]]
  36. // CHECK-NEXT: [[load4_word1Addr:%\d+]] = OpIAdd %uint [[load4_word0Addr]] %uint_1
  37. // CHECK-NEXT: [[load_ptr4:%\d+]] = OpAccessChain %_ptr_Uniform_uint %myBuffer %uint_0 [[load4_word1Addr]]
  38. // CHECK-NEXT: [[load4_word1:%\d+]] = OpLoad %uint [[load_ptr4]]
  39. // CHECK-NEXT: [[load4_word2Addr:%\d+]] = OpIAdd %uint [[load4_word0Addr]] %uint_2
  40. // CHECK-NEXT: [[load_ptr5:%\d+]] = OpAccessChain %_ptr_Uniform_uint %myBuffer %uint_0 [[load4_word2Addr]]
  41. // CHECK-NEXT: [[load4_word2:%\d+]] = OpLoad %uint [[load_ptr5]]
  42. // CHECK-NEXT: [[load4_word3Addr:%\d+]] = OpIAdd %uint [[load4_word0Addr]] %uint_3
  43. // CHECK-NEXT: [[load_ptr6:%\d+]] = OpAccessChain %_ptr_Uniform_uint %myBuffer %uint_0 [[load4_word3Addr]]
  44. // CHECK-NEXT: [[load4_word3:%\d+]] = OpLoad %uint [[load_ptr6]]
  45. // CHECK-NEXT: {{%\d+}} = OpCompositeConstruct %v4uint [[load4_word0]] [[load4_word1]] [[load4_word2]] [[load4_word3]]
  46. uint4 word4 = myBuffer.Load4(addr);
  47. }