barrier.hlsl 2.3 KB

1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950515253545556575859606162636465666768697071727374757677787980818283
  1. // RUN: %dxc -E main -T cs_6_0 %s | FileCheck %s
  2. // CHECK: ; Buffer Definitions:
  3. // CHECK: ; Resource bind info for mats
  4. // CHECK: ; {
  5. // CHECK: ; struct dx.alignment.legacy.struct.mat
  6. // CHECK: ; {
  7. // CHECK: ; row_major float2x2 f2x2; ; Offset: 0
  8. // CHECK: ; } $Element; ; Offset: 0 Size: 16
  9. // CHECK: ; }
  10. // CHECK: ; Resource bind info for mats2
  11. // CHECK: ; {
  12. // CHECK: ; column_major float2x2 $Element; ; Offset: 0 Size: 16
  13. // CHECK: ; }
  14. // CHECK: ; Resource bind info for fA
  15. // CHECK: ; {
  16. // CHECK: ; column_major float2x2 $Element; ; Offset: 0 Size: 16
  17. // CHECK: ; }
  18. // CHECK: ; Resource Bindings:
  19. // CHECK: ; Name Type Format Dim ID HLSL Bind Count
  20. // CHECK: ; ------------------------------ ---------- ------- ----------- ------- -------------- ------
  21. // CHECK: ; mats texture struct r/o T0 t0 1
  22. // CHECK: ; mats2 texture struct r/o T1 t1 1
  23. // CHECK: ; fA UAV struct r/w U0 u0 1
  24. // CHECK: threadId
  25. // CHECK: groupId
  26. // CHECK: threadIdInGroup
  27. // CHECK: flattenedThreadIdInGroup
  28. // CHECK: addrspace(3)
  29. // CHECK: barrier
  30. // CHECK: i32 8
  31. // CHECK: barrier
  32. // CHECK: i32 9
  33. // CHECK: barrier
  34. // CHECK: i32 10
  35. // CHECK: barrier
  36. // CHECK: i32 11
  37. // CHECK: barrier
  38. // CHECK: i32 2
  39. // CHECK: barrier
  40. // CHECK: i32 4
  41. // CHECK: noduplicate
  42. groupshared column_major float2x2 dataC[8*8];
  43. RWStructuredBuffer<float2x2> fA;
  44. struct mat {
  45. row_major float2x2 f2x2;
  46. };
  47. StructuredBuffer<mat> mats;
  48. StructuredBuffer<float2x2> mats2;
  49. [numthreads(8,8,1)]
  50. void main( uint2 tid : SV_DispatchThreadID, uint2 gid : SV_GroupID, uint2 gtid : SV_GroupThreadID, uint gidx : SV_GroupIndex )
  51. {
  52. dataC[tid.x%(8*8)] = mats.Load(gid.x).f2x2 + mats2.Load(gtid.y);
  53. GroupMemoryBarrier();
  54. GroupMemoryBarrierWithGroupSync();
  55. float2x2 f2x2 = dataC[8*8-1-tid.y%(8*8)];
  56. AllMemoryBarrier();
  57. fA[gidx+2] = f2x2;
  58. AllMemoryBarrierWithGroupSync();
  59. fA[gidx+1] = f2x2;
  60. DeviceMemoryBarrier();
  61. DeviceMemoryBarrierWithGroupSync();
  62. fA[gidx] = f2x2;
  63. }