op.rw-structured-buffer.access.hlsl 1.6 KB

12345678910111213141516171819202122232425262728293031323334353637383940414243444546
  1. // Run: %dxc -T ps_6_0 -E main
  2. struct S {
  3. float f;
  4. };
  5. struct T {
  6. float a;
  7. float2 b[2];
  8. float3x4 c[3];
  9. S s[2];
  10. float t[4];
  11. };
  12. RWStructuredBuffer<T> MySbuffer;
  13. void main(uint index: A) {
  14. // CHECK: [[c12:%\d+]] = OpAccessChain %_ptr_Uniform_float %MySbuffer %int_0 %uint_2 %int_2 %int_2 %uint_1 %uint_2
  15. // CHECK-NEXT: {{%\d+}} = OpLoad %float [[c12]]
  16. // CHECK: [[s:%\d+]] = OpAccessChain %_ptr_Uniform_float %MySbuffer %int_0 %uint_3 %int_3 %int_0 %int_0
  17. // CHECK-NEXT: {{%\d+}} = OpLoad %float [[s]]
  18. float val = MySbuffer[2].c[2][1][2] + MySbuffer[3].s[0].f;
  19. // CHECK: [[val:%\d+]] = OpLoad %float %val
  20. // CHECK-NEXT: [[index:%\d+]] = OpLoad %uint %index
  21. // CHECK-NEXT: [[t3:%\d+]] = OpAccessChain %_ptr_Uniform_float %MySbuffer %int_0 [[index]] %int_4 %int_3
  22. // CHECK-NEXT: OpStore [[t3]] [[val]]
  23. // CHECK: [[f:%\d+]] = OpAccessChain %_ptr_Uniform_float %MySbuffer %int_0 %uint_3 %int_3 %int_0 %int_0
  24. // CHECK-NEXT: OpStore [[f]] [[val]]
  25. // CHECK-NEXT: [[c212:%\d+]] = OpAccessChain %_ptr_Uniform_float %MySbuffer %int_0 %uint_2 %int_2 %int_2 %uint_1 %uint_2
  26. // CHECK-NEXT: OpStore [[c212]] [[val]]
  27. // CHECK-NEXT: [[b1:%\d+]] = OpAccessChain %_ptr_Uniform_v2float %MySbuffer %int_0 %uint_1 %int_1 %int_1
  28. // CHECK-NEXT: [[x:%\d+]] = OpAccessChain %_ptr_Uniform_float [[b1]] %int_0
  29. // CHECK-NEXT: OpStore [[x]] [[val]]
  30. // CHECK-NEXT: [[a:%\d+]] = OpAccessChain %_ptr_Uniform_float %MySbuffer %int_0 %uint_0 %int_0
  31. // CHECK-NEXT: OpStore [[a]] [[val]]
  32. MySbuffer[0].a = MySbuffer[1].b[1].x = MySbuffer[2].c[2][1][2] =
  33. MySbuffer[3].s[0].f = MySbuffer[index].t[3] = val;
  34. }