vk.layout.cbuffer.nested.std140.hlsl 4.6 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990
  1. // Run: %dxc -T vs_6_0 -E main
  2. // Deep nested array of matrices
  3. // Deep 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]; // 16(vec4) -> 96 + 4(array) * stride(3 * 16(vec4)) = 288
  7. float2x3 rf3[2]; // 16(vec4) -> 288 + 2(array) * stride(3 * 16(vec4)) = 384
  8. row_major int2x3 rf4[2]; // 16(vec4) -> 384 + 2(array) * stride(2 * 16(vec4)) = 448
  9. int rf5; // 4 -> 448 + 4 = 452
  10. }; // 16(max) 464 (452 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) * 16(vec4) = 96
  15. R sf3[4]; // 16 -> 96 + 4(array) * stride(464) = 1952
  16. row_major float3x2 sf4[2]; // 16(vec4) -> 1952 + 2(array) * stride(3 * 16(vec4)) = 2048
  17. column_major float3x2 sf5[3]; // 16(vec4) -> 2048 + 3(array) * stride(2 * 16(vec4)) = 2144
  18. float3x2 sf6[4]; // 16(vec4) -> 2144 + 4(array) * stride(2 * 16(vec4)) = 2272
  19. float sf7; // 4 -> 2272 + 4 = 2276
  20. }; // 16(max) 2288 (2276 round up to S alignment)
  21. struct T { // Alignment Offset Size Next
  22. R tf1[2]; // 16 -> 0 + 2(array) * 464 = 928
  23. S tf2[3]; // 16 -> 928 + 3(array) * 2288 = 7792
  24. uint tf3; // 4 -> 7792 + 4 = 7796
  25. }; // 16(max) 7808 (7796 round up to T alignment)
  26. cbuffer MyCbuffer { // Alignment Offset Size Next
  27. T t[2]; // 16 -> 0 + 2(array) * 7808 = 15616
  28. bool z; // 4 -> 15616
  29. };
  30. // CHECK: OpDecorate %_arr_mat2v3float_uint_3 ArrayStride 32
  31. // CHECK: OpDecorate %_arr_mat2v3float_uint_4 ArrayStride 48
  32. // CHECK: OpDecorate %_arr_mat2v3float_uint_2 ArrayStride 48
  33. // CHECK: OpDecorate %_arr_v3int_uint_2 ArrayStride 16
  34. // CHECK: OpDecorate %_arr__arr_v3int_uint_2_uint_2 ArrayStride 32
  35. // CHECK: OpMemberDecorate %R 0 Offset 0
  36. // CHECK-NEXT: OpMemberDecorate %R 0 MatrixStride 16
  37. // CHECK-NEXT: OpMemberDecorate %R 0 ColMajor
  38. // CHECK-NEXT: OpMemberDecorate %R 1 Offset 96
  39. // CHECK-NEXT: OpMemberDecorate %R 1 MatrixStride 16
  40. // CHECK-NEXT: OpMemberDecorate %R 1 RowMajor
  41. // CHECK-NEXT: OpMemberDecorate %R 2 Offset 288
  42. // CHECK-NEXT: OpMemberDecorate %R 2 MatrixStride 16
  43. // CHECK-NEXT: OpMemberDecorate %R 2 RowMajor
  44. // CHECK-NEXT: OpMemberDecorate %R 3 Offset 384
  45. // CHECK-NEXT: OpMemberDecorate %R 4 Offset 448
  46. // CHECK: OpDecorate %_arr_R_uint_2 ArrayStride 464
  47. // CHECK: OpDecorate %_arr_v3float_uint_3 ArrayStride 16
  48. // CHECK: OpDecorate %_arr_float_uint_3 ArrayStride 16
  49. // CHECK: OpDecorate %_arr_R_uint_4 ArrayStride 464
  50. // CHECK: OpDecorate %_arr_mat3v2float_uint_2 ArrayStride 48
  51. // CHECK: OpDecorate %_arr_mat3v2float_uint_3 ArrayStride 32
  52. // CHECK: OpDecorate %_arr_mat3v2float_uint_4 ArrayStride 32
  53. // CHECK: OpMemberDecorate %S 0 Offset 0
  54. // CHECK-NEXT: OpMemberDecorate %S 1 Offset 48
  55. // CHECK-NEXT: OpMemberDecorate %S 2 Offset 96
  56. // CHECK-NEXT: OpMemberDecorate %S 3 Offset 1952
  57. // CHECK-NEXT: OpMemberDecorate %S 3 MatrixStride 16
  58. // CHECK-NEXT: OpMemberDecorate %S 3 ColMajor
  59. // CHECK-NEXT: OpMemberDecorate %S 4 Offset 2048
  60. // CHECK-NEXT: OpMemberDecorate %S 4 MatrixStride 16
  61. // CHECK-NEXT: OpMemberDecorate %S 4 RowMajor
  62. // CHECK-NEXT: OpMemberDecorate %S 5 Offset 2144
  63. // CHECK-NEXT: OpMemberDecorate %S 5 MatrixStride 16
  64. // CHECK-NEXT: OpMemberDecorate %S 5 RowMajor
  65. // CHECK-NEXT: OpMemberDecorate %S 6 Offset 2272
  66. // CHECK-NEXT: OpDecorate %_arr_S_uint_3 ArrayStride 2288
  67. // CHECK: OpMemberDecorate %T 0 Offset 0
  68. // CHECK-NEXT: OpMemberDecorate %T 1 Offset 928
  69. // CHECK-NEXT: OpMemberDecorate %T 2 Offset 7792
  70. // CHECK: OpDecorate %_arr_T_uint_2 ArrayStride 7808
  71. // CHECK-NEXT: OpMemberDecorate %type_MyCbuffer 0 Offset 0
  72. // CHECK-NEXT: OpMemberDecorate %type_MyCbuffer 1 Offset 15616
  73. // CHECK: OpDecorate %type_MyCbuffer Block
  74. float main() : A {
  75. return 1.0;
  76. }