cb_sizes.hlsl 9.7 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238
  1. // RUN: %dxc -E main -T vs_6_0 -Vd -validator-version 0.0 %s | %D3DReflect %s | FileCheck %s
  2. // Verify CB variable sizes align with expectations.
  3. // This also tests some matrix, struct, and array cases that may
  4. // have not been covered sufficiently elsewhere.
  5. #if 0
  6. // CHECK: Constant Buffers:
  7. // CHECK-NEXT: ID3D12ShaderReflectionConstantBuffer:
  8. // CHECK-NEXT: D3D12_SHADER_BUFFER_DESC: Name: CB
  9. // CHECK-NEXT: Type: D3D_CT_CBUFFER
  10. // CHECK-NEXT: Size: 2176
  11. // CHECK-NEXT: uFlags: 0
  12. // CHECK-NEXT: Num Variables: 8
  13. // CHECK: ID3D12ShaderReflectionVariable:
  14. // CHECK-NEXT: D3D12_SHADER_VARIABLE_DESC: Name: A
  15. // CHECK-NEXT: Size: 8
  16. // CHECK-NEXT: StartOffset: 0
  17. // CHECK: ID3D12ShaderReflectionVariable:
  18. // CHECK-NEXT: D3D12_SHADER_VARIABLE_DESC: Name: B
  19. // CHECK-NEXT: Size: 16
  20. // CHECK-NEXT: StartOffset: 16
  21. // CHECK-NEXT: uFlags: 0x2
  22. // CHECK: ID3D12ShaderReflectionVariable:
  23. // CHECK-NEXT: D3D12_SHADER_VARIABLE_DESC: Name: D
  24. // CHECK-NEXT: Size: 8
  25. // CHECK-NEXT: StartOffset: 32
  26. // CHECK-NEXT: uFlags: 0
  27. // CHECK-NEXT: DefaultValue: <nullptr>
  28. // CHECK-NEXT: ID3D12ShaderReflectionType:
  29. // CHECK-NEXT: D3D12_SHADER_TYPE_DESC: Name: double
  30. // CHECK-NEXT: Class: D3D_SVC_SCALAR
  31. // CHECK-NEXT: Type: D3D_SVT_DOUBLE
  32. // CHECK-NEXT: Elements: 0
  33. // CHECK-NEXT: Rows: 1
  34. // CHECK-NEXT: Columns: 1
  35. // CHECK-NEXT: Members: 0
  36. // CHECK-NEXT: Offset: 0
  37. // CHECK: ID3D12ShaderReflectionVariable:
  38. // CHECK-NEXT: D3D12_SHADER_VARIABLE_DESC: Name: f3x2
  39. // CHECK-NEXT: Size: 28
  40. // CHECK-NEXT: StartOffset: 48
  41. // CHECK-NEXT: uFlags: 0
  42. // CHECK-NEXT: DefaultValue: <nullptr>
  43. // CHECK-NEXT: ID3D12ShaderReflectionType:
  44. // CHECK-NEXT: D3D12_SHADER_TYPE_DESC: Name: float3x2
  45. // CHECK-NEXT: Class: D3D_SVC_MATRIX_COLUMNS
  46. // CHECK-NEXT: Type: D3D_SVT_FLOAT
  47. // CHECK-NEXT: Elements: 0
  48. // CHECK-NEXT: Rows: 3
  49. // CHECK-NEXT: Columns: 2
  50. // CHECK-NEXT: Members: 0
  51. // CHECK-NEXT: Offset: 0
  52. // CHECK: ID3D12ShaderReflectionVariable:
  53. // CHECK-NEXT: D3D12_SHADER_VARIABLE_DESC: Name: f3x2_row
  54. // CHECK-NEXT: Size: 40
  55. // CHECK-NEXT: StartOffset: 80
  56. // CHECK-NEXT: uFlags: 0
  57. // CHECK-NEXT: DefaultValue: <nullptr>
  58. // CHECK-NEXT: ID3D12ShaderReflectionType:
  59. // CHECK-NEXT: D3D12_SHADER_TYPE_DESC: Name: float3x2
  60. // CHECK-NEXT: Class: D3D_SVC_MATRIX_ROWS
  61. // CHECK-NEXT: Type: D3D_SVT_FLOAT
  62. // CHECK-NEXT: Elements: 0
  63. // CHECK-NEXT: Rows: 3
  64. // CHECK-NEXT: Columns: 2
  65. // CHECK-NEXT: Members: 0
  66. // CHECK-NEXT: Offset: 0
  67. // CHECK: ID3D12ShaderReflectionVariable:
  68. // CHECK-NEXT: D3D12_SHADER_VARIABLE_DESC: Name: d3x4
  69. // CHECK-NEXT: Size: 120
  70. // CHECK-NEXT: StartOffset: 128
  71. // CHECK-NEXT: uFlags: 0
  72. // CHECK-NEXT: DefaultValue: <nullptr>
  73. // CHECK-NEXT: ID3D12ShaderReflectionType:
  74. // CHECK-NEXT: D3D12_SHADER_TYPE_DESC: Name: double3x4
  75. // CHECK-NEXT: Class: D3D_SVC_MATRIX_COLUMNS
  76. // CHECK-NEXT: Type: D3D_SVT_DOUBLE
  77. // CHECK-NEXT: Elements: 0
  78. // CHECK-NEXT: Rows: 3
  79. // CHECK-NEXT: Columns: 4
  80. // CHECK-NEXT: Members: 0
  81. // CHECK-NEXT: Offset: 0
  82. // CHECK: ID3D12ShaderReflectionVariable:
  83. // CHECK-NEXT: D3D12_SHADER_VARIABLE_DESC: Name: s1
  84. // CHECK-NEXT: Size: 312
  85. // CHECK-NEXT: StartOffset: 256
  86. // CHECK-NEXT: uFlags: 0
  87. // CHECK-NEXT: DefaultValue: <nullptr>
  88. // CHECK-NEXT: ID3D12ShaderReflectionType:
  89. // CHECK-NEXT: D3D12_SHADER_TYPE_DESC: Name: S1
  90. // CHECK-NEXT: Class: D3D_SVC_STRUCT
  91. // CHECK-NEXT: Type: D3D_SVT_VOID
  92. // CHECK-NEXT: Elements: 0
  93. // CHECK-NEXT: Rows: 1
  94. // CHECK-NEXT: Columns: 39
  95. // CHECK-NEXT: Members: 5
  96. // CHECK-NEXT: Offset: 0
  97. // CHECK-NEXT: {
  98. // CHECK-NEXT: ID3D12ShaderReflectionType:
  99. // CHECK-NEXT: D3D12_SHADER_TYPE_DESC: Name: int
  100. // CHECK-NEXT: Class: D3D_SVC_SCALAR
  101. // CHECK-NEXT: Type: D3D_SVT_INT
  102. // CHECK-NEXT: Elements: 0
  103. // CHECK-NEXT: Rows: 1
  104. // CHECK-NEXT: Columns: 1
  105. // CHECK-NEXT: Members: 0
  106. // CHECK-NEXT: Offset: 0
  107. // CHECK-NEXT: ID3D12ShaderReflectionType:
  108. // CHECK-NEXT: D3D12_SHADER_TYPE_DESC: Name: float3x2
  109. // CHECK-NEXT: Class: D3D_SVC_MATRIX_COLUMNS
  110. // CHECK-NEXT: Type: D3D_SVT_FLOAT
  111. // CHECK-NEXT: Elements: 0
  112. // CHECK-NEXT: Rows: 3
  113. // CHECK-NEXT: Columns: 2
  114. // CHECK-NEXT: Members: 0
  115. // CHECK-NEXT: Offset: 16
  116. // CHECK-NEXT: ID3D12ShaderReflectionType:
  117. // CHECK-NEXT: D3D12_SHADER_TYPE_DESC: Name: double3x4
  118. // CHECK-NEXT: Class: D3D_SVC_MATRIX_COLUMNS
  119. // CHECK-NEXT: Type: D3D_SVT_DOUBLE
  120. // CHECK-NEXT: Elements: 0
  121. // CHECK-NEXT: Rows: 3
  122. // CHECK-NEXT: Columns: 4
  123. // CHECK-NEXT: Members: 0
  124. // CHECK-NEXT: Offset: 48
  125. // CHECK-NEXT: ID3D12ShaderReflectionType:
  126. // CHECK-NEXT: D3D12_SHADER_TYPE_DESC: Name: int2x1
  127. // CHECK-NEXT: Class: D3D_SVC_MATRIX_COLUMNS
  128. // CHECK-NEXT: Type: D3D_SVT_INT
  129. // CHECK-NEXT: Elements: 0
  130. // CHECK-NEXT: Rows: 2
  131. // CHECK-NEXT: Columns: 1
  132. // CHECK-NEXT: Members: 0
  133. // CHECK-NEXT: Offset: 168
  134. // CHECK-NEXT: ID3D12ShaderReflectionType:
  135. // CHECK-NEXT: D3D12_SHADER_TYPE_DESC: Name: float3x2
  136. // CHECK-NEXT: Class: D3D_SVC_MATRIX_ROWS
  137. // CHECK-NEXT: Type: D3D_SVT_FLOAT
  138. // CHECK-NEXT: Elements: 3
  139. // CHECK-NEXT: Rows: 3
  140. // CHECK-NEXT: Columns: 2
  141. // CHECK-NEXT: Members: 0
  142. // CHECK-NEXT: Offset: 176
  143. // CHECK: ID3D12ShaderReflectionVariable:
  144. // CHECK-NEXT: D3D12_SHADER_VARIABLE_DESC: Name: s1_arr
  145. // CHECK-NEXT: Size: 1592
  146. // CHECK-NEXT: StartOffset: 576
  147. // CHECK-NEXT: uFlags: 0
  148. // CHECK-NEXT: DefaultValue: <nullptr>
  149. // CHECK-NEXT: ID3D12ShaderReflectionType:
  150. // CHECK-NEXT: D3D12_SHADER_TYPE_DESC: Name: S1
  151. // CHECK-NEXT: Class: D3D_SVC_STRUCT
  152. // CHECK-NEXT: Type: D3D_SVT_VOID
  153. // CHECK-NEXT: Elements: 5
  154. // CHECK-NEXT: Rows: 1
  155. // CHECK-NEXT: Columns: 39
  156. // CHECK-NEXT: Members: 5
  157. // CHECK-NEXT: Offset: 0
  158. // CHECK-NEXT: {
  159. // CHECK-NEXT: ID3D12ShaderReflectionType:
  160. // CHECK-NEXT: D3D12_SHADER_TYPE_DESC: Name: int
  161. // CHECK-NEXT: Class: D3D_SVC_SCALAR
  162. // CHECK-NEXT: Type: D3D_SVT_INT
  163. // CHECK-NEXT: Elements: 0
  164. // CHECK-NEXT: Rows: 1
  165. // CHECK-NEXT: Columns: 1
  166. // CHECK-NEXT: Members: 0
  167. // CHECK-NEXT: Offset: 0
  168. // CHECK-NEXT: ID3D12ShaderReflectionType:
  169. // CHECK-NEXT: D3D12_SHADER_TYPE_DESC: Name: float3x2
  170. // CHECK-NEXT: Class: D3D_SVC_MATRIX_COLUMNS
  171. // CHECK-NEXT: Type: D3D_SVT_FLOAT
  172. // CHECK-NEXT: Elements: 0
  173. // CHECK-NEXT: Rows: 3
  174. // CHECK-NEXT: Columns: 2
  175. // CHECK-NEXT: Members: 0
  176. // CHECK-NEXT: Offset: 16
  177. // CHECK-NEXT: ID3D12ShaderReflectionType:
  178. // CHECK-NEXT: D3D12_SHADER_TYPE_DESC: Name: double3x4
  179. // CHECK-NEXT: Class: D3D_SVC_MATRIX_COLUMNS
  180. // CHECK-NEXT: Type: D3D_SVT_DOUBLE
  181. // CHECK-NEXT: Elements: 0
  182. // CHECK-NEXT: Rows: 3
  183. // CHECK-NEXT: Columns: 4
  184. // CHECK-NEXT: Members: 0
  185. // CHECK-NEXT: Offset: 48
  186. // CHECK-NEXT: ID3D12ShaderReflectionType:
  187. // CHECK-NEXT: D3D12_SHADER_TYPE_DESC: Name: int2x1
  188. // CHECK-NEXT: Class: D3D_SVC_MATRIX_COLUMNS
  189. // CHECK-NEXT: Type: D3D_SVT_INT
  190. // CHECK-NEXT: Elements: 0
  191. // CHECK-NEXT: Rows: 2
  192. // CHECK-NEXT: Columns: 1
  193. // CHECK-NEXT: Members: 0
  194. // CHECK-NEXT: Offset: 168
  195. // CHECK-NEXT: ID3D12ShaderReflectionType:
  196. // CHECK-NEXT: D3D12_SHADER_TYPE_DESC: Name: float3x2
  197. // CHECK-NEXT: Class: D3D_SVC_MATRIX_ROWS
  198. // CHECK-NEXT: Type: D3D_SVT_FLOAT
  199. // CHECK-NEXT: Elements: 3
  200. // CHECK-NEXT: Rows: 3
  201. // CHECK-NEXT: Columns: 2
  202. // CHECK-NEXT: Members: 0
  203. // CHECK-NEXT: Offset: 176
  204. #endif
  205. struct S1 {
  206. int i;
  207. float3x2 f3x2;
  208. double3x4 d3x4;
  209. int2x1 i2x1;
  210. row_major float3x2 f3x2_row[3];
  211. };
  212. cbuffer CB {
  213. float2 A;
  214. float4 B;
  215. double D;
  216. float3x2 f3x2;
  217. row_major float3x2 f3x2_row;
  218. double3x4 d3x4;
  219. S1 s1;
  220. S1 s1_arr[5];
  221. }
  222. float4 main() : OUT {
  223. return B;
  224. }