vk.layout.sbuffer.nested.std430.hlsl 5.1 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100
  1. // Run: %dxc -T ps_6_0 -E main
  2. // Deep nested array of matrices
  3. // Depp nested majorness
  4. struct R { // Alignment Offset Size Next
  5. row_major float2x3 rf1[3]; // 16(vec4) -> 0 + 3(array) * stride(2 * 16(vec4)) = 96
  6. column_major float2x3 rf2[4]; // 8(vec2) -> 96 + 4(array) * stride(3 * 8(vec2)) = 192
  7. float2x3 rf3[2]; // 8(vec2) -> 192 + 2(array) * stride(3 * 8(vec2)) = 240
  8. row_major int2x3 rf4[3]; // 16(vec4) -> 240 + 3(array) * stride(2 * 16(vec4)) = 336
  9. int rf5; // 4 -> 336 + 4 = 340
  10. }; // 16(max) 352 (340 round up to R alignment)
  11. // Array of scalars, vectors, matrices, and structs
  12. struct S { // Alignment Offset Size Next
  13. float3 sf1[3]; // 16(vec4) -> 0 + 3(array) * 16(vec4) = 48
  14. float sf2[3]; // 4 -> 48 + 3(array) * 4 = 60
  15. R sf3[4]; // 16 -> 64 + 4(array) * stride(256) = 1472
  16. row_major float3x2 sf4[2]; // 8(vec2) -> 1472 + 2(array) * stride(3 * 8(vec2)) = 1520
  17. column_major float3x2 sf5[3]; // 16(vec4) -> 1520 + 3(array) * stride(2 * 16(vec4)) = 1616
  18. float3x2 sf6[4]; // 16(vec4) -> 1616 + 4(array) * stride(2 * 16(vec4)) = 1744
  19. row_major int3x2 sf7[2]; // 8(vec2) -> 1744 + 2(array) * stride(3 * 8(vec2)) = 1792
  20. float sf8; // 4 -> 1792 + 4 = 1796
  21. }; // 16(max) 1808 (1796 round up to S alignment)
  22. struct T { // Alignment Offset Size Next
  23. R tf1[2]; // 16 -> 0 + 2(array) * 352 = 704
  24. S tf2[3]; // 16 -> 704 + 3(array) * 1808 = 6128
  25. uint tf3; // 4 -> 6128 + 4 = 6132
  26. }; // 16(max) 6144 (6132 round up to T alignment)
  27. struct SBuffer { // Alignment Offset Size Next
  28. T t[2]; // 16 -> 0 + 2(array) * 6144 = 12288
  29. bool z; // 4 -> 12288
  30. };
  31. RWStructuredBuffer<SBuffer> MySBuffer;
  32. // CHECK: OpDecorate %_arr_mat2v3float_uint_3 ArrayStride 32
  33. // CHECK: OpDecorate %_arr_mat2v3float_uint_4 ArrayStride 24
  34. // CHECK: OpDecorate %_arr_mat2v3float_uint_2 ArrayStride 24
  35. // CHECK: OpDecorate %_arr_v3int_uint_2 ArrayStride 16
  36. // CHECK: OpDecorate %_arr__arr_v3int_uint_2_uint_3 ArrayStride 32
  37. // CHECK: OpMemberDecorate %R 0 Offset 0
  38. // CHECK-NEXT: OpMemberDecorate %R 0 MatrixStride 16
  39. // CHECK-NEXT: OpMemberDecorate %R 0 ColMajor
  40. // CHECK-NEXT: OpMemberDecorate %R 1 Offset 96
  41. // CHECK-NEXT: OpMemberDecorate %R 1 MatrixStride 8
  42. // CHECK-NEXT: OpMemberDecorate %R 1 RowMajor
  43. // CHECK-NEXT: OpMemberDecorate %R 2 Offset 192
  44. // CHECK-NEXT: OpMemberDecorate %R 2 MatrixStride 8
  45. // CHECK-NEXT: OpMemberDecorate %R 2 RowMajor
  46. // CHECK-NEXT: OpMemberDecorate %R 3 Offset 240
  47. // CHECK-NEXT: OpMemberDecorate %R 4 Offset 336
  48. // CHECK: OpDecorate %_arr_R_uint_2 ArrayStride 352
  49. // CHECK: OpDecorate %_arr_v3float_uint_3 ArrayStride 16
  50. // CHECK: OpDecorate %_arr_float_uint_3 ArrayStride 4
  51. // CHECK: OpDecorate %_arr_R_uint_4 ArrayStride 352
  52. // CHECK: OpDecorate %_arr_mat3v2float_uint_2 ArrayStride 24
  53. // CHECK: OpDecorate %_arr_mat3v2float_uint_3 ArrayStride 32
  54. // CHECK: OpDecorate %_arr_mat3v2float_uint_4 ArrayStride 32
  55. // CHECK: OpDecorate %_arr_v2int_uint_3 ArrayStride 8
  56. // CHECK: OpDecorate %_arr__arr_v2int_uint_3_uint_2 ArrayStride 24
  57. // CHECK: OpMemberDecorate %S 0 Offset 0
  58. // CHECK-NEXT: OpMemberDecorate %S 1 Offset 48
  59. // CHECK-NEXT: OpMemberDecorate %S 2 Offset 64
  60. // CHECK-NEXT: OpMemberDecorate %S 3 Offset 1472
  61. // CHECK-NEXT: OpMemberDecorate %S 3 MatrixStride 8
  62. // CHECK-NEXT: OpMemberDecorate %S 3 ColMajor
  63. // CHECK-NEXT: OpMemberDecorate %S 4 Offset 1520
  64. // CHECK-NEXT: OpMemberDecorate %S 4 MatrixStride 16
  65. // CHECK-NEXT: OpMemberDecorate %S 4 RowMajor
  66. // CHECK-NEXT: OpMemberDecorate %S 5 Offset 1616
  67. // CHECK-NEXT: OpMemberDecorate %S 5 MatrixStride 16
  68. // CHECK-NEXT: OpMemberDecorate %S 5 RowMajor
  69. // CHECK-NEXT: OpMemberDecorate %S 6 Offset 1744
  70. // CHECK-NEXT: OpMemberDecorate %S 7 Offset 1792
  71. // CHECK: OpDecorate %_arr_S_uint_3 ArrayStride 1808
  72. // CHECK: OpMemberDecorate %T 0 Offset 0
  73. // CHECK-NEXT: OpMemberDecorate %T 1 Offset 704
  74. // CHECK-NEXT: OpMemberDecorate %T 2 Offset 6128
  75. // CHECK: OpDecorate %_arr_T_uint_2 ArrayStride 6144
  76. // CHECK-NEXT: OpMemberDecorate %SBuffer 0 Offset 0
  77. // CHECK-NEXT: OpMemberDecorate %SBuffer 1 Offset 12288
  78. // CHECK: OpDecorate %_runtimearr_SBuffer ArrayStride 12304
  79. // CHECK: OpMemberDecorate %type_RWStructuredBuffer_SBuffer 0 Offset 0
  80. // CHECK-NEXT: OpDecorate %type_RWStructuredBuffer_SBuffer BufferBlock
  81. float4 main() : SV_Target {
  82. return 1.0;
  83. }