vk.layout.sbuffer.std430.hlsl 5.2 KB

1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950515253545556575859606162636465666768697071727374757677787980818283848586878889909192
  1. // Run: %dxc -T ps_6_0 -E main -fvk-use-gl-layout
  2. struct R { // Alignment Offset Size Next
  3. float2 rf; // 8(vec2) -> 0 + 8(vec2) = 8
  4. }; // 8 8 8
  5. struct S { // Alignment Offset Size Next
  6. R sf1; // 8 -> 0 + 8 = 8
  7. float sf2; // 4 -> 8 + 4 = 12
  8. float3 sf3; // 16(vec4) -> 16 (12 round up to vec4 alignment) + 12(vec3) = 28
  9. float sf4; // 4 -> 28 + 4 = 32
  10. }; // 16(max) 32
  11. struct T { // Alignment Offset Size = Next
  12. int tf1; // 4 -> 0 + 4 = 4
  13. R tf2[3]; // 8 -> 8 + 3 * stride(8) = 32
  14. float3x2 tf3; // 16(vec4) -> 32 (32 round up to vec4 alignment) + 2 * stride(vec4) = 64
  15. row_major int3x2 tf4; // 16(vec4) -> 64 (64 round up to vec4 alignment) + 3 * stride(vec2) = 88
  16. S tf5; // 16 -> 96 (88 round up to S alignment) + 32 = 128
  17. float tf6; // 4 -> 128 + 4 = 132
  18. }; // 16(max) 144(132 round up to T max alignment)
  19. struct SBuffer { // Alignment Offset Size Next
  20. bool a; // 4 -> 0 + 4 = 4
  21. uint1 b; // 4 -> 4 + 4 = 8
  22. float3 c; // 16(vec4) -> 16 (8 round up to vec4 alignment) + 3 * 4 = 28
  23. row_major float2x3 d; // 16(vec4) -> 32 (28 round up to vec4 alignment) + 2 * stride(vec4) = 64
  24. column_major float2x3 e; // 16(vec4) -> 64 (64 round up to vec2 alignment) + 3 * stride(vec2) = 88
  25. float2x1 f; // 8(vec2) -> 88 (88 round up to vec2 aligment) + 2 * 4 = 96
  26. row_major float2x3 g[3]; // 16(vec4) -> 96 (96 round up to vec4 alignment) + 3 * 2 * stride(vec4) = 192
  27. column_major float2x2 h[4]; // 16(vec4) -> 192 (192 round up to vec2 alignment) + 4 * 2 * stride(vec2) = 256
  28. row_major int2x3 i[5]; // 16(vec4) -> 256 (256 round up to vec4 alignment) + 5 * 2 * stride(vec4) = 416
  29. T t; // 16 -> 416 (416 round up to T alignment) + 144 = 560
  30. float z; // 4 -> 560
  31. };
  32. StructuredBuffer<SBuffer> MySBuffer;
  33. // CHECK: OpDecorate %_arr_mat2v3float_uint_3 ArrayStride 32
  34. // CHECK: OpDecorate %_arr_mat2v2float_uint_4 ArrayStride 16
  35. // CHECK: OpDecorate %_arr_v3int_uint_2 ArrayStride 16
  36. // CHECK: OpDecorate %_arr__arr_v3int_uint_2_uint_5 ArrayStride 32
  37. // CHECK: OpMemberDecorate %R 0 Offset 0
  38. // CHECK: OpDecorate %_arr_R_uint_3 ArrayStride 8
  39. // CEHCK: OpDecorate %_arr_v2int_uint_3 ArrayStride 8
  40. // CHECK: OpMemberDecorate %S 0 Offset 0
  41. // CHECK-NEXT: OpMemberDecorate %S 1 Offset 8
  42. // CHECK-NEXT: OpMemberDecorate %S 2 Offset 16
  43. // CHECK-NEXT: OpMemberDecorate %S 3 Offset 28
  44. // CHECK: OpMemberDecorate %T 0 Offset 0
  45. // CHECK-NEXT: OpMemberDecorate %T 1 Offset 8
  46. // CHECK-NEXT: OpMemberDecorate %T 2 Offset 32
  47. // CHECK-NEXT: OpMemberDecorate %T 2 MatrixStride 16
  48. // CHECK-NEXT: OpMemberDecorate %T 2 RowMajor
  49. // CHECK-NEXT: OpMemberDecorate %T 3 Offset 64
  50. // CHECK-NEXT: OpMemberDecorate %T 4 Offset 96
  51. // CHECK-NEXT: OpMemberDecorate %T 5 Offset 128
  52. // CHECK: OpMemberDecorate %SBuffer 0 Offset 0
  53. // CHECK-NEXT: OpMemberDecorate %SBuffer 1 Offset 4
  54. // CHECK-NEXT: OpMemberDecorate %SBuffer 2 Offset 16
  55. // CHECK-NEXT: OpMemberDecorate %SBuffer 3 Offset 32
  56. // CHECK-NEXT: OpMemberDecorate %SBuffer 3 MatrixStride 16
  57. // CHECK-NEXT: OpMemberDecorate %SBuffer 3 ColMajor
  58. // CHECK-NEXT: OpMemberDecorate %SBuffer 4 Offset 64
  59. // CHECK-NEXT: OpMemberDecorate %SBuffer 4 MatrixStride 8
  60. // CHECK-NEXT: OpMemberDecorate %SBuffer 4 RowMajor
  61. // CHECK-NEXT: OpMemberDecorate %SBuffer 5 Offset 88
  62. // CHECK-NEXT: OpMemberDecorate %SBuffer 6 Offset 96
  63. // CHECK-NEXT: OpMemberDecorate %SBuffer 6 MatrixStride 16
  64. // CHECK-NEXT: OpMemberDecorate %SBuffer 6 ColMajor
  65. // CHECK-NEXT: OpMemberDecorate %SBuffer 7 Offset 192
  66. // CHECK-NEXT: OpMemberDecorate %SBuffer 7 MatrixStride 8
  67. // CHECK-NEXT: OpMemberDecorate %SBuffer 7 RowMajor
  68. // CHECK-NEXT: OpMemberDecorate %SBuffer 8 Offset 256
  69. // CHECK-NEXT: OpMemberDecorate %SBuffer 9 Offset 416
  70. // CHECK-NEXT: OpMemberDecorate %SBuffer 10 Offset 560
  71. // CHECK: OpDecorate %_runtimearr_SBuffer ArrayStride 576
  72. // CHECK: OpMemberDecorate %type_StructuredBuffer_SBuffer 0 Offset 0
  73. // CHECK-NEXT: OpMemberDecorate %type_StructuredBuffer_SBuffer 0 NonWritable
  74. // CHECK-NEXT: OpDecorate %type_StructuredBuffer_SBuffer BufferBlock
  75. float main() : SV_Target {
  76. return 1.0;
  77. }