Advertisement
Guest User

Untitled

a guest
Mar 25th, 2015
1,611
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
C++ 256.73 KB | None | 0 0
  1. /*-------------------------------------------------------------------------------------
  2.  *
  3.  * Copyright (c) Microsoft Corporation
  4.  *
  5.  *-------------------------------------------------------------------------------------*/
  6.  
  7.  
  8. /* this ALWAYS GENERATED file contains the definitions for the interfaces */
  9.  
  10.  
  11.  /* File created by MIDL compiler version 8.00.0611 */
  12.  
  13.  
  14.  
  15. /* verify that the <rpcndr.h> version is high enough to compile this file*/
  16. #ifndef __REQUIRED_RPCNDR_H_VERSION__
  17. #define __REQUIRED_RPCNDR_H_VERSION__ 500
  18. #endif
  19.  
  20. /* verify that the <rpcsal.h> version is high enough to compile this file*/
  21. #ifndef __REQUIRED_RPCSAL_H_VERSION__
  22. #define __REQUIRED_RPCSAL_H_VERSION__ 100
  23. #endif
  24.  
  25. #include "rpc.h"
  26. #include "rpcndr.h"
  27.  
  28. #ifndef __RPCNDR_H_VERSION__
  29. #error this stub requires an updated version of <rpcndr.h>
  30. #endif /* __RPCNDR_H_VERSION__ */
  31.  
  32. #ifndef COM_NO_WINDOWS_H
  33. #include "windows.h"
  34. #include "ole2.h"
  35. #endif /*COM_NO_WINDOWS_H*/
  36.  
  37. #ifndef __d3d12_h__
  38. #define __d3d12_h__
  39.  
  40. #if defined(_MSC_VER) && (_MSC_VER >= 1020)
  41. #pragma once
  42. #endif
  43.  
  44. /* Forward Declarations */
  45.  
  46. #ifndef __ID3D12Object_FWD_DEFINED__
  47. #define __ID3D12Object_FWD_DEFINED__
  48. typedef interface ID3D12Object ID3D12Object;
  49.  
  50. #endif  /* __ID3D12Object_FWD_DEFINED__ */
  51.  
  52.  
  53. #ifndef __ID3D12DeviceChild_FWD_DEFINED__
  54. #define __ID3D12DeviceChild_FWD_DEFINED__
  55. typedef interface ID3D12DeviceChild ID3D12DeviceChild;
  56.  
  57. #endif  /* __ID3D12DeviceChild_FWD_DEFINED__ */
  58.  
  59.  
  60. #ifndef __ID3D12RootSignature_FWD_DEFINED__
  61. #define __ID3D12RootSignature_FWD_DEFINED__
  62. typedef interface ID3D12RootSignature ID3D12RootSignature;
  63.  
  64. #endif  /* __ID3D12RootSignature_FWD_DEFINED__ */
  65.  
  66.  
  67. #ifndef __ID3D12RootSignatureDeserializer_FWD_DEFINED__
  68. #define __ID3D12RootSignatureDeserializer_FWD_DEFINED__
  69. typedef interface ID3D12RootSignatureDeserializer ID3D12RootSignatureDeserializer;
  70.  
  71. #endif  /* __ID3D12RootSignatureDeserializer_FWD_DEFINED__ */
  72.  
  73.  
  74. #ifndef __ID3D12Pageable_FWD_DEFINED__
  75. #define __ID3D12Pageable_FWD_DEFINED__
  76. typedef interface ID3D12Pageable ID3D12Pageable;
  77.  
  78. #endif  /* __ID3D12Pageable_FWD_DEFINED__ */
  79.  
  80.  
  81. #ifndef __ID3D12Heap_FWD_DEFINED__
  82. #define __ID3D12Heap_FWD_DEFINED__
  83. typedef interface ID3D12Heap ID3D12Heap;
  84.  
  85. #endif  /* __ID3D12Heap_FWD_DEFINED__ */
  86.  
  87.  
  88. #ifndef __ID3D12Resource_FWD_DEFINED__
  89. #define __ID3D12Resource_FWD_DEFINED__
  90. typedef interface ID3D12Resource ID3D12Resource;
  91.  
  92. #endif  /* __ID3D12Resource_FWD_DEFINED__ */
  93.  
  94.  
  95. #ifndef __ID3D12CommandAllocator_FWD_DEFINED__
  96. #define __ID3D12CommandAllocator_FWD_DEFINED__
  97. typedef interface ID3D12CommandAllocator ID3D12CommandAllocator;
  98.  
  99. #endif  /* __ID3D12CommandAllocator_FWD_DEFINED__ */
  100.  
  101.  
  102. #ifndef __ID3D12Fence_FWD_DEFINED__
  103. #define __ID3D12Fence_FWD_DEFINED__
  104. typedef interface ID3D12Fence ID3D12Fence;
  105.  
  106. #endif  /* __ID3D12Fence_FWD_DEFINED__ */
  107.  
  108.  
  109. #ifndef __ID3D12PipelineState_FWD_DEFINED__
  110. #define __ID3D12PipelineState_FWD_DEFINED__
  111. typedef interface ID3D12PipelineState ID3D12PipelineState;
  112.  
  113. #endif  /* __ID3D12PipelineState_FWD_DEFINED__ */
  114.  
  115.  
  116. #ifndef __ID3D12DescriptorHeap_FWD_DEFINED__
  117. #define __ID3D12DescriptorHeap_FWD_DEFINED__
  118. typedef interface ID3D12DescriptorHeap ID3D12DescriptorHeap;
  119.  
  120. #endif  /* __ID3D12DescriptorHeap_FWD_DEFINED__ */
  121.  
  122.  
  123. #ifndef __ID3D12QueryHeap_FWD_DEFINED__
  124. #define __ID3D12QueryHeap_FWD_DEFINED__
  125. typedef interface ID3D12QueryHeap ID3D12QueryHeap;
  126.  
  127. #endif  /* __ID3D12QueryHeap_FWD_DEFINED__ */
  128.  
  129.  
  130. #ifndef __ID3D12CommandSignature_FWD_DEFINED__
  131. #define __ID3D12CommandSignature_FWD_DEFINED__
  132. typedef interface ID3D12CommandSignature ID3D12CommandSignature;
  133.  
  134. #endif  /* __ID3D12CommandSignature_FWD_DEFINED__ */
  135.  
  136.  
  137. #ifndef __ID3D12CommandList_FWD_DEFINED__
  138. #define __ID3D12CommandList_FWD_DEFINED__
  139. typedef interface ID3D12CommandList ID3D12CommandList;
  140.  
  141. #endif  /* __ID3D12CommandList_FWD_DEFINED__ */
  142.  
  143.  
  144. #ifndef __ID3D12GraphicsCommandList_FWD_DEFINED__
  145. #define __ID3D12GraphicsCommandList_FWD_DEFINED__
  146. typedef interface ID3D12GraphicsCommandList ID3D12GraphicsCommandList;
  147.  
  148. #endif  /* __ID3D12GraphicsCommandList_FWD_DEFINED__ */
  149.  
  150.  
  151. #ifndef __ID3D12CommandQueue_FWD_DEFINED__
  152. #define __ID3D12CommandQueue_FWD_DEFINED__
  153. typedef interface ID3D12CommandQueue ID3D12CommandQueue;
  154.  
  155. #endif  /* __ID3D12CommandQueue_FWD_DEFINED__ */
  156.  
  157.  
  158. #ifndef __ID3D12Device_FWD_DEFINED__
  159. #define __ID3D12Device_FWD_DEFINED__
  160. typedef interface ID3D12Device ID3D12Device;
  161.  
  162. #endif  /* __ID3D12Device_FWD_DEFINED__ */
  163.  
  164.  
  165. /* header files for imported files */
  166. #include "oaidl.h"
  167. #include "ocidl.h"
  168. #include "dxgi.h"
  169. #include "d3dcommon.h"
  170.  
  171. #ifdef __cplusplus
  172. extern "C"{
  173. #endif
  174.  
  175.  
  176. /* interface __MIDL_itf_d3d12_0000_0000 */
  177. /* [local] */
  178.  
  179. #include <winapifamily.h>
  180. #pragma region App Family
  181. #if WINAPI_FAMILY_PARTITION(WINAPI_PARTITION_APP)
  182. #ifndef _D3D12_CONSTANTS
  183. #define _D3D12_CONSTANTS
  184. #define D3D12_16BIT_INDEX_STRIP_CUT_VALUE   ( 0xffff )
  185.  
  186. #define D3D12_32BIT_INDEX_STRIP_CUT_VALUE   ( 0xffffffff )
  187.  
  188. #define D3D12_8BIT_INDEX_STRIP_CUT_VALUE    ( 0xff )
  189.  
  190. #define D3D12_APPEND_ALIGNED_ELEMENT    ( 0xffffffff )
  191.  
  192. #define D3D12_ARRAY_AXIS_ADDRESS_RANGE_BIT_COUNT    ( 9 )
  193.  
  194. #define D3D12_CLIP_OR_CULL_DISTANCE_COUNT   ( 8 )
  195.  
  196. #define D3D12_CLIP_OR_CULL_DISTANCE_ELEMENT_COUNT   ( 2 )
  197.  
  198. #define D3D12_COMMONSHADER_CONSTANT_BUFFER_API_SLOT_COUNT   ( 14 )
  199.  
  200. #define D3D12_COMMONSHADER_CONSTANT_BUFFER_COMPONENTS   ( 4 )
  201.  
  202. #define D3D12_COMMONSHADER_CONSTANT_BUFFER_COMPONENT_BIT_COUNT  ( 32 )
  203.  
  204. #define D3D12_COMMONSHADER_CONSTANT_BUFFER_HW_SLOT_COUNT    ( 15 )
  205.  
  206. #define D3D12_COMMONSHADER_CONSTANT_BUFFER_PARTIAL_UPDATE_EXTENTS_BYTE_ALIGNMENT    ( 16 )
  207.  
  208. #define D3D12_COMMONSHADER_CONSTANT_BUFFER_REGISTER_COMPONENTS  ( 4 )
  209.  
  210. #define D3D12_COMMONSHADER_CONSTANT_BUFFER_REGISTER_COUNT   ( 15 )
  211.  
  212. #define D3D12_COMMONSHADER_CONSTANT_BUFFER_REGISTER_READS_PER_INST  ( 1 )
  213.  
  214. #define D3D12_COMMONSHADER_CONSTANT_BUFFER_REGISTER_READ_PORTS  ( 1 )
  215.  
  216. #define D3D12_COMMONSHADER_FLOWCONTROL_NESTING_LIMIT    ( 64 )
  217.  
  218. #define D3D12_COMMONSHADER_IMMEDIATE_CONSTANT_BUFFER_REGISTER_COMPONENTS    ( 4 )
  219.  
  220. #define D3D12_COMMONSHADER_IMMEDIATE_CONSTANT_BUFFER_REGISTER_COUNT ( 1 )
  221.  
  222. #define D3D12_COMMONSHADER_IMMEDIATE_CONSTANT_BUFFER_REGISTER_READS_PER_INST    ( 1 )
  223.  
  224. #define D3D12_COMMONSHADER_IMMEDIATE_CONSTANT_BUFFER_REGISTER_READ_PORTS    ( 1 )
  225.  
  226. #define D3D12_COMMONSHADER_IMMEDIATE_VALUE_COMPONENT_BIT_COUNT  ( 32 )
  227.  
  228. #define D3D12_COMMONSHADER_INPUT_RESOURCE_REGISTER_COMPONENTS   ( 1 )
  229.  
  230. #define D3D12_COMMONSHADER_INPUT_RESOURCE_REGISTER_COUNT    ( 128 )
  231.  
  232. #define D3D12_COMMONSHADER_INPUT_RESOURCE_REGISTER_READS_PER_INST   ( 1 )
  233.  
  234. #define D3D12_COMMONSHADER_INPUT_RESOURCE_REGISTER_READ_PORTS   ( 1 )
  235.  
  236. #define D3D12_COMMONSHADER_INPUT_RESOURCE_SLOT_COUNT    ( 128 )
  237.  
  238. #define D3D12_COMMONSHADER_SAMPLER_REGISTER_COMPONENTS  ( 1 )
  239.  
  240. #define D3D12_COMMONSHADER_SAMPLER_REGISTER_COUNT   ( 16 )
  241.  
  242. #define D3D12_COMMONSHADER_SAMPLER_REGISTER_READS_PER_INST  ( 1 )
  243.  
  244. #define D3D12_COMMONSHADER_SAMPLER_REGISTER_READ_PORTS  ( 1 )
  245.  
  246. #define D3D12_COMMONSHADER_SAMPLER_SLOT_COUNT   ( 16 )
  247.  
  248. #define D3D12_COMMONSHADER_SUBROUTINE_NESTING_LIMIT ( 32 )
  249.  
  250. #define D3D12_COMMONSHADER_TEMP_REGISTER_COMPONENTS ( 4 )
  251.  
  252. #define D3D12_COMMONSHADER_TEMP_REGISTER_COMPONENT_BIT_COUNT    ( 32 )
  253.  
  254. #define D3D12_COMMONSHADER_TEMP_REGISTER_COUNT  ( 4096 )
  255.  
  256. #define D3D12_COMMONSHADER_TEMP_REGISTER_READS_PER_INST ( 3 )
  257.  
  258. #define D3D12_COMMONSHADER_TEMP_REGISTER_READ_PORTS ( 3 )
  259.  
  260. #define D3D12_COMMONSHADER_TEXCOORD_RANGE_REDUCTION_MAX ( 10 )
  261.  
  262. #define D3D12_COMMONSHADER_TEXCOORD_RANGE_REDUCTION_MIN ( -10 )
  263.  
  264. #define D3D12_COMMONSHADER_TEXEL_OFFSET_MAX_NEGATIVE    ( -8 )
  265.  
  266. #define D3D12_COMMONSHADER_TEXEL_OFFSET_MAX_POSITIVE    ( 7 )
  267.  
  268. #define D3D12_CONSTANT_BUFFER_DATA_PLACEMENT_ALIGNMENT  ( 256 )
  269.  
  270. #define D3D12_CS_4_X_BUCKET00_MAX_BYTES_TGSM_WRITABLE_PER_THREAD    ( 256 )
  271.  
  272. #define D3D12_CS_4_X_BUCKET00_MAX_NUM_THREADS_PER_GROUP ( 64 )
  273.  
  274. #define D3D12_CS_4_X_BUCKET01_MAX_BYTES_TGSM_WRITABLE_PER_THREAD    ( 240 )
  275.  
  276. #define D3D12_CS_4_X_BUCKET01_MAX_NUM_THREADS_PER_GROUP ( 68 )
  277.  
  278. #define D3D12_CS_4_X_BUCKET02_MAX_BYTES_TGSM_WRITABLE_PER_THREAD    ( 224 )
  279.  
  280. #define D3D12_CS_4_X_BUCKET02_MAX_NUM_THREADS_PER_GROUP ( 72 )
  281.  
  282. #define D3D12_CS_4_X_BUCKET03_MAX_BYTES_TGSM_WRITABLE_PER_THREAD    ( 208 )
  283.  
  284. #define D3D12_CS_4_X_BUCKET03_MAX_NUM_THREADS_PER_GROUP ( 76 )
  285.  
  286. #define D3D12_CS_4_X_BUCKET04_MAX_BYTES_TGSM_WRITABLE_PER_THREAD    ( 192 )
  287.  
  288. #define D3D12_CS_4_X_BUCKET04_MAX_NUM_THREADS_PER_GROUP ( 84 )
  289.  
  290. #define D3D12_CS_4_X_BUCKET05_MAX_BYTES_TGSM_WRITABLE_PER_THREAD    ( 176 )
  291.  
  292. #define D3D12_CS_4_X_BUCKET05_MAX_NUM_THREADS_PER_GROUP ( 92 )
  293.  
  294. #define D3D12_CS_4_X_BUCKET06_MAX_BYTES_TGSM_WRITABLE_PER_THREAD    ( 160 )
  295.  
  296. #define D3D12_CS_4_X_BUCKET06_MAX_NUM_THREADS_PER_GROUP ( 100 )
  297.  
  298. #define D3D12_CS_4_X_BUCKET07_MAX_BYTES_TGSM_WRITABLE_PER_THREAD    ( 144 )
  299.  
  300. #define D3D12_CS_4_X_BUCKET07_MAX_NUM_THREADS_PER_GROUP ( 112 )
  301.  
  302. #define D3D12_CS_4_X_BUCKET08_MAX_BYTES_TGSM_WRITABLE_PER_THREAD    ( 128 )
  303.  
  304. #define D3D12_CS_4_X_BUCKET08_MAX_NUM_THREADS_PER_GROUP ( 128 )
  305.  
  306. #define D3D12_CS_4_X_BUCKET09_MAX_BYTES_TGSM_WRITABLE_PER_THREAD    ( 112 )
  307.  
  308. #define D3D12_CS_4_X_BUCKET09_MAX_NUM_THREADS_PER_GROUP ( 144 )
  309.  
  310. #define D3D12_CS_4_X_BUCKET10_MAX_BYTES_TGSM_WRITABLE_PER_THREAD    ( 96 )
  311.  
  312. #define D3D12_CS_4_X_BUCKET10_MAX_NUM_THREADS_PER_GROUP ( 168 )
  313.  
  314. #define D3D12_CS_4_X_BUCKET11_MAX_BYTES_TGSM_WRITABLE_PER_THREAD    ( 80 )
  315.  
  316. #define D3D12_CS_4_X_BUCKET11_MAX_NUM_THREADS_PER_GROUP ( 204 )
  317.  
  318. #define D3D12_CS_4_X_BUCKET12_MAX_BYTES_TGSM_WRITABLE_PER_THREAD    ( 64 )
  319.  
  320. #define D3D12_CS_4_X_BUCKET12_MAX_NUM_THREADS_PER_GROUP ( 256 )
  321.  
  322. #define D3D12_CS_4_X_BUCKET13_MAX_BYTES_TGSM_WRITABLE_PER_THREAD    ( 48 )
  323.  
  324. #define D3D12_CS_4_X_BUCKET13_MAX_NUM_THREADS_PER_GROUP ( 340 )
  325.  
  326. #define D3D12_CS_4_X_BUCKET14_MAX_BYTES_TGSM_WRITABLE_PER_THREAD    ( 32 )
  327.  
  328. #define D3D12_CS_4_X_BUCKET14_MAX_NUM_THREADS_PER_GROUP ( 512 )
  329.  
  330. #define D3D12_CS_4_X_BUCKET15_MAX_BYTES_TGSM_WRITABLE_PER_THREAD    ( 16 )
  331.  
  332. #define D3D12_CS_4_X_BUCKET15_MAX_NUM_THREADS_PER_GROUP ( 768 )
  333.  
  334. #define D3D12_CS_4_X_DISPATCH_MAX_THREAD_GROUPS_IN_Z_DIMENSION  ( 1 )
  335.  
  336. #define D3D12_CS_4_X_RAW_UAV_BYTE_ALIGNMENT ( 256 )
  337.  
  338. #define D3D12_CS_4_X_THREAD_GROUP_MAX_THREADS_PER_GROUP ( 768 )
  339.  
  340. #define D3D12_CS_4_X_THREAD_GROUP_MAX_X ( 768 )
  341.  
  342. #define D3D12_CS_4_X_THREAD_GROUP_MAX_Y ( 768 )
  343.  
  344. #define D3D12_CS_4_X_UAV_REGISTER_COUNT ( 1 )
  345.  
  346. #define D3D12_CS_DISPATCH_MAX_THREAD_GROUPS_PER_DIMENSION   ( 65535 )
  347.  
  348. #define D3D12_CS_TGSM_REGISTER_COUNT    ( 8192 )
  349.  
  350. #define D3D12_CS_TGSM_REGISTER_READS_PER_INST   ( 1 )
  351.  
  352. #define D3D12_CS_TGSM_RESOURCE_REGISTER_COMPONENTS  ( 1 )
  353.  
  354. #define D3D12_CS_TGSM_RESOURCE_REGISTER_READ_PORTS  ( 1 )
  355.  
  356. #define D3D12_CS_THREADGROUPID_REGISTER_COMPONENTS  ( 3 )
  357.  
  358. #define D3D12_CS_THREADGROUPID_REGISTER_COUNT   ( 1 )
  359.  
  360. #define D3D12_CS_THREADIDINGROUPFLATTENED_REGISTER_COMPONENTS   ( 1 )
  361.  
  362. #define D3D12_CS_THREADIDINGROUPFLATTENED_REGISTER_COUNT    ( 1 )
  363.  
  364. #define D3D12_CS_THREADIDINGROUP_REGISTER_COMPONENTS    ( 3 )
  365.  
  366. #define D3D12_CS_THREADIDINGROUP_REGISTER_COUNT ( 1 )
  367.  
  368. #define D3D12_CS_THREADID_REGISTER_COMPONENTS   ( 3 )
  369.  
  370. #define D3D12_CS_THREADID_REGISTER_COUNT    ( 1 )
  371.  
  372. #define D3D12_CS_THREAD_GROUP_MAX_THREADS_PER_GROUP ( 1024 )
  373.  
  374. #define D3D12_CS_THREAD_GROUP_MAX_X ( 1024 )
  375.  
  376. #define D3D12_CS_THREAD_GROUP_MAX_Y ( 1024 )
  377.  
  378. #define D3D12_CS_THREAD_GROUP_MAX_Z ( 64 )
  379.  
  380. #define D3D12_CS_THREAD_GROUP_MIN_X ( 1 )
  381.  
  382. #define D3D12_CS_THREAD_GROUP_MIN_Y ( 1 )
  383.  
  384. #define D3D12_CS_THREAD_GROUP_MIN_Z ( 1 )
  385.  
  386. #define D3D12_CS_THREAD_LOCAL_TEMP_REGISTER_POOL    ( 16384 )
  387.  
  388. #define D3D12_DEFAULT_BLEND_FACTOR_ALPHA    ( 1.0f )
  389. #define D3D12_DEFAULT_BLEND_FACTOR_BLUE ( 1.0f )
  390. #define D3D12_DEFAULT_BLEND_FACTOR_GREEN    ( 1.0f )
  391. #define D3D12_DEFAULT_BLEND_FACTOR_RED  ( 1.0f )
  392. #define D3D12_DEFAULT_BORDER_COLOR_COMPONENT    ( 0.0f )
  393. #define D3D12_DEFAULT_DEPTH_BIAS    ( 0 )
  394.  
  395. #define D3D12_DEFAULT_DEPTH_BIAS_CLAMP  ( 0.0f )
  396. #define D3D12_DEFAULT_MAX_ANISOTROPY    ( 16 )
  397.  
  398. #define D3D12_DEFAULT_MIP_LOD_BIAS  ( 0.0f )
  399. #define D3D12_DEFAULT_MSAA_RESOURCE_PLACEMENT_ALIGNMENT ( 4194304 )
  400.  
  401. #define D3D12_DEFAULT_RENDER_TARGET_ARRAY_INDEX ( 0 )
  402.  
  403. #define D3D12_DEFAULT_RESOURCE_PLACEMENT_ALIGNMENT  ( 65536 )
  404.  
  405. #define D3D12_DEFAULT_SAMPLE_MASK   ( 0xffffffff )
  406.  
  407. #define D3D12_DEFAULT_SCISSOR_ENDX  ( 0 )
  408.  
  409. #define D3D12_DEFAULT_SCISSOR_ENDY  ( 0 )
  410.  
  411. #define D3D12_DEFAULT_SCISSOR_STARTX    ( 0 )
  412.  
  413. #define D3D12_DEFAULT_SCISSOR_STARTY    ( 0 )
  414.  
  415. #define D3D12_DEFAULT_SLOPE_SCALED_DEPTH_BIAS   ( 0.0f )
  416. #define D3D12_DEFAULT_STENCIL_READ_MASK ( 0xff )
  417.  
  418. #define D3D12_DEFAULT_STENCIL_REFERENCE ( 0 )
  419.  
  420. #define D3D12_DEFAULT_STENCIL_WRITE_MASK    ( 0xff )
  421.  
  422. #define D3D12_DEFAULT_VIEWPORT_AND_SCISSORRECT_INDEX    ( 0 )
  423.  
  424. #define D3D12_DEFAULT_VIEWPORT_HEIGHT   ( 0 )
  425.  
  426. #define D3D12_DEFAULT_VIEWPORT_MAX_DEPTH    ( 0.0f )
  427. #define D3D12_DEFAULT_VIEWPORT_MIN_DEPTH    ( 0.0f )
  428. #define D3D12_DEFAULT_VIEWPORT_TOPLEFTX ( 0 )
  429.  
  430. #define D3D12_DEFAULT_VIEWPORT_TOPLEFTY ( 0 )
  431.  
  432. #define D3D12_DEFAULT_VIEWPORT_WIDTH    ( 0 )
  433.  
  434. #define D3D12_DESCRIPTOR_RANGE_OFFSET_APPEND    ( 0xffffffff )
  435.  
  436. #define D3D12_DRIVER_RESERVED_REGISTER_SPACE_VALUES_END ( 0xfffffff7 )
  437.  
  438. #define D3D12_DRIVER_RESERVED_REGISTER_SPACE_VALUES_START   ( 0xfffffff0 )
  439.  
  440. #define D3D12_DS_INPUT_CONTROL_POINTS_MAX_TOTAL_SCALARS ( 3968 )
  441.  
  442. #define D3D12_DS_INPUT_CONTROL_POINT_REGISTER_COMPONENTS    ( 4 )
  443.  
  444. #define D3D12_DS_INPUT_CONTROL_POINT_REGISTER_COMPONENT_BIT_COUNT   ( 32 )
  445.  
  446. #define D3D12_DS_INPUT_CONTROL_POINT_REGISTER_COUNT ( 32 )
  447.  
  448. #define D3D12_DS_INPUT_CONTROL_POINT_REGISTER_READS_PER_INST    ( 2 )
  449.  
  450. #define D3D12_DS_INPUT_CONTROL_POINT_REGISTER_READ_PORTS    ( 1 )
  451.  
  452. #define D3D12_DS_INPUT_DOMAIN_POINT_REGISTER_COMPONENTS ( 3 )
  453.  
  454. #define D3D12_DS_INPUT_DOMAIN_POINT_REGISTER_COMPONENT_BIT_COUNT    ( 32 )
  455.  
  456. #define D3D12_DS_INPUT_DOMAIN_POINT_REGISTER_COUNT  ( 1 )
  457.  
  458. #define D3D12_DS_INPUT_DOMAIN_POINT_REGISTER_READS_PER_INST ( 2 )
  459.  
  460. #define D3D12_DS_INPUT_DOMAIN_POINT_REGISTER_READ_PORTS ( 1 )
  461.  
  462. #define D3D12_DS_INPUT_PATCH_CONSTANT_REGISTER_COMPONENTS   ( 4 )
  463.  
  464. #define D3D12_DS_INPUT_PATCH_CONSTANT_REGISTER_COMPONENT_BIT_COUNT  ( 32 )
  465.  
  466. #define D3D12_DS_INPUT_PATCH_CONSTANT_REGISTER_COUNT    ( 32 )
  467.  
  468. #define D3D12_DS_INPUT_PATCH_CONSTANT_REGISTER_READS_PER_INST   ( 2 )
  469.  
  470. #define D3D12_DS_INPUT_PATCH_CONSTANT_REGISTER_READ_PORTS   ( 1 )
  471.  
  472. #define D3D12_DS_INPUT_PRIMITIVE_ID_REGISTER_COMPONENTS ( 1 )
  473.  
  474. #define D3D12_DS_INPUT_PRIMITIVE_ID_REGISTER_COMPONENT_BIT_COUNT    ( 32 )
  475.  
  476. #define D3D12_DS_INPUT_PRIMITIVE_ID_REGISTER_COUNT  ( 1 )
  477.  
  478. #define D3D12_DS_INPUT_PRIMITIVE_ID_REGISTER_READS_PER_INST ( 2 )
  479.  
  480. #define D3D12_DS_INPUT_PRIMITIVE_ID_REGISTER_READ_PORTS ( 1 )
  481.  
  482. #define D3D12_DS_OUTPUT_REGISTER_COMPONENTS ( 4 )
  483.  
  484. #define D3D12_DS_OUTPUT_REGISTER_COMPONENT_BIT_COUNT    ( 32 )
  485.  
  486. #define D3D12_DS_OUTPUT_REGISTER_COUNT  ( 32 )
  487.  
  488. #define D3D12_FLOAT16_FUSED_TOLERANCE_IN_ULP    ( 0.6 )
  489. #define D3D12_FLOAT32_MAX   ( 3.402823466e+38f )
  490. #define D3D12_FLOAT32_TO_INTEGER_TOLERANCE_IN_ULP   ( 0.6f )
  491. #define D3D12_FLOAT_TO_SRGB_EXPONENT_DENOMINATOR    ( 2.4f )
  492. #define D3D12_FLOAT_TO_SRGB_EXPONENT_NUMERATOR  ( 1.0f )
  493. #define D3D12_FLOAT_TO_SRGB_OFFSET  ( 0.055f )
  494. #define D3D12_FLOAT_TO_SRGB_SCALE_1 ( 12.92f )
  495. #define D3D12_FLOAT_TO_SRGB_SCALE_2 ( 1.055f )
  496. #define D3D12_FLOAT_TO_SRGB_THRESHOLD   ( 0.0031308f )
  497. #define D3D12_FTOI_INSTRUCTION_MAX_INPUT    ( 2147483647.999f )
  498. #define D3D12_FTOI_INSTRUCTION_MIN_INPUT    ( -2147483648.999f )
  499. #define D3D12_FTOU_INSTRUCTION_MAX_INPUT    ( 4294967295.999f )
  500. #define D3D12_FTOU_INSTRUCTION_MIN_INPUT    ( 0.0f )
  501. #define D3D12_GS_INPUT_INSTANCE_ID_READS_PER_INST   ( 2 )
  502.  
  503. #define D3D12_GS_INPUT_INSTANCE_ID_READ_PORTS   ( 1 )
  504.  
  505. #define D3D12_GS_INPUT_INSTANCE_ID_REGISTER_COMPONENTS  ( 1 )
  506.  
  507. #define D3D12_GS_INPUT_INSTANCE_ID_REGISTER_COMPONENT_BIT_COUNT ( 32 )
  508.  
  509. #define D3D12_GS_INPUT_INSTANCE_ID_REGISTER_COUNT   ( 1 )
  510.  
  511. #define D3D12_GS_INPUT_PRIM_CONST_REGISTER_COMPONENTS   ( 1 )
  512.  
  513. #define D3D12_GS_INPUT_PRIM_CONST_REGISTER_COMPONENT_BIT_COUNT  ( 32 )
  514.  
  515. #define D3D12_GS_INPUT_PRIM_CONST_REGISTER_COUNT    ( 1 )
  516.  
  517. #define D3D12_GS_INPUT_PRIM_CONST_REGISTER_READS_PER_INST   ( 2 )
  518.  
  519. #define D3D12_GS_INPUT_PRIM_CONST_REGISTER_READ_PORTS   ( 1 )
  520.  
  521. #define D3D12_GS_INPUT_REGISTER_COMPONENTS  ( 4 )
  522.  
  523. #define D3D12_GS_INPUT_REGISTER_COMPONENT_BIT_COUNT ( 32 )
  524.  
  525. #define D3D12_GS_INPUT_REGISTER_COUNT   ( 32 )
  526.  
  527. #define D3D12_GS_INPUT_REGISTER_READS_PER_INST  ( 2 )
  528.  
  529. #define D3D12_GS_INPUT_REGISTER_READ_PORTS  ( 1 )
  530.  
  531. #define D3D12_GS_INPUT_REGISTER_VERTICES    ( 32 )
  532.  
  533. #define D3D12_GS_MAX_INSTANCE_COUNT ( 32 )
  534.  
  535. #define D3D12_GS_MAX_OUTPUT_VERTEX_COUNT_ACROSS_INSTANCES   ( 1024 )
  536.  
  537. #define D3D12_GS_OUTPUT_ELEMENTS    ( 32 )
  538.  
  539. #define D3D12_GS_OUTPUT_REGISTER_COMPONENTS ( 4 )
  540.  
  541. #define D3D12_GS_OUTPUT_REGISTER_COMPONENT_BIT_COUNT    ( 32 )
  542.  
  543. #define D3D12_GS_OUTPUT_REGISTER_COUNT  ( 32 )
  544.  
  545. #define D3D12_HS_CONTROL_POINT_PHASE_INPUT_REGISTER_COUNT   ( 32 )
  546.  
  547. #define D3D12_HS_CONTROL_POINT_PHASE_OUTPUT_REGISTER_COUNT  ( 32 )
  548.  
  549. #define D3D12_HS_CONTROL_POINT_REGISTER_COMPONENTS  ( 4 )
  550.  
  551. #define D3D12_HS_CONTROL_POINT_REGISTER_COMPONENT_BIT_COUNT ( 32 )
  552.  
  553. #define D3D12_HS_CONTROL_POINT_REGISTER_READS_PER_INST  ( 2 )
  554.  
  555. #define D3D12_HS_CONTROL_POINT_REGISTER_READ_PORTS  ( 1 )
  556.  
  557. #define D3D12_HS_FORK_PHASE_INSTANCE_COUNT_UPPER_BOUND  ( 0xffffffff )
  558.  
  559. #define D3D12_HS_INPUT_FORK_INSTANCE_ID_REGISTER_COMPONENTS ( 1 )
  560.  
  561. #define D3D12_HS_INPUT_FORK_INSTANCE_ID_REGISTER_COMPONENT_BIT_COUNT    ( 32 )
  562.  
  563. #define D3D12_HS_INPUT_FORK_INSTANCE_ID_REGISTER_COUNT  ( 1 )
  564.  
  565. #define D3D12_HS_INPUT_FORK_INSTANCE_ID_REGISTER_READS_PER_INST ( 2 )
  566.  
  567. #define D3D12_HS_INPUT_FORK_INSTANCE_ID_REGISTER_READ_PORTS ( 1 )
  568.  
  569. #define D3D12_HS_INPUT_JOIN_INSTANCE_ID_REGISTER_COMPONENTS ( 1 )
  570.  
  571. #define D3D12_HS_INPUT_JOIN_INSTANCE_ID_REGISTER_COMPONENT_BIT_COUNT    ( 32 )
  572.  
  573. #define D3D12_HS_INPUT_JOIN_INSTANCE_ID_REGISTER_COUNT  ( 1 )
  574.  
  575. #define D3D12_HS_INPUT_JOIN_INSTANCE_ID_REGISTER_READS_PER_INST ( 2 )
  576.  
  577. #define D3D12_HS_INPUT_JOIN_INSTANCE_ID_REGISTER_READ_PORTS ( 1 )
  578.  
  579. #define D3D12_HS_INPUT_PRIMITIVE_ID_REGISTER_COMPONENTS ( 1 )
  580.  
  581. #define D3D12_HS_INPUT_PRIMITIVE_ID_REGISTER_COMPONENT_BIT_COUNT    ( 32 )
  582.  
  583. #define D3D12_HS_INPUT_PRIMITIVE_ID_REGISTER_COUNT  ( 1 )
  584.  
  585. #define D3D12_HS_INPUT_PRIMITIVE_ID_REGISTER_READS_PER_INST ( 2 )
  586.  
  587. #define D3D12_HS_INPUT_PRIMITIVE_ID_REGISTER_READ_PORTS ( 1 )
  588.  
  589. #define D3D12_HS_JOIN_PHASE_INSTANCE_COUNT_UPPER_BOUND  ( 0xffffffff )
  590.  
  591. #define D3D12_HS_MAXTESSFACTOR_LOWER_BOUND  ( 1.0f )
  592. #define D3D12_HS_MAXTESSFACTOR_UPPER_BOUND  ( 64.0f )
  593. #define D3D12_HS_OUTPUT_CONTROL_POINTS_MAX_TOTAL_SCALARS    ( 3968 )
  594.  
  595. #define D3D12_HS_OUTPUT_CONTROL_POINT_ID_REGISTER_COMPONENTS    ( 1 )
  596.  
  597. #define D3D12_HS_OUTPUT_CONTROL_POINT_ID_REGISTER_COMPONENT_BIT_COUNT   ( 32 )
  598.  
  599. #define D3D12_HS_OUTPUT_CONTROL_POINT_ID_REGISTER_COUNT ( 1 )
  600.  
  601. #define D3D12_HS_OUTPUT_CONTROL_POINT_ID_REGISTER_READS_PER_INST    ( 2 )
  602.  
  603. #define D3D12_HS_OUTPUT_CONTROL_POINT_ID_REGISTER_READ_PORTS    ( 1 )
  604.  
  605. #define D3D12_HS_OUTPUT_PATCH_CONSTANT_REGISTER_COMPONENTS  ( 4 )
  606.  
  607. #define D3D12_HS_OUTPUT_PATCH_CONSTANT_REGISTER_COMPONENT_BIT_COUNT ( 32 )
  608.  
  609. #define D3D12_HS_OUTPUT_PATCH_CONSTANT_REGISTER_COUNT   ( 32 )
  610.  
  611. #define D3D12_HS_OUTPUT_PATCH_CONSTANT_REGISTER_READS_PER_INST  ( 2 )
  612.  
  613. #define D3D12_HS_OUTPUT_PATCH_CONSTANT_REGISTER_READ_PORTS  ( 1 )
  614.  
  615. #define D3D12_HS_OUTPUT_PATCH_CONSTANT_REGISTER_SCALAR_COMPONENTS   ( 128 )
  616.  
  617. #define D3D12_IA_DEFAULT_INDEX_BUFFER_OFFSET_IN_BYTES   ( 0 )
  618.  
  619. #define D3D12_IA_DEFAULT_PRIMITIVE_TOPOLOGY ( 0 )
  620.  
  621. #define D3D12_IA_DEFAULT_VERTEX_BUFFER_OFFSET_IN_BYTES  ( 0 )
  622.  
  623. #define D3D12_IA_INDEX_INPUT_RESOURCE_SLOT_COUNT    ( 1 )
  624.  
  625. #define D3D12_IA_INSTANCE_ID_BIT_COUNT  ( 32 )
  626.  
  627. #define D3D12_IA_INTEGER_ARITHMETIC_BIT_COUNT   ( 32 )
  628.  
  629. #define D3D12_IA_PATCH_MAX_CONTROL_POINT_COUNT  ( 32 )
  630.  
  631. #define D3D12_IA_PRIMITIVE_ID_BIT_COUNT ( 32 )
  632.  
  633. #define D3D12_IA_VERTEX_ID_BIT_COUNT    ( 32 )
  634.  
  635. #define D3D12_IA_VERTEX_INPUT_RESOURCE_SLOT_COUNT   ( 32 )
  636.  
  637. #define D3D12_IA_VERTEX_INPUT_STRUCTURE_ELEMENTS_COMPONENTS ( 128 )
  638.  
  639. #define D3D12_IA_VERTEX_INPUT_STRUCTURE_ELEMENT_COUNT   ( 32 )
  640.  
  641. #define D3D12_INTEGER_DIVIDE_BY_ZERO_QUOTIENT   ( 0xffffffff )
  642.  
  643. #define D3D12_INTEGER_DIVIDE_BY_ZERO_REMAINDER  ( 0xffffffff )
  644.  
  645. #define D3D12_KEEP_RENDER_TARGETS_AND_DEPTH_STENCIL ( 0xffffffff )
  646.  
  647. #define D3D12_KEEP_UNORDERED_ACCESS_VIEWS   ( 0xffffffff )
  648.  
  649. #define D3D12_LINEAR_GAMMA  ( 1.0f )
  650. #define D3D12_MAJOR_VERSION ( 12 )
  651.  
  652. #define D3D12_MAX_BORDER_COLOR_COMPONENT    ( 1.0f )
  653. #define D3D12_MAX_DEPTH ( 1.0f )
  654. #define D3D12_MAX_LIVE_STATIC_SAMPLERS  ( 2032 )
  655.  
  656. #define D3D12_MAX_MAXANISOTROPY ( 16 )
  657.  
  658. #define D3D12_MAX_MULTISAMPLE_SAMPLE_COUNT  ( 32 )
  659.  
  660. #define D3D12_MAX_POSITION_VALUE    ( 3.402823466e+34f )
  661. #define D3D12_MAX_ROOT_COST ( 64 )
  662.  
  663. #define D3D12_MAX_TEXTURE_DIMENSION_2_TO_EXP    ( 17 )
  664.  
  665. #define D3D12_MINOR_VERSION ( 0 )
  666.  
  667. #define D3D12_MIN_BORDER_COLOR_COMPONENT    ( 0.0f )
  668. #define D3D12_MIN_DEPTH ( 0.0f )
  669. #define D3D12_MIN_MAXANISOTROPY ( 0 )
  670.  
  671. #define D3D12_MIP_LOD_BIAS_MAX  ( 15.99f )
  672. #define D3D12_MIP_LOD_BIAS_MIN  ( -16.0f )
  673. #define D3D12_MIP_LOD_FRACTIONAL_BIT_COUNT  ( 8 )
  674.  
  675. #define D3D12_MIP_LOD_RANGE_BIT_COUNT   ( 8 )
  676.  
  677. #define D3D12_MULTISAMPLE_ANTIALIAS_LINE_WIDTH  ( 1.4f )
  678. #define D3D12_NONSAMPLE_FETCH_OUT_OF_RANGE_ACCESS_RESULT    ( 0 )
  679.  
  680. #define D3D12_OS_RESERVED_REGISTER_SPACE_VALUES_END ( 0xffffffff )
  681.  
  682. #define D3D12_OS_RESERVED_REGISTER_SPACE_VALUES_START   ( 0xfffffff8 )
  683.  
  684. #define D3D12_PACKED_TILE   ( 0xffffffff )
  685.  
  686. #define D3D12_PIXEL_ADDRESS_RANGE_BIT_COUNT ( 15 )
  687.  
  688. #define D3D12_PRE_SCISSOR_PIXEL_ADDRESS_RANGE_BIT_COUNT ( 16 )
  689.  
  690. #define D3D12_PS_CS_UAV_REGISTER_COMPONENTS ( 1 )
  691.  
  692. #define D3D12_PS_CS_UAV_REGISTER_COUNT  ( 8 )
  693.  
  694. #define D3D12_PS_CS_UAV_REGISTER_READS_PER_INST ( 1 )
  695.  
  696. #define D3D12_PS_CS_UAV_REGISTER_READ_PORTS ( 1 )
  697.  
  698. #define D3D12_PS_FRONTFACING_DEFAULT_VALUE  ( 0xffffffff )
  699.  
  700. #define D3D12_PS_FRONTFACING_FALSE_VALUE    ( 0 )
  701.  
  702. #define D3D12_PS_FRONTFACING_TRUE_VALUE ( 0xffffffff )
  703.  
  704. #define D3D12_PS_INPUT_REGISTER_COMPONENTS  ( 4 )
  705.  
  706. #define D3D12_PS_INPUT_REGISTER_COMPONENT_BIT_COUNT ( 32 )
  707.  
  708. #define D3D12_PS_INPUT_REGISTER_COUNT   ( 32 )
  709.  
  710. #define D3D12_PS_INPUT_REGISTER_READS_PER_INST  ( 2 )
  711.  
  712. #define D3D12_PS_INPUT_REGISTER_READ_PORTS  ( 1 )
  713.  
  714. #define D3D12_PS_LEGACY_PIXEL_CENTER_FRACTIONAL_COMPONENT   ( 0.0f )
  715. #define D3D12_PS_OUTPUT_DEPTH_REGISTER_COMPONENTS   ( 1 )
  716.  
  717. #define D3D12_PS_OUTPUT_DEPTH_REGISTER_COMPONENT_BIT_COUNT  ( 32 )
  718.  
  719. #define D3D12_PS_OUTPUT_DEPTH_REGISTER_COUNT    ( 1 )
  720.  
  721. #define D3D12_PS_OUTPUT_MASK_REGISTER_COMPONENTS    ( 1 )
  722.  
  723. #define D3D12_PS_OUTPUT_MASK_REGISTER_COMPONENT_BIT_COUNT   ( 32 )
  724.  
  725. #define D3D12_PS_OUTPUT_MASK_REGISTER_COUNT ( 1 )
  726.  
  727. #define D3D12_PS_OUTPUT_REGISTER_COMPONENTS ( 4 )
  728.  
  729. #define D3D12_PS_OUTPUT_REGISTER_COMPONENT_BIT_COUNT    ( 32 )
  730.  
  731. #define D3D12_PS_OUTPUT_REGISTER_COUNT  ( 8 )
  732.  
  733. #define D3D12_PS_PIXEL_CENTER_FRACTIONAL_COMPONENT  ( 0.5f )
  734. #define D3D12_RAW_UAV_SRV_BYTE_ALIGNMENT    ( 16 )
  735.  
  736. #define D3D12_REQ_BLEND_OBJECT_COUNT_PER_DEVICE ( 4096 )
  737.  
  738. #define D3D12_REQ_BUFFER_RESOURCE_TEXEL_COUNT_2_TO_EXP  ( 27 )
  739.  
  740. #define D3D12_REQ_CONSTANT_BUFFER_ELEMENT_COUNT ( 4096 )
  741.  
  742. #define D3D12_REQ_DEPTH_STENCIL_OBJECT_COUNT_PER_DEVICE ( 4096 )
  743.  
  744. #define D3D12_REQ_DRAWINDEXED_INDEX_COUNT_2_TO_EXP  ( 32 )
  745.  
  746. #define D3D12_REQ_DRAW_VERTEX_COUNT_2_TO_EXP    ( 32 )
  747.  
  748. #define D3D12_REQ_FILTERING_HW_ADDRESSABLE_RESOURCE_DIMENSION   ( 16384 )
  749.  
  750. #define D3D12_REQ_GS_INVOCATION_32BIT_OUTPUT_COMPONENT_LIMIT    ( 1024 )
  751.  
  752. #define D3D12_REQ_IMMEDIATE_CONSTANT_BUFFER_ELEMENT_COUNT   ( 4096 )
  753.  
  754. #define D3D12_REQ_MAXANISOTROPY ( 16 )
  755.  
  756. #define D3D12_REQ_MIP_LEVELS    ( 15 )
  757.  
  758. #define D3D12_REQ_MULTI_ELEMENT_STRUCTURE_SIZE_IN_BYTES ( 2048 )
  759.  
  760. #define D3D12_REQ_RASTERIZER_OBJECT_COUNT_PER_DEVICE    ( 4096 )
  761.  
  762. #define D3D12_REQ_RENDER_TO_BUFFER_WINDOW_WIDTH ( 16384 )
  763.  
  764. #define D3D12_REQ_RESOURCE_SIZE_IN_MEGABYTES_EXPRESSION_A_TERM  ( 128 )
  765.  
  766. #define D3D12_REQ_RESOURCE_SIZE_IN_MEGABYTES_EXPRESSION_B_TERM  ( 0.25f )
  767. #define D3D12_REQ_RESOURCE_SIZE_IN_MEGABYTES_EXPRESSION_C_TERM  ( 2048 )
  768.  
  769. #define D3D12_REQ_RESOURCE_VIEW_COUNT_PER_DEVICE_2_TO_EXP   ( 20 )
  770.  
  771. #define D3D12_REQ_SAMPLER_OBJECT_COUNT_PER_DEVICE   ( 4096 )
  772.  
  773. #define D3D12_REQ_SUBRESOURCES  ( 30720 )
  774.  
  775. #define D3D12_REQ_TEXTURE1D_ARRAY_AXIS_DIMENSION    ( 2048 )
  776.  
  777. #define D3D12_REQ_TEXTURE1D_U_DIMENSION ( 16384 )
  778.  
  779. #define D3D12_REQ_TEXTURE2D_ARRAY_AXIS_DIMENSION    ( 2048 )
  780.  
  781. #define D3D12_REQ_TEXTURE2D_U_OR_V_DIMENSION    ( 16384 )
  782.  
  783. #define D3D12_REQ_TEXTURE3D_U_V_OR_W_DIMENSION  ( 2048 )
  784.  
  785. #define D3D12_REQ_TEXTURECUBE_DIMENSION ( 16384 )
  786.  
  787. #define D3D12_RESINFO_INSTRUCTION_MISSING_COMPONENT_RETVAL  ( 0 )
  788.  
  789. #define D3D12_RESOURCE_BARRIER_ALL_SUBRESOURCES ( 0xffffffff )
  790.  
  791. #define D3D12_SHADER_MAJOR_VERSION  ( 5 )
  792.  
  793. #define D3D12_SHADER_MAX_INSTANCES  ( 65535 )
  794.  
  795. #define D3D12_SHADER_MAX_INTERFACES ( 253 )
  796.  
  797. #define D3D12_SHADER_MAX_INTERFACE_CALL_SITES   ( 4096 )
  798.  
  799. #define D3D12_SHADER_MAX_TYPES  ( 65535 )
  800.  
  801. #define D3D12_SHADER_MINOR_VERSION  ( 1 )
  802.  
  803. #define D3D12_SHIFT_INSTRUCTION_PAD_VALUE   ( 0 )
  804.  
  805. #define D3D12_SHIFT_INSTRUCTION_SHIFT_VALUE_BIT_COUNT   ( 5 )
  806.  
  807. #define D3D12_SIMULTANEOUS_RENDER_TARGET_COUNT  ( 8 )
  808.  
  809. #define D3D12_SMALL_MSAA_RESOURCE_PLACEMENT_ALIGNMENT   ( 65536 )
  810.  
  811. #define D3D12_SMALL_RESOURCE_PLACEMENT_ALIGNMENT    ( 4096 )
  812.  
  813. #define D3D12_SO_BUFFER_MAX_STRIDE_IN_BYTES ( 2048 )
  814.  
  815. #define D3D12_SO_BUFFER_MAX_WRITE_WINDOW_IN_BYTES   ( 512 )
  816.  
  817. #define D3D12_SO_BUFFER_SLOT_COUNT  ( 4 )
  818.  
  819. #define D3D12_SO_DDI_REGISTER_INDEX_DENOTING_GAP    ( 0xffffffff )
  820.  
  821. #define D3D12_SO_NO_RASTERIZED_STREAM   ( 0xffffffff )
  822.  
  823. #define D3D12_SO_OUTPUT_COMPONENT_COUNT ( 128 )
  824.  
  825. #define D3D12_SO_STREAM_COUNT   ( 4 )
  826.  
  827. #define D3D12_SPEC_DATE_DAY ( 14 )
  828.  
  829. #define D3D12_SPEC_DATE_MONTH   ( 11 )
  830.  
  831. #define D3D12_SPEC_DATE_YEAR    ( 2014 )
  832.  
  833. #define D3D12_SPEC_VERSION  ( 1.16 )
  834. #define D3D12_SRGB_GAMMA    ( 2.2f )
  835. #define D3D12_SRGB_TO_FLOAT_DENOMINATOR_1   ( 12.92f )
  836. #define D3D12_SRGB_TO_FLOAT_DENOMINATOR_2   ( 1.055f )
  837. #define D3D12_SRGB_TO_FLOAT_EXPONENT    ( 2.4f )
  838. #define D3D12_SRGB_TO_FLOAT_OFFSET  ( 0.055f )
  839. #define D3D12_SRGB_TO_FLOAT_THRESHOLD   ( 0.04045f )
  840. #define D3D12_SRGB_TO_FLOAT_TOLERANCE_IN_ULP    ( 0.5f )
  841. #define D3D12_STANDARD_COMPONENT_BIT_COUNT  ( 32 )
  842.  
  843. #define D3D12_STANDARD_COMPONENT_BIT_COUNT_DOUBLED  ( 64 )
  844.  
  845. #define D3D12_STANDARD_MAXIMUM_ELEMENT_ALIGNMENT_BYTE_MULTIPLE  ( 4 )
  846.  
  847. #define D3D12_STANDARD_PIXEL_COMPONENT_COUNT    ( 128 )
  848.  
  849. #define D3D12_STANDARD_PIXEL_ELEMENT_COUNT  ( 32 )
  850.  
  851. #define D3D12_STANDARD_VECTOR_SIZE  ( 4 )
  852.  
  853. #define D3D12_STANDARD_VERTEX_ELEMENT_COUNT ( 32 )
  854.  
  855. #define D3D12_STANDARD_VERTEX_TOTAL_COMPONENT_COUNT ( 64 )
  856.  
  857. #define D3D12_SUBPIXEL_FRACTIONAL_BIT_COUNT ( 8 )
  858.  
  859. #define D3D12_SUBTEXEL_FRACTIONAL_BIT_COUNT ( 8 )
  860.  
  861. #define D3D12_SYSTEM_RESERVED_REGISTER_SPACE_VALUES_END ( 0xffffffff )
  862.  
  863. #define D3D12_SYSTEM_RESERVED_REGISTER_SPACE_VALUES_START   ( 0xfffffff0 )
  864.  
  865. #define D3D12_TESSELLATOR_MAX_EVEN_TESSELLATION_FACTOR  ( 64 )
  866.  
  867. #define D3D12_TESSELLATOR_MAX_ISOLINE_DENSITY_TESSELLATION_FACTOR   ( 64 )
  868.  
  869. #define D3D12_TESSELLATOR_MAX_ODD_TESSELLATION_FACTOR   ( 63 )
  870.  
  871. #define D3D12_TESSELLATOR_MAX_TESSELLATION_FACTOR   ( 64 )
  872.  
  873. #define D3D12_TESSELLATOR_MIN_EVEN_TESSELLATION_FACTOR  ( 2 )
  874.  
  875. #define D3D12_TESSELLATOR_MIN_ISOLINE_DENSITY_TESSELLATION_FACTOR   ( 1 )
  876.  
  877. #define D3D12_TESSELLATOR_MIN_ODD_TESSELLATION_FACTOR   ( 1 )
  878.  
  879. #define D3D12_TEXEL_ADDRESS_RANGE_BIT_COUNT ( 16 )
  880.  
  881. #define D3D12_TEXTURE_DATA_PITCH_ALIGNMENT  ( 256 )
  882.  
  883. #define D3D12_TEXTURE_DATA_PLACEMENT_ALIGNMENT  ( 512 )
  884.  
  885. #define D3D12_TILED_RESOURCE_TILE_SIZE_IN_BYTES ( 65536 )
  886.  
  887. #define D3D12_UAV_SLOT_COUNT    ( 64 )
  888.  
  889. #define D3D12_UNBOUND_MEMORY_ACCESS_RESULT  ( 0 )
  890.  
  891. #define D3D12_VIEWPORT_AND_SCISSORRECT_MAX_INDEX    ( 15 )
  892.  
  893. #define D3D12_VIEWPORT_AND_SCISSORRECT_OBJECT_COUNT_PER_PIPELINE    ( 16 )
  894.  
  895. #define D3D12_VIEWPORT_BOUNDS_MAX   ( 32767 )
  896.  
  897. #define D3D12_VIEWPORT_BOUNDS_MIN   ( -32768 )
  898.  
  899. #define D3D12_VS_INPUT_REGISTER_COMPONENTS  ( 4 )
  900.  
  901. #define D3D12_VS_INPUT_REGISTER_COMPONENT_BIT_COUNT ( 32 )
  902.  
  903. #define D3D12_VS_INPUT_REGISTER_COUNT   ( 32 )
  904.  
  905. #define D3D12_VS_INPUT_REGISTER_READS_PER_INST  ( 2 )
  906.  
  907. #define D3D12_VS_INPUT_REGISTER_READ_PORTS  ( 1 )
  908.  
  909. #define D3D12_VS_OUTPUT_REGISTER_COMPONENTS ( 4 )
  910.  
  911. #define D3D12_VS_OUTPUT_REGISTER_COMPONENT_BIT_COUNT    ( 32 )
  912.  
  913. #define D3D12_VS_OUTPUT_REGISTER_COUNT  ( 32 )
  914.  
  915. #define D3D12_WHQL_CONTEXT_COUNT_FOR_RESOURCE_LIMIT ( 10 )
  916.  
  917. #define D3D12_WHQL_DRAWINDEXED_INDEX_COUNT_2_TO_EXP ( 25 )
  918.  
  919. #define D3D12_WHQL_DRAW_VERTEX_COUNT_2_TO_EXP   ( 25 )
  920.  
  921. #endif
  922.  
  923. typedef UINT64 D3D12_GPU_VIRTUAL_ADDRESS;
  924.  
  925. typedef
  926. enum D3D12_COMMAND_LIST_TYPE
  927.     {
  928.         D3D12_COMMAND_LIST_TYPE_DIRECT  = 0,
  929.         D3D12_COMMAND_LIST_TYPE_BUNDLE  = 1,
  930.         D3D12_COMMAND_LIST_TYPE_COMPUTE = 2,
  931.         D3D12_COMMAND_LIST_TYPE_COPY    = 3
  932.     }   D3D12_COMMAND_LIST_TYPE;
  933.  
  934. typedef
  935. enum D3D12_COMMAND_QUEUE_FLAG
  936.     {
  937.         D3D12_COMMAND_QUEUE_NONE    = 0,
  938.         D3D12_COMMAND_QUEUE_DISABLE_GPU_TIMEOUT = 0x1
  939.     }   D3D12_COMMAND_QUEUE_FLAG;
  940.  
  941. DEFINE_ENUM_FLAG_OPERATORS( D3D12_COMMAND_QUEUE_FLAG );
  942. typedef struct D3D12_COMMAND_QUEUE_DESC
  943.     {
  944.     D3D12_COMMAND_LIST_TYPE Type;
  945.     INT Priority;
  946.     D3D12_COMMAND_QUEUE_FLAG Flags;
  947.     UINT NodeMask;
  948.     }   D3D12_COMMAND_QUEUE_DESC;
  949.  
  950. typedef
  951. enum D3D12_PRIMITIVE_TOPOLOGY_TYPE
  952.     {
  953.         D3D12_PRIMITIVE_TOPOLOGY_TYPE_UNDEFINED = 0,
  954.         D3D12_PRIMITIVE_TOPOLOGY_TYPE_POINT = 1,
  955.         D3D12_PRIMITIVE_TOPOLOGY_TYPE_LINE  = 2,
  956.         D3D12_PRIMITIVE_TOPOLOGY_TYPE_TRIANGLE  = 3,
  957.         D3D12_PRIMITIVE_TOPOLOGY_TYPE_PATCH = 4
  958.     }   D3D12_PRIMITIVE_TOPOLOGY_TYPE;
  959.  
  960. #if !defined( D3D12_NO_HELPERS ) && defined( __cplusplus )
  961. }
  962. struct CD3D12_DEFAULT {};
  963. extern const DECLSPEC_SELECTANY CD3D12_DEFAULT D3D12_DEFAULT;
  964. extern "C"{
  965. #endif
  966. typedef
  967. enum D3D12_INPUT_CLASSIFICATION
  968.     {
  969.         D3D12_INPUT_PER_VERTEX_DATA = 0,
  970.         D3D12_INPUT_PER_INSTANCE_DATA   = 1
  971.     }   D3D12_INPUT_CLASSIFICATION;
  972.  
  973. typedef struct D3D12_INPUT_ELEMENT_DESC
  974.     {
  975.     LPCSTR SemanticName;
  976.     UINT SemanticIndex;
  977.     DXGI_FORMAT Format;
  978.     UINT InputSlot;
  979.     UINT AlignedByteOffset;
  980.     D3D12_INPUT_CLASSIFICATION InputSlotClass;
  981.     UINT InstanceDataStepRate;
  982.     }   D3D12_INPUT_ELEMENT_DESC;
  983.  
  984. typedef
  985. enum D3D12_FILL_MODE
  986.     {
  987.         D3D12_FILL_WIREFRAME    = 2,
  988.         D3D12_FILL_SOLID    = 3
  989.     }   D3D12_FILL_MODE;
  990.  
  991. typedef D3D_PRIMITIVE_TOPOLOGY D3D12_PRIMITIVE_TOPOLOGY;
  992.  
  993. typedef D3D_PRIMITIVE D3D12_PRIMITIVE;
  994.  
  995. typedef
  996. enum D3D12_CULL_MODE
  997.     {
  998.         D3D12_CULL_NONE = 1,
  999.         D3D12_CULL_FRONT    = 2,
  1000.         D3D12_CULL_BACK = 3
  1001.     }   D3D12_CULL_MODE;
  1002.  
  1003. typedef struct D3D12_SO_DECLARATION_ENTRY
  1004.     {
  1005.     UINT Stream;
  1006.     LPCSTR SemanticName;
  1007.     UINT SemanticIndex;
  1008.     BYTE StartComponent;
  1009.     BYTE ComponentCount;
  1010.     BYTE OutputSlot;
  1011.     }   D3D12_SO_DECLARATION_ENTRY;
  1012.  
  1013. typedef struct D3D12_VIEWPORT
  1014.     {
  1015.     FLOAT TopLeftX;
  1016.     FLOAT TopLeftY;
  1017.     FLOAT Width;
  1018.     FLOAT Height;
  1019.     FLOAT MinDepth;
  1020.     FLOAT MaxDepth;
  1021.     }   D3D12_VIEWPORT;
  1022.  
  1023. typedef
  1024. enum D3D12_OFFER_RESOURCE_PRIORITY
  1025.     {
  1026.         D3D12_OFFER_RESOURCE_PRIORITY_LOW   = 1,
  1027.         D3D12_OFFER_RESOURCE_PRIORITY_NORMAL    = ( D3D12_OFFER_RESOURCE_PRIORITY_LOW + 1 ) ,
  1028.         D3D12_OFFER_RESOURCE_PRIORITY_HIGH  = ( D3D12_OFFER_RESOURCE_PRIORITY_NORMAL + 1 )
  1029.     }   D3D12_OFFER_RESOURCE_PRIORITY;
  1030.  
  1031. #if !defined( D3D12_NO_HELPERS ) && defined( __cplusplus )
  1032. }
  1033. inline bool operator==( const D3D12_VIEWPORT& l, const D3D12_VIEWPORT& r )
  1034. {
  1035.     return l.TopLeftX == r.TopLeftX && l.TopLeftY == r.TopLeftY && l.Width == r.Width &&
  1036.         l.Height == r.Height && l.MinDepth == r.MinDepth && l.MaxDepth == r.MaxDepth;
  1037. }
  1038. inline bool operator!=( const D3D12_VIEWPORT& l, const D3D12_VIEWPORT& r )
  1039. { return !( l == r ); }
  1040. extern "C"{
  1041. #endif
  1042. typedef RECT D3D12_RECT;
  1043.  
  1044. #if !defined( D3D12_NO_HELPERS ) && defined( __cplusplus )
  1045. }
  1046. struct CD3D12_RECT : public D3D12_RECT
  1047. {
  1048.     CD3D12_RECT()
  1049.     {}
  1050.     explicit CD3D12_RECT( const D3D12_RECT& o ) :
  1051.         D3D12_RECT( o )
  1052.     {}
  1053.     explicit CD3D12_RECT(
  1054.         LONG Left,
  1055.         LONG Top,
  1056.         LONG Right,
  1057.         LONG Bottom )
  1058.     {
  1059.         left = Left;
  1060.         top = Top;
  1061.         right = Right;
  1062.         bottom = Bottom;
  1063.     }
  1064.     ~CD3D12_RECT() {}
  1065.     operator const D3D12_RECT&() const { return *this; }
  1066. };
  1067. extern "C"{
  1068. #endif
  1069. typedef struct D3D12_BOX
  1070.     {
  1071.     UINT left;
  1072.     UINT top;
  1073.     UINT front;
  1074.     UINT right;
  1075.     UINT bottom;
  1076.     UINT back;
  1077.     }   D3D12_BOX;
  1078.  
  1079. #if !defined( D3D12_NO_HELPERS ) && defined( __cplusplus )
  1080. }
  1081. struct CD3D12_BOX : public D3D12_BOX
  1082. {
  1083.     CD3D12_BOX()
  1084.     {}
  1085.     explicit CD3D12_BOX( const D3D12_BOX& o ) :
  1086.         D3D12_BOX( o )
  1087.     {}
  1088.     explicit CD3D12_BOX(
  1089.         LONG Left,
  1090.         LONG Right )
  1091.     {
  1092.         left = Left;
  1093.         top = 0;
  1094.         front = 0;
  1095.         right = Right;
  1096.         bottom = 1;
  1097.         back = 1;
  1098.     }
  1099.     explicit CD3D12_BOX(
  1100.         LONG Left,
  1101.         LONG Top,
  1102.         LONG Right,
  1103.         LONG Bottom )
  1104.     {
  1105.         left = Left;
  1106.         top = Top;
  1107.         front = 0;
  1108.         right = Right;
  1109.         bottom = Bottom;
  1110.         back = 1;
  1111.     }
  1112.     explicit CD3D12_BOX(
  1113.         LONG Left,
  1114.         LONG Top,
  1115.         LONG Front,
  1116.         LONG Right,
  1117.         LONG Bottom,
  1118.         LONG Back )
  1119.     {
  1120.         left = Left;
  1121.         top = Top;
  1122.         front = Front;
  1123.         right = Right;
  1124.         bottom = Bottom;
  1125.         back = Back;
  1126.     }
  1127.     ~CD3D12_BOX() {}
  1128.     operator const D3D12_BOX&() const { return *this; }
  1129. };
  1130. inline bool operator==( const D3D12_BOX& l, const D3D12_BOX& r )
  1131. {
  1132.     return l.left == r.left && l.top == r.top && l.front == r.front &&
  1133.         l.right == r.right && l.bottom == r.bottom && l.back == r.back;
  1134. }
  1135. inline bool operator!=( const D3D12_BOX& l, const D3D12_BOX& r )
  1136. { return !( l == r ); }
  1137. extern "C"{
  1138. #endif
  1139. typedef
  1140. enum D3D12_COMPARISON_FUNC
  1141.     {
  1142.         D3D12_COMPARISON_NEVER  = 1,
  1143.         D3D12_COMPARISON_LESS   = 2,
  1144.         D3D12_COMPARISON_EQUAL  = 3,
  1145.         D3D12_COMPARISON_LESS_EQUAL = 4,
  1146.         D3D12_COMPARISON_GREATER    = 5,
  1147.         D3D12_COMPARISON_NOT_EQUAL  = 6,
  1148.         D3D12_COMPARISON_GREATER_EQUAL  = 7,
  1149.         D3D12_COMPARISON_ALWAYS = 8
  1150.     }   D3D12_COMPARISON_FUNC;
  1151.  
  1152. typedef
  1153. enum D3D12_DEPTH_WRITE_MASK
  1154.     {
  1155.         D3D12_DEPTH_WRITE_MASK_ZERO = 0,
  1156.         D3D12_DEPTH_WRITE_MASK_ALL  = 1
  1157.     }   D3D12_DEPTH_WRITE_MASK;
  1158.  
  1159. typedef
  1160. enum D3D12_STENCIL_OP
  1161.     {
  1162.         D3D12_STENCIL_OP_KEEP   = 1,
  1163.         D3D12_STENCIL_OP_ZERO   = 2,
  1164.         D3D12_STENCIL_OP_REPLACE    = 3,
  1165.         D3D12_STENCIL_OP_INCR_SAT   = 4,
  1166.         D3D12_STENCIL_OP_DECR_SAT   = 5,
  1167.         D3D12_STENCIL_OP_INVERT = 6,
  1168.         D3D12_STENCIL_OP_INCR   = 7,
  1169.         D3D12_STENCIL_OP_DECR   = 8
  1170.     }   D3D12_STENCIL_OP;
  1171.  
  1172. typedef struct D3D12_DEPTH_STENCILOP_DESC
  1173.     {
  1174.     D3D12_STENCIL_OP StencilFailOp;
  1175.     D3D12_STENCIL_OP StencilDepthFailOp;
  1176.     D3D12_STENCIL_OP StencilPassOp;
  1177.     D3D12_COMPARISON_FUNC StencilFunc;
  1178.     }   D3D12_DEPTH_STENCILOP_DESC;
  1179.  
  1180. typedef struct D3D12_DEPTH_STENCIL_DESC
  1181.     {
  1182.     BOOL DepthEnable;
  1183.     D3D12_DEPTH_WRITE_MASK DepthWriteMask;
  1184.     D3D12_COMPARISON_FUNC DepthFunc;
  1185.     BOOL StencilEnable;
  1186.     UINT8 StencilReadMask;
  1187.     UINT8 StencilWriteMask;
  1188.     D3D12_DEPTH_STENCILOP_DESC FrontFace;
  1189.     D3D12_DEPTH_STENCILOP_DESC BackFace;
  1190.     }   D3D12_DEPTH_STENCIL_DESC;
  1191.  
  1192. #if !defined( D3D12_NO_HELPERS ) && defined( __cplusplus )
  1193. }
  1194. struct CD3D12_DEPTH_STENCIL_DESC : public D3D12_DEPTH_STENCIL_DESC
  1195. {
  1196.     CD3D12_DEPTH_STENCIL_DESC()
  1197.     {}
  1198.     explicit CD3D12_DEPTH_STENCIL_DESC( const D3D12_DEPTH_STENCIL_DESC& o ) :
  1199.         D3D12_DEPTH_STENCIL_DESC( o )
  1200.     {}
  1201.     explicit CD3D12_DEPTH_STENCIL_DESC( CD3D12_DEFAULT )
  1202.     {
  1203.         DepthEnable = TRUE;
  1204.         DepthWriteMask = D3D12_DEPTH_WRITE_MASK_ALL;
  1205.         DepthFunc = D3D12_COMPARISON_LESS;
  1206.         StencilEnable = FALSE;
  1207.         StencilReadMask = D3D12_DEFAULT_STENCIL_READ_MASK;
  1208.         StencilWriteMask = D3D12_DEFAULT_STENCIL_WRITE_MASK;
  1209.         const D3D12_DEPTH_STENCILOP_DESC defaultStencilOp =
  1210.         { D3D12_STENCIL_OP_KEEP, D3D12_STENCIL_OP_KEEP, D3D12_STENCIL_OP_KEEP, D3D12_COMPARISON_ALWAYS };
  1211.         FrontFace = defaultStencilOp;
  1212.         BackFace = defaultStencilOp;
  1213.     }
  1214.     explicit CD3D12_DEPTH_STENCIL_DESC(
  1215.         BOOL depthEnable,
  1216.         D3D12_DEPTH_WRITE_MASK depthWriteMask,
  1217.         D3D12_COMPARISON_FUNC depthFunc,
  1218.         BOOL stencilEnable,
  1219.         UINT8 stencilReadMask,
  1220.         UINT8 stencilWriteMask,
  1221.         D3D12_STENCIL_OP frontStencilFailOp,
  1222.         D3D12_STENCIL_OP frontStencilDepthFailOp,
  1223.         D3D12_STENCIL_OP frontStencilPassOp,
  1224.         D3D12_COMPARISON_FUNC frontStencilFunc,
  1225.         D3D12_STENCIL_OP backStencilFailOp,
  1226.         D3D12_STENCIL_OP backStencilDepthFailOp,
  1227.         D3D12_STENCIL_OP backStencilPassOp,
  1228.         D3D12_COMPARISON_FUNC backStencilFunc )
  1229.     {
  1230.         DepthEnable = depthEnable;
  1231.         DepthWriteMask = depthWriteMask;
  1232.         DepthFunc = depthFunc;
  1233.         StencilEnable = stencilEnable;
  1234.         StencilReadMask = stencilReadMask;
  1235.         StencilWriteMask = stencilWriteMask;
  1236.         FrontFace.StencilFailOp = frontStencilFailOp;
  1237.         FrontFace.StencilDepthFailOp = frontStencilDepthFailOp;
  1238.         FrontFace.StencilPassOp = frontStencilPassOp;
  1239.         FrontFace.StencilFunc = frontStencilFunc;
  1240.         BackFace.StencilFailOp = backStencilFailOp;
  1241.         BackFace.StencilDepthFailOp = backStencilDepthFailOp;
  1242.         BackFace.StencilPassOp = backStencilPassOp;
  1243.         BackFace.StencilFunc = backStencilFunc;
  1244.     }
  1245.     ~CD3D12_DEPTH_STENCIL_DESC() {}
  1246.     operator const D3D12_DEPTH_STENCIL_DESC&() const { return *this; }
  1247. };
  1248. extern "C"{
  1249. #endif
  1250. typedef
  1251. enum D3D12_BLEND
  1252.     {
  1253.         D3D12_BLEND_ZERO    = 1,
  1254.         D3D12_BLEND_ONE = 2,
  1255.         D3D12_BLEND_SRC_COLOR   = 3,
  1256.         D3D12_BLEND_INV_SRC_COLOR   = 4,
  1257.         D3D12_BLEND_SRC_ALPHA   = 5,
  1258.         D3D12_BLEND_INV_SRC_ALPHA   = 6,
  1259.         D3D12_BLEND_DEST_ALPHA  = 7,
  1260.         D3D12_BLEND_INV_DEST_ALPHA  = 8,
  1261.         D3D12_BLEND_DEST_COLOR  = 9,
  1262.         D3D12_BLEND_INV_DEST_COLOR  = 10,
  1263.         D3D12_BLEND_SRC_ALPHA_SAT   = 11,
  1264.         D3D12_BLEND_BLEND_FACTOR    = 14,
  1265.         D3D12_BLEND_INV_BLEND_FACTOR    = 15,
  1266.         D3D12_BLEND_SRC1_COLOR  = 16,
  1267.         D3D12_BLEND_INV_SRC1_COLOR  = 17,
  1268.         D3D12_BLEND_SRC1_ALPHA  = 18,
  1269.         D3D12_BLEND_INV_SRC1_ALPHA  = 19
  1270.     }   D3D12_BLEND;
  1271.  
  1272. typedef
  1273. enum D3D12_BLEND_OP
  1274.     {
  1275.         D3D12_BLEND_OP_ADD  = 1,
  1276.         D3D12_BLEND_OP_SUBTRACT = 2,
  1277.         D3D12_BLEND_OP_REV_SUBTRACT = 3,
  1278.         D3D12_BLEND_OP_MIN  = 4,
  1279.         D3D12_BLEND_OP_MAX  = 5
  1280.     }   D3D12_BLEND_OP;
  1281.  
  1282. typedef
  1283. enum D3D12_COLOR_WRITE_ENABLE
  1284.     {
  1285.         D3D12_COLOR_WRITE_ENABLE_RED    = 1,
  1286.         D3D12_COLOR_WRITE_ENABLE_GREEN  = 2,
  1287.         D3D12_COLOR_WRITE_ENABLE_BLUE   = 4,
  1288.         D3D12_COLOR_WRITE_ENABLE_ALPHA  = 8,
  1289.         D3D12_COLOR_WRITE_ENABLE_ALL    = ( ( ( D3D12_COLOR_WRITE_ENABLE_RED | D3D12_COLOR_WRITE_ENABLE_GREEN )  | D3D12_COLOR_WRITE_ENABLE_BLUE )  | D3D12_COLOR_WRITE_ENABLE_ALPHA )
  1290.     }   D3D12_COLOR_WRITE_ENABLE;
  1291.  
  1292. typedef
  1293. enum D3D12_LOGIC_OP
  1294.     {
  1295.         D3D12_LOGIC_OP_CLEAR    = 0,
  1296.         D3D12_LOGIC_OP_SET  = ( D3D12_LOGIC_OP_CLEAR + 1 ) ,
  1297.         D3D12_LOGIC_OP_COPY = ( D3D12_LOGIC_OP_SET + 1 ) ,
  1298.         D3D12_LOGIC_OP_COPY_INVERTED    = ( D3D12_LOGIC_OP_COPY + 1 ) ,
  1299.         D3D12_LOGIC_OP_NOOP = ( D3D12_LOGIC_OP_COPY_INVERTED + 1 ) ,
  1300.         D3D12_LOGIC_OP_INVERT   = ( D3D12_LOGIC_OP_NOOP + 1 ) ,
  1301.         D3D12_LOGIC_OP_AND  = ( D3D12_LOGIC_OP_INVERT + 1 ) ,
  1302.         D3D12_LOGIC_OP_NAND = ( D3D12_LOGIC_OP_AND + 1 ) ,
  1303.         D3D12_LOGIC_OP_OR   = ( D3D12_LOGIC_OP_NAND + 1 ) ,
  1304.         D3D12_LOGIC_OP_NOR  = ( D3D12_LOGIC_OP_OR + 1 ) ,
  1305.         D3D12_LOGIC_OP_XOR  = ( D3D12_LOGIC_OP_NOR + 1 ) ,
  1306.         D3D12_LOGIC_OP_EQUIV    = ( D3D12_LOGIC_OP_XOR + 1 ) ,
  1307.         D3D12_LOGIC_OP_AND_REVERSE  = ( D3D12_LOGIC_OP_EQUIV + 1 ) ,
  1308.         D3D12_LOGIC_OP_AND_INVERTED = ( D3D12_LOGIC_OP_AND_REVERSE + 1 ) ,
  1309.         D3D12_LOGIC_OP_OR_REVERSE   = ( D3D12_LOGIC_OP_AND_INVERTED + 1 ) ,
  1310.         D3D12_LOGIC_OP_OR_INVERTED  = ( D3D12_LOGIC_OP_OR_REVERSE + 1 )
  1311.     }   D3D12_LOGIC_OP;
  1312.  
  1313. typedef struct D3D12_RENDER_TARGET_BLEND_DESC
  1314.     {
  1315.     BOOL BlendEnable;
  1316.     BOOL LogicOpEnable;
  1317.     D3D12_BLEND SrcBlend;
  1318.     D3D12_BLEND DestBlend;
  1319.     D3D12_BLEND_OP BlendOp;
  1320.     D3D12_BLEND SrcBlendAlpha;
  1321.     D3D12_BLEND DestBlendAlpha;
  1322.     D3D12_BLEND_OP BlendOpAlpha;
  1323.     D3D12_LOGIC_OP LogicOp;
  1324.     UINT8 RenderTargetWriteMask;
  1325.     }   D3D12_RENDER_TARGET_BLEND_DESC;
  1326.  
  1327. typedef struct D3D12_BLEND_DESC
  1328.     {
  1329.     BOOL AlphaToCoverageEnable;
  1330.     BOOL IndependentBlendEnable;
  1331.     D3D12_RENDER_TARGET_BLEND_DESC RenderTarget[ 8 ];
  1332.     }   D3D12_BLEND_DESC;
  1333.  
  1334. /* Note, the array size for RenderTarget[] above is D3D12_SIMULTANEOUS_RENDERTARGET_COUNT.
  1335.    IDL processing/generation of this header replaces the define; this comment is merely explaining what happened. */
  1336. #if !defined( D3D12_NO_HELPERS ) && defined( __cplusplus )
  1337. }
  1338. struct CD3D12_BLEND_DESC : public D3D12_BLEND_DESC
  1339. {
  1340.     CD3D12_BLEND_DESC()
  1341.     {}
  1342.     explicit CD3D12_BLEND_DESC( const D3D12_BLEND_DESC& o ) :
  1343.         D3D12_BLEND_DESC( o )
  1344.     {}
  1345.     explicit CD3D12_BLEND_DESC( CD3D12_DEFAULT )
  1346.     {
  1347.         AlphaToCoverageEnable = FALSE;
  1348.         IndependentBlendEnable = FALSE;
  1349.         const D3D12_RENDER_TARGET_BLEND_DESC defaultRenderTargetBlendDesc =
  1350.         {
  1351.             FALSE,FALSE,
  1352.             D3D12_BLEND_ONE, D3D12_BLEND_ZERO, D3D12_BLEND_OP_ADD,
  1353.             D3D12_BLEND_ONE, D3D12_BLEND_ZERO, D3D12_BLEND_OP_ADD,
  1354.             D3D12_LOGIC_OP_NOOP,
  1355.             D3D12_COLOR_WRITE_ENABLE_ALL,
  1356.         };
  1357.         for (UINT i = 0; i < D3D12_SIMULTANEOUS_RENDER_TARGET_COUNT; ++i)
  1358.             RenderTarget[ i ] = defaultRenderTargetBlendDesc;
  1359.     }
  1360.     ~CD3D12_BLEND_DESC() {}
  1361.     operator const D3D12_BLEND_DESC&() const { return *this; }
  1362. };
  1363. extern "C"{
  1364. #endif
  1365. typedef
  1366. enum D3D12_CONSERVATIVE_RASTERIZATION_MODE
  1367.     {
  1368.         D3D12_CONSERVATIVE_RASTERIZATION_MODE_OFF   = 0,
  1369.         D3D12_CONSERVATIVE_RASTERIZATION_MODE_ON    = 1
  1370.     }   D3D12_CONSERVATIVE_RASTERIZATION_MODE;
  1371.  
  1372. typedef struct D3D12_RASTERIZER_DESC
  1373.     {
  1374.     D3D12_FILL_MODE FillMode;
  1375.     D3D12_CULL_MODE CullMode;
  1376.     BOOL FrontCounterClockwise;
  1377.     INT DepthBias;
  1378.     FLOAT DepthBiasClamp;
  1379.     FLOAT SlopeScaledDepthBias;
  1380.     BOOL DepthClipEnable;
  1381.     BOOL MultisampleEnable;
  1382.     BOOL AntialiasedLineEnable;
  1383.     UINT ForcedSampleCount;
  1384.     D3D12_CONSERVATIVE_RASTERIZATION_MODE ConservativeRaster;
  1385.     }   D3D12_RASTERIZER_DESC;
  1386.  
  1387. #if !defined( D3D12_NO_HELPERS ) && defined( __cplusplus )
  1388. }
  1389. struct CD3D12_RASTERIZER_DESC : public D3D12_RASTERIZER_DESC
  1390. {
  1391.     CD3D12_RASTERIZER_DESC()
  1392.     {}
  1393.     explicit CD3D12_RASTERIZER_DESC( const D3D12_RASTERIZER_DESC& o ) :
  1394.         D3D12_RASTERIZER_DESC( o )
  1395.     {}
  1396.     explicit CD3D12_RASTERIZER_DESC( CD3D12_DEFAULT )
  1397.     {
  1398.         FillMode = D3D12_FILL_SOLID;
  1399.         CullMode = D3D12_CULL_BACK;
  1400.         FrontCounterClockwise = FALSE;
  1401.         DepthBias = D3D12_DEFAULT_DEPTH_BIAS;
  1402.         DepthBiasClamp = D3D12_DEFAULT_DEPTH_BIAS_CLAMP;
  1403.         SlopeScaledDepthBias = D3D12_DEFAULT_SLOPE_SCALED_DEPTH_BIAS;
  1404.         DepthClipEnable = TRUE;
  1405.         MultisampleEnable = FALSE;
  1406.         AntialiasedLineEnable = FALSE;
  1407.         ForcedSampleCount = 0;
  1408.         ConservativeRaster = D3D12_CONSERVATIVE_RASTERIZATION_MODE_OFF;
  1409.     }
  1410.     explicit CD3D12_RASTERIZER_DESC(
  1411.         D3D12_FILL_MODE fillMode,
  1412.         D3D12_CULL_MODE cullMode,
  1413.         BOOL frontCounterClockwise,
  1414.         INT depthBias,
  1415.         FLOAT depthBiasClamp,
  1416.         FLOAT slopeScaledDepthBias,
  1417.         BOOL depthClipEnable,
  1418.         BOOL multisampleEnable,
  1419.         BOOL antialiasedLineEnable,
  1420.         UINT forcedSampleCount,
  1421.         D3D12_CONSERVATIVE_RASTERIZATION_MODE conservativeRaster)
  1422.     {
  1423.         FillMode = fillMode;
  1424.         CullMode = cullMode;
  1425.         FrontCounterClockwise = frontCounterClockwise;
  1426.         DepthBias = depthBias;
  1427.         DepthBiasClamp = depthBiasClamp;
  1428.         SlopeScaledDepthBias = slopeScaledDepthBias;
  1429.         DepthClipEnable = depthClipEnable;
  1430.         MultisampleEnable = multisampleEnable;
  1431.         AntialiasedLineEnable = antialiasedLineEnable;
  1432.         ForcedSampleCount = forcedSampleCount;
  1433.         ConservativeRaster = conservativeRaster;
  1434.     }
  1435.     ~CD3D12_RASTERIZER_DESC() {}
  1436.     operator const D3D12_RASTERIZER_DESC&() const { return *this; }
  1437. };
  1438. extern "C"{
  1439. #endif
  1440.  
  1441.  
  1442. extern RPC_IF_HANDLE __MIDL_itf_d3d12_0000_0000_v0_0_c_ifspec;
  1443. extern RPC_IF_HANDLE __MIDL_itf_d3d12_0000_0000_v0_0_s_ifspec;
  1444.  
  1445. #ifndef __ID3D12Object_INTERFACE_DEFINED__
  1446. #define __ID3D12Object_INTERFACE_DEFINED__
  1447.  
  1448. /* interface ID3D12Object */
  1449. /* [unique][local][object][uuid] */
  1450.  
  1451.  
  1452. EXTERN_C const IID IID_ID3D12Object;
  1453.  
  1454. #if defined(__cplusplus) && !defined(CINTERFACE)
  1455.    
  1456.     MIDL_INTERFACE("c4fec28f-7966-4e95-9f94-f431cb56c3b8")
  1457.     ID3D12Object : public IUnknown
  1458.     {
  1459.     public:
  1460.         virtual HRESULT STDMETHODCALLTYPE GetPrivateData(
  1461.             _In_  REFGUID guid,
  1462.             _Inout_  UINT *pDataSize,
  1463.             _Out_writes_bytes_opt_( *pDataSize )  void *pData) = 0;
  1464.        
  1465.         virtual HRESULT STDMETHODCALLTYPE SetPrivateData(
  1466.             _In_  REFGUID guid,
  1467.             _In_  UINT DataSize,
  1468.             _In_reads_bytes_opt_( DataSize )  const void *pData) = 0;
  1469.        
  1470.         virtual HRESULT STDMETHODCALLTYPE SetPrivateDataInterface(
  1471.             _In_  REFGUID guid,
  1472.             _In_opt_  const IUnknown *pData) = 0;
  1473.        
  1474.         virtual HRESULT STDMETHODCALLTYPE SetName(
  1475.             _In_z_  LPCWSTR Name) = 0;
  1476.        
  1477.     };
  1478.    
  1479.    
  1480. #else   /* C style interface */
  1481.  
  1482.     typedef struct ID3D12ObjectVtbl
  1483.     {
  1484.         BEGIN_INTERFACE
  1485.        
  1486.         HRESULT ( STDMETHODCALLTYPE *QueryInterface )(
  1487.             ID3D12Object * This,
  1488.             REFIID riid,
  1489.             _COM_Outptr_  void **ppvObject);
  1490.        
  1491.         ULONG ( STDMETHODCALLTYPE *AddRef )(
  1492.             ID3D12Object * This);
  1493.        
  1494.         ULONG ( STDMETHODCALLTYPE *Release )(
  1495.             ID3D12Object * This);
  1496.        
  1497.         HRESULT ( STDMETHODCALLTYPE *GetPrivateData )(
  1498.             ID3D12Object * This,
  1499.             _In_  REFGUID guid,
  1500.             _Inout_  UINT *pDataSize,
  1501.             _Out_writes_bytes_opt_( *pDataSize )  void *pData);
  1502.        
  1503.         HRESULT ( STDMETHODCALLTYPE *SetPrivateData )(
  1504.             ID3D12Object * This,
  1505.             _In_  REFGUID guid,
  1506.             _In_  UINT DataSize,
  1507.             _In_reads_bytes_opt_( DataSize )  const void *pData);
  1508.        
  1509.         HRESULT ( STDMETHODCALLTYPE *SetPrivateDataInterface )(
  1510.             ID3D12Object * This,
  1511.             _In_  REFGUID guid,
  1512.             _In_opt_  const IUnknown *pData);
  1513.        
  1514.         HRESULT ( STDMETHODCALLTYPE *SetName )(
  1515.             ID3D12Object * This,
  1516.             _In_z_  LPCWSTR Name);
  1517.        
  1518.         END_INTERFACE
  1519.     } ID3D12ObjectVtbl;
  1520.  
  1521.     interface ID3D12Object
  1522.     {
  1523.         CONST_VTBL struct ID3D12ObjectVtbl *lpVtbl;
  1524.     };
  1525.  
  1526.    
  1527.  
  1528. #ifdef COBJMACROS
  1529.  
  1530.  
  1531. #define ID3D12Object_QueryInterface(This,riid,ppvObject)    \
  1532.     ( (This)->lpVtbl -> QueryInterface(This,riid,ppvObject) )
  1533.  
  1534. #define ID3D12Object_AddRef(This)   \
  1535.     ( (This)->lpVtbl -> AddRef(This) )
  1536.  
  1537. #define ID3D12Object_Release(This)  \
  1538.     ( (This)->lpVtbl -> Release(This) )
  1539.  
  1540.  
  1541. #define ID3D12Object_GetPrivateData(This,guid,pDataSize,pData)  \
  1542.     ( (This)->lpVtbl -> GetPrivateData(This,guid,pDataSize,pData) )
  1543.  
  1544. #define ID3D12Object_SetPrivateData(This,guid,DataSize,pData)   \
  1545.     ( (This)->lpVtbl -> SetPrivateData(This,guid,DataSize,pData) )
  1546.  
  1547. #define ID3D12Object_SetPrivateDataInterface(This,guid,pData)   \
  1548.     ( (This)->lpVtbl -> SetPrivateDataInterface(This,guid,pData) )
  1549.  
  1550. #define ID3D12Object_SetName(This,Name) \
  1551.     ( (This)->lpVtbl -> SetName(This,Name) )
  1552.  
  1553. #endif /* COBJMACROS */
  1554.  
  1555.  
  1556. #endif  /* C style interface */
  1557.  
  1558.  
  1559.  
  1560.  
  1561. #endif  /* __ID3D12Object_INTERFACE_DEFINED__ */
  1562.  
  1563.  
  1564. #ifndef __ID3D12DeviceChild_INTERFACE_DEFINED__
  1565. #define __ID3D12DeviceChild_INTERFACE_DEFINED__
  1566.  
  1567. /* interface ID3D12DeviceChild */
  1568. /* [unique][local][object][uuid] */
  1569.  
  1570.  
  1571. EXTERN_C const IID IID_ID3D12DeviceChild;
  1572.  
  1573. #if defined(__cplusplus) && !defined(CINTERFACE)
  1574.    
  1575.     MIDL_INTERFACE("905db94b-a00c-4140-9df5-2b64ca9ea357")
  1576.     ID3D12DeviceChild : public ID3D12Object
  1577.     {
  1578.     public:
  1579.         virtual HRESULT STDMETHODCALLTYPE GetDevice(
  1580.             REFIID riid,
  1581.             _COM_Outptr_opt_  void **ppvDevice) = 0;
  1582.        
  1583.     };
  1584.    
  1585.    
  1586. #else   /* C style interface */
  1587.  
  1588.     typedef struct ID3D12DeviceChildVtbl
  1589.     {
  1590.         BEGIN_INTERFACE
  1591.        
  1592.         HRESULT ( STDMETHODCALLTYPE *QueryInterface )(
  1593.             ID3D12DeviceChild * This,
  1594.             REFIID riid,
  1595.             _COM_Outptr_  void **ppvObject);
  1596.        
  1597.         ULONG ( STDMETHODCALLTYPE *AddRef )(
  1598.             ID3D12DeviceChild * This);
  1599.        
  1600.         ULONG ( STDMETHODCALLTYPE *Release )(
  1601.             ID3D12DeviceChild * This);
  1602.        
  1603.         HRESULT ( STDMETHODCALLTYPE *GetPrivateData )(
  1604.             ID3D12DeviceChild * This,
  1605.             _In_  REFGUID guid,
  1606.             _Inout_  UINT *pDataSize,
  1607.             _Out_writes_bytes_opt_( *pDataSize )  void *pData);
  1608.        
  1609.         HRESULT ( STDMETHODCALLTYPE *SetPrivateData )(
  1610.             ID3D12DeviceChild * This,
  1611.             _In_  REFGUID guid,
  1612.             _In_  UINT DataSize,
  1613.             _In_reads_bytes_opt_( DataSize )  const void *pData);
  1614.        
  1615.         HRESULT ( STDMETHODCALLTYPE *SetPrivateDataInterface )(
  1616.             ID3D12DeviceChild * This,
  1617.             _In_  REFGUID guid,
  1618.             _In_opt_  const IUnknown *pData);
  1619.        
  1620.         HRESULT ( STDMETHODCALLTYPE *SetName )(
  1621.             ID3D12DeviceChild * This,
  1622.             _In_z_  LPCWSTR Name);
  1623.        
  1624.         HRESULT ( STDMETHODCALLTYPE *GetDevice )(
  1625.             ID3D12DeviceChild * This,
  1626.             REFIID riid,
  1627.             _COM_Outptr_opt_  void **ppvDevice);
  1628.        
  1629.         END_INTERFACE
  1630.     } ID3D12DeviceChildVtbl;
  1631.  
  1632.     interface ID3D12DeviceChild
  1633.     {
  1634.         CONST_VTBL struct ID3D12DeviceChildVtbl *lpVtbl;
  1635.     };
  1636.  
  1637.    
  1638.  
  1639. #ifdef COBJMACROS
  1640.  
  1641.  
  1642. #define ID3D12DeviceChild_QueryInterface(This,riid,ppvObject)   \
  1643.     ( (This)->lpVtbl -> QueryInterface(This,riid,ppvObject) )
  1644.  
  1645. #define ID3D12DeviceChild_AddRef(This)  \
  1646.     ( (This)->lpVtbl -> AddRef(This) )
  1647.  
  1648. #define ID3D12DeviceChild_Release(This) \
  1649.     ( (This)->lpVtbl -> Release(This) )
  1650.  
  1651.  
  1652. #define ID3D12DeviceChild_GetPrivateData(This,guid,pDataSize,pData) \
  1653.     ( (This)->lpVtbl -> GetPrivateData(This,guid,pDataSize,pData) )
  1654.  
  1655. #define ID3D12DeviceChild_SetPrivateData(This,guid,DataSize,pData)  \
  1656.     ( (This)->lpVtbl -> SetPrivateData(This,guid,DataSize,pData) )
  1657.  
  1658. #define ID3D12DeviceChild_SetPrivateDataInterface(This,guid,pData)  \
  1659.     ( (This)->lpVtbl -> SetPrivateDataInterface(This,guid,pData) )
  1660.  
  1661. #define ID3D12DeviceChild_SetName(This,Name)    \
  1662.     ( (This)->lpVtbl -> SetName(This,Name) )
  1663.  
  1664.  
  1665. #define ID3D12DeviceChild_GetDevice(This,riid,ppvDevice)    \
  1666.     ( (This)->lpVtbl -> GetDevice(This,riid,ppvDevice) )
  1667.  
  1668. #endif /* COBJMACROS */
  1669.  
  1670.  
  1671. #endif  /* C style interface */
  1672.  
  1673.  
  1674.  
  1675.  
  1676. #endif  /* __ID3D12DeviceChild_INTERFACE_DEFINED__ */
  1677.  
  1678.  
  1679. #ifndef __ID3D12RootSignature_INTERFACE_DEFINED__
  1680. #define __ID3D12RootSignature_INTERFACE_DEFINED__
  1681.  
  1682. /* interface ID3D12RootSignature */
  1683. /* [unique][local][object][uuid] */
  1684.  
  1685.  
  1686. EXTERN_C const IID IID_ID3D12RootSignature;
  1687.  
  1688. #if defined(__cplusplus) && !defined(CINTERFACE)
  1689.    
  1690.     MIDL_INTERFACE("c54a6b66-72df-4ee8-8be5-a946a1429214")
  1691.     ID3D12RootSignature : public ID3D12DeviceChild
  1692.     {
  1693.     public:
  1694.     };
  1695.    
  1696.    
  1697. #else   /* C style interface */
  1698.  
  1699.     typedef struct ID3D12RootSignatureVtbl
  1700.     {
  1701.         BEGIN_INTERFACE
  1702.        
  1703.         HRESULT ( STDMETHODCALLTYPE *QueryInterface )(
  1704.             ID3D12RootSignature * This,
  1705.             REFIID riid,
  1706.             _COM_Outptr_  void **ppvObject);
  1707.        
  1708.         ULONG ( STDMETHODCALLTYPE *AddRef )(
  1709.             ID3D12RootSignature * This);
  1710.        
  1711.         ULONG ( STDMETHODCALLTYPE *Release )(
  1712.             ID3D12RootSignature * This);
  1713.        
  1714.         HRESULT ( STDMETHODCALLTYPE *GetPrivateData )(
  1715.             ID3D12RootSignature * This,
  1716.             _In_  REFGUID guid,
  1717.             _Inout_  UINT *pDataSize,
  1718.             _Out_writes_bytes_opt_( *pDataSize )  void *pData);
  1719.        
  1720.         HRESULT ( STDMETHODCALLTYPE *SetPrivateData )(
  1721.             ID3D12RootSignature * This,
  1722.             _In_  REFGUID guid,
  1723.             _In_  UINT DataSize,
  1724.             _In_reads_bytes_opt_( DataSize )  const void *pData);
  1725.        
  1726.         HRESULT ( STDMETHODCALLTYPE *SetPrivateDataInterface )(
  1727.             ID3D12RootSignature * This,
  1728.             _In_  REFGUID guid,
  1729.             _In_opt_  const IUnknown *pData);
  1730.        
  1731.         HRESULT ( STDMETHODCALLTYPE *SetName )(
  1732.             ID3D12RootSignature * This,
  1733.             _In_z_  LPCWSTR Name);
  1734.        
  1735.         HRESULT ( STDMETHODCALLTYPE *GetDevice )(
  1736.             ID3D12RootSignature * This,
  1737.             REFIID riid,
  1738.             _COM_Outptr_opt_  void **ppvDevice);
  1739.        
  1740.         END_INTERFACE
  1741.     } ID3D12RootSignatureVtbl;
  1742.  
  1743.     interface ID3D12RootSignature
  1744.     {
  1745.         CONST_VTBL struct ID3D12RootSignatureVtbl *lpVtbl;
  1746.     };
  1747.  
  1748.    
  1749.  
  1750. #ifdef COBJMACROS
  1751.  
  1752.  
  1753. #define ID3D12RootSignature_QueryInterface(This,riid,ppvObject) \
  1754.     ( (This)->lpVtbl -> QueryInterface(This,riid,ppvObject) )
  1755.  
  1756. #define ID3D12RootSignature_AddRef(This)    \
  1757.     ( (This)->lpVtbl -> AddRef(This) )
  1758.  
  1759. #define ID3D12RootSignature_Release(This)   \
  1760.     ( (This)->lpVtbl -> Release(This) )
  1761.  
  1762.  
  1763. #define ID3D12RootSignature_GetPrivateData(This,guid,pDataSize,pData)   \
  1764.     ( (This)->lpVtbl -> GetPrivateData(This,guid,pDataSize,pData) )
  1765.  
  1766. #define ID3D12RootSignature_SetPrivateData(This,guid,DataSize,pData)    \
  1767.     ( (This)->lpVtbl -> SetPrivateData(This,guid,DataSize,pData) )
  1768.  
  1769. #define ID3D12RootSignature_SetPrivateDataInterface(This,guid,pData)    \
  1770.     ( (This)->lpVtbl -> SetPrivateDataInterface(This,guid,pData) )
  1771.  
  1772. #define ID3D12RootSignature_SetName(This,Name)  \
  1773.     ( (This)->lpVtbl -> SetName(This,Name) )
  1774.  
  1775.  
  1776. #define ID3D12RootSignature_GetDevice(This,riid,ppvDevice)  \
  1777.     ( (This)->lpVtbl -> GetDevice(This,riid,ppvDevice) )
  1778.  
  1779.  
  1780. #endif /* COBJMACROS */
  1781.  
  1782.  
  1783. #endif  /* C style interface */
  1784.  
  1785.  
  1786.  
  1787.  
  1788. #endif  /* __ID3D12RootSignature_INTERFACE_DEFINED__ */
  1789.  
  1790.  
  1791. /* interface __MIDL_itf_d3d12_0000_0001 */
  1792. /* [local] */
  1793.  
  1794. typedef struct D3D12_SHADER_BYTECODE
  1795.     {
  1796.     _Field_size_bytes_full_(BytecodeLength)  const void *pShaderBytecode;
  1797.     SIZE_T BytecodeLength;
  1798.     }   D3D12_SHADER_BYTECODE;
  1799.  
  1800. typedef struct D3D12_STREAM_OUTPUT_DESC
  1801.     {
  1802.     _Field_size_full_(NumEntries)  const D3D12_SO_DECLARATION_ENTRY *pSODeclaration;
  1803.     UINT NumEntries;
  1804.     _Field_size_full_(NumStrides)  const UINT *pBufferStrides;
  1805.     UINT NumStrides;
  1806.     UINT RasterizedStream;
  1807.     }   D3D12_STREAM_OUTPUT_DESC;
  1808.  
  1809. typedef struct D3D12_INPUT_LAYOUT_DESC
  1810.     {
  1811.     _Field_size_full_(NumElements)  const D3D12_INPUT_ELEMENT_DESC *pInputElementDescs;
  1812.     UINT NumElements;
  1813.     }   D3D12_INPUT_LAYOUT_DESC;
  1814.  
  1815. typedef
  1816. enum D3D12_INDEX_BUFFER_PROPERTIES
  1817.     {
  1818.         D3D12_INDEX_BUFFER_STRIP_CUT_VALUE_DISABLED = 0,
  1819.         D3D12_INDEX_BUFFER_STRIP_CUT_VALUE_0xFFFF   = 1,
  1820.         D3D12_INDEX_BUFFER_STRIP_CUT_VALUE_0xFFFFFFFF   = 2
  1821.     }   D3D12_INDEX_BUFFER_PROPERTIES;
  1822.  
  1823. typedef struct D3D12_CACHED_PIPELINE_STATE
  1824.     {
  1825.     const void *pCachedBlob;
  1826.     SIZE_T CachedBlobSizeInBytes;
  1827.     }   D3D12_CACHED_PIPELINE_STATE;
  1828.  
  1829. typedef struct D3D12_GRAPHICS_PIPELINE_STATE_DESC
  1830.     {
  1831.     ID3D12RootSignature *pRootSignature;
  1832.     D3D12_SHADER_BYTECODE VS;
  1833.     D3D12_SHADER_BYTECODE PS;
  1834.     D3D12_SHADER_BYTECODE DS;
  1835.     D3D12_SHADER_BYTECODE HS;
  1836.     D3D12_SHADER_BYTECODE GS;
  1837.     D3D12_STREAM_OUTPUT_DESC StreamOutput;
  1838.     D3D12_BLEND_DESC BlendState;
  1839.     UINT SampleMask;
  1840.     D3D12_RASTERIZER_DESC RasterizerState;
  1841.     D3D12_DEPTH_STENCIL_DESC DepthStencilState;
  1842.     D3D12_INPUT_LAYOUT_DESC InputLayout;
  1843.     D3D12_INDEX_BUFFER_PROPERTIES IndexBufferProperties;
  1844.     D3D12_PRIMITIVE_TOPOLOGY_TYPE PrimitiveTopologyType;
  1845.     UINT NumRenderTargets;
  1846.     DXGI_FORMAT RTVFormats[ 8 ];
  1847.     DXGI_FORMAT DSVFormat;
  1848.     DXGI_SAMPLE_DESC SampleDesc;
  1849.     UINT NodeMask;
  1850.     D3D12_CACHED_PIPELINE_STATE CachedPSO;
  1851.     }   D3D12_GRAPHICS_PIPELINE_STATE_DESC;
  1852.  
  1853. typedef struct D3D12_COMPUTE_PIPELINE_STATE_DESC
  1854.     {
  1855.     ID3D12RootSignature *pRootSignature;
  1856.     D3D12_SHADER_BYTECODE CS;
  1857.     UINT NodeMask;
  1858.     D3D12_CACHED_PIPELINE_STATE CachedPSO;
  1859.     }   D3D12_COMPUTE_PIPELINE_STATE_DESC;
  1860.  
  1861. typedef
  1862. enum D3D12_FEATURE
  1863.     {
  1864.         D3D12_FEATURE_D3D12_OPTIONS = 0,
  1865.         D3D12_FEATURE_ARCHITECTURE  = ( D3D12_FEATURE_D3D12_OPTIONS + 1 ) ,
  1866.         D3D12_FEATURE_FEATURE_LEVELS    = ( D3D12_FEATURE_ARCHITECTURE + 1 ) ,
  1867.         D3D12_FEATURE_FORMAT_SUPPORT    = ( D3D12_FEATURE_FEATURE_LEVELS + 1 ) ,
  1868.         D3D12_FEATURE_MULTISAMPLE_QUALITY_LEVELS    = ( D3D12_FEATURE_FORMAT_SUPPORT + 1 )
  1869.     }   D3D12_FEATURE;
  1870.  
  1871. typedef
  1872. enum D3D12_SHADER_MIN_PRECISION_SUPPORT
  1873.     {
  1874.         D3D12_SHADER_MIN_PRECISION_NONE = 0,
  1875.         D3D12_SHADER_MIN_PRECISION_10_BIT   = 0x1,
  1876.         D3D12_SHADER_MIN_PRECISION_16_BIT   = 0x2
  1877.     }   D3D12_SHADER_MIN_PRECISION_SUPPORT;
  1878.  
  1879. DEFINE_ENUM_FLAG_OPERATORS( D3D12_SHADER_MIN_PRECISION_SUPPORT );
  1880. typedef
  1881. enum D3D12_TILED_RESOURCES_TIER
  1882.     {
  1883.         D3D12_TILED_RESOURCES_NOT_SUPPORTED = 0,
  1884.         D3D12_TILED_RESOURCES_TIER_1    = 1,
  1885.         D3D12_TILED_RESOURCES_TIER_2    = 2,
  1886.         D3D12_TILED_RESOURCES_TIER_3    = 3
  1887.     }   D3D12_TILED_RESOURCES_TIER;
  1888.  
  1889. typedef
  1890. enum D3D12_RESOURCE_BINDING_TIER
  1891.     {
  1892.         D3D12_RESOURCE_BINDING_TIER_1   = 1,
  1893.         D3D12_RESOURCE_BINDING_TIER_2   = 2,
  1894.         D3D12_RESOURCE_BINDING_TIER_3   = 3
  1895.     }   D3D12_RESOURCE_BINDING_TIER;
  1896.  
  1897. typedef
  1898. enum D3D12_CONSERVATIVE_RASTERIZATION_TIER
  1899.     {
  1900.         D3D12_CONSERVATIVE_RASTERIZATION_NOT_SUPPORTED  = 0,
  1901.         D3D12_CONSERVATIVE_RASTERIZATION_TIER_1 = 1,
  1902.         D3D12_CONSERVATIVE_RASTERIZATION_TIER_2 = 2,
  1903.         D3D12_CONSERVATIVE_RASTERIZATION_TIER_3 = 3
  1904.     }   D3D12_CONSERVATIVE_RASTERIZATION_TIER;
  1905.  
  1906. typedef
  1907. enum D3D12_ASTC_PROFILE
  1908.     {
  1909.         D3D12_ASTC_PROFILE_NOT_SUPPORTED    = 0,
  1910.         D3D12_ASTC_PROFILE_LDR  = 1,
  1911.         D3D12_ASTC_PROFILE_HDR  = 2,
  1912.         D3D12_ASTC_PROFILE_FULL = 3
  1913.     }   D3D12_ASTC_PROFILE;
  1914.  
  1915. typedef
  1916. enum D3D12_FORMAT_SUPPORT1
  1917.     {
  1918.         D3D12_FORMAT_SUPPORT1_NONE  = 0,
  1919.         D3D12_FORMAT_SUPPORT1_BUFFER    = 0x1,
  1920.         D3D12_FORMAT_SUPPORT1_IA_VERTEX_BUFFER  = 0x2,
  1921.         D3D12_FORMAT_SUPPORT1_IA_INDEX_BUFFER   = 0x4,
  1922.         D3D12_FORMAT_SUPPORT1_SO_BUFFER = 0x8,
  1923.         D3D12_FORMAT_SUPPORT1_TEXTURE1D = 0x10,
  1924.         D3D12_FORMAT_SUPPORT1_TEXTURE2D = 0x20,
  1925.         D3D12_FORMAT_SUPPORT1_TEXTURE3D = 0x40,
  1926.         D3D12_FORMAT_SUPPORT1_TEXTURECUBE   = 0x80,
  1927.         D3D12_FORMAT_SUPPORT1_SHADER_LOAD   = 0x100,
  1928.         D3D12_FORMAT_SUPPORT1_SHADER_SAMPLE = 0x200,
  1929.         D3D12_FORMAT_SUPPORT1_SHADER_SAMPLE_COMPARISON  = 0x400,
  1930.         D3D12_FORMAT_SUPPORT1_SHADER_SAMPLE_MONO_TEXT   = 0x800,
  1931.         D3D12_FORMAT_SUPPORT1_MIP   = 0x1000,
  1932.         D3D12_FORMAT_SUPPORT1_RENDER_TARGET = 0x4000,
  1933.         D3D12_FORMAT_SUPPORT1_BLENDABLE = 0x8000,
  1934.         D3D12_FORMAT_SUPPORT1_DEPTH_STENCIL = 0x10000,
  1935.         D3D12_FORMAT_SUPPORT1_MULTISAMPLE_RESOLVE   = 0x40000,
  1936.         D3D12_FORMAT_SUPPORT1_DISPLAY   = 0x80000,
  1937.         D3D12_FORMAT_SUPPORT1_CAST_WITHIN_BIT_LAYOUT    = 0x100000,
  1938.         D3D12_FORMAT_SUPPORT1_MULTISAMPLE_RENDERTARGET  = 0x200000,
  1939.         D3D12_FORMAT_SUPPORT1_MULTISAMPLE_LOAD  = 0x400000,
  1940.         D3D12_FORMAT_SUPPORT1_SHADER_GATHER = 0x800000,
  1941.         D3D12_FORMAT_SUPPORT1_BACK_BUFFER_CAST  = 0x1000000,
  1942.         D3D12_FORMAT_SUPPORT1_TYPED_UNORDERED_ACCESS_VIEW   = 0x2000000,
  1943.         D3D12_FORMAT_SUPPORT1_SHADER_GATHER_COMPARISON  = 0x4000000,
  1944.         D3D12_FORMAT_SUPPORT1_DECODER_OUTPUT    = 0x8000000,
  1945.         D3D12_FORMAT_SUPPORT1_VIDEO_PROCESSOR_OUTPUT    = 0x10000000,
  1946.         D3D12_FORMAT_SUPPORT1_VIDEO_PROCESSOR_INPUT = 0x20000000,
  1947.         D3D12_FORMAT_SUPPORT1_VIDEO_ENCODER = 0x40000000
  1948.     }   D3D12_FORMAT_SUPPORT1;
  1949.  
  1950. DEFINE_ENUM_FLAG_OPERATORS( D3D12_FORMAT_SUPPORT1 );
  1951. typedef
  1952. enum D3D12_FORMAT_SUPPORT2
  1953.     {
  1954.         D3D12_FORMAT_SUPPORT2_NONE  = 0,
  1955.         D3D12_FORMAT_SUPPORT2_UAV_ATOMIC_ADD    = 0x1,
  1956.         D3D12_FORMAT_SUPPORT2_UAV_ATOMIC_BITWISE_OPS    = 0x2,
  1957.         D3D12_FORMAT_SUPPORT2_UAV_ATOMIC_COMPARE_STORE_OR_COMPARE_EXCHANGE  = 0x4,
  1958.         D3D12_FORMAT_SUPPORT2_UAV_ATOMIC_EXCHANGE   = 0x8,
  1959.         D3D12_FORMAT_SUPPORT2_UAV_ATOMIC_SIGNED_MIN_OR_MAX  = 0x10,
  1960.         D3D12_FORMAT_SUPPORT2_UAV_ATOMIC_UNSIGNED_MIN_OR_MAX    = 0x20,
  1961.         D3D12_FORMAT_SUPPORT2_UAV_TYPED_LOAD    = 0x40,
  1962.         D3D12_FORMAT_SUPPORT2_UAV_TYPED_STORE   = 0x80,
  1963.         D3D12_FORMAT_SUPPORT2_OUTPUT_MERGER_LOGIC_OP    = 0x100,
  1964.         D3D12_FORMAT_SUPPORT2_TILED = 0x200,
  1965.         D3D12_FORMAT_SUPPORT2_SHAREABLE = 0x400,
  1966.         D3D12_FORMAT_SUPPORT2_MULTIPLANE_OVERLAY    = 0x4000
  1967.     }   D3D12_FORMAT_SUPPORT2;
  1968.  
  1969. DEFINE_ENUM_FLAG_OPERATORS( D3D12_FORMAT_SUPPORT2 );
  1970. typedef
  1971. enum D3D12_MULTISAMPLE_QUALITY_LEVELS_FLAG
  1972.     {
  1973.         D3D12_MULTISAMPLE_QUALITY_LEVELS_NONE   = 0,
  1974.         D3D12_MULTISAMPLE_QUALITY_LEVELS_TILED_RESOURCE = 0x1
  1975.     }   D3D12_MULTISAMPLE_QUALITY_LEVELS_FLAG;
  1976.  
  1977. DEFINE_ENUM_FLAG_OPERATORS( D3D12_MULTISAMPLE_QUALITY_LEVELS_FLAG );
  1978. typedef
  1979. enum D3D12_CROSS_NODE_SHARING_TIER
  1980.     {
  1981.         D3D12_CROSS_NODE_SHARING_NOT_SUPPORTED  = 0,
  1982.         D3D12_CROSS_NODE_SHARING_TIER_1_EMULATED    = 1,
  1983.         D3D12_CROSS_NODE_SHARING_TIER_1 = 2,
  1984.         D3D12_CROSS_NODE_SHARING_TIER_2 = 3
  1985.     }   D3D12_CROSS_NODE_SHARING_TIER;
  1986.  
  1987. typedef struct D3D12_FEATURE_DATA_D3D12_OPTIONS
  1988.     {
  1989.     _Out_  BOOL DoublePrecisionFloatShaderOps;
  1990.     _Out_  BOOL OutputMergerLogicOp;
  1991.     _Out_  D3D12_SHADER_MIN_PRECISION_SUPPORT MinPrecisionSupport;
  1992.     _Out_  D3D12_TILED_RESOURCES_TIER TiledResourcesTier;
  1993.     _Out_  D3D12_RESOURCE_BINDING_TIER ResourceBindingTier;
  1994.     _Out_  BOOL PSSpecifiedStencilRefSupported;
  1995.     _Out_  BOOL TypedUAVLoadAdditionalFormats;
  1996.     _Out_  BOOL ROVsSupported;
  1997.     _Out_  D3D12_CONSERVATIVE_RASTERIZATION_TIER ConservativeRasterizationTier;
  1998.     _Out_  UINT MaxGPUVirtualAddressBitsPerResource;
  1999.     _Out_  BOOL StandardSwizzle64KBSupported;
  2000.     _Out_  D3D12_ASTC_PROFILE ASTCProfile;
  2001.     _Out_  D3D12_CROSS_NODE_SHARING_TIER CrossNodeSharingTier;
  2002.     _Out_  BOOL CrossAdapterRowMajorTextureSupported;
  2003.     }   D3D12_FEATURE_DATA_D3D12_OPTIONS;
  2004.  
  2005. typedef struct D3D12_FEATURE_DATA_ARCHITECTURE
  2006.     {
  2007.     _In_  UINT NodeIndex;
  2008.     _Out_  BOOL TileBasedRenderer;
  2009.     _Out_  BOOL UMA;
  2010.     _Out_  BOOL CacheCoherentUMA;
  2011.     }   D3D12_FEATURE_DATA_ARCHITECTURE;
  2012.  
  2013. typedef struct D3D12_FEATURE_DATA_FEATURE_LEVELS
  2014.     {
  2015.     _In_  UINT NumFeatureLevels;
  2016.     _In_reads_(NumFeatureLevels)  const D3D_FEATURE_LEVEL *pFeatureLevelsRequested;
  2017.     _Out_  D3D_FEATURE_LEVEL MaxSupportedFeatureLevel;
  2018.     }   D3D12_FEATURE_DATA_FEATURE_LEVELS;
  2019.  
  2020. typedef struct D3D12_FEATURE_DATA_FORMAT_SUPPORT
  2021.     {
  2022.     _In_  DXGI_FORMAT Format;
  2023.     _Out_  D3D12_FORMAT_SUPPORT1 Support1;
  2024.     _Out_  D3D12_FORMAT_SUPPORT2 Support2;
  2025.     }   D3D12_FEATURE_DATA_FORMAT_SUPPORT;
  2026.  
  2027. typedef struct D3D12_FEATURE_DATA_MULTISAMPLE_QUALITY_LEVELS
  2028.     {
  2029.     _In_  DXGI_FORMAT Format;
  2030.     _In_  UINT SampleCount;
  2031.     _In_  D3D12_MULTISAMPLE_QUALITY_LEVELS_FLAG Flags;
  2032.     _Out_  UINT NumQualityLevels;
  2033.     }   D3D12_FEATURE_DATA_MULTISAMPLE_QUALITY_LEVELS;
  2034.  
  2035. typedef struct D3D12_RESOURCE_ALLOCATION_INFO
  2036.     {
  2037.     UINT64 Size;
  2038.     UINT64 Alignment;
  2039.     }   D3D12_RESOURCE_ALLOCATION_INFO;
  2040.  
  2041. #if !defined( D3D12_NO_HELPERS ) && defined( __cplusplus )
  2042. }
  2043. struct CD3D12_RESOURCE_ALLOCATION_INFO : public D3D12_RESOURCE_ALLOCATION_INFO
  2044. {
  2045.     CD3D12_RESOURCE_ALLOCATION_INFO()
  2046.     {}
  2047.     CD3D12_RESOURCE_ALLOCATION_INFO(
  2048.         UINT64 size,
  2049.         UINT64 alignment )
  2050.     {
  2051.         Size = size;
  2052.         Alignment = alignment;
  2053.     }
  2054.     operator const D3D12_RESOURCE_ALLOCATION_INFO&() const { return *this; }
  2055. };
  2056. extern "C"{
  2057. #endif
  2058. typedef
  2059. enum D3D12_HEAP_TYPE
  2060.     {
  2061.         D3D12_HEAP_TYPE_DEFAULT = 1,
  2062.         D3D12_HEAP_TYPE_UPLOAD  = 2,
  2063.         D3D12_HEAP_TYPE_READBACK    = 3,
  2064.         D3D12_HEAP_TYPE_CUSTOM  = 4
  2065.     }   D3D12_HEAP_TYPE;
  2066.  
  2067. typedef
  2068. enum D3D12_CPU_PAGE_PROPERTIES
  2069.     {
  2070.         D3D12_CPU_PAGE_UNKNOWN  = 0,
  2071.         D3D12_CPU_PAGE_NOT_AVAILABLE    = 1,
  2072.         D3D12_CPU_PAGE_WRITE_COMBINE    = 2,
  2073.         D3D12_CPU_PAGE_WRITE_BACK   = 3
  2074.     }   D3D12_CPU_PAGE_PROPERTIES;
  2075.  
  2076. typedef
  2077. enum D3D12_MEMORY_POOL
  2078.     {
  2079.         D3D12_MEMORY_POOL_UNKNOWN   = 0,
  2080.         D3D12_MEMORY_POOL_L0    = 1,
  2081.         D3D12_MEMORY_POOL_L1    = 2
  2082.     }   D3D12_MEMORY_POOL;
  2083.  
  2084. typedef struct D3D12_HEAP_PROPERTIES
  2085.     {
  2086.     D3D12_HEAP_TYPE Type;
  2087.     D3D12_CPU_PAGE_PROPERTIES CPUPageProperties;
  2088.     D3D12_MEMORY_POOL MemoryPoolPreference;
  2089.     UINT CreationNodeMask;
  2090.     UINT VisibleNodeMask;
  2091.     }   D3D12_HEAP_PROPERTIES;
  2092.  
  2093. #if !defined( D3D12_NO_HELPERS ) && defined( __cplusplus )
  2094. }
  2095. struct CD3D12_HEAP_PROPERTIES : public D3D12_HEAP_PROPERTIES
  2096. {
  2097.     CD3D12_HEAP_PROPERTIES()
  2098.     {}
  2099.     CD3D12_HEAP_PROPERTIES(
  2100.         D3D12_CPU_PAGE_PROPERTIES cpuPageProperties,
  2101.         D3D12_MEMORY_POOL memoryPoolPreference,
  2102.         UINT creationNodeMask = 1,
  2103.         UINT nodeMask = 1 )
  2104.     {
  2105.         Type = D3D12_HEAP_TYPE_CUSTOM;
  2106.         CPUPageProperties = cpuPageProperties;
  2107.         MemoryPoolPreference = memoryPoolPreference;
  2108.         CreationNodeMask = creationNodeMask;
  2109.         VisibleNodeMask = nodeMask;
  2110.     }
  2111.     explicit CD3D12_HEAP_PROPERTIES(
  2112.         D3D12_HEAP_TYPE type,
  2113.         UINT creationNodeMask = 1,
  2114.         UINT nodeMask = 1 )
  2115.     {
  2116.         Type = type;
  2117.         CPUPageProperties = D3D12_CPU_PAGE_UNKNOWN;
  2118.         MemoryPoolPreference = D3D12_MEMORY_POOL_UNKNOWN;
  2119.         CreationNodeMask = creationNodeMask;
  2120.         VisibleNodeMask = nodeMask;
  2121.     }
  2122.     operator const D3D12_HEAP_PROPERTIES&() const { return *this; }
  2123.     bool IsCPUAccessible() const
  2124.     {
  2125.         return Type == D3D12_HEAP_TYPE_UPLOAD || Type == D3D12_HEAP_TYPE_READBACK || (Type == D3D12_HEAP_TYPE_CUSTOM &&
  2126.             (CPUPageProperties == D3D12_CPU_PAGE_WRITE_COMBINE || CPUPageProperties == D3D12_CPU_PAGE_WRITE_BACK));
  2127.     }
  2128. };
  2129. inline bool operator==( const D3D12_HEAP_PROPERTIES& l, const D3D12_HEAP_PROPERTIES& r )
  2130. {
  2131.     return l.Type == r.Type && l.CPUPageProperties == r.CPUPageProperties &&
  2132.         l.MemoryPoolPreference == r.MemoryPoolPreference &&
  2133.         l.CreationNodeMask == r.CreationNodeMask &&
  2134.         l.VisibleNodeMask == r.VisibleNodeMask;
  2135. }
  2136. inline bool operator!=( const D3D12_HEAP_PROPERTIES& l, const D3D12_HEAP_PROPERTIES& r )
  2137. { return !( l == r ); }
  2138. extern "C"{
  2139. #endif
  2140. typedef
  2141. enum D3D12_HEAP_MISC_FLAG
  2142.     {
  2143.         D3D12_HEAP_MISC_NONE    = 0,
  2144.         D3D12_HEAP_MISC_SHARED  = 0x1,
  2145.         D3D12_HEAP_MISC_DENY_TEXTURES   = 0x2,
  2146.         D3D12_HEAP_MISC_DENY_BUFFERS    = 0x4,
  2147.         D3D12_HEAP_MISC_SHARED_CROSS_ADAPTER    = 0x20
  2148.     }   D3D12_HEAP_MISC_FLAG;
  2149.  
  2150. DEFINE_ENUM_FLAG_OPERATORS( D3D12_HEAP_MISC_FLAG );
  2151. typedef struct D3D12_HEAP_DESC
  2152.     {
  2153.     UINT64 Size;
  2154.     D3D12_HEAP_PROPERTIES Properties;
  2155.     UINT64 Alignment;
  2156.     D3D12_HEAP_MISC_FLAG MiscFlags;
  2157.     }   D3D12_HEAP_DESC;
  2158.  
  2159. #if !defined( D3D12_NO_HELPERS ) && defined( __cplusplus )
  2160. }
  2161. struct CD3D12_HEAP_DESC : public D3D12_HEAP_DESC
  2162. {
  2163.     CD3D12_HEAP_DESC()
  2164.     {}
  2165.     CD3D12_HEAP_DESC(
  2166.         UINT64 size,
  2167.         D3D12_HEAP_PROPERTIES properties,
  2168.         UINT64 alignment = 0,
  2169.         D3D12_HEAP_MISC_FLAG miscFlags = D3D12_HEAP_MISC_NONE )
  2170.     {
  2171.         Size = size;
  2172.         Properties = properties;
  2173.         Alignment = alignment;
  2174.         MiscFlags = miscFlags;
  2175.     }
  2176.     CD3D12_HEAP_DESC(
  2177.         UINT64 size,
  2178.         D3D12_HEAP_TYPE type,
  2179.         UINT64 alignment = 0,
  2180.         D3D12_HEAP_MISC_FLAG miscFlags = D3D12_HEAP_MISC_NONE )
  2181.     {
  2182.         Size = size;
  2183.         Properties = CD3D12_HEAP_PROPERTIES( type );
  2184.         Alignment = alignment;
  2185.         MiscFlags = miscFlags;
  2186.     }
  2187.     CD3D12_HEAP_DESC(
  2188.         UINT64 size,
  2189.         D3D12_CPU_PAGE_PROPERTIES cpuPageProperties,
  2190.         D3D12_MEMORY_POOL memoryPoolPreference,
  2191.         UINT64 alignment = 0,
  2192.         D3D12_HEAP_MISC_FLAG miscFlags = D3D12_HEAP_MISC_NONE )
  2193.     {
  2194.         Size = size;
  2195.         Properties = CD3D12_HEAP_PROPERTIES( cpuPageProperties, memoryPoolPreference );
  2196.         Alignment = alignment;
  2197.         MiscFlags = miscFlags;
  2198.     }
  2199.     CD3D12_HEAP_DESC(
  2200.         const D3D12_RESOURCE_ALLOCATION_INFO& resAllocInfo,
  2201.         D3D12_HEAP_PROPERTIES properties,
  2202.         D3D12_HEAP_MISC_FLAG miscFlags = D3D12_HEAP_MISC_NONE )
  2203.     {
  2204.         Size = resAllocInfo.Size;
  2205.         Properties = properties;
  2206.         Alignment = resAllocInfo.Alignment;
  2207.         MiscFlags = miscFlags;
  2208.     }
  2209.     CD3D12_HEAP_DESC(
  2210.         const D3D12_RESOURCE_ALLOCATION_INFO& resAllocInfo,
  2211.         D3D12_HEAP_TYPE type,
  2212.         D3D12_HEAP_MISC_FLAG miscFlags = D3D12_HEAP_MISC_NONE )
  2213.     {
  2214.         Size = resAllocInfo.Size;
  2215.         Properties = CD3D12_HEAP_PROPERTIES( type );
  2216.         Alignment = resAllocInfo.Alignment;
  2217.         MiscFlags = miscFlags;
  2218.     }
  2219.     CD3D12_HEAP_DESC(
  2220.         const D3D12_RESOURCE_ALLOCATION_INFO& resAllocInfo,
  2221.         D3D12_CPU_PAGE_PROPERTIES cpuPageProperties,
  2222.         D3D12_MEMORY_POOL memoryPoolPreference,
  2223.         D3D12_HEAP_MISC_FLAG miscFlags = D3D12_HEAP_MISC_NONE )
  2224.     {
  2225.         Size = resAllocInfo.Size;
  2226.         Properties = CD3D12_HEAP_PROPERTIES( cpuPageProperties, memoryPoolPreference );
  2227.         Alignment = resAllocInfo.Alignment;
  2228.         MiscFlags = miscFlags;
  2229.     }
  2230.     operator const D3D12_HEAP_DESC&() const { return *this; }
  2231.     bool IsCPUAccessible() const
  2232.     { return static_cast< const CD3D12_HEAP_PROPERTIES* >( &Properties )->IsCPUAccessible(); }
  2233. };
  2234. extern "C"{
  2235. #endif
  2236. typedef
  2237. enum D3D12_RESOURCE_DIMENSION
  2238.     {
  2239.         D3D12_RESOURCE_DIMENSION_UNKNOWN    = 0,
  2240.         D3D12_RESOURCE_DIMENSION_BUFFER = 1,
  2241.         D3D12_RESOURCE_DIMENSION_TEXTURE_1D = 2,
  2242.         D3D12_RESOURCE_DIMENSION_TEXTURE_2D = 3,
  2243.         D3D12_RESOURCE_DIMENSION_TEXTURE_3D = 4
  2244.     }   D3D12_RESOURCE_DIMENSION;
  2245.  
  2246. typedef
  2247. enum D3D12_TEXTURE_LAYOUT
  2248.     {
  2249.         D3D12_TEXTURE_LAYOUT_UNKNOWN    = 0,
  2250.         D3D12_TEXTURE_LAYOUT_ROW_MAJOR  = 1,
  2251.         D3D12_TEXTURE_LAYOUT_64KB_UNDEFINED_SWIZZLE = 2,
  2252.         D3D12_TEXTURE_LAYOUT_64KB_STANDARD_SWIZZLE  = 3
  2253.     }   D3D12_TEXTURE_LAYOUT;
  2254.  
  2255. typedef
  2256. enum D3D12_RESOURCE_MISC_FLAG
  2257.     {
  2258.         D3D12_RESOURCE_MISC_NONE    = 0,
  2259.         D3D12_RESOURCE_MISC_ALLOW_RENDER_TARGET = 0x1,
  2260.         D3D12_RESOURCE_MISC_ALLOW_DEPTH_STENCIL = 0x2,
  2261.         D3D12_RESOURCE_MISC_ALLOW_UNORDERED_ACCESS  = 0x4,
  2262.         D3D12_RESOURCE_MISC_DENY_SHADER_RESOURCE    = 0x8,
  2263.         D3D12_RESOURCE_MISC_DENY_COMPRESSION_DATA   = 0x10
  2264.     }   D3D12_RESOURCE_MISC_FLAG;
  2265.  
  2266. DEFINE_ENUM_FLAG_OPERATORS( D3D12_RESOURCE_MISC_FLAG );
  2267. typedef struct D3D12_RESOURCE_DESC
  2268.     {
  2269.     D3D12_RESOURCE_DIMENSION Dimension;
  2270.     UINT64 Alignment;
  2271.     UINT64 Width;
  2272.     UINT Height;
  2273.     UINT16 DepthOrArraySize;
  2274.     UINT16 MipLevels;
  2275.     DXGI_FORMAT Format;
  2276.     DXGI_SAMPLE_DESC SampleDesc;
  2277.     D3D12_TEXTURE_LAYOUT Layout;
  2278.     D3D12_RESOURCE_MISC_FLAG MiscFlags;
  2279.     }   D3D12_RESOURCE_DESC;
  2280.  
  2281. #if !defined( D3D12_NO_HELPERS ) && defined( __cplusplus )
  2282. }
  2283. inline bool D3D12IsLayoutOpaque( D3D12_TEXTURE_LAYOUT Layout )
  2284. { return Layout == D3D12_TEXTURE_LAYOUT_UNKNOWN || Layout == D3D12_TEXTURE_LAYOUT_64KB_UNDEFINED_SWIZZLE; }
  2285. struct CD3D12_RESOURCE_DESC : public D3D12_RESOURCE_DESC
  2286. {
  2287.     CD3D12_RESOURCE_DESC()
  2288.     {}
  2289.     explicit CD3D12_RESOURCE_DESC( const D3D12_RESOURCE_DESC& o ) :
  2290.         D3D12_RESOURCE_DESC( o )
  2291.     {}
  2292.     CD3D12_RESOURCE_DESC(
  2293.         D3D12_RESOURCE_DIMENSION dimension,
  2294.         UINT64 alignment,
  2295.         UINT64 width,
  2296.         UINT height,
  2297.         UINT16 depthOrArraySize,
  2298.         UINT16 mipLevels,
  2299.         DXGI_FORMAT format,
  2300.         UINT sampleCount,
  2301.         UINT sampleQuality,
  2302.         D3D12_TEXTURE_LAYOUT layout,
  2303.         D3D12_RESOURCE_MISC_FLAG miscFlags )
  2304.     {
  2305.         Dimension = dimension;
  2306.         Alignment = alignment;
  2307.         Width = width;
  2308.         Height = height;
  2309.         DepthOrArraySize = depthOrArraySize;
  2310.         MipLevels = mipLevels;
  2311.         Format = format;
  2312.         SampleDesc.Count = sampleCount;
  2313.         SampleDesc.Quality = sampleQuality;
  2314.         Layout = layout;
  2315.         MiscFlags = miscFlags;
  2316.     }
  2317.     static CD3D12_RESOURCE_DESC Buffer(
  2318.         const D3D12_RESOURCE_ALLOCATION_INFO& resAllocInfo,
  2319.         D3D12_RESOURCE_MISC_FLAG miscFlags = D3D12_RESOURCE_MISC_NONE )
  2320.     {
  2321.         return CD3D12_RESOURCE_DESC( D3D12_RESOURCE_DIMENSION_BUFFER, resAllocInfo.Alignment, resAllocInfo.Size,
  2322.             1, 1, 1, DXGI_FORMAT_UNKNOWN, 1, 0, D3D12_TEXTURE_LAYOUT_ROW_MAJOR, miscFlags );
  2323.     }
  2324.     static CD3D12_RESOURCE_DESC Buffer(
  2325.         UINT64 width,
  2326.         D3D12_RESOURCE_MISC_FLAG miscFlags = D3D12_RESOURCE_MISC_NONE,
  2327.         UINT64 alignment = 0 )
  2328.     {
  2329.         return CD3D12_RESOURCE_DESC( D3D12_RESOURCE_DIMENSION_BUFFER, alignment, width, 1, 1, 1,
  2330.             DXGI_FORMAT_UNKNOWN, 1, 0, D3D12_TEXTURE_LAYOUT_ROW_MAJOR, miscFlags );
  2331.     }
  2332.     static CD3D12_RESOURCE_DESC Tex1D(
  2333.         DXGI_FORMAT format,
  2334.         UINT64 width,
  2335.         UINT16 arraySize = 1,
  2336.         UINT16 mipLevels = 0,
  2337.         D3D12_RESOURCE_MISC_FLAG miscFlags = D3D12_RESOURCE_MISC_NONE,
  2338.         D3D12_TEXTURE_LAYOUT layout = D3D12_TEXTURE_LAYOUT_UNKNOWN,
  2339.         UINT64 alignment = 0 )
  2340.     {
  2341.         return CD3D12_RESOURCE_DESC( D3D12_RESOURCE_DIMENSION_TEXTURE_1D, alignment, width, 1, arraySize,
  2342.             mipLevels, format, 1, 0, layout, miscFlags );
  2343.     }
  2344.     static CD3D12_RESOURCE_DESC Tex2D(
  2345.         DXGI_FORMAT format,
  2346.         UINT64 width,
  2347.         UINT height,
  2348.         UINT16 arraySize = 1,
  2349.         UINT16 mipLevels = 0,
  2350.         UINT sampleCount = 1,
  2351.         UINT sampleQuality = 0,
  2352.         D3D12_RESOURCE_MISC_FLAG miscFlags = D3D12_RESOURCE_MISC_NONE,
  2353.         D3D12_TEXTURE_LAYOUT layout = D3D12_TEXTURE_LAYOUT_UNKNOWN,
  2354.         UINT64 alignment = 0 )
  2355.     {
  2356.         return CD3D12_RESOURCE_DESC( D3D12_RESOURCE_DIMENSION_TEXTURE_2D, alignment, width, height, arraySize,
  2357.             mipLevels, format, sampleCount, sampleQuality, layout, miscFlags );
  2358.     }
  2359.     static CD3D12_RESOURCE_DESC Tex3D(
  2360.         DXGI_FORMAT format,
  2361.         UINT64 width,
  2362.         UINT height,
  2363.         UINT16 depth,
  2364.         UINT16 mipLevels = 0,
  2365.         D3D12_RESOURCE_MISC_FLAG miscFlags = D3D12_RESOURCE_MISC_NONE,
  2366.         D3D12_TEXTURE_LAYOUT layout = D3D12_TEXTURE_LAYOUT_UNKNOWN,
  2367.         UINT64 alignment = 0 )
  2368.     {
  2369.         return CD3D12_RESOURCE_DESC( D3D12_RESOURCE_DIMENSION_TEXTURE_3D, alignment, width, height, depth,
  2370.             mipLevels, format, 1, 0, layout, miscFlags );
  2371.     }
  2372.     UINT16 Depth() const
  2373.     { return (Dimension == D3D12_RESOURCE_DIMENSION_TEXTURE_3D ? DepthOrArraySize : 1); }
  2374.     UINT16 ArraySize() const
  2375.     { return (Dimension != D3D12_RESOURCE_DIMENSION_TEXTURE_3D ? DepthOrArraySize : 1); }
  2376.     operator const D3D12_RESOURCE_DESC&() const { return *this; }
  2377. };
  2378. extern "C"{
  2379. #endif
  2380. typedef struct D3D12_DEPTH_STENCIL_VALUE
  2381.     {
  2382.     FLOAT Depth;
  2383.     UINT8 Stencil;
  2384.     }   D3D12_DEPTH_STENCIL_VALUE;
  2385.  
  2386. typedef struct D3D12_CLEAR_VALUE
  2387.     {
  2388.     DXGI_FORMAT Format;
  2389.     union
  2390.         {
  2391.         FLOAT Color[ 4 ];
  2392.         D3D12_DEPTH_STENCIL_VALUE DepthStencil;
  2393.         }   ;
  2394.     }   D3D12_CLEAR_VALUE;
  2395.  
  2396. #if !defined( D3D12_NO_HELPERS ) && defined( __cplusplus )
  2397. }
  2398. struct CD3D12_CLEAR_VALUE : public D3D12_CLEAR_VALUE
  2399. {
  2400.     CD3D12_CLEAR_VALUE()
  2401.     {}
  2402.     CD3D12_CLEAR_VALUE(
  2403.         DXGI_FORMAT format,
  2404.         const FLOAT color[4] )
  2405.     {
  2406.         Format = format;
  2407.         memcpy( Color, color, sizeof( Color ) );
  2408.     }
  2409.     CD3D12_CLEAR_VALUE(
  2410.         DXGI_FORMAT format,
  2411.         FLOAT depth,
  2412.         UINT8 stencil )
  2413.     {
  2414.         Format = format;
  2415.         /* Use memcpy to preserve NAN values */
  2416.         memcpy( &DepthStencil.Depth, &depth, sizeof( depth ) );
  2417.         DepthStencil.Stencil = stencil;
  2418.     }
  2419.     operator const D3D12_CLEAR_VALUE&() const { return *this; }
  2420. };
  2421. extern "C"{
  2422. #endif
  2423. typedef struct D3D12_RANGE
  2424.     {
  2425.     SIZE_T Begin;
  2426.     SIZE_T End;
  2427.     }   D3D12_RANGE;
  2428.  
  2429. #if !defined( D3D12_NO_HELPERS ) && defined( __cplusplus )
  2430. }
  2431. struct CD3D12_RANGE : public D3D12_RANGE
  2432. {
  2433.     CD3D12_RANGE()
  2434.     {}
  2435.     CD3D12_RANGE(
  2436.         SIZE_T begin,
  2437.         SIZE_T end )
  2438.     {
  2439.         Begin = begin;
  2440.         End = end;
  2441.     }
  2442.     operator const D3D12_RANGE&() const { return *this; }
  2443. };
  2444. extern "C"{
  2445. #endif
  2446. typedef struct D3D12_SUBRESOURCE_INFO
  2447.     {
  2448.     UINT64 Offset;
  2449.     UINT RowPitch;
  2450.     UINT DepthPitch;
  2451.     }   D3D12_SUBRESOURCE_INFO;
  2452.  
  2453. typedef struct D3D12_TILED_RESOURCE_COORDINATE
  2454.     {
  2455.     UINT X;
  2456.     UINT Y;
  2457.     UINT Z;
  2458.     UINT Subresource;
  2459.     }   D3D12_TILED_RESOURCE_COORDINATE;
  2460.  
  2461. #if !defined( D3D12_NO_HELPERS ) && defined( __cplusplus )
  2462. }
  2463. struct CD3D12_TILED_RESOURCE_COORDINATE : public D3D12_TILED_RESOURCE_COORDINATE
  2464. {
  2465.     CD3D12_TILED_RESOURCE_COORDINATE()
  2466.     {}
  2467.     CD3D12_TILED_RESOURCE_COORDINATE(
  2468.         UINT x,
  2469.         UINT y,
  2470.         UINT z,
  2471.         UINT subresource )
  2472.     {
  2473.         X = x;
  2474.         Y = y;
  2475.         Z = z;
  2476.         Subresource = subresource;
  2477.     }
  2478.     operator const D3D12_TILED_RESOURCE_COORDINATE&() const { return *this; }
  2479. };
  2480. extern "C"{
  2481. #endif
  2482. typedef struct D3D12_TILE_REGION_SIZE
  2483.     {
  2484.     UINT NumTiles;
  2485.     BOOL UseBox;
  2486.     UINT Width;
  2487.     UINT16 Height;
  2488.     UINT16 Depth;
  2489.     }   D3D12_TILE_REGION_SIZE;
  2490.  
  2491. #if !defined( D3D12_NO_HELPERS ) && defined( __cplusplus )
  2492. }
  2493. struct CD3D12_TILE_REGION_SIZE : public D3D12_TILE_REGION_SIZE
  2494. {
  2495.     CD3D12_TILE_REGION_SIZE()
  2496.     {}
  2497.     CD3D12_TILE_REGION_SIZE(
  2498.         UINT numTiles,
  2499.         BOOL useBox,
  2500.         UINT width,
  2501.         UINT16 height,
  2502.         UINT16 depth )
  2503.     {
  2504.         NumTiles = numTiles;
  2505.         UseBox = useBox;
  2506.         Width = width;
  2507.         Height = height;
  2508.         Depth = depth;
  2509.     }
  2510.     operator const D3D12_TILE_REGION_SIZE&() const { return *this; }
  2511. };
  2512. extern "C"{
  2513. #endif
  2514. typedef
  2515. enum D3D12_TILE_RANGE_FLAG
  2516.     {
  2517.         D3D12_TILE_RANGE_NONE   = 0,
  2518.         D3D12_TILE_RANGE_NULL   = 1,
  2519.         D3D12_TILE_RANGE_SKIP   = 2,
  2520.         D3D12_TILE_RANGE_REUSE_SINGLE_TILE  = 4
  2521.     }   D3D12_TILE_RANGE_FLAG;
  2522.  
  2523. typedef struct D3D12_SUBRESOURCE_TILING
  2524.     {
  2525.     UINT WidthInTiles;
  2526.     UINT16 HeightInTiles;
  2527.     UINT16 DepthInTiles;
  2528.     UINT StartTileIndexInOverallResource;
  2529.     }   D3D12_SUBRESOURCE_TILING;
  2530.  
  2531. #if !defined( D3D12_NO_HELPERS ) && defined( __cplusplus )
  2532. }
  2533. struct CD3D12_SUBRESOURCE_TILING : public D3D12_SUBRESOURCE_TILING
  2534. {
  2535.     CD3D12_SUBRESOURCE_TILING()
  2536.     {}
  2537.     CD3D12_SUBRESOURCE_TILING(
  2538.         UINT widthInTiles,
  2539.         UINT16 heightInTiles,
  2540.         UINT16 depthInTiles,
  2541.         UINT startTileIndexInOverallResource )
  2542.     {
  2543.         WidthInTiles = widthInTiles;
  2544.         HeightInTiles = heightInTiles;
  2545.         DepthInTiles = depthInTiles;
  2546.         StartTileIndexInOverallResource = startTileIndexInOverallResource;
  2547.     }
  2548.     operator const D3D12_SUBRESOURCE_TILING&() const { return *this; }
  2549. };
  2550. extern "C"{
  2551. #endif
  2552. typedef struct D3D12_TILE_SHAPE
  2553.     {
  2554.     UINT WidthInTexels;
  2555.     UINT HeightInTexels;
  2556.     UINT DepthInTexels;
  2557.     }   D3D12_TILE_SHAPE;
  2558.  
  2559. #if !defined( D3D12_NO_HELPERS ) && defined( __cplusplus )
  2560. }
  2561. struct CD3D12_TILE_SHAPE : public D3D12_TILE_SHAPE
  2562. {
  2563.     CD3D12_TILE_SHAPE()
  2564.     {}
  2565.     CD3D12_TILE_SHAPE(
  2566.         UINT widthInTexels,
  2567.         UINT heightInTexels,
  2568.         UINT depthInTexels )
  2569.     {
  2570.         WidthInTexels = widthInTexels;
  2571.         HeightInTexels = heightInTexels;
  2572.         DepthInTexels = depthInTexels;
  2573.     }
  2574.     operator const D3D12_TILE_SHAPE&() const { return *this; }
  2575. };
  2576. extern "C"{
  2577. #endif
  2578. typedef struct D3D12_PACKED_MIP_DESC
  2579.     {
  2580.     UINT8 NumStandardMips;
  2581.     UINT8 NumPackedMips;
  2582.     UINT NumTilesForPackedMips;
  2583.     UINT StartTileIndexInOverallResource;
  2584.     }   D3D12_PACKED_MIP_DESC;
  2585.  
  2586. #if !defined( D3D12_NO_HELPERS ) && defined( __cplusplus )
  2587. }
  2588. struct CD3D12_PACKED_MIP_DESC : public D3D12_PACKED_MIP_DESC
  2589. {
  2590.     CD3D12_PACKED_MIP_DESC()
  2591.     {}
  2592.     CD3D12_PACKED_MIP_DESC(
  2593.         UINT8 numStandardMips,
  2594.         UINT8 numPackedMips,
  2595.         UINT numTilesForPackedMips,
  2596.         UINT startTileIndexInOverallResource )
  2597.     {
  2598.         NumStandardMips = numStandardMips;
  2599.         NumPackedMips = numPackedMips;
  2600.         NumTilesForPackedMips = numTilesForPackedMips;
  2601.         StartTileIndexInOverallResource = startTileIndexInOverallResource;
  2602.     }
  2603.     operator const D3D12_PACKED_MIP_DESC&() const { return *this; }
  2604. };
  2605. extern "C"{
  2606. #endif
  2607. typedef
  2608. enum D3D12_TILE_MAPPING_FLAG
  2609.     {
  2610.         D3D12_TILE_MAPPING_NONE = 0,
  2611.         D3D12_TILE_MAPPING_NO_HAZARD    = 0x1
  2612.     }   D3D12_TILE_MAPPING_FLAG;
  2613.  
  2614. DEFINE_ENUM_FLAG_OPERATORS( D3D12_TILE_MAPPING_FLAG );
  2615. typedef
  2616. enum D3D12_TILE_COPY_FLAG
  2617.     {
  2618.         D3D12_TILE_COPY_NONE    = 0,
  2619.         D3D12_TILE_COPY_NO_HAZARD   = 0x1,
  2620.         D3D12_TILE_COPY_LINEAR_BUFFER_TO_SWIZZLED_TILED_RESOURCE    = 0x2,
  2621.         D3D12_TILE_COPY_SWIZZLED_TILED_RESOURCE_TO_LINEAR_BUFFER    = 0x4
  2622.     }   D3D12_TILE_COPY_FLAG;
  2623.  
  2624. DEFINE_ENUM_FLAG_OPERATORS( D3D12_TILE_COPY_FLAG );
  2625. typedef
  2626. enum D3D12_RESOURCE_USAGE
  2627.     {
  2628.         D3D12_RESOURCE_USAGE_NO_ACCESS  = 0x1,
  2629.         D3D12_RESOURCE_USAGE_DEFAULT_READ   = 0x2,
  2630.         D3D12_RESOURCE_USAGE_RENDER_TARGET  = 0x4,
  2631.         D3D12_RESOURCE_USAGE_UNORDERED_ACCESS   = 0x8,
  2632.         D3D12_RESOURCE_USAGE_DEPTH  = 0x10,
  2633.         D3D12_RESOURCE_USAGE_NON_PIXEL_SHADER_RESOURCE  = 0x20,
  2634.         D3D12_RESOURCE_USAGE_PIXEL_SHADER_RESOURCE  = 0x40,
  2635.         D3D12_RESOURCE_USAGE_STREAM_OUT = 0x80,
  2636.         D3D12_RESOURCE_USAGE_INDIRECT_ARGUMENT  = 0x100,
  2637.         D3D12_RESOURCE_USAGE_COPY_DEST  = 0x400,
  2638.         D3D12_RESOURCE_USAGE_COPY_SOURCE    = 0x800,
  2639.         D3D12_RESOURCE_USAGE_RESOLVE_DEST   = 0x1000,
  2640.         D3D12_RESOURCE_USAGE_RESOLVE_SOURCE = 0x2000,
  2641.         D3D12_RESOURCE_USAGE_GENERIC_READ   = ( ( ( ( D3D12_RESOURCE_USAGE_DEFAULT_READ | D3D12_RESOURCE_USAGE_COPY_SOURCE )  | D3D12_RESOURCE_USAGE_NON_PIXEL_SHADER_RESOURCE )  | D3D12_RESOURCE_USAGE_PIXEL_SHADER_RESOURCE )  | D3D12_RESOURCE_USAGE_INDIRECT_ARGUMENT ) ,
  2642.         D3D12_RESOURCE_USAGE_PRESENT    = D3D12_RESOURCE_USAGE_COPY_SOURCE,
  2643.         D3D12_RESOURCE_USAGE_INITIAL    = 0
  2644.     }   D3D12_RESOURCE_USAGE;
  2645.  
  2646. typedef
  2647. enum D3D12_RESOURCE_BARRIER_TYPE
  2648.     {
  2649.         D3D12_RESOURCE_BARRIER_TYPE_TRANSITION  = 0,
  2650.         D3D12_RESOURCE_BARRIER_TYPE_ALIASING    = ( D3D12_RESOURCE_BARRIER_TYPE_TRANSITION + 1 ) ,
  2651.         D3D12_RESOURCE_BARRIER_TYPE_UAV = ( D3D12_RESOURCE_BARRIER_TYPE_ALIASING + 1 )
  2652.     }   D3D12_RESOURCE_BARRIER_TYPE;
  2653.  
  2654.  
  2655. typedef
  2656. enum D3D12_RESOURCE_TRANSITION_BARRIER_FLAGS
  2657.     {
  2658.         D3D12_RESOURCE_TRANSITION_BARRIER_NONE  = 0,
  2659.         D3D12_RESOURCE_TRANSITION_BARRIER_DEPTH_ONLY    = 0x1,
  2660.         D3D12_RESOURCE_TRANSITION_BARRIER_STENCIL_ONLY  = 0x2
  2661.     }   D3D12_RESOURCE_TRANSITION_BARRIER_FLAGS;
  2662.  
  2663. DEFINE_ENUM_FLAG_OPERATORS( D3D12_RESOURCE_TRANSITION_BARRIER_FLAGS );
  2664. typedef struct D3D12_RESOURCE_TRANSITION_BARRIER_DESC
  2665.     {
  2666.     ID3D12Resource *pResource;
  2667.     UINT Subresource;
  2668.     UINT StateBefore;
  2669.     UINT StateAfter;
  2670.     D3D12_RESOURCE_TRANSITION_BARRIER_FLAGS Flags;
  2671.     }   D3D12_RESOURCE_TRANSITION_BARRIER_DESC;
  2672.  
  2673. typedef struct D3D12_RESOURCE_ALIASING_BARRIER_DESC
  2674.     {
  2675.     ID3D12Resource *pResourceBefore;
  2676.     ID3D12Resource *pResourceAfter;
  2677.     }   D3D12_RESOURCE_ALIASING_BARRIER_DESC;
  2678.  
  2679. typedef struct D3D12_RESOURCE_UAV_BARRIER_DESC
  2680.     {
  2681.     ID3D12Resource *pResource;
  2682.     }   D3D12_RESOURCE_UAV_BARRIER_DESC;
  2683.  
  2684. typedef struct D3D12_RESOURCE_BARRIER_DESC
  2685.     {
  2686.     D3D12_RESOURCE_BARRIER_TYPE Type;
  2687.     union
  2688.         {
  2689.         D3D12_RESOURCE_TRANSITION_BARRIER_DESC Transition;
  2690.         D3D12_RESOURCE_ALIASING_BARRIER_DESC Aliasing;
  2691.         D3D12_RESOURCE_UAV_BARRIER_DESC UAV;
  2692.         }   ;
  2693.     }   D3D12_RESOURCE_BARRIER_DESC;
  2694.  
  2695. typedef struct D3D12_PITCHED_SUBRESOURCE_DESC
  2696.     {
  2697.     DXGI_FORMAT Format;
  2698.     UINT Width;
  2699.     UINT Height;
  2700.     UINT Depth;
  2701.     UINT RowPitch;
  2702.     }   D3D12_PITCHED_SUBRESOURCE_DESC;
  2703.  
  2704. #if !defined( D3D12_NO_HELPERS ) && defined( __cplusplus )
  2705. }
  2706. struct CD3D12_PITCHED_SUBRESOURCE_DESC : public D3D12_PITCHED_SUBRESOURCE_DESC
  2707. {
  2708.     CD3D12_PITCHED_SUBRESOURCE_DESC()
  2709.     {}
  2710.     CD3D12_PITCHED_SUBRESOURCE_DESC(
  2711.         DXGI_FORMAT format,
  2712.         UINT width,
  2713.         UINT height,
  2714.         UINT depth,
  2715.         UINT rowPitch )
  2716.     {
  2717.         Format = format;
  2718.         Width = width;
  2719.         Height = height;
  2720.         Depth = depth;
  2721.         RowPitch = rowPitch;
  2722.     }
  2723.     explicit CD3D12_PITCHED_SUBRESOURCE_DESC(
  2724.         const D3D12_RESOURCE_DESC& resDesc,
  2725.         UINT rowPitch )
  2726.     {
  2727.         Format = resDesc.Format;
  2728.         Width = UINT( resDesc.Width );
  2729.         Height = resDesc.Height;
  2730.         Depth = (resDesc.Dimension == D3D12_RESOURCE_DIMENSION_TEXTURE_3D ? resDesc.DepthOrArraySize : 1);
  2731.         RowPitch = rowPitch;
  2732.     }
  2733.     operator const D3D12_PITCHED_SUBRESOURCE_DESC&() const { return *this; }
  2734. };
  2735. extern "C"{
  2736. #endif
  2737. typedef struct D3D12_PLACED_PITCHED_SUBRESOURCE_DESC
  2738.     {
  2739.     UINT64 Offset;
  2740.     D3D12_PITCHED_SUBRESOURCE_DESC Placement;
  2741.     }   D3D12_PLACED_PITCHED_SUBRESOURCE_DESC;
  2742.  
  2743. typedef
  2744. enum D3D12_SUBRESOURCE_VIEW_TYPE
  2745.     {
  2746.         D3D12_SUBRESOURCE_VIEW_SELECT_SUBRESOURCE   = 0,
  2747.         D3D12_SUBRESOURCE_VIEW_PLACED_PITCHED_SUBRESOURCE   = 1
  2748.     }   D3D12_SUBRESOURCE_VIEW_TYPE;
  2749.  
  2750. typedef struct D3D12_TEXTURE_COPY_LOCATION
  2751.     {
  2752.     ID3D12Resource *pResource;
  2753.     D3D12_SUBRESOURCE_VIEW_TYPE Type;
  2754.     union
  2755.         {
  2756.         D3D12_PLACED_PITCHED_SUBRESOURCE_DESC PlacedTexture;
  2757.         UINT Subresource;
  2758.         }   ;
  2759.     }   D3D12_TEXTURE_COPY_LOCATION;
  2760.  
  2761. #if !defined( D3D12_NO_HELPERS ) && defined( __cplusplus )
  2762. }
  2763. struct CD3D12_TEXTURE_COPY_LOCATION : public D3D12_TEXTURE_COPY_LOCATION
  2764. {
  2765. CD3D12_TEXTURE_COPY_LOCATION() { }
  2766. CD3D12_TEXTURE_COPY_LOCATION(ID3D12Resource* pRes) { pResource = pRes; }
  2767. CD3D12_TEXTURE_COPY_LOCATION(ID3D12Resource* pRes, D3D12_PLACED_PITCHED_SUBRESOURCE_DESC const& Placement)
  2768. {
  2769.     pResource = pRes;
  2770.     Type = D3D12_SUBRESOURCE_VIEW_PLACED_PITCHED_SUBRESOURCE;
  2771.     PlacedTexture = Placement;
  2772. }
  2773. CD3D12_TEXTURE_COPY_LOCATION(ID3D12Resource* pRes, UINT Sub)
  2774. {
  2775.     pResource = pRes;
  2776.     Type = D3D12_SUBRESOURCE_VIEW_SELECT_SUBRESOURCE;
  2777.     Subresource = Sub;
  2778. }
  2779. };
  2780. extern "C"{
  2781. #endif
  2782. typedef
  2783. enum D3D12_COPY_FLAGS
  2784.     {
  2785.         D3D12_COPY_NONE = 0,
  2786.         D3D12_COPY_NO_OVERWRITE = 0x1,
  2787.         D3D12_COPY_DISCARD  = 0x2
  2788.     }   D3D12_COPY_FLAGS;
  2789.  
  2790. DEFINE_ENUM_FLAG_OPERATORS( D3D12_COPY_FLAGS );
  2791. typedef
  2792. enum D3D12_SHADER_COMPONENT_MAPPING
  2793.     {
  2794.         D3D12_SHADER_COMPONENT_FROM_MEMORY_COMPONENT_0  = 0,
  2795.         D3D12_SHADER_COMPONENT_FROM_MEMORY_COMPONENT_1  = 1,
  2796.         D3D12_SHADER_COMPONENT_FROM_MEMORY_COMPONENT_2  = 2,
  2797.         D3D12_SHADER_COMPONENT_FROM_MEMORY_COMPONENT_3  = 3,
  2798.         D3D12_SHADER_COMPONENT_FORCE_VALUE_0    = 4,
  2799.         D3D12_SHADER_COMPONENT_FORCE_VALUE_1    = 5
  2800.     }   D3D12_SHADER_COMPONENT_MAPPING;
  2801.  
  2802. #define D3D12_SHADER_COMPONENT_MAPPING_MASK 0x7
  2803. #define D3D12_SHADER_COMPONENT_MAPPING_SHIFT 3
  2804. #define D3D12_SHADER_COMPONENT_MAPPING_ALWAYS_SET_BIT_AVOIDING_ZEROMEM_MISTAKES (1<<(D3D12_SHADER_COMPONENT_MAPPING_SHIFT*4))
  2805. #define D3D12_ENCODE_SHADER_4_COMPONENT_MAPPING(Src0,Src1,Src2,Src3) ((((Src0)&D3D12_SHADER_COMPONENT_MAPPING_MASK)| \
  2806.                                                                 (((Src1)&D3D12_SHADER_COMPONENT_MAPPING_MASK)<<D3D12_SHADER_COMPONENT_MAPPING_SHIFT)| \
  2807.                                                                 (((Src2)&D3D12_SHADER_COMPONENT_MAPPING_MASK)<<(D3D12_SHADER_COMPONENT_MAPPING_SHIFT*2))| \
  2808.                                                                 (((Src3)&D3D12_SHADER_COMPONENT_MAPPING_MASK)<<(D3D12_SHADER_COMPONENT_MAPPING_SHIFT*3))| \
  2809.                                                                 D3D12_SHADER_COMPONENT_MAPPING_ALWAYS_SET_BIT_AVOIDING_ZEROMEM_MISTAKES))
  2810. #define D3D12_DECODE_SHADER_4_COMPONENT_MAPPING(ComponentToExtract,Mapping) ((D3D12_SHADER_COMPONENT_MAPPING)(Mapping >> (D3D12_SHADER_COMPONENT_MAPPING_SHIFT*ComponentToExtract) & D3D12_SHADER_COMPONENT_MAPPING_MASK))
  2811. #define D3D12_DEFAULT_SHADER_4_COMPONENT_MAPPING D3D12_ENCODE_SHADER_4_COMPONENT_MAPPING(0,1,2,3)
  2812. typedef
  2813. enum D3D12_BUFFER_SRV_FLAG
  2814.     {
  2815.         D3D12_BUFFER_SRV_FLAG_NONE  = 0,
  2816.         D3D12_BUFFER_SRV_FLAG_RAW   = 0x1
  2817.     }   D3D12_BUFFER_SRV_FLAG;
  2818.  
  2819. DEFINE_ENUM_FLAG_OPERATORS( D3D12_BUFFER_SRV_FLAG );
  2820. typedef struct D3D12_BUFFER_SRV
  2821.     {
  2822.     UINT64 FirstElement;
  2823.     UINT NumElements;
  2824.     UINT StructureByteStride;
  2825.     D3D12_BUFFER_SRV_FLAG Flags;
  2826.     }   D3D12_BUFFER_SRV;
  2827.  
  2828. typedef struct D3D12_TEX1D_SRV
  2829.     {
  2830.     UINT MostDetailedMip;
  2831.     UINT MipLevels;
  2832.     FLOAT ResourceMinLODClamp;
  2833.     }   D3D12_TEX1D_SRV;
  2834.  
  2835. typedef struct D3D12_TEX1D_ARRAY_SRV
  2836.     {
  2837.     UINT MostDetailedMip;
  2838.     UINT MipLevels;
  2839.     UINT FirstArraySlice;
  2840.     UINT ArraySize;
  2841.     FLOAT ResourceMinLODClamp;
  2842.     }   D3D12_TEX1D_ARRAY_SRV;
  2843.  
  2844. typedef struct D3D12_TEX2D_SRV
  2845.     {
  2846.     UINT MostDetailedMip;
  2847.     UINT MipLevels;
  2848.     UINT PlaneSlice;
  2849.     FLOAT ResourceMinLODClamp;
  2850.     }   D3D12_TEX2D_SRV;
  2851.  
  2852. typedef struct D3D12_TEX2D_ARRAY_SRV
  2853.     {
  2854.     UINT MostDetailedMip;
  2855.     UINT MipLevels;
  2856.     UINT FirstArraySlice;
  2857.     UINT ArraySize;
  2858.     UINT PlaneSlice;
  2859.     FLOAT ResourceMinLODClamp;
  2860.     }   D3D12_TEX2D_ARRAY_SRV;
  2861.  
  2862. typedef struct D3D12_TEX3D_SRV
  2863.     {
  2864.     UINT MostDetailedMip;
  2865.     UINT MipLevels;
  2866.     FLOAT ResourceMinLODClamp;
  2867.     }   D3D12_TEX3D_SRV;
  2868.  
  2869. typedef struct D3D12_TEXCUBE_SRV
  2870.     {
  2871.     UINT MostDetailedMip;
  2872.     UINT MipLevels;
  2873.     FLOAT ResourceMinLODClamp;
  2874.     }   D3D12_TEXCUBE_SRV;
  2875.  
  2876. typedef struct D3D12_TEXCUBE_ARRAY_SRV
  2877.     {
  2878.     UINT MostDetailedMip;
  2879.     UINT MipLevels;
  2880.     UINT First2DArrayFace;
  2881.     UINT NumCubes;
  2882.     FLOAT ResourceMinLODClamp;
  2883.     }   D3D12_TEXCUBE_ARRAY_SRV;
  2884.  
  2885. typedef struct D3D12_TEX2DMS_SRV
  2886.     {
  2887.     UINT UnusedField_NothingToDefine;
  2888.     }   D3D12_TEX2DMS_SRV;
  2889.  
  2890. typedef struct D3D12_TEX2DMS_ARRAY_SRV
  2891.     {
  2892.     UINT FirstArraySlice;
  2893.     UINT ArraySize;
  2894.     }   D3D12_TEX2DMS_ARRAY_SRV;
  2895.  
  2896. typedef
  2897. enum D3D12_SRV_DIMENSION
  2898.     {
  2899.         D3D12_SRV_DIMENSION_UNKNOWN = 0,
  2900.         D3D12_SRV_DIMENSION_BUFFER  = 1,
  2901.         D3D12_SRV_DIMENSION_TEXTURE1D   = 2,
  2902.         D3D12_SRV_DIMENSION_TEXTURE1DARRAY  = 3,
  2903.         D3D12_SRV_DIMENSION_TEXTURE2D   = 4,
  2904.         D3D12_SRV_DIMENSION_TEXTURE2DARRAY  = 5,
  2905.         D3D12_SRV_DIMENSION_TEXTURE2DMS = 6,
  2906.         D3D12_SRV_DIMENSION_TEXTURE2DMSARRAY    = 7,
  2907.         D3D12_SRV_DIMENSION_TEXTURE3D   = 8,
  2908.         D3D12_SRV_DIMENSION_TEXTURECUBE = 9,
  2909.         D3D12_SRV_DIMENSION_TEXTURECUBEARRAY    = 10
  2910.     }   D3D12_SRV_DIMENSION;
  2911.  
  2912. typedef struct D3D12_SHADER_RESOURCE_VIEW_DESC
  2913.     {
  2914.     DXGI_FORMAT Format;
  2915.     D3D12_SRV_DIMENSION ViewDimension;
  2916.     UINT Shader4ComponentMapping;
  2917.     union
  2918.         {
  2919.         D3D12_BUFFER_SRV Buffer;
  2920.         D3D12_TEX1D_SRV Texture1D;
  2921.         D3D12_TEX1D_ARRAY_SRV Texture1DArray;
  2922.         D3D12_TEX2D_SRV Texture2D;
  2923.         D3D12_TEX2D_ARRAY_SRV Texture2DArray;
  2924.         D3D12_TEX2DMS_SRV Texture2DMS;
  2925.         D3D12_TEX2DMS_ARRAY_SRV Texture2DMSArray;
  2926.         D3D12_TEX3D_SRV Texture3D;
  2927.         D3D12_TEXCUBE_SRV TextureCube;
  2928.         D3D12_TEXCUBE_ARRAY_SRV TextureCubeArray;
  2929.         }   ;
  2930.     }   D3D12_SHADER_RESOURCE_VIEW_DESC;
  2931.  
  2932. typedef struct D3D12_CONSTANT_BUFFER_VIEW_DESC
  2933.     {
  2934.     D3D12_GPU_VIRTUAL_ADDRESS BufferLocation;
  2935.     UINT SizeInBytes;
  2936.     }   D3D12_CONSTANT_BUFFER_VIEW_DESC;
  2937.  
  2938. typedef
  2939. enum D3D12_FILTER
  2940.     {
  2941.         D3D12_FILTER_MIN_MAG_MIP_POINT  = 0,
  2942.         D3D12_FILTER_MIN_MAG_POINT_MIP_LINEAR   = 0x1,
  2943.         D3D12_FILTER_MIN_POINT_MAG_LINEAR_MIP_POINT = 0x4,
  2944.         D3D12_FILTER_MIN_POINT_MAG_MIP_LINEAR   = 0x5,
  2945.         D3D12_FILTER_MIN_LINEAR_MAG_MIP_POINT   = 0x10,
  2946.         D3D12_FILTER_MIN_LINEAR_MAG_POINT_MIP_LINEAR    = 0x11,
  2947.         D3D12_FILTER_MIN_MAG_LINEAR_MIP_POINT   = 0x14,
  2948.         D3D12_FILTER_MIN_MAG_MIP_LINEAR = 0x15,
  2949.         D3D12_FILTER_ANISOTROPIC    = 0x55,
  2950.         D3D12_FILTER_COMPARISON_MIN_MAG_MIP_POINT   = 0x80,
  2951.         D3D12_FILTER_COMPARISON_MIN_MAG_POINT_MIP_LINEAR    = 0x81,
  2952.         D3D12_FILTER_COMPARISON_MIN_POINT_MAG_LINEAR_MIP_POINT  = 0x84,
  2953.         D3D12_FILTER_COMPARISON_MIN_POINT_MAG_MIP_LINEAR    = 0x85,
  2954.         D3D12_FILTER_COMPARISON_MIN_LINEAR_MAG_MIP_POINT    = 0x90,
  2955.         D3D12_FILTER_COMPARISON_MIN_LINEAR_MAG_POINT_MIP_LINEAR = 0x91,
  2956.         D3D12_FILTER_COMPARISON_MIN_MAG_LINEAR_MIP_POINT    = 0x94,
  2957.         D3D12_FILTER_COMPARISON_MIN_MAG_MIP_LINEAR  = 0x95,
  2958.         D3D12_FILTER_COMPARISON_ANISOTROPIC = 0xd5,
  2959.         D3D12_FILTER_MINIMUM_MIN_MAG_MIP_POINT  = 0x100,
  2960.         D3D12_FILTER_MINIMUM_MIN_MAG_POINT_MIP_LINEAR   = 0x101,
  2961.         D3D12_FILTER_MINIMUM_MIN_POINT_MAG_LINEAR_MIP_POINT = 0x104,
  2962.         D3D12_FILTER_MINIMUM_MIN_POINT_MAG_MIP_LINEAR   = 0x105,
  2963.         D3D12_FILTER_MINIMUM_MIN_LINEAR_MAG_MIP_POINT   = 0x110,
  2964.         D3D12_FILTER_MINIMUM_MIN_LINEAR_MAG_POINT_MIP_LINEAR    = 0x111,
  2965.         D3D12_FILTER_MINIMUM_MIN_MAG_LINEAR_MIP_POINT   = 0x114,
  2966.         D3D12_FILTER_MINIMUM_MIN_MAG_MIP_LINEAR = 0x115,
  2967.         D3D12_FILTER_MINIMUM_ANISOTROPIC    = 0x155,
  2968.         D3D12_FILTER_MAXIMUM_MIN_MAG_MIP_POINT  = 0x180,
  2969.         D3D12_FILTER_MAXIMUM_MIN_MAG_POINT_MIP_LINEAR   = 0x181,
  2970.         D3D12_FILTER_MAXIMUM_MIN_POINT_MAG_LINEAR_MIP_POINT = 0x184,
  2971.         D3D12_FILTER_MAXIMUM_MIN_POINT_MAG_MIP_LINEAR   = 0x185,
  2972.         D3D12_FILTER_MAXIMUM_MIN_LINEAR_MAG_MIP_POINT   = 0x190,
  2973.         D3D12_FILTER_MAXIMUM_MIN_LINEAR_MAG_POINT_MIP_LINEAR    = 0x191,
  2974.         D3D12_FILTER_MAXIMUM_MIN_MAG_LINEAR_MIP_POINT   = 0x194,
  2975.         D3D12_FILTER_MAXIMUM_MIN_MAG_MIP_LINEAR = 0x195,
  2976.         D3D12_FILTER_MAXIMUM_ANISOTROPIC    = 0x1d5
  2977.     }   D3D12_FILTER;
  2978.  
  2979. typedef
  2980. enum D3D12_FILTER_TYPE
  2981.     {
  2982.         D3D12_FILTER_TYPE_POINT = 0,
  2983.         D3D12_FILTER_TYPE_LINEAR    = 1
  2984.     }   D3D12_FILTER_TYPE;
  2985.  
  2986. typedef
  2987. enum D3D12_FILTER_REDUCTION_TYPE
  2988.     {
  2989.         D3D12_FILTER_REDUCTION_TYPE_STANDARD    = 0,
  2990.         D3D12_FILTER_REDUCTION_TYPE_COMPARISON  = 1,
  2991.         D3D12_FILTER_REDUCTION_TYPE_MINIMUM = 2,
  2992.         D3D12_FILTER_REDUCTION_TYPE_MAXIMUM = 3
  2993.     }   D3D12_FILTER_REDUCTION_TYPE;
  2994.  
  2995. #define D3D12_FILTER_REDUCTION_TYPE_MASK    ( 0x3 )
  2996.  
  2997. #define D3D12_FILTER_REDUCTION_TYPE_SHIFT   ( 7 )
  2998.  
  2999. #define D3D12_FILTER_TYPE_MASK  ( 0x3 )
  3000.  
  3001. #define D3D12_MIN_FILTER_SHIFT  ( 4 )
  3002.  
  3003. #define D3D12_MAG_FILTER_SHIFT  ( 2 )
  3004.  
  3005. #define D3D12_MIP_FILTER_SHIFT  ( 0 )
  3006.  
  3007. #define D3D12_ANISOTROPIC_FILTERING_BIT ( 0x40 )
  3008.  
  3009. #define D3D12_ENCODE_BASIC_FILTER( min, mag, mip, reduction )                                                     \
  3010.                                    ( ( D3D12_FILTER ) (                                                           \
  3011.                                    ( ( ( min ) & D3D12_FILTER_TYPE_MASK ) << D3D12_MIN_FILTER_SHIFT ) |           \
  3012.                                    ( ( ( mag ) & D3D12_FILTER_TYPE_MASK ) << D3D12_MAG_FILTER_SHIFT ) |           \
  3013.                                    ( ( ( mip ) & D3D12_FILTER_TYPE_MASK ) << D3D12_MIP_FILTER_SHIFT ) |           \
  3014.                                    ( ( ( reduction ) & D3D12_FILTER_REDUCTION_TYPE_MASK ) << D3D12_FILTER_REDUCTION_TYPE_SHIFT ) ) )
  3015. #define D3D12_ENCODE_ANISOTROPIC_FILTER( reduction )                                                  \
  3016.                                          ( ( D3D12_FILTER ) (                                         \
  3017.                                          D3D12_ANISOTROPIC_FILTERING_BIT |                            \
  3018.                                          D3D12_ENCODE_BASIC_FILTER( D3D12_FILTER_TYPE_LINEAR,         \
  3019.                                                                     D3D12_FILTER_TYPE_LINEAR,         \
  3020.                                                                     D3D12_FILTER_TYPE_LINEAR,         \
  3021.                                                                     reduction ) ) )                    
  3022. #define D3D12_DECODE_MIN_FILTER( D3D12Filter )                                                              \
  3023.                                  ( ( D3D12_FILTER_TYPE )                                                    \
  3024.                                  ( ( ( D3D12Filter ) >> D3D12_MIN_FILTER_SHIFT ) & D3D12_FILTER_TYPE_MASK ) )
  3025. #define D3D12_DECODE_MAG_FILTER( D3D12Filter )                                                              \
  3026.                                  ( ( D3D12_FILTER_TYPE )                                                    \
  3027.                                  ( ( ( D3D12Filter ) >> D3D12_MAG_FILTER_SHIFT ) & D3D12_FILTER_TYPE_MASK ) )
  3028. #define D3D12_DECODE_MIP_FILTER( D3D12Filter )                                                              \
  3029.                                  ( ( D3D12_FILTER_TYPE )                                                    \
  3030.                                  ( ( ( D3D12Filter ) >> D3D12_MIP_FILTER_SHIFT ) & D3D12_FILTER_TYPE_MASK ) )
  3031. #define D3D12_DECODE_FILTER_REDUCTION( D3D12Filter )                                                        \
  3032.                                  ( ( D3D12_FILTER_REDUCTION_TYPE )                                                      \
  3033.                                  ( ( ( D3D12Filter ) >> D3D12_FILTER_REDUCTION_TYPE_SHIFT ) & D3D12_FILTER_REDUCTION_TYPE_MASK ) )
  3034. #define D3D12_DECODE_IS_COMPARISON_FILTER( D3D12Filter )                                                    \
  3035.                                  ( D3D12_DECODE_FILTER_REDUCTION( D3D12Filter ) == D3D12_FILTER_REDUCTION_TYPE_COMPARISON )
  3036. #define D3D12_DECODE_IS_ANISOTROPIC_FILTER( D3D12Filter )                                               \
  3037.                             ( ( ( D3D12Filter ) & D3D12_ANISOTROPIC_FILTERING_BIT ) &&                  \
  3038.                             ( D3D12_FILTER_TYPE_LINEAR == D3D12_DECODE_MIN_FILTER( D3D12Filter ) ) &&   \
  3039.                             ( D3D12_FILTER_TYPE_LINEAR == D3D12_DECODE_MAG_FILTER( D3D12Filter ) ) &&   \
  3040.                             ( D3D12_FILTER_TYPE_LINEAR == D3D12_DECODE_MIP_FILTER( D3D12Filter ) ) )      
  3041. typedef
  3042. enum D3D12_TEXTURE_ADDRESS_MODE
  3043.     {
  3044.         D3D12_TEXTURE_ADDRESS_WRAP  = 1,
  3045.         D3D12_TEXTURE_ADDRESS_MIRROR    = 2,
  3046.         D3D12_TEXTURE_ADDRESS_CLAMP = 3,
  3047.         D3D12_TEXTURE_ADDRESS_BORDER    = 4,
  3048.         D3D12_TEXTURE_ADDRESS_MIRROR_ONCE   = 5
  3049.     }   D3D12_TEXTURE_ADDRESS_MODE;
  3050.  
  3051. typedef struct D3D12_SAMPLER_DESC
  3052.     {
  3053.     D3D12_FILTER Filter;
  3054.     D3D12_TEXTURE_ADDRESS_MODE AddressU;
  3055.     D3D12_TEXTURE_ADDRESS_MODE AddressV;
  3056.     D3D12_TEXTURE_ADDRESS_MODE AddressW;
  3057.     FLOAT MipLODBias;
  3058.     UINT MaxAnisotropy;
  3059.     D3D12_COMPARISON_FUNC ComparisonFunc;
  3060.     FLOAT BorderColor[ 4 ];
  3061.     FLOAT MinLOD;
  3062.     FLOAT MaxLOD;
  3063.     }   D3D12_SAMPLER_DESC;
  3064.  
  3065. typedef
  3066. enum D3D12_BUFFER_UAV_FLAG
  3067.     {
  3068.         D3D12_BUFFER_UAV_FLAG_NONE  = 0,
  3069.         D3D12_BUFFER_UAV_FLAG_RAW   = 0x1
  3070.     }   D3D12_BUFFER_UAV_FLAG;
  3071.  
  3072. DEFINE_ENUM_FLAG_OPERATORS( D3D12_BUFFER_UAV_FLAG );
  3073. typedef struct D3D12_BUFFER_UAV
  3074.     {
  3075.     UINT64 FirstElement;
  3076.     UINT NumElements;
  3077.     UINT StructureByteStride;
  3078.     UINT64 CounterOffsetInBytes;
  3079.     D3D12_BUFFER_UAV_FLAG Flags;
  3080.     }   D3D12_BUFFER_UAV;
  3081.  
  3082. typedef struct D3D12_TEX1D_UAV
  3083.     {
  3084.     UINT MipSlice;
  3085.     }   D3D12_TEX1D_UAV;
  3086.  
  3087. typedef struct D3D12_TEX1D_ARRAY_UAV
  3088.     {
  3089.     UINT MipSlice;
  3090.     UINT FirstArraySlice;
  3091.     UINT ArraySize;
  3092.     }   D3D12_TEX1D_ARRAY_UAV;
  3093.  
  3094. typedef struct D3D12_TEX2D_UAV
  3095.     {
  3096.     UINT MipSlice;
  3097.     UINT PlaneSlice;
  3098.     }   D3D12_TEX2D_UAV;
  3099.  
  3100. typedef struct D3D12_TEX2D_ARRAY_UAV
  3101.     {
  3102.     UINT MipSlice;
  3103.     UINT FirstArraySlice;
  3104.     UINT ArraySize;
  3105.     UINT PlaneSlice;
  3106.     }   D3D12_TEX2D_ARRAY_UAV;
  3107.  
  3108. typedef struct D3D12_TEX3D_UAV
  3109.     {
  3110.     UINT MipSlice;
  3111.     UINT FirstWSlice;
  3112.     UINT WSize;
  3113.     }   D3D12_TEX3D_UAV;
  3114.  
  3115. typedef
  3116. enum D3D12_UAV_DIMENSION
  3117.     {
  3118.         D3D12_UAV_DIMENSION_UNKNOWN = 0,
  3119.         D3D12_UAV_DIMENSION_BUFFER  = 1,
  3120.         D3D12_UAV_DIMENSION_TEXTURE1D   = 2,
  3121.         D3D12_UAV_DIMENSION_TEXTURE1DARRAY  = 3,
  3122.         D3D12_UAV_DIMENSION_TEXTURE2D   = 4,
  3123.         D3D12_UAV_DIMENSION_TEXTURE2DARRAY  = 5,
  3124.         D3D12_UAV_DIMENSION_TEXTURE3D   = 8
  3125.     }   D3D12_UAV_DIMENSION;
  3126.  
  3127. typedef struct D3D12_UNORDERED_ACCESS_VIEW_DESC
  3128.     {
  3129.     DXGI_FORMAT Format;
  3130.     D3D12_UAV_DIMENSION ViewDimension;
  3131.     union
  3132.         {
  3133.         D3D12_BUFFER_UAV Buffer;
  3134.         D3D12_TEX1D_UAV Texture1D;
  3135.         D3D12_TEX1D_ARRAY_UAV Texture1DArray;
  3136.         D3D12_TEX2D_UAV Texture2D;
  3137.         D3D12_TEX2D_ARRAY_UAV Texture2DArray;
  3138.         D3D12_TEX3D_UAV Texture3D;
  3139.         }   ;
  3140.     }   D3D12_UNORDERED_ACCESS_VIEW_DESC;
  3141.  
  3142. typedef struct D3D12_BUFFER_RTV
  3143.     {
  3144.     UINT64 FirstElement;
  3145.     UINT NumElements;
  3146.     }   D3D12_BUFFER_RTV;
  3147.  
  3148. typedef struct D3D12_TEX1D_RTV
  3149.     {
  3150.     UINT MipSlice;
  3151.     }   D3D12_TEX1D_RTV;
  3152.  
  3153. typedef struct D3D12_TEX1D_ARRAY_RTV
  3154.     {
  3155.     UINT MipSlice;
  3156.     UINT FirstArraySlice;
  3157.     UINT ArraySize;
  3158.     }   D3D12_TEX1D_ARRAY_RTV;
  3159.  
  3160. typedef struct D3D12_TEX2D_RTV
  3161.     {
  3162.     UINT MipSlice;
  3163.     UINT PlaneSlice;
  3164.     }   D3D12_TEX2D_RTV;
  3165.  
  3166. typedef struct D3D12_TEX2DMS_RTV
  3167.     {
  3168.     UINT UnusedField_NothingToDefine;
  3169.     }   D3D12_TEX2DMS_RTV;
  3170.  
  3171. typedef struct D3D12_TEX2D_ARRAY_RTV
  3172.     {
  3173.     UINT MipSlice;
  3174.     UINT FirstArraySlice;
  3175.     UINT ArraySize;
  3176.     UINT PlaneSlice;
  3177.     }   D3D12_TEX2D_ARRAY_RTV;
  3178.  
  3179. typedef struct D3D12_TEX2DMS_ARRAY_RTV
  3180.     {
  3181.     UINT FirstArraySlice;
  3182.     UINT ArraySize;
  3183.     }   D3D12_TEX2DMS_ARRAY_RTV;
  3184.  
  3185. typedef struct D3D12_TEX3D_RTV
  3186.     {
  3187.     UINT MipSlice;
  3188.     UINT FirstWSlice;
  3189.     UINT WSize;
  3190.     }   D3D12_TEX3D_RTV;
  3191.  
  3192. typedef
  3193. enum D3D12_RTV_DIMENSION
  3194.     {
  3195.         D3D12_RTV_DIMENSION_UNKNOWN = 0,
  3196.         D3D12_RTV_DIMENSION_BUFFER  = 1,
  3197.         D3D12_RTV_DIMENSION_TEXTURE1D   = 2,
  3198.         D3D12_RTV_DIMENSION_TEXTURE1DARRAY  = 3,
  3199.         D3D12_RTV_DIMENSION_TEXTURE2D   = 4,
  3200.         D3D12_RTV_DIMENSION_TEXTURE2DARRAY  = 5,
  3201.         D3D12_RTV_DIMENSION_TEXTURE2DMS = 6,
  3202.         D3D12_RTV_DIMENSION_TEXTURE2DMSARRAY    = 7,
  3203.         D3D12_RTV_DIMENSION_TEXTURE3D   = 8
  3204.     }   D3D12_RTV_DIMENSION;
  3205.  
  3206. typedef struct D3D12_RENDER_TARGET_VIEW_DESC
  3207.     {
  3208.     DXGI_FORMAT Format;
  3209.     D3D12_RTV_DIMENSION ViewDimension;
  3210.     union
  3211.         {
  3212.         D3D12_BUFFER_RTV Buffer;
  3213.         D3D12_TEX1D_RTV Texture1D;
  3214.         D3D12_TEX1D_ARRAY_RTV Texture1DArray;
  3215.         D3D12_TEX2D_RTV Texture2D;
  3216.         D3D12_TEX2D_ARRAY_RTV Texture2DArray;
  3217.         D3D12_TEX2DMS_RTV Texture2DMS;
  3218.         D3D12_TEX2DMS_ARRAY_RTV Texture2DMSArray;
  3219.         D3D12_TEX3D_RTV Texture3D;
  3220.         }   ;
  3221.     }   D3D12_RENDER_TARGET_VIEW_DESC;
  3222.  
  3223. typedef struct D3D12_TEX1D_DSV
  3224.     {
  3225.     UINT MipSlice;
  3226.     }   D3D12_TEX1D_DSV;
  3227.  
  3228. typedef struct D3D12_TEX1D_ARRAY_DSV
  3229.     {
  3230.     UINT MipSlice;
  3231.     UINT FirstArraySlice;
  3232.     UINT ArraySize;
  3233.     }   D3D12_TEX1D_ARRAY_DSV;
  3234.  
  3235. typedef struct D3D12_TEX2D_DSV
  3236.     {
  3237.     UINT MipSlice;
  3238.     }   D3D12_TEX2D_DSV;
  3239.  
  3240. typedef struct D3D12_TEX2D_ARRAY_DSV
  3241.     {
  3242.     UINT MipSlice;
  3243.     UINT FirstArraySlice;
  3244.     UINT ArraySize;
  3245.     }   D3D12_TEX2D_ARRAY_DSV;
  3246.  
  3247. typedef struct D3D12_TEX2DMS_DSV
  3248.     {
  3249.     UINT UnusedField_NothingToDefine;
  3250.     }   D3D12_TEX2DMS_DSV;
  3251.  
  3252. typedef struct D3D12_TEX2DMS_ARRAY_DSV
  3253.     {
  3254.     UINT FirstArraySlice;
  3255.     UINT ArraySize;
  3256.     }   D3D12_TEX2DMS_ARRAY_DSV;
  3257.  
  3258. typedef
  3259. enum D3D12_DSV_FLAG
  3260.     {
  3261.         D3D12_DSV_NONE  = 0L,
  3262.         D3D12_DSV_READ_ONLY_DEPTH   = 0x1L,
  3263.         D3D12_DSV_READ_ONLY_STENCIL = 0x2L
  3264.     }   D3D12_DSV_FLAG;
  3265.  
  3266. DEFINE_ENUM_FLAG_OPERATORS( D3D12_DSV_FLAG );
  3267. typedef
  3268. enum D3D12_DSV_DIMENSION
  3269.     {
  3270.         D3D12_DSV_DIMENSION_UNKNOWN = 0,
  3271.         D3D12_DSV_DIMENSION_TEXTURE1D   = 1,
  3272.         D3D12_DSV_DIMENSION_TEXTURE1DARRAY  = 2,
  3273.         D3D12_DSV_DIMENSION_TEXTURE2D   = 3,
  3274.         D3D12_DSV_DIMENSION_TEXTURE2DARRAY  = 4,
  3275.         D3D12_DSV_DIMENSION_TEXTURE2DMS = 5,
  3276.         D3D12_DSV_DIMENSION_TEXTURE2DMSARRAY    = 6
  3277.     }   D3D12_DSV_DIMENSION;
  3278.  
  3279. typedef struct D3D12_DEPTH_STENCIL_VIEW_DESC
  3280.     {
  3281.     DXGI_FORMAT Format;
  3282.     D3D12_DSV_DIMENSION ViewDimension;
  3283.     D3D12_DSV_FLAG Flags;
  3284.     union
  3285.         {
  3286.         D3D12_TEX1D_DSV Texture1D;
  3287.         D3D12_TEX1D_ARRAY_DSV Texture1DArray;
  3288.         D3D12_TEX2D_DSV Texture2D;
  3289.         D3D12_TEX2D_ARRAY_DSV Texture2DArray;
  3290.         D3D12_TEX2DMS_DSV Texture2DMS;
  3291.         D3D12_TEX2DMS_ARRAY_DSV Texture2DMSArray;
  3292.         }   ;
  3293.     }   D3D12_DEPTH_STENCIL_VIEW_DESC;
  3294.  
  3295. typedef
  3296. enum D3D12_CLEAR_FLAG
  3297.     {
  3298.         D3D12_CLEAR_DEPTH   = 0x1L,
  3299.         D3D12_CLEAR_STENCIL = 0x2L
  3300.     }   D3D12_CLEAR_FLAG;
  3301.  
  3302. DEFINE_ENUM_FLAG_OPERATORS( D3D12_CLEAR_FLAG );
  3303. typedef
  3304. enum D3D12_FENCE_MISC_FLAG
  3305.     {
  3306.         D3D12_FENCE_MISC_NONE   = 0,
  3307.         D3D12_FENCE_MISC_SHARED = 0x1,
  3308.         D3D12_FENCE_MISC_SHARED_CROSS_ADAPTER   = 0x2
  3309.     }   D3D12_FENCE_MISC_FLAG;
  3310.  
  3311. DEFINE_ENUM_FLAG_OPERATORS( D3D12_FENCE_MISC_FLAG );
  3312. typedef
  3313. enum D3D12_CREATE_DEVICE_FLAG
  3314.     {
  3315.         D3D12_CREATE_DEVICE_NONE    = 0,
  3316.         D3D12_CREATE_DEVICE_DEBUG   = 0x1,
  3317.         D3D12_CREATE_DEVICE_SHADER_DEBUGGING    = 0x2,
  3318.         D3D12_CREATE_DEVICE_PREVENT_ALTERING_LAYER_SETTINGS_FROM_REGISTRY   = 0x4
  3319.     }   D3D12_CREATE_DEVICE_FLAG;
  3320.  
  3321. DEFINE_ENUM_FLAG_OPERATORS( D3D12_CREATE_DEVICE_FLAG );
  3322. typedef
  3323. enum D3D12_DESCRIPTOR_HEAP_TYPE
  3324.     {
  3325.         D3D12_CBV_SRV_UAV_DESCRIPTOR_HEAP   = 0,
  3326.         D3D12_SAMPLER_DESCRIPTOR_HEAP   = ( D3D12_CBV_SRV_UAV_DESCRIPTOR_HEAP + 1 ) ,
  3327.         D3D12_RTV_DESCRIPTOR_HEAP   = ( D3D12_SAMPLER_DESCRIPTOR_HEAP + 1 ) ,
  3328.         D3D12_DSV_DESCRIPTOR_HEAP   = ( D3D12_RTV_DESCRIPTOR_HEAP + 1 ) ,
  3329.         D3D12_NUM_DESCRIPTOR_HEAP_TYPES = ( D3D12_DSV_DESCRIPTOR_HEAP + 1 )
  3330.     }   D3D12_DESCRIPTOR_HEAP_TYPE;
  3331.  
  3332. typedef
  3333. enum D3D12_DESCRIPTOR_HEAP_FLAGS
  3334.     {
  3335.         D3D12_DESCRIPTOR_HEAP_NONE  = 0,
  3336.         D3D12_DESCRIPTOR_HEAP_SHADER_VISIBLE    = 0x1
  3337.     }   D3D12_DESCRIPTOR_HEAP_FLAGS;
  3338.  
  3339. DEFINE_ENUM_FLAG_OPERATORS( D3D12_DESCRIPTOR_HEAP_FLAGS );
  3340. typedef struct D3D12_DESCRIPTOR_HEAP_DESC
  3341.     {
  3342.     D3D12_DESCRIPTOR_HEAP_TYPE Type;
  3343.     UINT NumDescriptors;
  3344.     D3D12_DESCRIPTOR_HEAP_FLAGS Flags;
  3345.     UINT NodeMask;
  3346.     }   D3D12_DESCRIPTOR_HEAP_DESC;
  3347.  
  3348. typedef
  3349. enum D3D12_DESCRIPTOR_RANGE_TYPE
  3350.     {
  3351.         D3D12_DESCRIPTOR_RANGE_SRV  = 0,
  3352.         D3D12_DESCRIPTOR_RANGE_UAV  = ( D3D12_DESCRIPTOR_RANGE_SRV + 1 ) ,
  3353.         D3D12_DESCRIPTOR_RANGE_CBV  = ( D3D12_DESCRIPTOR_RANGE_UAV + 1 ) ,
  3354.         D3D12_DESCRIPTOR_RANGE_SAMPLER  = ( D3D12_DESCRIPTOR_RANGE_CBV + 1 )
  3355.     }   D3D12_DESCRIPTOR_RANGE_TYPE;
  3356.  
  3357. #if defined( __cplusplus )
  3358. }
  3359. typedef struct D3D12_DESCRIPTOR_RANGE
  3360. {
  3361.     D3D12_DESCRIPTOR_RANGE_TYPE RangeType;
  3362.     UINT NumDescriptors;
  3363.     UINT BaseShaderRegister;
  3364.     UINT RegisterSpace;
  3365.     UINT OffsetInDescriptorsFromTableStart;
  3366.  
  3367.     void Init(
  3368.         D3D12_DESCRIPTOR_RANGE_TYPE rangeType,
  3369.         UINT numDescriptors,
  3370.         UINT baseShaderRegister,
  3371.         UINT registerSpace = 0,
  3372.         UINT offsetInDescriptorsFromTableStart =
  3373.         D3D12_DESCRIPTOR_RANGE_OFFSET_APPEND)
  3374.     {
  3375.         RangeType = rangeType;
  3376.         NumDescriptors = numDescriptors;
  3377.         BaseShaderRegister = baseShaderRegister;
  3378.         RegisterSpace = registerSpace;
  3379.         OffsetInDescriptorsFromTableStart = offsetInDescriptorsFromTableStart;
  3380.     }
  3381. } D3D12_DESCRIPTOR_RANGE;
  3382. extern "C"{
  3383. #else
  3384. typedef struct D3D12_DESCRIPTOR_RANGE
  3385.     {
  3386.     D3D12_DESCRIPTOR_RANGE_TYPE RangeType;
  3387.     UINT NumDescriptors;
  3388.     UINT BaseShaderRegister;
  3389.     UINT RegisterSpace;
  3390.     UINT OffsetInDescriptorsFromTableStart;
  3391.     }   D3D12_DESCRIPTOR_RANGE;
  3392.  
  3393. #endif
  3394. #if defined( __cplusplus )
  3395. }
  3396. typedef struct D3D12_ROOT_DESCRIPTOR_TABLE
  3397. {
  3398.     UINT NumDescriptorRanges;
  3399.     const D3D12_DESCRIPTOR_RANGE* pDescriptorRanges;
  3400.  
  3401.     void Init(
  3402.         UINT numDescriptorRanges,
  3403.         const D3D12_DESCRIPTOR_RANGE* _pDescriptorRanges)
  3404.     {
  3405.         NumDescriptorRanges = numDescriptorRanges;
  3406.         pDescriptorRanges = _pDescriptorRanges;
  3407.     }
  3408. } D3D12_ROOT_DESCRIPTOR_TABLE;
  3409. extern "C"{
  3410. #else
  3411. typedef struct D3D12_ROOT_DESCRIPTOR_TABLE
  3412.     {
  3413.     UINT NumDescriptorRanges;
  3414.     const D3D12_DESCRIPTOR_RANGE *pDescriptorRanges;
  3415.     }   D3D12_ROOT_DESCRIPTOR_TABLE;
  3416.  
  3417. #endif
  3418. #if defined( __cplusplus )
  3419. }
  3420. typedef struct D3D12_ROOT_CONSTANTS
  3421. {
  3422.     UINT ShaderRegister;
  3423.     UINT RegisterSpace;
  3424.     UINT Num32BitValues;
  3425.  
  3426.     void Init(
  3427.         UINT num32BitValues,
  3428.         UINT shaderRegister,
  3429.         UINT registerSpace = 0)
  3430.     {
  3431.         Num32BitValues = num32BitValues;
  3432.         ShaderRegister = shaderRegister;
  3433.         RegisterSpace = registerSpace;
  3434.     }
  3435. } D3D12_ROOT_CONSTANTS;
  3436. extern "C"{
  3437. #else
  3438. typedef struct D3D12_ROOT_CONSTANTS
  3439.     {
  3440.     UINT ShaderRegister;
  3441.     UINT RegisterSpace;
  3442.     UINT Num32BitValues;
  3443.     }   D3D12_ROOT_CONSTANTS;
  3444.  
  3445. #endif
  3446. #if defined( __cplusplus )
  3447. }
  3448. typedef struct D3D12_ROOT_DESCRIPTOR
  3449. {
  3450.     UINT ShaderRegister;
  3451.     UINT RegisterSpace;
  3452.  
  3453.     void Init(
  3454.         UINT shaderRegister,
  3455.         UINT registerSpace = 0)
  3456.     {
  3457.         ShaderRegister = shaderRegister;
  3458.         RegisterSpace = registerSpace;
  3459.     }
  3460. } D3D12_ROOT_DESCRIPTOR;
  3461. extern "C"{
  3462. #else
  3463. typedef struct D3D12_ROOT_DESCRIPTOR
  3464.     {
  3465.     UINT ShaderRegister;
  3466.     UINT RegisterSpace;
  3467.     }   D3D12_ROOT_DESCRIPTOR;
  3468.  
  3469. #endif
  3470. typedef
  3471. enum D3D12_SHADER_VISIBILITY
  3472.     {
  3473.         D3D12_SHADER_VISIBILITY_ALL = 0,
  3474.         D3D12_SHADER_VISIBILITY_VERTEX  = 1,
  3475.         D3D12_SHADER_VISIBILITY_HULL    = 2,
  3476.         D3D12_SHADER_VISIBILITY_DOMAIN  = 3,
  3477.         D3D12_SHADER_VISIBILITY_GEOMETRY    = 4,
  3478.         D3D12_SHADER_VISIBILITY_PIXEL   = 5
  3479.     }   D3D12_SHADER_VISIBILITY;
  3480.  
  3481. typedef
  3482. enum D3D12_ROOT_PARAMETER_TYPE
  3483.     {
  3484.         D3D12_ROOT_PARAMETER_DESCRIPTOR_TABLE   = 0,
  3485.         D3D12_ROOT_PARAMETER_32BIT_CONSTANTS    = ( D3D12_ROOT_PARAMETER_DESCRIPTOR_TABLE + 1 ) ,
  3486.         D3D12_ROOT_PARAMETER_CBV    = ( D3D12_ROOT_PARAMETER_32BIT_CONSTANTS + 1 ) ,
  3487.         D3D12_ROOT_PARAMETER_SRV    = ( D3D12_ROOT_PARAMETER_CBV + 1 ) ,
  3488.         D3D12_ROOT_PARAMETER_UAV    = ( D3D12_ROOT_PARAMETER_SRV + 1 )
  3489.     }   D3D12_ROOT_PARAMETER_TYPE;
  3490.  
  3491. #if defined( __cplusplus )
  3492. }
  3493. typedef struct D3D12_ROOT_PARAMETER
  3494. {
  3495.     D3D12_ROOT_PARAMETER_TYPE ParameterType;
  3496.     union
  3497.     {
  3498.         D3D12_ROOT_DESCRIPTOR_TABLE    DescriptorTable;
  3499.         D3D12_ROOT_CONSTANTS           Constants;
  3500.         D3D12_ROOT_DESCRIPTOR          Descriptor;
  3501.     };
  3502.     D3D12_SHADER_VISIBILITY ShaderVisibility;
  3503.  
  3504.     void InitAsDescriptorTable(
  3505.         UINT numDescriptorRanges,
  3506.         const D3D12_DESCRIPTOR_RANGE* pDescriptorRanges,
  3507.         D3D12_SHADER_VISIBILITY visibility = D3D12_SHADER_VISIBILITY_ALL)
  3508.     {
  3509.         ParameterType = D3D12_ROOT_PARAMETER_DESCRIPTOR_TABLE;
  3510.         ShaderVisibility = visibility;
  3511.         DescriptorTable.Init(numDescriptorRanges, pDescriptorRanges);
  3512.     }
  3513.  
  3514.     void InitAsConstants(
  3515.         UINT num32BitValues,
  3516.         UINT shaderRegister,
  3517.         UINT registerSpace = 0,
  3518.         D3D12_SHADER_VISIBILITY visibility = D3D12_SHADER_VISIBILITY_ALL)
  3519.     {
  3520.         ParameterType = D3D12_ROOT_PARAMETER_32BIT_CONSTANTS;
  3521.         ShaderVisibility = visibility;
  3522.         Constants.Init(num32BitValues, shaderRegister, registerSpace);
  3523.     }
  3524.  
  3525.     void InitAsConstantBufferView(
  3526.         UINT shaderRegister,
  3527.         UINT registerSpace = 0,
  3528.         D3D12_SHADER_VISIBILITY visibility = D3D12_SHADER_VISIBILITY_ALL)
  3529.     {
  3530.         ParameterType = D3D12_ROOT_PARAMETER_CBV;
  3531.         ShaderVisibility = visibility;
  3532.         Descriptor.Init(shaderRegister, registerSpace);
  3533.     }
  3534.  
  3535.     void InitAsShaderResourceView(
  3536.         UINT shaderRegister,
  3537.         UINT registerSpace = 0,
  3538.         D3D12_SHADER_VISIBILITY visibility = D3D12_SHADER_VISIBILITY_ALL)
  3539.     {
  3540.         ParameterType = D3D12_ROOT_PARAMETER_SRV;
  3541.         ShaderVisibility = visibility;
  3542.         Descriptor.Init(shaderRegister, registerSpace);
  3543.     }
  3544.  
  3545.     void InitAsUnorderedAccessView(
  3546.         UINT shaderRegister,
  3547.         UINT registerSpace = 0,
  3548.         D3D12_SHADER_VISIBILITY visibility = D3D12_SHADER_VISIBILITY_ALL)
  3549.     {
  3550.         ParameterType = D3D12_ROOT_PARAMETER_UAV;
  3551.         ShaderVisibility = visibility;
  3552.         Descriptor.Init(shaderRegister, registerSpace);
  3553.     }
  3554. } D3D12_ROOT_PARAMETER;
  3555. extern "C"{
  3556. #else
  3557. typedef struct D3D12_ROOT_PARAMETER
  3558.     {
  3559.     D3D12_ROOT_PARAMETER_TYPE ParameterType;
  3560.     union
  3561.         {
  3562.         D3D12_ROOT_DESCRIPTOR_TABLE DescriptorTable;
  3563.         D3D12_ROOT_CONSTANTS Constants;
  3564.         D3D12_ROOT_DESCRIPTOR Descriptor;
  3565.         }   ;
  3566.     D3D12_SHADER_VISIBILITY ShaderVisibility;
  3567.     }   D3D12_ROOT_PARAMETER;
  3568.  
  3569. #endif
  3570. typedef
  3571. enum D3D12_ROOT_SIGNATURE_FLAGS
  3572.     {
  3573.         D3D12_ROOT_SIGNATURE_NONE   = 0,
  3574.         D3D12_ROOT_SIGNATURE_ALLOW_INPUT_ASSEMBLER_INPUT_LAYOUT = 0x1,
  3575.         D3D12_ROOT_SIGNATURE_DENY_VERTEX_SHADER_ROOT_ACCESS = 0x2,
  3576.         D3D12_ROOT_SIGNATURE_DENY_HULL_SHADER_ROOT_ACCESS   = 0x4,
  3577.         D3D12_ROOT_SIGNATURE_DENY_DOMAIN_SHADER_ROOT_ACCESS = 0x8,
  3578.         D3D12_ROOT_SIGNATURE_DENY_GEOMETRY_SHADER_ROOT_ACCESS   = 0x10,
  3579.         D3D12_ROOT_SIGNATURE_DENY_PIXEL_SHADER_ROOT_ACCESS  = 0x20,
  3580.         D3D12_ROOT_SIGNATURE_ALLOW_STREAM_OUTPUT    = 0x40
  3581.     }   D3D12_ROOT_SIGNATURE_FLAGS;
  3582.  
  3583. DEFINE_ENUM_FLAG_OPERATORS( D3D12_ROOT_SIGNATURE_FLAGS );
  3584. typedef
  3585. enum D3D12_STATIC_BORDER_COLOR
  3586.     {
  3587.         D3D12_STATIC_BORDER_COLOR_TRANSPARENT_BLACK = 0,
  3588.         D3D12_STATIC_BORDER_COLOR_OPAQUE_BLACK  = ( D3D12_STATIC_BORDER_COLOR_TRANSPARENT_BLACK + 1 ) ,
  3589.         D3D12_STATIC_BORDER_COLOR_OPAQUE_WHITE  = ( D3D12_STATIC_BORDER_COLOR_OPAQUE_BLACK + 1 )
  3590.     }   D3D12_STATIC_BORDER_COLOR;
  3591.  
  3592. #if defined( __cplusplus )
  3593. }
  3594. typedef struct D3D12_STATIC_SAMPLER
  3595. {
  3596.     D3D12_FILTER Filter;
  3597.     D3D12_TEXTURE_ADDRESS_MODE AddressU;
  3598.     D3D12_TEXTURE_ADDRESS_MODE AddressV;
  3599.     D3D12_TEXTURE_ADDRESS_MODE AddressW;
  3600.     FLOAT MipLODBias;
  3601.     UINT MaxAnisotropy;
  3602.     D3D12_COMPARISON_FUNC ComparisonFunc;
  3603.     D3D12_STATIC_BORDER_COLOR BorderColor;
  3604.     FLOAT MinLOD;
  3605.     FLOAT MaxLOD;
  3606.     UINT ShaderRegister;
  3607.     UINT RegisterSpace;
  3608.     D3D12_SHADER_VISIBILITY ShaderVisibility;
  3609.  
  3610.     // Initialize struct
  3611.     void Init(
  3612.          UINT shaderRegister,
  3613.          D3D12_FILTER filter = D3D12_FILTER_ANISOTROPIC,
  3614.          D3D12_TEXTURE_ADDRESS_MODE addressU = D3D12_TEXTURE_ADDRESS_WRAP,
  3615.          D3D12_TEXTURE_ADDRESS_MODE addressV = D3D12_TEXTURE_ADDRESS_WRAP,
  3616.          D3D12_TEXTURE_ADDRESS_MODE addressW = D3D12_TEXTURE_ADDRESS_WRAP,
  3617.          FLOAT mipLODBias = 0,
  3618.          UINT maxAnisotropy = 16,
  3619.          D3D12_COMPARISON_FUNC comparisonFunc = D3D12_COMPARISON_LESS_EQUAL,
  3620.          D3D12_STATIC_BORDER_COLOR borderColor = D3D12_STATIC_BORDER_COLOR_OPAQUE_WHITE,
  3621.          FLOAT minLOD = 0.f,
  3622.          FLOAT maxLOD = D3D12_FLOAT32_MAX,
  3623.          D3D12_SHADER_VISIBILITY shaderVisibility = D3D12_SHADER_VISIBILITY_ALL,
  3624.          UINT registerSpace = 0)
  3625.     {
  3626.         ShaderRegister = shaderRegister;
  3627.         Filter = filter;
  3628.         AddressU = addressU;
  3629.         AddressV = addressV;
  3630.         AddressW = addressW;
  3631.         MipLODBias = mipLODBias;
  3632.         MaxAnisotropy = maxAnisotropy;
  3633.         ComparisonFunc = comparisonFunc;
  3634.         BorderColor = borderColor;
  3635.         MinLOD = minLOD;
  3636.         MaxLOD = maxLOD;
  3637.         ShaderVisibility = shaderVisibility;
  3638.         RegisterSpace = registerSpace;
  3639.     }
  3640.  
  3641.     D3D12_STATIC_SAMPLER(
  3642.          UINT shaderRegister = 0,
  3643.          D3D12_FILTER filter = D3D12_FILTER_ANISOTROPIC,
  3644.          D3D12_TEXTURE_ADDRESS_MODE addressU = D3D12_TEXTURE_ADDRESS_WRAP,
  3645.          D3D12_TEXTURE_ADDRESS_MODE addressV = D3D12_TEXTURE_ADDRESS_WRAP,
  3646.          D3D12_TEXTURE_ADDRESS_MODE addressW = D3D12_TEXTURE_ADDRESS_WRAP,
  3647.          FLOAT mipLODBias = 0,
  3648.          UINT maxAnisotropy = 16,
  3649.          D3D12_COMPARISON_FUNC comparisonFunc = D3D12_COMPARISON_LESS_EQUAL,
  3650.          D3D12_STATIC_BORDER_COLOR borderColor = D3D12_STATIC_BORDER_COLOR_OPAQUE_WHITE,
  3651.          FLOAT minLOD = 0.f,
  3652.          FLOAT maxLOD = D3D12_FLOAT32_MAX,
  3653.          D3D12_SHADER_VISIBILITY shaderVisibility = D3D12_SHADER_VISIBILITY_ALL,
  3654.          UINT registerSpace = 0)
  3655.     {
  3656.         Init(shaderRegister,filter,addressU,addressV,addressW,mipLODBias,
  3657.              maxAnisotropy,comparisonFunc,borderColor,minLOD,maxLOD,shaderVisibility,registerSpace);
  3658.     }
  3659. } D3D12_STATIC_SAMPLER;
  3660. extern "C"{
  3661. #else
  3662. typedef struct D3D12_STATIC_SAMPLER
  3663.     {
  3664.     D3D12_FILTER Filter;
  3665.     D3D12_TEXTURE_ADDRESS_MODE AddressU;
  3666.     D3D12_TEXTURE_ADDRESS_MODE AddressV;
  3667.     D3D12_TEXTURE_ADDRESS_MODE AddressW;
  3668.     FLOAT MipLODBias;
  3669.     UINT MaxAnisotropy;
  3670.     D3D12_COMPARISON_FUNC ComparisonFunc;
  3671.     D3D12_STATIC_BORDER_COLOR BorderColor;
  3672.     FLOAT MinLOD;
  3673.     FLOAT MaxLOD;
  3674.     UINT ShaderRegister;
  3675.     UINT RegisterSpace;
  3676.     D3D12_SHADER_VISIBILITY ShaderVisibility;
  3677.     }   D3D12_STATIC_SAMPLER;
  3678.  
  3679. #endif
  3680. #if defined( __cplusplus )
  3681. }
  3682. typedef struct D3D12_ROOT_SIGNATURE
  3683. {
  3684.     UINT NumParameters;
  3685.     const D3D12_ROOT_PARAMETER* pParameters;
  3686.     UINT NumStaticSamplers;
  3687.     const D3D12_STATIC_SAMPLER* pStaticSamplers;
  3688.     D3D12_ROOT_SIGNATURE_FLAGS Flags;
  3689.  
  3690.     // Initialize struct
  3691.     void Init(
  3692.         UINT numParameters,
  3693.         const D3D12_ROOT_PARAMETER* _pParameters,
  3694.         UINT numStaticSamplers = 0,
  3695.         const D3D12_STATIC_SAMPLER* _pStaticSamplers = NULL,
  3696.         D3D12_ROOT_SIGNATURE_FLAGS flags = D3D12_ROOT_SIGNATURE_NONE)
  3697.     {
  3698.         NumParameters = numParameters;
  3699.         pParameters = _pParameters;
  3700.         NumStaticSamplers = numStaticSamplers;
  3701.         pStaticSamplers = _pStaticSamplers;
  3702.         Flags = flags;
  3703.     }
  3704.  
  3705.     D3D12_ROOT_SIGNATURE() { Init(0,NULL,0,NULL,D3D12_ROOT_SIGNATURE_NONE);}
  3706.  
  3707.     D3D12_ROOT_SIGNATURE(
  3708.         UINT numParameters,
  3709.         const D3D12_ROOT_PARAMETER* _pParameters,
  3710.         UINT numStaticSamplers = 0,
  3711.         const D3D12_STATIC_SAMPLER* _pStaticSamplers = NULL,
  3712.         D3D12_ROOT_SIGNATURE_FLAGS flags = D3D12_ROOT_SIGNATURE_NONE)
  3713.     {
  3714.         Init(numParameters, _pParameters, numStaticSamplers, _pStaticSamplers, flags);
  3715.     }
  3716. } D3D12_ROOT_SIGNATURE;
  3717. extern "C"{
  3718. #else
  3719. typedef struct D3D12_ROOT_SIGNATURE
  3720.     {
  3721.     UINT NumParameters;
  3722.     const D3D12_ROOT_PARAMETER *pParameters;
  3723.     UINT NumStaticSamplers;
  3724.     const D3D12_STATIC_SAMPLER *pStaticSamplers;
  3725.     D3D12_ROOT_SIGNATURE_FLAGS Flags;
  3726.     }   D3D12_ROOT_SIGNATURE;
  3727.  
  3728. #endif
  3729. typedef
  3730. enum D3D_ROOT_SIGNATURE_VERSION
  3731.     {
  3732.         D3D_ROOT_SIGNATURE_V1   = 0x1
  3733.     }   D3D_ROOT_SIGNATURE_VERSION;
  3734.  
  3735.  
  3736.  
  3737. extern RPC_IF_HANDLE __MIDL_itf_d3d12_0000_0001_v0_0_c_ifspec;
  3738. extern RPC_IF_HANDLE __MIDL_itf_d3d12_0000_0001_v0_0_s_ifspec;
  3739.  
  3740. #ifndef __ID3D12RootSignatureDeserializer_INTERFACE_DEFINED__
  3741. #define __ID3D12RootSignatureDeserializer_INTERFACE_DEFINED__
  3742.  
  3743. /* interface ID3D12RootSignatureDeserializer */
  3744. /* [unique][local][object][uuid] */
  3745.  
  3746.  
  3747. EXTERN_C const IID IID_ID3D12RootSignatureDeserializer;
  3748.  
  3749. #if defined(__cplusplus) && !defined(CINTERFACE)
  3750.    
  3751.     MIDL_INTERFACE("34AB647B-3CC8-46AC-841B-C0965645C046")
  3752.     ID3D12RootSignatureDeserializer : public IUnknown
  3753.     {
  3754.     public:
  3755.         virtual const D3D12_ROOT_SIGNATURE *STDMETHODCALLTYPE GetRootSignature( void) = 0;
  3756.        
  3757.     };
  3758.    
  3759.    
  3760. #else   /* C style interface */
  3761.  
  3762.     typedef struct ID3D12RootSignatureDeserializerVtbl
  3763.     {
  3764.         BEGIN_INTERFACE
  3765.        
  3766.         HRESULT ( STDMETHODCALLTYPE *QueryInterface )(
  3767.             ID3D12RootSignatureDeserializer * This,
  3768.             REFIID riid,
  3769.             _COM_Outptr_  void **ppvObject);
  3770.        
  3771.         ULONG ( STDMETHODCALLTYPE *AddRef )(
  3772.             ID3D12RootSignatureDeserializer * This);
  3773.        
  3774.         ULONG ( STDMETHODCALLTYPE *Release )(
  3775.             ID3D12RootSignatureDeserializer * This);
  3776.        
  3777.         const D3D12_ROOT_SIGNATURE *( STDMETHODCALLTYPE *GetRootSignature )(
  3778.             ID3D12RootSignatureDeserializer * This);
  3779.        
  3780.         END_INTERFACE
  3781.     } ID3D12RootSignatureDeserializerVtbl;
  3782.  
  3783.     interface ID3D12RootSignatureDeserializer
  3784.     {
  3785.         CONST_VTBL struct ID3D12RootSignatureDeserializerVtbl *lpVtbl;
  3786.     };
  3787.  
  3788.    
  3789.  
  3790. #ifdef COBJMACROS
  3791.  
  3792.  
  3793. #define ID3D12RootSignatureDeserializer_QueryInterface(This,riid,ppvObject) \
  3794.     ( (This)->lpVtbl -> QueryInterface(This,riid,ppvObject) )
  3795.  
  3796. #define ID3D12RootSignatureDeserializer_AddRef(This)    \
  3797.     ( (This)->lpVtbl -> AddRef(This) )
  3798.  
  3799. #define ID3D12RootSignatureDeserializer_Release(This)   \
  3800.     ( (This)->lpVtbl -> Release(This) )
  3801.  
  3802.  
  3803. #define ID3D12RootSignatureDeserializer_GetRootSignature(This)  \
  3804.     ( (This)->lpVtbl -> GetRootSignature(This) )
  3805.  
  3806. #endif /* COBJMACROS */
  3807.  
  3808.  
  3809. #endif  /* C style interface */
  3810.  
  3811.  
  3812.  
  3813.  
  3814. #endif  /* __ID3D12RootSignatureDeserializer_INTERFACE_DEFINED__ */
  3815.  
  3816.  
  3817. /* interface __MIDL_itf_d3d12_0000_0002 */
  3818. /* [local] */
  3819.  
  3820. typedef HRESULT (WINAPI* PFN_D3D12_SERIALIZE_ROOT_SIGNATURE)(
  3821.                             _In_ const D3D12_ROOT_SIGNATURE* pRootSignature,
  3822.                             _In_ D3D_ROOT_SIGNATURE_VERSION Version,
  3823.                             _Out_ ID3DBlob** ppBlob,
  3824.                             _Always_(_Outptr_opt_result_maybenull_) ID3DBlob** ppErrorBlob);
  3825.  
  3826. HRESULT WINAPI D3D12SerializeRootSignature(
  3827.                             _In_ const D3D12_ROOT_SIGNATURE* pRootSignature,
  3828.                             _In_ D3D_ROOT_SIGNATURE_VERSION Version,
  3829.                             _Out_ ID3DBlob** ppBlob,
  3830.                             _Always_(_Outptr_opt_result_maybenull_) ID3DBlob** ppErrorBlob);
  3831.  
  3832. typedef HRESULT (WINAPI* PFN_D3D12_CREATE_ROOT_SIGNATURE_DESERIALIZER)(
  3833.                                      _In_reads_bytes_(SrcDataSizeInBytes) LPCVOID pSrcData,
  3834.                                      _In_ SIZE_T SrcDataSizeInBytes,
  3835.                                      _In_ REFIID pRootSignatureDeserializerInterface,
  3836.                                      _Out_ void** ppRootSignatureDeserializer);
  3837.  
  3838. HRESULT WINAPI D3D12CreateRootSignatureDeserializer(
  3839.                                      _In_reads_bytes_(SrcDataSizeInBytes) LPCVOID pSrcData,
  3840.                                      _In_ SIZE_T SrcDataSizeInBytes,
  3841.                                      _In_ REFIID pRootSignatureDeserializerInterface,
  3842.                                      _Out_ void** ppRootSignatureDeserializer);
  3843. #if defined( __cplusplus )
  3844. }
  3845. typedef struct D3D12_CPU_DESCRIPTOR_HANDLE
  3846. {
  3847.     SIZE_T ptr;
  3848.  
  3849.     D3D12_CPU_DESCRIPTOR_HANDLE MakeOffsetted(INT offsetInDecriptors, UINT descriptorIncrementSize) const
  3850.     {
  3851.         D3D12_CPU_DESCRIPTOR_HANDLE offsetted;
  3852.         offsetted.ptr = ptr + offsetInDecriptors * descriptorIncrementSize;
  3853.         return offsetted;
  3854.     }
  3855.     D3D12_CPU_DESCRIPTOR_HANDLE MakeOffsetted(INT offsetScaledByIncrementSize) const
  3856.     {
  3857.         D3D12_CPU_DESCRIPTOR_HANDLE offsetted;
  3858.         offsetted.ptr = ptr + offsetScaledByIncrementSize;
  3859.         return offsetted;
  3860.     }
  3861.     D3D12_CPU_DESCRIPTOR_HANDLE& Offset(INT offsetInDecriptors, UINT descriptorIncrementSize)
  3862.     {
  3863.         ptr += offsetInDecriptors * descriptorIncrementSize;
  3864.         return *this;
  3865.     }
  3866.     D3D12_CPU_DESCRIPTOR_HANDLE& Offset(INT offsetScaledByIncrementSize)
  3867.     {
  3868.         ptr += offsetScaledByIncrementSize;
  3869.         return *this;
  3870.     }
  3871.  
  3872. } D3D12_CPU_DESCRIPTOR_HANDLE;
  3873. extern "C"{
  3874. #else
  3875. typedef struct D3D12_CPU_DESCRIPTOR_HANDLE
  3876.     {
  3877.     SIZE_T ptr;
  3878.     }   D3D12_CPU_DESCRIPTOR_HANDLE;
  3879.  
  3880. #endif
  3881. #if defined( __cplusplus )
  3882. }
  3883. typedef struct D3D12_GPU_DESCRIPTOR_HANDLE
  3884. {
  3885.     UINT64 ptr;
  3886.  
  3887.     D3D12_GPU_DESCRIPTOR_HANDLE MakeOffsetted(INT offsetInDecriptors, UINT descriptorIncrementSize) const
  3888.     {
  3889.         D3D12_GPU_DESCRIPTOR_HANDLE offsetted;
  3890.         offsetted.ptr = ptr + offsetInDecriptors * descriptorIncrementSize;
  3891.         return offsetted;
  3892.     }
  3893.     D3D12_GPU_DESCRIPTOR_HANDLE MakeOffsetted(INT offsetScaledByIncrementSize) const
  3894.     {
  3895.         D3D12_GPU_DESCRIPTOR_HANDLE offsetted;
  3896.         offsetted.ptr = ptr + offsetScaledByIncrementSize;
  3897.         return offsetted;
  3898.     }
  3899.     D3D12_GPU_DESCRIPTOR_HANDLE& Offset(INT offsetInDecriptors, UINT descriptorIncrementSize)
  3900.     {
  3901.         ptr += offsetInDecriptors * descriptorIncrementSize;
  3902.         return *this;
  3903.     }
  3904.     D3D12_GPU_DESCRIPTOR_HANDLE& Offset(INT offsetScaledByIncrementSize)
  3905.     {
  3906.         ptr += offsetScaledByIncrementSize;
  3907.         return *this;
  3908.     }
  3909.  
  3910. } D3D12_GPU_DESCRIPTOR_HANDLE;
  3911. extern "C"{
  3912. #else
  3913. typedef struct D3D12_GPU_DESCRIPTOR_HANDLE
  3914.     {
  3915.     UINT64 ptr;
  3916.     }   D3D12_GPU_DESCRIPTOR_HANDLE;
  3917.  
  3918. #endif
  3919. // If rects are supplied in D3D12_DISCARD_RESOURCE_DESC, below, the resource
  3920. // must have 2D subresources with all specified subresources the same dimension.
  3921. typedef struct D3D12_DISCARD_RESOURCE_DESC
  3922.     {
  3923.     _In_reads_(NumRects)  const D3D12_RECT *pRects;
  3924.     UINT NumRects;
  3925.     UINT FirstSubresource;
  3926.     UINT NumSubresources;
  3927.     }   D3D12_DISCARD_RESOURCE_DESC;
  3928.  
  3929. typedef
  3930. enum D3D12_QUERY_HEAP_TYPE
  3931.     {
  3932.         D3D12_QUERY_HEAP_TYPE_OCCLUSION = 0,
  3933.         D3D12_QUERY_HEAP_TYPE_TIMESTAMP = 1,
  3934.         D3D12_QUERY_HEAP_TYPE_PIPELINE_STATISTICS   = 2,
  3935.         D3D12_QUERY_HEAP_TYPE_SO_STATISTICS = 3
  3936.     }   D3D12_QUERY_HEAP_TYPE;
  3937.  
  3938. typedef struct D3D12_QUERY_HEAP_DESC
  3939.     {
  3940.     D3D12_QUERY_HEAP_TYPE Type;
  3941.     UINT Count;
  3942.     UINT NodeMask;
  3943.     }   D3D12_QUERY_HEAP_DESC;
  3944.  
  3945. typedef
  3946. enum D3D12_QUERY_TYPE
  3947.     {
  3948.         D3D12_QUERY_TYPE_OCCLUSION  = 0,
  3949.         D3D12_QUERY_TYPE_BINARY_OCCLUSION   = 1,
  3950.         D3D12_QUERY_TYPE_TIMESTAMP  = 2,
  3951.         D3D12_QUERY_TYPE_PIPELINE_STATISTICS    = 3,
  3952.         D3D12_QUERY_TYPE_SO_STATISTICS_STREAM0  = 4,
  3953.         D3D12_QUERY_TYPE_SO_STATISTICS_STREAM1  = 5,
  3954.         D3D12_QUERY_TYPE_SO_STATISTICS_STREAM2  = 6,
  3955.         D3D12_QUERY_TYPE_SO_STATISTICS_STREAM3  = 7
  3956.     }   D3D12_QUERY_TYPE;
  3957.  
  3958. typedef
  3959. enum D3D12_PREDICATION_OP
  3960.     {
  3961.         D3D12_PREDICATION_OP_EQUAL_ZERO = 0,
  3962.         D3D12_PREDICATION_OP_NOT_EQUAL_ZERO = 1
  3963.     }   D3D12_PREDICATION_OP;
  3964.  
  3965. typedef struct D3D12_QUERY_DATA_PIPELINE_STATISTICS
  3966.     {
  3967.     UINT64 IAVertices;
  3968.     UINT64 IAPrimitives;
  3969.     UINT64 VSInvocations;
  3970.     UINT64 GSInvocations;
  3971.     UINT64 GSPrimitives;
  3972.     UINT64 CInvocations;
  3973.     UINT64 CPrimitives;
  3974.     UINT64 PSInvocations;
  3975.     UINT64 HSInvocations;
  3976.     UINT64 DSInvocations;
  3977.     UINT64 CSInvocations;
  3978.     }   D3D12_QUERY_DATA_PIPELINE_STATISTICS;
  3979.  
  3980. typedef struct D3D12_QUERY_DATA_SO_STATISTICS
  3981.     {
  3982.     UINT64 NumPrimitivesWritten;
  3983.     UINT64 PrimitivesStorageNeeded;
  3984.     }   D3D12_QUERY_DATA_SO_STATISTICS;
  3985.  
  3986. typedef struct D3D12_STREAM_OUTPUT_BUFFER_VIEW
  3987.     {
  3988.     D3D12_GPU_VIRTUAL_ADDRESS BufferLocation;
  3989.     UINT64 SizeInBytes;
  3990.     D3D12_GPU_VIRTUAL_ADDRESS BufferFilledSizeLocation;
  3991.     }   D3D12_STREAM_OUTPUT_BUFFER_VIEW;
  3992.  
  3993. typedef struct D3D12_DRAW_ARGUMENTS
  3994.     {
  3995.     UINT VertexCountPerInstance;
  3996.     UINT InstanceCount;
  3997.     UINT StartVertexLocation;
  3998.     UINT StartInstanceLocation;
  3999.     }   D3D12_DRAW_ARGUMENTS;
  4000.  
  4001. typedef struct D3D12_DRAW_INDEXED_ARGUMENTS
  4002.     {
  4003.     UINT IndexCountPerInstance;
  4004.     UINT InstanceCount;
  4005.     UINT StartIndexLocation;
  4006.     INT BaseVertexLocation;
  4007.     UINT StartInstanceLocation;
  4008.     }   D3D12_DRAW_INDEXED_ARGUMENTS;
  4009.  
  4010. typedef struct D3D12_DISPATCH_ARGUMENTS
  4011.     {
  4012.     UINT ThreadGroupCountX;
  4013.     UINT ThreadGroupCountY;
  4014.     UINT ThreadGroupCountZ;
  4015.     }   D3D12_DISPATCH_ARGUMENTS;
  4016.  
  4017. typedef struct D3D12_VERTEX_BUFFER_VIEW
  4018.     {
  4019.     D3D12_GPU_VIRTUAL_ADDRESS BufferLocation;
  4020.     UINT SizeInBytes;
  4021.     UINT StrideInBytes;
  4022.     }   D3D12_VERTEX_BUFFER_VIEW;
  4023.  
  4024. typedef struct D3D12_INDEX_BUFFER_VIEW
  4025.     {
  4026.     D3D12_GPU_VIRTUAL_ADDRESS BufferLocation;
  4027.     UINT SizeInBytes;
  4028.     DXGI_FORMAT Format;
  4029.     }   D3D12_INDEX_BUFFER_VIEW;
  4030.  
  4031. typedef
  4032. enum D3D12_INDIRECT_PARAMETER_TYPE
  4033.     {
  4034.         D3D12_INDIRECT_PARAMETER_DRAW   = 0,
  4035.         D3D12_INDIRECT_PARAMETER_DRAW_INDEXED   = ( D3D12_INDIRECT_PARAMETER_DRAW + 1 ) ,
  4036.         D3D12_INDIRECT_PARAMETER_DISPATCH   = ( D3D12_INDIRECT_PARAMETER_DRAW_INDEXED + 1 ) ,
  4037.         D3D12_INDIRECT_PARAMETER_VERTEX_BUFFER_VIEW = ( D3D12_INDIRECT_PARAMETER_DISPATCH + 1 ) ,
  4038.         D3D12_INDIRECT_PARAMETER_INDEX_BUFFER_VIEW  = ( D3D12_INDIRECT_PARAMETER_VERTEX_BUFFER_VIEW + 1 ) ,
  4039.         D3D12_INDIRECT_PARAMETER_CONSTANT   = ( D3D12_INDIRECT_PARAMETER_INDEX_BUFFER_VIEW + 1 ) ,
  4040.         D3D12_INDIRECT_PARAMETER_CONSTANT_BUFFER_VIEW   = ( D3D12_INDIRECT_PARAMETER_CONSTANT + 1 ) ,
  4041.         D3D12_INDIRECT_PARAMETER_SHADER_RESOURCE_VIEW   = ( D3D12_INDIRECT_PARAMETER_CONSTANT_BUFFER_VIEW + 1 ) ,
  4042.         D3D12_INDIRECT_PARAMETER_UNORDERED_ACCESS_VIEW  = ( D3D12_INDIRECT_PARAMETER_SHADER_RESOURCE_VIEW + 1 )
  4043.     }   D3D12_INDIRECT_PARAMETER_TYPE;
  4044.  
  4045. typedef struct D3D12_INDIRECT_PARAMETER
  4046.     {
  4047.     D3D12_INDIRECT_PARAMETER_TYPE Type;
  4048.     union
  4049.         {
  4050.         struct
  4051.             {
  4052.             UINT Slot;
  4053.             }   VertexBuffer;
  4054.         struct
  4055.             {
  4056.             UINT RootParameterIndex;
  4057.             UINT DestOffsetIn32BitValues;
  4058.             UINT Num32BitValuesToSet;
  4059.             }   Constant;
  4060.         struct
  4061.             {
  4062.             UINT RootParameterIndex;
  4063.             }   ConstantBufferView;
  4064.         struct
  4065.             {
  4066.             UINT RootParameterIndex;
  4067.             }   ShaderResourceView;
  4068.         struct
  4069.             {
  4070.             UINT RootParameterIndex;
  4071.             }   UnorderedAccessView;
  4072.         }   ;
  4073.     }   D3D12_INDIRECT_PARAMETER;
  4074.  
  4075. typedef struct D3D12_COMMAND_SIGNATURE
  4076.     {
  4077.     UINT ByteStride;
  4078.     UINT ParameterCount;
  4079.     const D3D12_INDIRECT_PARAMETER *pParameters;
  4080.     UINT NodeMask;
  4081.     }   D3D12_COMMAND_SIGNATURE;
  4082.  
  4083. #define D3D12_SDK_VERSION   ( 18 )
  4084.  
  4085.  
  4086.  
  4087.  
  4088. extern RPC_IF_HANDLE __MIDL_itf_d3d12_0000_0002_v0_0_c_ifspec;
  4089. extern RPC_IF_HANDLE __MIDL_itf_d3d12_0000_0002_v0_0_s_ifspec;
  4090.  
  4091. #ifndef __ID3D12Pageable_INTERFACE_DEFINED__
  4092. #define __ID3D12Pageable_INTERFACE_DEFINED__
  4093.  
  4094. /* interface ID3D12Pageable */
  4095. /* [unique][local][object][uuid] */
  4096.  
  4097.  
  4098. EXTERN_C const IID IID_ID3D12Pageable;
  4099.  
  4100. #if defined(__cplusplus) && !defined(CINTERFACE)
  4101.    
  4102.     MIDL_INTERFACE("63ee58fb-1268-4835-86da-f008ce62f0d6")
  4103.     ID3D12Pageable : public ID3D12DeviceChild
  4104.     {
  4105.     public:
  4106.     };
  4107.    
  4108.    
  4109. #else   /* C style interface */
  4110.  
  4111.     typedef struct ID3D12PageableVtbl
  4112.     {
  4113.         BEGIN_INTERFACE
  4114.        
  4115.         HRESULT ( STDMETHODCALLTYPE *QueryInterface )(
  4116.             ID3D12Pageable * This,
  4117.             REFIID riid,
  4118.             _COM_Outptr_  void **ppvObject);
  4119.        
  4120.         ULONG ( STDMETHODCALLTYPE *AddRef )(
  4121.             ID3D12Pageable * This);
  4122.        
  4123.         ULONG ( STDMETHODCALLTYPE *Release )(
  4124.             ID3D12Pageable * This);
  4125.        
  4126.         HRESULT ( STDMETHODCALLTYPE *GetPrivateData )(
  4127.             ID3D12Pageable * This,
  4128.             _In_  REFGUID guid,
  4129.             _Inout_  UINT *pDataSize,
  4130.             _Out_writes_bytes_opt_( *pDataSize )  void *pData);
  4131.        
  4132.         HRESULT ( STDMETHODCALLTYPE *SetPrivateData )(
  4133.             ID3D12Pageable * This,
  4134.             _In_  REFGUID guid,
  4135.             _In_  UINT DataSize,
  4136.             _In_reads_bytes_opt_( DataSize )  const void *pData);
  4137.        
  4138.         HRESULT ( STDMETHODCALLTYPE *SetPrivateDataInterface )(
  4139.             ID3D12Pageable * This,
  4140.             _In_  REFGUID guid,
  4141.             _In_opt_  const IUnknown *pData);
  4142.        
  4143.         HRESULT ( STDMETHODCALLTYPE *SetName )(
  4144.             ID3D12Pageable * This,
  4145.             _In_z_  LPCWSTR Name);
  4146.        
  4147.         HRESULT ( STDMETHODCALLTYPE *GetDevice )(
  4148.             ID3D12Pageable * This,
  4149.             REFIID riid,
  4150.             _COM_Outptr_opt_  void **ppvDevice);
  4151.        
  4152.         END_INTERFACE
  4153.     } ID3D12PageableVtbl;
  4154.  
  4155.     interface ID3D12Pageable
  4156.     {
  4157.         CONST_VTBL struct ID3D12PageableVtbl *lpVtbl;
  4158.     };
  4159.  
  4160.    
  4161.  
  4162. #ifdef COBJMACROS
  4163.  
  4164.  
  4165. #define ID3D12Pageable_QueryInterface(This,riid,ppvObject)  \
  4166.     ( (This)->lpVtbl -> QueryInterface(This,riid,ppvObject) )
  4167.  
  4168. #define ID3D12Pageable_AddRef(This) \
  4169.     ( (This)->lpVtbl -> AddRef(This) )
  4170.  
  4171. #define ID3D12Pageable_Release(This)    \
  4172.     ( (This)->lpVtbl -> Release(This) )
  4173.  
  4174.  
  4175. #define ID3D12Pageable_GetPrivateData(This,guid,pDataSize,pData)    \
  4176.     ( (This)->lpVtbl -> GetPrivateData(This,guid,pDataSize,pData) )
  4177.  
  4178. #define ID3D12Pageable_SetPrivateData(This,guid,DataSize,pData) \
  4179.     ( (This)->lpVtbl -> SetPrivateData(This,guid,DataSize,pData) )
  4180.  
  4181. #define ID3D12Pageable_SetPrivateDataInterface(This,guid,pData) \
  4182.     ( (This)->lpVtbl -> SetPrivateDataInterface(This,guid,pData) )
  4183.  
  4184. #define ID3D12Pageable_SetName(This,Name)   \
  4185.     ( (This)->lpVtbl -> SetName(This,Name) )
  4186.  
  4187.  
  4188. #define ID3D12Pageable_GetDevice(This,riid,ppvDevice)   \
  4189.     ( (This)->lpVtbl -> GetDevice(This,riid,ppvDevice) )
  4190.  
  4191.  
  4192. #endif /* COBJMACROS */
  4193.  
  4194.  
  4195. #endif  /* C style interface */
  4196.  
  4197.  
  4198.  
  4199.  
  4200. #endif  /* __ID3D12Pageable_INTERFACE_DEFINED__ */
  4201.  
  4202.  
  4203. #ifndef __ID3D12Heap_INTERFACE_DEFINED__
  4204. #define __ID3D12Heap_INTERFACE_DEFINED__
  4205.  
  4206. /* interface ID3D12Heap */
  4207. /* [unique][local][object][uuid] */
  4208.  
  4209.  
  4210. EXTERN_C const IID IID_ID3D12Heap;
  4211.  
  4212. #if defined(__cplusplus) && !defined(CINTERFACE)
  4213.    
  4214.     MIDL_INTERFACE("6b3b2502-6e51-45b3-90ee-9884265e8df3")
  4215.     ID3D12Heap : public ID3D12Pageable
  4216.     {
  4217.     public:
  4218.         virtual D3D12_HEAP_DESC STDMETHODCALLTYPE GetDesc( void) = 0;
  4219.        
  4220.     };
  4221.    
  4222.    
  4223. #else   /* C style interface */
  4224.  
  4225.     typedef struct ID3D12HeapVtbl
  4226.     {
  4227.         BEGIN_INTERFACE
  4228.        
  4229.         HRESULT ( STDMETHODCALLTYPE *QueryInterface )(
  4230.             ID3D12Heap * This,
  4231.             REFIID riid,
  4232.             _COM_Outptr_  void **ppvObject);
  4233.        
  4234.         ULONG ( STDMETHODCALLTYPE *AddRef )(
  4235.             ID3D12Heap * This);
  4236.        
  4237.         ULONG ( STDMETHODCALLTYPE *Release )(
  4238.             ID3D12Heap * This);
  4239.        
  4240.         HRESULT ( STDMETHODCALLTYPE *GetPrivateData )(
  4241.             ID3D12Heap * This,
  4242.             _In_  REFGUID guid,
  4243.             _Inout_  UINT *pDataSize,
  4244.             _Out_writes_bytes_opt_( *pDataSize )  void *pData);
  4245.        
  4246.         HRESULT ( STDMETHODCALLTYPE *SetPrivateData )(
  4247.             ID3D12Heap * This,
  4248.             _In_  REFGUID guid,
  4249.             _In_  UINT DataSize,
  4250.             _In_reads_bytes_opt_( DataSize )  const void *pData);
  4251.        
  4252.         HRESULT ( STDMETHODCALLTYPE *SetPrivateDataInterface )(
  4253.             ID3D12Heap * This,
  4254.             _In_  REFGUID guid,
  4255.             _In_opt_  const IUnknown *pData);
  4256.        
  4257.         HRESULT ( STDMETHODCALLTYPE *SetName )(
  4258.             ID3D12Heap * This,
  4259.             _In_z_  LPCWSTR Name);
  4260.        
  4261.         HRESULT ( STDMETHODCALLTYPE *GetDevice )(
  4262.             ID3D12Heap * This,
  4263.             REFIID riid,
  4264.             _COM_Outptr_opt_  void **ppvDevice);
  4265.        
  4266.         D3D12_HEAP_DESC ( STDMETHODCALLTYPE *GetDesc )(
  4267.             ID3D12Heap * This);
  4268.        
  4269.         END_INTERFACE
  4270.     } ID3D12HeapVtbl;
  4271.  
  4272.     interface ID3D12Heap
  4273.     {
  4274.         CONST_VTBL struct ID3D12HeapVtbl *lpVtbl;
  4275.     };
  4276.  
  4277.    
  4278.  
  4279. #ifdef COBJMACROS
  4280.  
  4281.  
  4282. #define ID3D12Heap_QueryInterface(This,riid,ppvObject)  \
  4283.     ( (This)->lpVtbl -> QueryInterface(This,riid,ppvObject) )
  4284.  
  4285. #define ID3D12Heap_AddRef(This) \
  4286.     ( (This)->lpVtbl -> AddRef(This) )
  4287.  
  4288. #define ID3D12Heap_Release(This)    \
  4289.     ( (This)->lpVtbl -> Release(This) )
  4290.  
  4291.  
  4292. #define ID3D12Heap_GetPrivateData(This,guid,pDataSize,pData)    \
  4293.     ( (This)->lpVtbl -> GetPrivateData(This,guid,pDataSize,pData) )
  4294.  
  4295. #define ID3D12Heap_SetPrivateData(This,guid,DataSize,pData) \
  4296.     ( (This)->lpVtbl -> SetPrivateData(This,guid,DataSize,pData) )
  4297.  
  4298. #define ID3D12Heap_SetPrivateDataInterface(This,guid,pData) \
  4299.     ( (This)->lpVtbl -> SetPrivateDataInterface(This,guid,pData) )
  4300.  
  4301. #define ID3D12Heap_SetName(This,Name)   \
  4302.     ( (This)->lpVtbl -> SetName(This,Name) )
  4303.  
  4304.  
  4305. #define ID3D12Heap_GetDevice(This,riid,ppvDevice)   \
  4306.     ( (This)->lpVtbl -> GetDevice(This,riid,ppvDevice) )
  4307.  
  4308.  
  4309.  
  4310. #define ID3D12Heap_GetDesc(This)    \
  4311.     ( (This)->lpVtbl -> GetDesc(This) )
  4312.  
  4313. #endif /* COBJMACROS */
  4314.  
  4315.  
  4316. #endif  /* C style interface */
  4317.  
  4318.  
  4319.  
  4320.  
  4321.  
  4322.  
  4323.  
  4324.  
  4325. #endif  /* __ID3D12Heap_INTERFACE_DEFINED__ */
  4326.  
  4327.  
  4328. #ifndef __ID3D12Resource_INTERFACE_DEFINED__
  4329. #define __ID3D12Resource_INTERFACE_DEFINED__
  4330.  
  4331. /* interface ID3D12Resource */
  4332. /* [unique][local][object][uuid] */
  4333.  
  4334.  
  4335. EXTERN_C const IID IID_ID3D12Resource;
  4336.  
  4337. #if defined(__cplusplus) && !defined(CINTERFACE)
  4338.    
  4339.     MIDL_INTERFACE("696442be-a72e-4059-bc79-5b5c98040fad")
  4340.     ID3D12Resource : public ID3D12Pageable
  4341.     {
  4342.     public:
  4343.         virtual HRESULT STDMETHODCALLTYPE Map(
  4344.             UINT Subresource,
  4345.             _In_opt_  const D3D12_RANGE *pReadRange,
  4346.             _Outptr_opt_result_bytebuffer_(_Inexpressible_("Dependent on resource"))  void **ppData) = 0;
  4347.        
  4348.         virtual void STDMETHODCALLTYPE Unmap(
  4349.             UINT Subresource,
  4350.             _In_opt_  const D3D12_RANGE *pWrittenRange) = 0;
  4351.        
  4352.         virtual D3D12_RESOURCE_DESC STDMETHODCALLTYPE GetDesc( void) = 0;
  4353.        
  4354.         virtual D3D12_GPU_VIRTUAL_ADDRESS STDMETHODCALLTYPE GetGPUVirtualAddress( void) = 0;
  4355.        
  4356.         virtual HRESULT STDMETHODCALLTYPE WriteToSubresource(
  4357.             UINT DstSubresource,
  4358.             _In_opt_  const D3D12_BOX *pDstBox,
  4359.             _In_  const void *pSrcData,
  4360.             UINT SrcRowPitch,
  4361.             UINT SrcDepthPitch) = 0;
  4362.        
  4363.         virtual HRESULT STDMETHODCALLTYPE ReadFromSubresource(
  4364.             _Out_  void *pDstData,
  4365.             UINT DstRowPitch,
  4366.             UINT DstDepthPitch,
  4367.             UINT SrcSubresource,
  4368.             _In_opt_  const D3D12_BOX *pSrcBox) = 0;
  4369.        
  4370.         virtual HRESULT STDMETHODCALLTYPE GetHeapProperties(
  4371.             _Out_opt_  D3D12_HEAP_PROPERTIES *pHeapProperties,
  4372.             _Out_opt_  D3D12_HEAP_MISC_FLAG *pHeapFlags) = 0;
  4373.        
  4374.     };
  4375.    
  4376.    
  4377. #else   /* C style interface */
  4378.  
  4379.     typedef struct ID3D12ResourceVtbl
  4380.     {
  4381.         BEGIN_INTERFACE
  4382.        
  4383.         HRESULT ( STDMETHODCALLTYPE *QueryInterface )(
  4384.             ID3D12Resource * This,
  4385.             REFIID riid,
  4386.             _COM_Outptr_  void **ppvObject);
  4387.        
  4388.         ULONG ( STDMETHODCALLTYPE *AddRef )(
  4389.             ID3D12Resource * This);
  4390.        
  4391.         ULONG ( STDMETHODCALLTYPE *Release )(
  4392.             ID3D12Resource * This);
  4393.        
  4394.         HRESULT ( STDMETHODCALLTYPE *GetPrivateData )(
  4395.             ID3D12Resource * This,
  4396.             _In_  REFGUID guid,
  4397.             _Inout_  UINT *pDataSize,
  4398.             _Out_writes_bytes_opt_( *pDataSize )  void *pData);
  4399.        
  4400.         HRESULT ( STDMETHODCALLTYPE *SetPrivateData )(
  4401.             ID3D12Resource * This,
  4402.             _In_  REFGUID guid,
  4403.             _In_  UINT DataSize,
  4404.             _In_reads_bytes_opt_( DataSize )  const void *pData);
  4405.        
  4406.         HRESULT ( STDMETHODCALLTYPE *SetPrivateDataInterface )(
  4407.             ID3D12Resource * This,
  4408.             _In_  REFGUID guid,
  4409.             _In_opt_  const IUnknown *pData);
  4410.        
  4411.         HRESULT ( STDMETHODCALLTYPE *SetName )(
  4412.             ID3D12Resource * This,
  4413.             _In_z_  LPCWSTR Name);
  4414.        
  4415.         HRESULT ( STDMETHODCALLTYPE *GetDevice )(
  4416.             ID3D12Resource * This,
  4417.             REFIID riid,
  4418.             _COM_Outptr_opt_  void **ppvDevice);
  4419.        
  4420.         HRESULT ( STDMETHODCALLTYPE *Map )(
  4421.             ID3D12Resource * This,
  4422.             UINT Subresource,
  4423.             _In_opt_  const D3D12_RANGE *pReadRange,
  4424.             _Outptr_opt_result_bytebuffer_(_Inexpressible_("Dependent on resource"))  void **ppData);
  4425.        
  4426.         void ( STDMETHODCALLTYPE *Unmap )(
  4427.             ID3D12Resource * This,
  4428.             UINT Subresource,
  4429.             _In_opt_  const D3D12_RANGE *pWrittenRange);
  4430.        
  4431.         D3D12_RESOURCE_DESC ( STDMETHODCALLTYPE *GetDesc )(
  4432.             ID3D12Resource * This);
  4433.        
  4434.         D3D12_GPU_VIRTUAL_ADDRESS ( STDMETHODCALLTYPE *GetGPUVirtualAddress )(
  4435.             ID3D12Resource * This);
  4436.        
  4437.         HRESULT ( STDMETHODCALLTYPE *WriteToSubresource )(
  4438.             ID3D12Resource * This,
  4439.             UINT DstSubresource,
  4440.             _In_opt_  const D3D12_BOX *pDstBox,
  4441.             _In_  const void *pSrcData,
  4442.             UINT SrcRowPitch,
  4443.             UINT SrcDepthPitch);
  4444.        
  4445.         HRESULT ( STDMETHODCALLTYPE *ReadFromSubresource )(
  4446.             ID3D12Resource * This,
  4447.             _Out_  void *pDstData,
  4448.             UINT DstRowPitch,
  4449.             UINT DstDepthPitch,
  4450.             UINT SrcSubresource,
  4451.             _In_opt_  const D3D12_BOX *pSrcBox);
  4452.        
  4453.         HRESULT ( STDMETHODCALLTYPE *GetHeapProperties )(
  4454.             ID3D12Resource * This,
  4455.             _Out_opt_  D3D12_HEAP_PROPERTIES *pHeapProperties,
  4456.             _Out_opt_  D3D12_HEAP_MISC_FLAG *pHeapFlags);
  4457.        
  4458.         END_INTERFACE
  4459.     } ID3D12ResourceVtbl;
  4460.  
  4461.     interface ID3D12Resource
  4462.     {
  4463.         CONST_VTBL struct ID3D12ResourceVtbl *lpVtbl;
  4464.     };
  4465.  
  4466.    
  4467.  
  4468. #ifdef COBJMACROS
  4469.  
  4470.  
  4471. #define ID3D12Resource_QueryInterface(This,riid,ppvObject)  \
  4472.     ( (This)->lpVtbl -> QueryInterface(This,riid,ppvObject) )
  4473.  
  4474. #define ID3D12Resource_AddRef(This) \
  4475.     ( (This)->lpVtbl -> AddRef(This) )
  4476.  
  4477. #define ID3D12Resource_Release(This)    \
  4478.     ( (This)->lpVtbl -> Release(This) )
  4479.  
  4480.  
  4481. #define ID3D12Resource_GetPrivateData(This,guid,pDataSize,pData)    \
  4482.     ( (This)->lpVtbl -> GetPrivateData(This,guid,pDataSize,pData) )
  4483.  
  4484. #define ID3D12Resource_SetPrivateData(This,guid,DataSize,pData) \
  4485.     ( (This)->lpVtbl -> SetPrivateData(This,guid,DataSize,pData) )
  4486.  
  4487. #define ID3D12Resource_SetPrivateDataInterface(This,guid,pData) \
  4488.     ( (This)->lpVtbl -> SetPrivateDataInterface(This,guid,pData) )
  4489.  
  4490. #define ID3D12Resource_SetName(This,Name)   \
  4491.     ( (This)->lpVtbl -> SetName(This,Name) )
  4492.  
  4493.  
  4494. #define ID3D12Resource_GetDevice(This,riid,ppvDevice)   \
  4495.     ( (This)->lpVtbl -> GetDevice(This,riid,ppvDevice) )
  4496.  
  4497.  
  4498.  
  4499. #define ID3D12Resource_Map(This,Subresource,pReadRange,ppData)  \
  4500.     ( (This)->lpVtbl -> Map(This,Subresource,pReadRange,ppData) )
  4501.  
  4502. #define ID3D12Resource_Unmap(This,Subresource,pWrittenRange)    \
  4503.     ( (This)->lpVtbl -> Unmap(This,Subresource,pWrittenRange) )
  4504.  
  4505. #define ID3D12Resource_GetDesc(This)    \
  4506.     ( (This)->lpVtbl -> GetDesc(This) )
  4507.  
  4508. #define ID3D12Resource_GetGPUVirtualAddress(This)   \
  4509.     ( (This)->lpVtbl -> GetGPUVirtualAddress(This) )
  4510.  
  4511. #define ID3D12Resource_WriteToSubresource(This,DstSubresource,pDstBox,pSrcData,SrcRowPitch,SrcDepthPitch)   \
  4512.     ( (This)->lpVtbl -> WriteToSubresource(This,DstSubresource,pDstBox,pSrcData,SrcRowPitch,SrcDepthPitch) )
  4513.  
  4514. #define ID3D12Resource_ReadFromSubresource(This,pDstData,DstRowPitch,DstDepthPitch,SrcSubresource,pSrcBox)  \
  4515.     ( (This)->lpVtbl -> ReadFromSubresource(This,pDstData,DstRowPitch,DstDepthPitch,SrcSubresource,pSrcBox) )
  4516.  
  4517. #define ID3D12Resource_GetHeapProperties(This,pHeapProperties,pHeapFlags)   \
  4518.     ( (This)->lpVtbl -> GetHeapProperties(This,pHeapProperties,pHeapFlags) )
  4519.  
  4520. #endif /* COBJMACROS */
  4521.  
  4522.  
  4523. #endif  /* C style interface */
  4524.  
  4525.  
  4526.  
  4527.  
  4528.  
  4529.  
  4530.  
  4531.  
  4532. #endif  /* __ID3D12Resource_INTERFACE_DEFINED__ */
  4533.  
  4534.  
  4535. #ifndef __ID3D12CommandAllocator_INTERFACE_DEFINED__
  4536. #define __ID3D12CommandAllocator_INTERFACE_DEFINED__
  4537.  
  4538. /* interface ID3D12CommandAllocator */
  4539. /* [unique][local][object][uuid] */
  4540.  
  4541.  
  4542. EXTERN_C const IID IID_ID3D12CommandAllocator;
  4543.  
  4544. #if defined(__cplusplus) && !defined(CINTERFACE)
  4545.    
  4546.     MIDL_INTERFACE("6102dee4-af59-4b09-b999-b44d73f09b24")
  4547.     ID3D12CommandAllocator : public ID3D12Pageable
  4548.     {
  4549.     public:
  4550.         virtual HRESULT STDMETHODCALLTYPE Reset( void) = 0;
  4551.        
  4552.     };
  4553.    
  4554.    
  4555. #else   /* C style interface */
  4556.  
  4557.     typedef struct ID3D12CommandAllocatorVtbl
  4558.     {
  4559.         BEGIN_INTERFACE
  4560.        
  4561.         HRESULT ( STDMETHODCALLTYPE *QueryInterface )(
  4562.             ID3D12CommandAllocator * This,
  4563.             REFIID riid,
  4564.             _COM_Outptr_  void **ppvObject);
  4565.        
  4566.         ULONG ( STDMETHODCALLTYPE *AddRef )(
  4567.             ID3D12CommandAllocator * This);
  4568.        
  4569.         ULONG ( STDMETHODCALLTYPE *Release )(
  4570.             ID3D12CommandAllocator * This);
  4571.        
  4572.         HRESULT ( STDMETHODCALLTYPE *GetPrivateData )(
  4573.             ID3D12CommandAllocator * This,
  4574.             _In_  REFGUID guid,
  4575.             _Inout_  UINT *pDataSize,
  4576.             _Out_writes_bytes_opt_( *pDataSize )  void *pData);
  4577.        
  4578.         HRESULT ( STDMETHODCALLTYPE *SetPrivateData )(
  4579.             ID3D12CommandAllocator * This,
  4580.             _In_  REFGUID guid,
  4581.             _In_  UINT DataSize,
  4582.             _In_reads_bytes_opt_( DataSize )  const void *pData);
  4583.        
  4584.         HRESULT ( STDMETHODCALLTYPE *SetPrivateDataInterface )(
  4585.             ID3D12CommandAllocator * This,
  4586.             _In_  REFGUID guid,
  4587.             _In_opt_  const IUnknown *pData);
  4588.        
  4589.         HRESULT ( STDMETHODCALLTYPE *SetName )(
  4590.             ID3D12CommandAllocator * This,
  4591.             _In_z_  LPCWSTR Name);
  4592.        
  4593.         HRESULT ( STDMETHODCALLTYPE *GetDevice )(
  4594.             ID3D12CommandAllocator * This,
  4595.             REFIID riid,
  4596.             _COM_Outptr_opt_  void **ppvDevice);
  4597.        
  4598.         HRESULT ( STDMETHODCALLTYPE *Reset )(
  4599.             ID3D12CommandAllocator * This);
  4600.        
  4601.         END_INTERFACE
  4602.     } ID3D12CommandAllocatorVtbl;
  4603.  
  4604.     interface ID3D12CommandAllocator
  4605.     {
  4606.         CONST_VTBL struct ID3D12CommandAllocatorVtbl *lpVtbl;
  4607.     };
  4608.  
  4609.    
  4610.  
  4611. #ifdef COBJMACROS
  4612.  
  4613.  
  4614. #define ID3D12CommandAllocator_QueryInterface(This,riid,ppvObject)  \
  4615.     ( (This)->lpVtbl -> QueryInterface(This,riid,ppvObject) )
  4616.  
  4617. #define ID3D12CommandAllocator_AddRef(This) \
  4618.     ( (This)->lpVtbl -> AddRef(This) )
  4619.  
  4620. #define ID3D12CommandAllocator_Release(This)    \
  4621.     ( (This)->lpVtbl -> Release(This) )
  4622.  
  4623.  
  4624. #define ID3D12CommandAllocator_GetPrivateData(This,guid,pDataSize,pData)    \
  4625.     ( (This)->lpVtbl -> GetPrivateData(This,guid,pDataSize,pData) )
  4626.  
  4627. #define ID3D12CommandAllocator_SetPrivateData(This,guid,DataSize,pData) \
  4628.     ( (This)->lpVtbl -> SetPrivateData(This,guid,DataSize,pData) )
  4629.  
  4630. #define ID3D12CommandAllocator_SetPrivateDataInterface(This,guid,pData) \
  4631.     ( (This)->lpVtbl -> SetPrivateDataInterface(This,guid,pData) )
  4632.  
  4633. #define ID3D12CommandAllocator_SetName(This,Name)   \
  4634.     ( (This)->lpVtbl -> SetName(This,Name) )
  4635.  
  4636.  
  4637. #define ID3D12CommandAllocator_GetDevice(This,riid,ppvDevice)   \
  4638.     ( (This)->lpVtbl -> GetDevice(This,riid,ppvDevice) )
  4639.  
  4640.  
  4641.  
  4642. #define ID3D12CommandAllocator_Reset(This)  \
  4643.     ( (This)->lpVtbl -> Reset(This) )
  4644.  
  4645. #endif /* COBJMACROS */
  4646.  
  4647.  
  4648. #endif  /* C style interface */
  4649.  
  4650.  
  4651.  
  4652.  
  4653. #endif  /* __ID3D12CommandAllocator_INTERFACE_DEFINED__ */
  4654.  
  4655.  
  4656. #ifndef __ID3D12Fence_INTERFACE_DEFINED__
  4657. #define __ID3D12Fence_INTERFACE_DEFINED__
  4658.  
  4659. /* interface ID3D12Fence */
  4660. /* [unique][local][object][uuid] */
  4661.  
  4662.  
  4663. EXTERN_C const IID IID_ID3D12Fence;
  4664.  
  4665. #if defined(__cplusplus) && !defined(CINTERFACE)
  4666.    
  4667.     MIDL_INTERFACE("0a753dcf-c4d8-4b91-adf6-be5a60d95a76")
  4668.     ID3D12Fence : public ID3D12Pageable
  4669.     {
  4670.     public:
  4671.         virtual UINT64 STDMETHODCALLTYPE GetCompletedValue( void) = 0;
  4672.        
  4673.         virtual HRESULT STDMETHODCALLTYPE SetEventOnCompletion(
  4674.             UINT64 Value,
  4675.             HANDLE hEvent) = 0;
  4676.        
  4677.         virtual HRESULT STDMETHODCALLTYPE Signal(
  4678.             UINT64 Value) = 0;
  4679.        
  4680.     };
  4681.    
  4682.    
  4683. #else   /* C style interface */
  4684.  
  4685.     typedef struct ID3D12FenceVtbl
  4686.     {
  4687.         BEGIN_INTERFACE
  4688.        
  4689.         HRESULT ( STDMETHODCALLTYPE *QueryInterface )(
  4690.             ID3D12Fence * This,
  4691.             REFIID riid,
  4692.             _COM_Outptr_  void **ppvObject);
  4693.        
  4694.         ULONG ( STDMETHODCALLTYPE *AddRef )(
  4695.             ID3D12Fence * This);
  4696.        
  4697.         ULONG ( STDMETHODCALLTYPE *Release )(
  4698.             ID3D12Fence * This);
  4699.        
  4700.         HRESULT ( STDMETHODCALLTYPE *GetPrivateData )(
  4701.             ID3D12Fence * This,
  4702.             _In_  REFGUID guid,
  4703.             _Inout_  UINT *pDataSize,
  4704.             _Out_writes_bytes_opt_( *pDataSize )  void *pData);
  4705.        
  4706.         HRESULT ( STDMETHODCALLTYPE *SetPrivateData )(
  4707.             ID3D12Fence * This,
  4708.             _In_  REFGUID guid,
  4709.             _In_  UINT DataSize,
  4710.             _In_reads_bytes_opt_( DataSize )  const void *pData);
  4711.        
  4712.         HRESULT ( STDMETHODCALLTYPE *SetPrivateDataInterface )(
  4713.             ID3D12Fence * This,
  4714.             _In_  REFGUID guid,
  4715.             _In_opt_  const IUnknown *pData);
  4716.        
  4717.         HRESULT ( STDMETHODCALLTYPE *SetName )(
  4718.             ID3D12Fence * This,
  4719.             _In_z_  LPCWSTR Name);
  4720.        
  4721.         HRESULT ( STDMETHODCALLTYPE *GetDevice )(
  4722.             ID3D12Fence * This,
  4723.             REFIID riid,
  4724.             _COM_Outptr_opt_  void **ppvDevice);
  4725.        
  4726.         UINT64 ( STDMETHODCALLTYPE *GetCompletedValue )(
  4727.             ID3D12Fence * This);
  4728.        
  4729.         HRESULT ( STDMETHODCALLTYPE *SetEventOnCompletion )(
  4730.             ID3D12Fence * This,
  4731.             UINT64 Value,
  4732.             HANDLE hEvent);
  4733.        
  4734.         HRESULT ( STDMETHODCALLTYPE *Signal )(
  4735.             ID3D12Fence * This,
  4736.             UINT64 Value);
  4737.        
  4738.         END_INTERFACE
  4739.     } ID3D12FenceVtbl;
  4740.  
  4741.     interface ID3D12Fence
  4742.     {
  4743.         CONST_VTBL struct ID3D12FenceVtbl *lpVtbl;
  4744.     };
  4745.  
  4746.    
  4747.  
  4748. #ifdef COBJMACROS
  4749.  
  4750.  
  4751. #define ID3D12Fence_QueryInterface(This,riid,ppvObject) \
  4752.     ( (This)->lpVtbl -> QueryInterface(This,riid,ppvObject) )
  4753.  
  4754. #define ID3D12Fence_AddRef(This)    \
  4755.     ( (This)->lpVtbl -> AddRef(This) )
  4756.  
  4757. #define ID3D12Fence_Release(This)   \
  4758.     ( (This)->lpVtbl -> Release(This) )
  4759.  
  4760.  
  4761. #define ID3D12Fence_GetPrivateData(This,guid,pDataSize,pData)   \
  4762.     ( (This)->lpVtbl -> GetPrivateData(This,guid,pDataSize,pData) )
  4763.  
  4764. #define ID3D12Fence_SetPrivateData(This,guid,DataSize,pData)    \
  4765.     ( (This)->lpVtbl -> SetPrivateData(This,guid,DataSize,pData) )
  4766.  
  4767. #define ID3D12Fence_SetPrivateDataInterface(This,guid,pData)    \
  4768.     ( (This)->lpVtbl -> SetPrivateDataInterface(This,guid,pData) )
  4769.  
  4770. #define ID3D12Fence_SetName(This,Name)  \
  4771.     ( (This)->lpVtbl -> SetName(This,Name) )
  4772.  
  4773.  
  4774. #define ID3D12Fence_GetDevice(This,riid,ppvDevice)  \
  4775.     ( (This)->lpVtbl -> GetDevice(This,riid,ppvDevice) )
  4776.  
  4777.  
  4778.  
  4779. #define ID3D12Fence_GetCompletedValue(This) \
  4780.     ( (This)->lpVtbl -> GetCompletedValue(This) )
  4781.  
  4782. #define ID3D12Fence_SetEventOnCompletion(This,Value,hEvent) \
  4783.     ( (This)->lpVtbl -> SetEventOnCompletion(This,Value,hEvent) )
  4784.  
  4785. #define ID3D12Fence_Signal(This,Value)  \
  4786.     ( (This)->lpVtbl -> Signal(This,Value) )
  4787.  
  4788. #endif /* COBJMACROS */
  4789.  
  4790.  
  4791. #endif  /* C style interface */
  4792.  
  4793.  
  4794.  
  4795.  
  4796. #endif  /* __ID3D12Fence_INTERFACE_DEFINED__ */
  4797.  
  4798.  
  4799. #ifndef __ID3D12PipelineState_INTERFACE_DEFINED__
  4800. #define __ID3D12PipelineState_INTERFACE_DEFINED__
  4801.  
  4802. /* interface ID3D12PipelineState */
  4803. /* [unique][local][object][uuid] */
  4804.  
  4805.  
  4806. EXTERN_C const IID IID_ID3D12PipelineState;
  4807.  
  4808. #if defined(__cplusplus) && !defined(CINTERFACE)
  4809.    
  4810.     MIDL_INTERFACE("765a30f3-f624-4c6f-a828-ace948622445")
  4811.     ID3D12PipelineState : public ID3D12Pageable
  4812.     {
  4813.     public:
  4814.         virtual HRESULT STDMETHODCALLTYPE GetCachedBlob(
  4815.             _COM_Outptr_  ID3DBlob **ppBlob) = 0;
  4816.        
  4817.     };
  4818.    
  4819.    
  4820. #else   /* C style interface */
  4821.  
  4822.     typedef struct ID3D12PipelineStateVtbl
  4823.     {
  4824.         BEGIN_INTERFACE
  4825.        
  4826.         HRESULT ( STDMETHODCALLTYPE *QueryInterface )(
  4827.             ID3D12PipelineState * This,
  4828.             REFIID riid,
  4829.             _COM_Outptr_  void **ppvObject);
  4830.        
  4831.         ULONG ( STDMETHODCALLTYPE *AddRef )(
  4832.             ID3D12PipelineState * This);
  4833.        
  4834.         ULONG ( STDMETHODCALLTYPE *Release )(
  4835.             ID3D12PipelineState * This);
  4836.        
  4837.         HRESULT ( STDMETHODCALLTYPE *GetPrivateData )(
  4838.             ID3D12PipelineState * This,
  4839.             _In_  REFGUID guid,
  4840.             _Inout_  UINT *pDataSize,
  4841.             _Out_writes_bytes_opt_( *pDataSize )  void *pData);
  4842.        
  4843.         HRESULT ( STDMETHODCALLTYPE *SetPrivateData )(
  4844.             ID3D12PipelineState * This,
  4845.             _In_  REFGUID guid,
  4846.             _In_  UINT DataSize,
  4847.             _In_reads_bytes_opt_( DataSize )  const void *pData);
  4848.        
  4849.         HRESULT ( STDMETHODCALLTYPE *SetPrivateDataInterface )(
  4850.             ID3D12PipelineState * This,
  4851.             _In_  REFGUID guid,
  4852.             _In_opt_  const IUnknown *pData);
  4853.        
  4854.         HRESULT ( STDMETHODCALLTYPE *SetName )(
  4855.             ID3D12PipelineState * This,
  4856.             _In_z_  LPCWSTR Name);
  4857.        
  4858.         HRESULT ( STDMETHODCALLTYPE *GetDevice )(
  4859.             ID3D12PipelineState * This,
  4860.             REFIID riid,
  4861.             _COM_Outptr_opt_  void **ppvDevice);
  4862.        
  4863.         HRESULT ( STDMETHODCALLTYPE *GetCachedBlob )(
  4864.             ID3D12PipelineState * This,
  4865.             _COM_Outptr_  ID3DBlob **ppBlob);
  4866.        
  4867.         END_INTERFACE
  4868.     } ID3D12PipelineStateVtbl;
  4869.  
  4870.     interface ID3D12PipelineState
  4871.     {
  4872.         CONST_VTBL struct ID3D12PipelineStateVtbl *lpVtbl;
  4873.     };
  4874.  
  4875.    
  4876.  
  4877. #ifdef COBJMACROS
  4878.  
  4879.  
  4880. #define ID3D12PipelineState_QueryInterface(This,riid,ppvObject) \
  4881.     ( (This)->lpVtbl -> QueryInterface(This,riid,ppvObject) )
  4882.  
  4883. #define ID3D12PipelineState_AddRef(This)    \
  4884.     ( (This)->lpVtbl -> AddRef(This) )
  4885.  
  4886. #define ID3D12PipelineState_Release(This)   \
  4887.     ( (This)->lpVtbl -> Release(This) )
  4888.  
  4889.  
  4890. #define ID3D12PipelineState_GetPrivateData(This,guid,pDataSize,pData)   \
  4891.     ( (This)->lpVtbl -> GetPrivateData(This,guid,pDataSize,pData) )
  4892.  
  4893. #define ID3D12PipelineState_SetPrivateData(This,guid,DataSize,pData)    \
  4894.     ( (This)->lpVtbl -> SetPrivateData(This,guid,DataSize,pData) )
  4895.  
  4896. #define ID3D12PipelineState_SetPrivateDataInterface(This,guid,pData)    \
  4897.     ( (This)->lpVtbl -> SetPrivateDataInterface(This,guid,pData) )
  4898.  
  4899. #define ID3D12PipelineState_SetName(This,Name)  \
  4900.     ( (This)->lpVtbl -> SetName(This,Name) )
  4901.  
  4902.  
  4903. #define ID3D12PipelineState_GetDevice(This,riid,ppvDevice)  \
  4904.     ( (This)->lpVtbl -> GetDevice(This,riid,ppvDevice) )
  4905.  
  4906.  
  4907.  
  4908. #define ID3D12PipelineState_GetCachedBlob(This,ppBlob)  \
  4909.     ( (This)->lpVtbl -> GetCachedBlob(This,ppBlob) )
  4910.  
  4911. #endif /* COBJMACROS */
  4912.  
  4913.  
  4914. #endif  /* C style interface */
  4915.  
  4916.  
  4917.  
  4918.  
  4919. #endif  /* __ID3D12PipelineState_INTERFACE_DEFINED__ */
  4920.  
  4921.  
  4922. #ifndef __ID3D12DescriptorHeap_INTERFACE_DEFINED__
  4923. #define __ID3D12DescriptorHeap_INTERFACE_DEFINED__
  4924.  
  4925. /* interface ID3D12DescriptorHeap */
  4926. /* [unique][local][object][uuid] */
  4927.  
  4928.  
  4929. EXTERN_C const IID IID_ID3D12DescriptorHeap;
  4930.  
  4931. #if defined(__cplusplus) && !defined(CINTERFACE)
  4932.    
  4933.     MIDL_INTERFACE("8efb471d-616c-4f49-90f7-127bb763fa51")
  4934.     ID3D12DescriptorHeap : public ID3D12Pageable
  4935.     {
  4936.     public:
  4937.         virtual D3D12_DESCRIPTOR_HEAP_DESC STDMETHODCALLTYPE GetDesc( void) = 0;
  4938.        
  4939.         virtual D3D12_CPU_DESCRIPTOR_HANDLE STDMETHODCALLTYPE GetCPUDescriptorHandleForHeapStart( void) = 0;
  4940.        
  4941.         virtual D3D12_GPU_DESCRIPTOR_HANDLE STDMETHODCALLTYPE GetGPUDescriptorHandleForHeapStart( void) = 0;
  4942.        
  4943.     };
  4944.    
  4945.    
  4946. #else   /* C style interface */
  4947.  
  4948.     typedef struct ID3D12DescriptorHeapVtbl
  4949.     {
  4950.         BEGIN_INTERFACE
  4951.        
  4952.         HRESULT ( STDMETHODCALLTYPE *QueryInterface )(
  4953.             ID3D12DescriptorHeap * This,
  4954.             REFIID riid,
  4955.             _COM_Outptr_  void **ppvObject);
  4956.        
  4957.         ULONG ( STDMETHODCALLTYPE *AddRef )(
  4958.             ID3D12DescriptorHeap * This);
  4959.        
  4960.         ULONG ( STDMETHODCALLTYPE *Release )(
  4961.             ID3D12DescriptorHeap * This);
  4962.        
  4963.         HRESULT ( STDMETHODCALLTYPE *GetPrivateData )(
  4964.             ID3D12DescriptorHeap * This,
  4965.             _In_  REFGUID guid,
  4966.             _Inout_  UINT *pDataSize,
  4967.             _Out_writes_bytes_opt_( *pDataSize )  void *pData);
  4968.        
  4969.         HRESULT ( STDMETHODCALLTYPE *SetPrivateData )(
  4970.             ID3D12DescriptorHeap * This,
  4971.             _In_  REFGUID guid,
  4972.             _In_  UINT DataSize,
  4973.             _In_reads_bytes_opt_( DataSize )  const void *pData);
  4974.        
  4975.         HRESULT ( STDMETHODCALLTYPE *SetPrivateDataInterface )(
  4976.             ID3D12DescriptorHeap * This,
  4977.             _In_  REFGUID guid,
  4978.             _In_opt_  const IUnknown *pData);
  4979.        
  4980.         HRESULT ( STDMETHODCALLTYPE *SetName )(
  4981.             ID3D12DescriptorHeap * This,
  4982.             _In_z_  LPCWSTR Name);
  4983.        
  4984.         HRESULT ( STDMETHODCALLTYPE *GetDevice )(
  4985.             ID3D12DescriptorHeap * This,
  4986.             REFIID riid,
  4987.             _COM_Outptr_opt_  void **ppvDevice);
  4988.        
  4989.         D3D12_DESCRIPTOR_HEAP_DESC ( STDMETHODCALLTYPE *GetDesc )(
  4990.             ID3D12DescriptorHeap * This);
  4991.        
  4992.         D3D12_CPU_DESCRIPTOR_HANDLE ( STDMETHODCALLTYPE *GetCPUDescriptorHandleForHeapStart )(
  4993.             ID3D12DescriptorHeap * This);
  4994.        
  4995.         D3D12_GPU_DESCRIPTOR_HANDLE ( STDMETHODCALLTYPE *GetGPUDescriptorHandleForHeapStart )(
  4996.             ID3D12DescriptorHeap * This);
  4997.        
  4998.         END_INTERFACE
  4999.     } ID3D12DescriptorHeapVtbl;
  5000.  
  5001.     interface ID3D12DescriptorHeap
  5002.     {
  5003.         CONST_VTBL struct ID3D12DescriptorHeapVtbl *lpVtbl;
  5004.     };
  5005.  
  5006.    
  5007.  
  5008. #ifdef COBJMACROS
  5009.  
  5010.  
  5011. #define ID3D12DescriptorHeap_QueryInterface(This,riid,ppvObject)    \
  5012.     ( (This)->lpVtbl -> QueryInterface(This,riid,ppvObject) )
  5013.  
  5014. #define ID3D12DescriptorHeap_AddRef(This)   \
  5015.     ( (This)->lpVtbl -> AddRef(This) )
  5016.  
  5017. #define ID3D12DescriptorHeap_Release(This)  \
  5018.     ( (This)->lpVtbl -> Release(This) )
  5019.  
  5020.  
  5021. #define ID3D12DescriptorHeap_GetPrivateData(This,guid,pDataSize,pData)  \
  5022.     ( (This)->lpVtbl -> GetPrivateData(This,guid,pDataSize,pData) )
  5023.  
  5024. #define ID3D12DescriptorHeap_SetPrivateData(This,guid,DataSize,pData)   \
  5025.     ( (This)->lpVtbl -> SetPrivateData(This,guid,DataSize,pData) )
  5026.  
  5027. #define ID3D12DescriptorHeap_SetPrivateDataInterface(This,guid,pData)   \
  5028.     ( (This)->lpVtbl -> SetPrivateDataInterface(This,guid,pData) )
  5029.  
  5030. #define ID3D12DescriptorHeap_SetName(This,Name) \
  5031.     ( (This)->lpVtbl -> SetName(This,Name) )
  5032.  
  5033.  
  5034. #define ID3D12DescriptorHeap_GetDevice(This,riid,ppvDevice) \
  5035.     ( (This)->lpVtbl -> GetDevice(This,riid,ppvDevice) )
  5036.  
  5037.  
  5038.  
  5039. #define ID3D12DescriptorHeap_GetDesc(This)  \
  5040.     ( (This)->lpVtbl -> GetDesc(This) )
  5041.  
  5042. #define ID3D12DescriptorHeap_GetCPUDescriptorHandleForHeapStart(This)   \
  5043.     ( (This)->lpVtbl -> GetCPUDescriptorHandleForHeapStart(This) )
  5044.  
  5045. #define ID3D12DescriptorHeap_GetGPUDescriptorHandleForHeapStart(This)   \
  5046.     ( (This)->lpVtbl -> GetGPUDescriptorHandleForHeapStart(This) )
  5047.  
  5048. #endif /* COBJMACROS */
  5049.  
  5050.  
  5051. #endif  /* C style interface */
  5052.  
  5053.  
  5054.  
  5055.  
  5056.  
  5057.  
  5058.  
  5059.  
  5060.  
  5061.  
  5062.  
  5063.  
  5064.  
  5065.  
  5066.  
  5067.  
  5068. #endif  /* __ID3D12DescriptorHeap_INTERFACE_DEFINED__ */
  5069.  
  5070.  
  5071. #ifndef __ID3D12QueryHeap_INTERFACE_DEFINED__
  5072. #define __ID3D12QueryHeap_INTERFACE_DEFINED__
  5073.  
  5074. /* interface ID3D12QueryHeap */
  5075. /* [unique][local][object][uuid] */
  5076.  
  5077.  
  5078. EXTERN_C const IID IID_ID3D12QueryHeap;
  5079.  
  5080. #if defined(__cplusplus) && !defined(CINTERFACE)
  5081.    
  5082.     MIDL_INTERFACE("0d9658ae-ed45-469e-a61d-970ec583cab4")
  5083.     ID3D12QueryHeap : public ID3D12Pageable
  5084.     {
  5085.     public:
  5086.     };
  5087.    
  5088.    
  5089. #else   /* C style interface */
  5090.  
  5091.     typedef struct ID3D12QueryHeapVtbl
  5092.     {
  5093.         BEGIN_INTERFACE
  5094.        
  5095.         HRESULT ( STDMETHODCALLTYPE *QueryInterface )(
  5096.             ID3D12QueryHeap * This,
  5097.             REFIID riid,
  5098.             _COM_Outptr_  void **ppvObject);
  5099.        
  5100.         ULONG ( STDMETHODCALLTYPE *AddRef )(
  5101.             ID3D12QueryHeap * This);
  5102.        
  5103.         ULONG ( STDMETHODCALLTYPE *Release )(
  5104.             ID3D12QueryHeap * This);
  5105.        
  5106.         HRESULT ( STDMETHODCALLTYPE *GetPrivateData )(
  5107.             ID3D12QueryHeap * This,
  5108.             _In_  REFGUID guid,
  5109.             _Inout_  UINT *pDataSize,
  5110.             _Out_writes_bytes_opt_( *pDataSize )  void *pData);
  5111.        
  5112.         HRESULT ( STDMETHODCALLTYPE *SetPrivateData )(
  5113.             ID3D12QueryHeap * This,
  5114.             _In_  REFGUID guid,
  5115.             _In_  UINT DataSize,
  5116.             _In_reads_bytes_opt_( DataSize )  const void *pData);
  5117.        
  5118.         HRESULT ( STDMETHODCALLTYPE *SetPrivateDataInterface )(
  5119.             ID3D12QueryHeap * This,
  5120.             _In_  REFGUID guid,
  5121.             _In_opt_  const IUnknown *pData);
  5122.        
  5123.         HRESULT ( STDMETHODCALLTYPE *SetName )(
  5124.             ID3D12QueryHeap * This,
  5125.             _In_z_  LPCWSTR Name);
  5126.        
  5127.         HRESULT ( STDMETHODCALLTYPE *GetDevice )(
  5128.             ID3D12QueryHeap * This,
  5129.             REFIID riid,
  5130.             _COM_Outptr_opt_  void **ppvDevice);
  5131.        
  5132.         END_INTERFACE
  5133.     } ID3D12QueryHeapVtbl;
  5134.  
  5135.     interface ID3D12QueryHeap
  5136.     {
  5137.         CONST_VTBL struct ID3D12QueryHeapVtbl *lpVtbl;
  5138.     };
  5139.  
  5140.    
  5141.  
  5142. #ifdef COBJMACROS
  5143.  
  5144.  
  5145. #define ID3D12QueryHeap_QueryInterface(This,riid,ppvObject) \
  5146.     ( (This)->lpVtbl -> QueryInterface(This,riid,ppvObject) )
  5147.  
  5148. #define ID3D12QueryHeap_AddRef(This)    \
  5149.     ( (This)->lpVtbl -> AddRef(This) )
  5150.  
  5151. #define ID3D12QueryHeap_Release(This)   \
  5152.     ( (This)->lpVtbl -> Release(This) )
  5153.  
  5154.  
  5155. #define ID3D12QueryHeap_GetPrivateData(This,guid,pDataSize,pData)   \
  5156.     ( (This)->lpVtbl -> GetPrivateData(This,guid,pDataSize,pData) )
  5157.  
  5158. #define ID3D12QueryHeap_SetPrivateData(This,guid,DataSize,pData)    \
  5159.     ( (This)->lpVtbl -> SetPrivateData(This,guid,DataSize,pData) )
  5160.  
  5161. #define ID3D12QueryHeap_SetPrivateDataInterface(This,guid,pData)    \
  5162.     ( (This)->lpVtbl -> SetPrivateDataInterface(This,guid,pData) )
  5163.  
  5164. #define ID3D12QueryHeap_SetName(This,Name)  \
  5165.     ( (This)->lpVtbl -> SetName(This,Name) )
  5166.  
  5167.  
  5168. #define ID3D12QueryHeap_GetDevice(This,riid,ppvDevice)  \
  5169.     ( (This)->lpVtbl -> GetDevice(This,riid,ppvDevice) )
  5170.  
  5171.  
  5172.  
  5173. #endif /* COBJMACROS */
  5174.  
  5175.  
  5176. #endif  /* C style interface */
  5177.  
  5178.  
  5179.  
  5180.  
  5181. #endif  /* __ID3D12QueryHeap_INTERFACE_DEFINED__ */
  5182.  
  5183.  
  5184. #ifndef __ID3D12CommandSignature_INTERFACE_DEFINED__
  5185. #define __ID3D12CommandSignature_INTERFACE_DEFINED__
  5186.  
  5187. /* interface ID3D12CommandSignature */
  5188. /* [unique][local][object][uuid] */
  5189.  
  5190.  
  5191. EXTERN_C const IID IID_ID3D12CommandSignature;
  5192.  
  5193. #if defined(__cplusplus) && !defined(CINTERFACE)
  5194.    
  5195.     MIDL_INTERFACE("c36a797c-ec80-4f0a-8985-a7b2475082d1")
  5196.     ID3D12CommandSignature : public ID3D12Pageable
  5197.     {
  5198.     public:
  5199.     };
  5200.    
  5201.    
  5202. #else   /* C style interface */
  5203.  
  5204.     typedef struct ID3D12CommandSignatureVtbl
  5205.     {
  5206.         BEGIN_INTERFACE
  5207.        
  5208.         HRESULT ( STDMETHODCALLTYPE *QueryInterface )(
  5209.             ID3D12CommandSignature * This,
  5210.             REFIID riid,
  5211.             _COM_Outptr_  void **ppvObject);
  5212.        
  5213.         ULONG ( STDMETHODCALLTYPE *AddRef )(
  5214.             ID3D12CommandSignature * This);
  5215.        
  5216.         ULONG ( STDMETHODCALLTYPE *Release )(
  5217.             ID3D12CommandSignature * This);
  5218.        
  5219.         HRESULT ( STDMETHODCALLTYPE *GetPrivateData )(
  5220.             ID3D12CommandSignature * This,
  5221.             _In_  REFGUID guid,
  5222.             _Inout_  UINT *pDataSize,
  5223.             _Out_writes_bytes_opt_( *pDataSize )  void *pData);
  5224.        
  5225.         HRESULT ( STDMETHODCALLTYPE *SetPrivateData )(
  5226.             ID3D12CommandSignature * This,
  5227.             _In_  REFGUID guid,
  5228.             _In_  UINT DataSize,
  5229.             _In_reads_bytes_opt_( DataSize )  const void *pData);
  5230.        
  5231.         HRESULT ( STDMETHODCALLTYPE *SetPrivateDataInterface )(
  5232.             ID3D12CommandSignature * This,
  5233.             _In_  REFGUID guid,
  5234.             _In_opt_  const IUnknown *pData);
  5235.        
  5236.         HRESULT ( STDMETHODCALLTYPE *SetName )(
  5237.             ID3D12CommandSignature * This,
  5238.             _In_z_  LPCWSTR Name);
  5239.        
  5240.         HRESULT ( STDMETHODCALLTYPE *GetDevice )(
  5241.             ID3D12CommandSignature * This,
  5242.             REFIID riid,
  5243.             _COM_Outptr_opt_  void **ppvDevice);
  5244.        
  5245.         END_INTERFACE
  5246.     } ID3D12CommandSignatureVtbl;
  5247.  
  5248.     interface ID3D12CommandSignature
  5249.     {
  5250.         CONST_VTBL struct ID3D12CommandSignatureVtbl *lpVtbl;
  5251.     };
  5252.  
  5253.    
  5254.  
  5255. #ifdef COBJMACROS
  5256.  
  5257.  
  5258. #define ID3D12CommandSignature_QueryInterface(This,riid,ppvObject)  \
  5259.     ( (This)->lpVtbl -> QueryInterface(This,riid,ppvObject) )
  5260.  
  5261. #define ID3D12CommandSignature_AddRef(This) \
  5262.     ( (This)->lpVtbl -> AddRef(This) )
  5263.  
  5264. #define ID3D12CommandSignature_Release(This)    \
  5265.     ( (This)->lpVtbl -> Release(This) )
  5266.  
  5267.  
  5268. #define ID3D12CommandSignature_GetPrivateData(This,guid,pDataSize,pData)    \
  5269.     ( (This)->lpVtbl -> GetPrivateData(This,guid,pDataSize,pData) )
  5270.  
  5271. #define ID3D12CommandSignature_SetPrivateData(This,guid,DataSize,pData) \
  5272.     ( (This)->lpVtbl -> SetPrivateData(This,guid,DataSize,pData) )
  5273.  
  5274. #define ID3D12CommandSignature_SetPrivateDataInterface(This,guid,pData) \
  5275.     ( (This)->lpVtbl -> SetPrivateDataInterface(This,guid,pData) )
  5276.  
  5277. #define ID3D12CommandSignature_SetName(This,Name)   \
  5278.     ( (This)->lpVtbl -> SetName(This,Name) )
  5279.  
  5280.  
  5281. #define ID3D12CommandSignature_GetDevice(This,riid,ppvDevice)   \
  5282.     ( (This)->lpVtbl -> GetDevice(This,riid,ppvDevice) )
  5283.  
  5284.  
  5285.  
  5286. #endif /* COBJMACROS */
  5287.  
  5288.  
  5289. #endif  /* C style interface */
  5290.  
  5291.  
  5292.  
  5293.  
  5294. #endif  /* __ID3D12CommandSignature_INTERFACE_DEFINED__ */
  5295.  
  5296.  
  5297. #ifndef __ID3D12CommandList_INTERFACE_DEFINED__
  5298. #define __ID3D12CommandList_INTERFACE_DEFINED__
  5299.  
  5300. /* interface ID3D12CommandList */
  5301. /* [unique][local][object][uuid] */
  5302.  
  5303.  
  5304. EXTERN_C const IID IID_ID3D12CommandList;
  5305.  
  5306. #if defined(__cplusplus) && !defined(CINTERFACE)
  5307.    
  5308.     MIDL_INTERFACE("7116d91c-e7e4-47ce-b8c6-ec8168f437e5")
  5309.     ID3D12CommandList : public ID3D12DeviceChild
  5310.     {
  5311.     public:
  5312.         virtual D3D12_COMMAND_LIST_TYPE STDMETHODCALLTYPE GetType( void) = 0;
  5313.        
  5314.     };
  5315.    
  5316.    
  5317. #else   /* C style interface */
  5318.  
  5319.     typedef struct ID3D12CommandListVtbl
  5320.     {
  5321.         BEGIN_INTERFACE
  5322.        
  5323.         HRESULT ( STDMETHODCALLTYPE *QueryInterface )(
  5324.             ID3D12CommandList * This,
  5325.             REFIID riid,
  5326.             _COM_Outptr_  void **ppvObject);
  5327.        
  5328.         ULONG ( STDMETHODCALLTYPE *AddRef )(
  5329.             ID3D12CommandList * This);
  5330.        
  5331.         ULONG ( STDMETHODCALLTYPE *Release )(
  5332.             ID3D12CommandList * This);
  5333.        
  5334.         HRESULT ( STDMETHODCALLTYPE *GetPrivateData )(
  5335.             ID3D12CommandList * This,
  5336.             _In_  REFGUID guid,
  5337.             _Inout_  UINT *pDataSize,
  5338.             _Out_writes_bytes_opt_( *pDataSize )  void *pData);
  5339.        
  5340.         HRESULT ( STDMETHODCALLTYPE *SetPrivateData )(
  5341.             ID3D12CommandList * This,
  5342.             _In_  REFGUID guid,
  5343.             _In_  UINT DataSize,
  5344.             _In_reads_bytes_opt_( DataSize )  const void *pData);
  5345.        
  5346.         HRESULT ( STDMETHODCALLTYPE *SetPrivateDataInterface )(
  5347.             ID3D12CommandList * This,
  5348.             _In_  REFGUID guid,
  5349.             _In_opt_  const IUnknown *pData);
  5350.        
  5351.         HRESULT ( STDMETHODCALLTYPE *SetName )(
  5352.             ID3D12CommandList * This,
  5353.             _In_z_  LPCWSTR Name);
  5354.        
  5355.         HRESULT ( STDMETHODCALLTYPE *GetDevice )(
  5356.             ID3D12CommandList * This,
  5357.             REFIID riid,
  5358.             _COM_Outptr_opt_  void **ppvDevice);
  5359.        
  5360.         D3D12_COMMAND_LIST_TYPE ( STDMETHODCALLTYPE *GetType )(
  5361.             ID3D12CommandList * This);
  5362.        
  5363.         END_INTERFACE
  5364.     } ID3D12CommandListVtbl;
  5365.  
  5366.     interface ID3D12CommandList
  5367.     {
  5368.         CONST_VTBL struct ID3D12CommandListVtbl *lpVtbl;
  5369.     };
  5370.  
  5371.    
  5372.  
  5373. #ifdef COBJMACROS
  5374.  
  5375.  
  5376. #define ID3D12CommandList_QueryInterface(This,riid,ppvObject)   \
  5377.     ( (This)->lpVtbl -> QueryInterface(This,riid,ppvObject) )
  5378.  
  5379. #define ID3D12CommandList_AddRef(This)  \
  5380.     ( (This)->lpVtbl -> AddRef(This) )
  5381.  
  5382. #define ID3D12CommandList_Release(This) \
  5383.     ( (This)->lpVtbl -> Release(This) )
  5384.  
  5385.  
  5386. #define ID3D12CommandList_GetPrivateData(This,guid,pDataSize,pData) \
  5387.     ( (This)->lpVtbl -> GetPrivateData(This,guid,pDataSize,pData) )
  5388.  
  5389. #define ID3D12CommandList_SetPrivateData(This,guid,DataSize,pData)  \
  5390.     ( (This)->lpVtbl -> SetPrivateData(This,guid,DataSize,pData) )
  5391.  
  5392. #define ID3D12CommandList_SetPrivateDataInterface(This,guid,pData)  \
  5393.     ( (This)->lpVtbl -> SetPrivateDataInterface(This,guid,pData) )
  5394.  
  5395. #define ID3D12CommandList_SetName(This,Name)    \
  5396.     ( (This)->lpVtbl -> SetName(This,Name) )
  5397.  
  5398.  
  5399. #define ID3D12CommandList_GetDevice(This,riid,ppvDevice)    \
  5400.     ( (This)->lpVtbl -> GetDevice(This,riid,ppvDevice) )
  5401.  
  5402.  
  5403. #define ID3D12CommandList_GetType(This) \
  5404.     ( (This)->lpVtbl -> GetType(This) )
  5405.  
  5406. #endif /* COBJMACROS */
  5407.  
  5408.  
  5409. #endif  /* C style interface */
  5410.  
  5411.  
  5412.  
  5413.  
  5414. #endif  /* __ID3D12CommandList_INTERFACE_DEFINED__ */
  5415.  
  5416.  
  5417. #ifndef __ID3D12GraphicsCommandList_INTERFACE_DEFINED__
  5418. #define __ID3D12GraphicsCommandList_INTERFACE_DEFINED__
  5419.  
  5420. /* interface ID3D12GraphicsCommandList */
  5421. /* [unique][local][object][uuid] */
  5422.  
  5423.  
  5424. EXTERN_C const IID IID_ID3D12GraphicsCommandList;
  5425.  
  5426. #if defined(__cplusplus) && !defined(CINTERFACE)
  5427.    
  5428.     MIDL_INTERFACE("d60db31f-ef2c-4914-bcd8-2507f293c83a")
  5429.     ID3D12GraphicsCommandList : public ID3D12CommandList
  5430.     {
  5431.     public:
  5432.         virtual HRESULT STDMETHODCALLTYPE Close( void) = 0;
  5433.        
  5434.         virtual HRESULT STDMETHODCALLTYPE Reset(
  5435.             _In_  ID3D12CommandAllocator *pAllocator,
  5436.             _In_opt_  ID3D12PipelineState *pInitialState) = 0;
  5437.        
  5438.         virtual void STDMETHODCALLTYPE ClearState(
  5439.             _In_opt_  ID3D12PipelineState *pPipelineState) = 0;
  5440.        
  5441.         virtual void STDMETHODCALLTYPE DrawInstanced(
  5442.             _In_  UINT VertexCountPerInstance,
  5443.             _In_  UINT InstanceCount,
  5444.             _In_  UINT StartVertexLocation,
  5445.             _In_  UINT StartInstanceLocation) = 0;
  5446.        
  5447.         virtual void STDMETHODCALLTYPE DrawIndexedInstanced(
  5448.             _In_  UINT IndexCountPerInstance,
  5449.             _In_  UINT InstanceCount,
  5450.             _In_  UINT StartIndexLocation,
  5451.             _In_  INT BaseVertexLocation,
  5452.             _In_  UINT StartInstanceLocation) = 0;
  5453.        
  5454.         virtual void STDMETHODCALLTYPE Dispatch(
  5455.             _In_  UINT ThreadGroupCountX,
  5456.             _In_  UINT ThreadGroupCountY,
  5457.             _In_  UINT ThreadGroupCountZ) = 0;
  5458.        
  5459.         virtual void STDMETHODCALLTYPE CopyBufferRegion(
  5460.             _In_  ID3D12Resource *pDstBuffer,
  5461.             UINT64 DstOffset,
  5462.             _In_  ID3D12Resource *pSrcBuffer,
  5463.             UINT64 SrcOffset,
  5464.             UINT64 NumBytes,
  5465.             D3D12_COPY_FLAGS CopyFlags) = 0;
  5466.        
  5467.         virtual void STDMETHODCALLTYPE CopyTextureRegion(
  5468.             _In_  const D3D12_TEXTURE_COPY_LOCATION *pDst,
  5469.             UINT DstX,
  5470.             UINT DstY,
  5471.             UINT DstZ,
  5472.             _In_  const D3D12_TEXTURE_COPY_LOCATION *pSrc,
  5473.             _In_opt_  const D3D12_BOX *pSrcBox,
  5474.             D3D12_COPY_FLAGS CopyFlags) = 0;
  5475.        
  5476.         virtual void STDMETHODCALLTYPE CopyResource(
  5477.             _In_  ID3D12Resource *pDstResource,
  5478.             _In_  ID3D12Resource *pSrcResource) = 0;
  5479.        
  5480.         virtual void STDMETHODCALLTYPE CopyTiles(
  5481.             _In_  ID3D12Resource *pTiledResource,
  5482.             _In_  const D3D12_TILED_RESOURCE_COORDINATE *pTileRegionStartCoordinate,
  5483.             _In_  const D3D12_TILE_REGION_SIZE *pTileRegionSize,
  5484.             _In_  ID3D12Resource *pBuffer,
  5485.             UINT64 BufferStartOffsetInBytes,
  5486.             D3D12_TILE_COPY_FLAG Flags) = 0;
  5487.        
  5488.         virtual void STDMETHODCALLTYPE ResolveSubresource(
  5489.             _In_  ID3D12Resource *pDstResource,
  5490.             _In_  UINT DstSubresource,
  5491.             _In_  ID3D12Resource *pSrcResource,
  5492.             _In_  UINT SrcSubresource,
  5493.             _In_  DXGI_FORMAT Format) = 0;
  5494.        
  5495.         virtual void STDMETHODCALLTYPE IASetPrimitiveTopology(
  5496.             _In_  D3D12_PRIMITIVE_TOPOLOGY PrimitiveTopology) = 0;
  5497.        
  5498.         virtual void STDMETHODCALLTYPE RSSetViewports(
  5499.             _In_range_(0, D3D12_VIEWPORT_AND_SCISSORRECT_OBJECT_COUNT_PER_PIPELINE)  UINT Count,
  5500.             _In_reads_( Count)  const D3D12_VIEWPORT *pViewports) = 0;
  5501.        
  5502.         virtual void STDMETHODCALLTYPE RSSetScissorRects(
  5503.             _In_range_(0, D3D12_VIEWPORT_AND_SCISSORRECT_OBJECT_COUNT_PER_PIPELINE)  UINT Count,
  5504.             _In_reads_( Count)  const D3D12_RECT *pRects) = 0;
  5505.        
  5506.         virtual void STDMETHODCALLTYPE OMSetBlendFactor(
  5507.             _In_opt_  const FLOAT BlendFactor[ 4 ]) = 0;
  5508.        
  5509.         virtual void STDMETHODCALLTYPE OMSetStencilRef(
  5510.             _In_  UINT StencilRef) = 0;
  5511.        
  5512.         virtual void STDMETHODCALLTYPE SetPipelineState(
  5513.             _In_  ID3D12PipelineState *pPipelineState) = 0;
  5514.        
  5515.         virtual void STDMETHODCALLTYPE ResourceBarrier(
  5516.             _In_  UINT Count,
  5517.             _In_reads_(Count)  const D3D12_RESOURCE_BARRIER_DESC *pDesc) = 0;
  5518.        
  5519.         virtual void STDMETHODCALLTYPE ExecuteBundle(
  5520.             _In_  ID3D12GraphicsCommandList *pCommandList) = 0;
  5521.        
  5522.         virtual void STDMETHODCALLTYPE SetDescriptorHeaps(
  5523.             _In_reads_(NumDescriptorHeaps)  ID3D12DescriptorHeap **pDescriptorHeaps,
  5524.             _In_  UINT NumDescriptorHeaps) = 0;
  5525.        
  5526.         virtual void STDMETHODCALLTYPE SetComputeRootSignature(
  5527.             _In_  ID3D12RootSignature *pRootSignature) = 0;
  5528.        
  5529.         virtual void STDMETHODCALLTYPE SetGraphicsRootSignature(
  5530.             _In_  ID3D12RootSignature *pRootSignature) = 0;
  5531.        
  5532.         virtual void STDMETHODCALLTYPE SetComputeRootDescriptorTable(
  5533.             _In_  UINT RootParameterIndex,
  5534.             _In_  D3D12_GPU_DESCRIPTOR_HANDLE BaseDescriptor) = 0;
  5535.        
  5536.         virtual void STDMETHODCALLTYPE SetGraphicsRootDescriptorTable(
  5537.             _In_  UINT RootParameterIndex,
  5538.             _In_  D3D12_GPU_DESCRIPTOR_HANDLE BaseDescriptor) = 0;
  5539.        
  5540.         virtual void STDMETHODCALLTYPE SetComputeRoot32BitConstant(
  5541.             _In_  UINT RootParameterIndex,
  5542.             _In_  UINT SrcData,
  5543.             _In_  UINT DestOffsetIn32BitValues) = 0;
  5544.        
  5545.         virtual void STDMETHODCALLTYPE SetGraphicsRoot32BitConstant(
  5546.             _In_  UINT RootParameterIndex,
  5547.             _In_  UINT SrcData,
  5548.             _In_  UINT DestOffsetIn32BitValues) = 0;
  5549.        
  5550.         virtual void STDMETHODCALLTYPE SetComputeRoot32BitConstants(
  5551.             _In_  UINT RootParameterIndex,
  5552.             _In_reads_(Num32BitValuesToSet*sizeof(UINT))  const void *pSrcData,
  5553.             _In_  UINT DestOffsetIn32BitValues,
  5554.             _In_  UINT Num32BitValuesToSet) = 0;
  5555.        
  5556.         virtual void STDMETHODCALLTYPE SetGraphicsRoot32BitConstants(
  5557.             _In_  UINT RootParameterIndex,
  5558.             _In_reads_(Num32BitValuesToSet*sizeof(UINT))  const void *pSrcData,
  5559.             _In_  UINT DestOffsetIn32BitValues,
  5560.             _In_  UINT Num32BitValuesToSet) = 0;
  5561.        
  5562.         virtual void STDMETHODCALLTYPE SetComputeRootConstantBufferView(
  5563.             _In_  UINT RootParameterIndex,
  5564.             _In_  D3D12_GPU_VIRTUAL_ADDRESS BufferLocation) = 0;
  5565.        
  5566.         virtual void STDMETHODCALLTYPE SetGraphicsRootConstantBufferView(
  5567.             _In_  UINT RootParameterIndex,
  5568.             _In_  D3D12_GPU_VIRTUAL_ADDRESS BufferLocation) = 0;
  5569.        
  5570.         virtual void STDMETHODCALLTYPE SetComputeRootShaderResourceView(
  5571.             _In_  UINT RootParameterIndex,
  5572.             _In_  D3D12_GPU_VIRTUAL_ADDRESS BufferLocation) = 0;
  5573.        
  5574.         virtual void STDMETHODCALLTYPE SetGraphicsRootShaderResourceView(
  5575.             _In_  UINT RootParameterIndex,
  5576.             _In_  D3D12_GPU_VIRTUAL_ADDRESS BufferLocation) = 0;
  5577.        
  5578.         virtual void STDMETHODCALLTYPE SetComputeRootUnorderedAccessView(
  5579.             _In_  UINT RootParameterIndex,
  5580.             _In_  D3D12_GPU_VIRTUAL_ADDRESS BufferLocation) = 0;
  5581.        
  5582.         virtual void STDMETHODCALLTYPE SetGraphicsRootUnorderedAccessView(
  5583.             _In_  UINT RootParameterIndex,
  5584.             _In_  D3D12_GPU_VIRTUAL_ADDRESS BufferLocation) = 0;
  5585.        
  5586.         virtual void STDMETHODCALLTYPE SetIndexBuffer(
  5587.             _In_opt_  const D3D12_INDEX_BUFFER_VIEW *pDesc) = 0;
  5588.        
  5589.         virtual void STDMETHODCALLTYPE SetVertexBuffers(
  5590.             _In_  UINT StartSlot,
  5591.             _In_reads_opt_(NumBuffers)  const D3D12_VERTEX_BUFFER_VIEW *pDesc,
  5592.             _In_  UINT NumBuffers) = 0;
  5593.        
  5594.         virtual void STDMETHODCALLTYPE SetStreamOutputBuffers(
  5595.             _In_  UINT StartSlot,
  5596.             _In_reads_opt_(NumBuffers)  const D3D12_STREAM_OUTPUT_BUFFER_VIEW *pDesc,
  5597.             _In_  UINT NumBuffers) = 0;
  5598.        
  5599.         virtual void STDMETHODCALLTYPE SetRenderTargets(
  5600.             _In_  const D3D12_CPU_DESCRIPTOR_HANDLE *pRenderTargetDescriptors,
  5601.             _In_  BOOL RTsSingleHandleToDescriptorRange,
  5602.             _In_  UINT NumRenderTargetDescriptors,
  5603.             _In_opt_  const D3D12_CPU_DESCRIPTOR_HANDLE *pDepthStencilDescriptor) = 0;
  5604.        
  5605.         virtual void STDMETHODCALLTYPE ClearDepthStencilView(
  5606.             _In_  D3D12_CPU_DESCRIPTOR_HANDLE DepthStencilView,
  5607.             _In_  D3D12_CLEAR_FLAG ClearFlags,
  5608.             _In_  FLOAT Depth,
  5609.             _In_  UINT8 Stencil,
  5610.             _In_reads_(NumRects)  const D3D12_RECT *pRect,
  5611.             _In_  UINT NumRects) = 0;
  5612.        
  5613.         virtual void STDMETHODCALLTYPE ClearRenderTargetView(
  5614.             _In_  D3D12_CPU_DESCRIPTOR_HANDLE RenderTargetView,
  5615.             _In_  const FLOAT ColorRGBA[ 4 ],
  5616.             _In_reads_(NumRects)  const D3D12_RECT *pRects,
  5617.             _In_  UINT NumRects) = 0;
  5618.        
  5619.         virtual void STDMETHODCALLTYPE ClearUnorderedAccessViewUint(
  5620.             _In_  D3D12_GPU_DESCRIPTOR_HANDLE ViewGPUHandleInCurrentHeap,
  5621.             _In_  D3D12_CPU_DESCRIPTOR_HANDLE ViewCPUHandle,
  5622.             _In_  ID3D12Resource *pResource,
  5623.             _In_  const UINT Values[ 4 ],
  5624.             _In_reads_(NumRects)  const D3D12_RECT *pRects,
  5625.             _In_  UINT NumRects) = 0;
  5626.        
  5627.         virtual void STDMETHODCALLTYPE ClearUnorderedAccessViewFloat(
  5628.             _In_  D3D12_GPU_DESCRIPTOR_HANDLE ViewGPUHandleInCurrentHeap,
  5629.             _In_  D3D12_CPU_DESCRIPTOR_HANDLE ViewCPUHandle,
  5630.             _In_  ID3D12Resource *pResource,
  5631.             _In_  const FLOAT Values[ 4 ],
  5632.             _In_reads_(NumRects)  const D3D12_RECT *pRects,
  5633.             _In_  UINT NumRects) = 0;
  5634.        
  5635.         virtual void STDMETHODCALLTYPE DiscardResource(
  5636.             _In_  ID3D12Resource *pResource,
  5637.             _In_opt_  const D3D12_DISCARD_RESOURCE_DESC *pDesc) = 0;
  5638.        
  5639.         virtual void STDMETHODCALLTYPE BeginQuery(
  5640.             _In_  ID3D12QueryHeap *pQueryHeap,
  5641.             _In_  UINT Index,
  5642.             _In_  D3D12_QUERY_TYPE Type) = 0;
  5643.        
  5644.         virtual void STDMETHODCALLTYPE EndQuery(
  5645.             _In_  ID3D12QueryHeap *pQueryHeap,
  5646.             _In_  UINT Index,
  5647.             _In_  D3D12_QUERY_TYPE Type) = 0;
  5648.        
  5649.         virtual void STDMETHODCALLTYPE ResolveQueryData(
  5650.             _In_  ID3D12QueryHeap *pQueryHeap,
  5651.             _In_  D3D12_QUERY_TYPE Type,
  5652.             _In_  UINT StartElement,
  5653.             _In_  UINT ElementCount,
  5654.             _In_  ID3D12Resource *pDestinationBuffer,
  5655.             _In_  UINT64 AlignedDestinationBufferOffset) = 0;
  5656.        
  5657.         virtual void STDMETHODCALLTYPE SetPredication(
  5658.             _In_opt_  ID3D12Resource *pBuffer,
  5659.             _In_  UINT64 AlignedBufferOffset,
  5660.             _In_  D3D12_PREDICATION_OP Operation) = 0;
  5661.        
  5662.         virtual INT STDMETHODCALLTYPE PIXBeginEvent(
  5663.             _In_z_  LPCWSTR Name) = 0;
  5664.        
  5665.         virtual INT STDMETHODCALLTYPE PIXEndEvent( void) = 0;
  5666.        
  5667.         virtual void STDMETHODCALLTYPE PIXSetMarker(
  5668.             _In_z_  LPCWSTR Name) = 0;
  5669.        
  5670.         virtual BOOL STDMETHODCALLTYPE PIXGetStatus( void) = 0;
  5671.        
  5672.         virtual void STDMETHODCALLTYPE SetMarkerInt(
  5673.             _In_  LPCWSTR pLabel,
  5674.             INT Data) = 0;
  5675.        
  5676.         virtual void STDMETHODCALLTYPE BeginEventInt(
  5677.             _In_  LPCWSTR pLabel,
  5678.             INT Data) = 0;
  5679.        
  5680.         virtual void STDMETHODCALLTYPE EndEvent( void) = 0;
  5681.        
  5682.         virtual void STDMETHODCALLTYPE ExecuteIndirect(
  5683.             _In_  ID3D12CommandSignature *pCommandSignature,
  5684.             _In_  UINT MaxCommandCount,
  5685.             _In_  ID3D12Resource *pArgumentBuffer,
  5686.             _In_  UINT64 ArgumentBufferOffset,
  5687.             _In_opt_  ID3D12Resource *pCountBuffer,
  5688.             _In_  UINT64 CountBufferOffset) = 0;
  5689.        
  5690.     };
  5691.    
  5692.    
  5693. #else   /* C style interface */
  5694.  
  5695.     typedef struct ID3D12GraphicsCommandListVtbl
  5696.     {
  5697.         BEGIN_INTERFACE
  5698.        
  5699.         HRESULT ( STDMETHODCALLTYPE *QueryInterface )(
  5700.             ID3D12GraphicsCommandList * This,
  5701.             REFIID riid,
  5702.             _COM_Outptr_  void **ppvObject);
  5703.        
  5704.         ULONG ( STDMETHODCALLTYPE *AddRef )(
  5705.             ID3D12GraphicsCommandList * This);
  5706.        
  5707.         ULONG ( STDMETHODCALLTYPE *Release )(
  5708.             ID3D12GraphicsCommandList * This);
  5709.        
  5710.         HRESULT ( STDMETHODCALLTYPE *GetPrivateData )(
  5711.             ID3D12GraphicsCommandList * This,
  5712.             _In_  REFGUID guid,
  5713.             _Inout_  UINT *pDataSize,
  5714.             _Out_writes_bytes_opt_( *pDataSize )  void *pData);
  5715.        
  5716.         HRESULT ( STDMETHODCALLTYPE *SetPrivateData )(
  5717.             ID3D12GraphicsCommandList * This,
  5718.             _In_  REFGUID guid,
  5719.             _In_  UINT DataSize,
  5720.             _In_reads_bytes_opt_( DataSize )  const void *pData);
  5721.        
  5722.         HRESULT ( STDMETHODCALLTYPE *SetPrivateDataInterface )(
  5723.             ID3D12GraphicsCommandList * This,
  5724.             _In_  REFGUID guid,
  5725.             _In_opt_  const IUnknown *pData);
  5726.        
  5727.         HRESULT ( STDMETHODCALLTYPE *SetName )(
  5728.             ID3D12GraphicsCommandList * This,
  5729.             _In_z_  LPCWSTR Name);
  5730.        
  5731.         HRESULT ( STDMETHODCALLTYPE *GetDevice )(
  5732.             ID3D12GraphicsCommandList * This,
  5733.             REFIID riid,
  5734.             _COM_Outptr_opt_  void **ppvDevice);
  5735.        
  5736.         D3D12_COMMAND_LIST_TYPE ( STDMETHODCALLTYPE *GetType )(
  5737.             ID3D12GraphicsCommandList * This);
  5738.        
  5739.         HRESULT ( STDMETHODCALLTYPE *Close )(
  5740.             ID3D12GraphicsCommandList * This);
  5741.        
  5742.         HRESULT ( STDMETHODCALLTYPE *Reset )(
  5743.             ID3D12GraphicsCommandList * This,
  5744.             _In_  ID3D12CommandAllocator *pAllocator,
  5745.             _In_opt_  ID3D12PipelineState *pInitialState);
  5746.        
  5747.         void ( STDMETHODCALLTYPE *ClearState )(
  5748.             ID3D12GraphicsCommandList * This,
  5749.             _In_opt_  ID3D12PipelineState *pPipelineState);
  5750.        
  5751.         void ( STDMETHODCALLTYPE *DrawInstanced )(
  5752.             ID3D12GraphicsCommandList * This,
  5753.             _In_  UINT VertexCountPerInstance,
  5754.             _In_  UINT InstanceCount,
  5755.             _In_  UINT StartVertexLocation,
  5756.             _In_  UINT StartInstanceLocation);
  5757.        
  5758.         void ( STDMETHODCALLTYPE *DrawIndexedInstanced )(
  5759.             ID3D12GraphicsCommandList * This,
  5760.             _In_  UINT IndexCountPerInstance,
  5761.             _In_  UINT InstanceCount,
  5762.             _In_  UINT StartIndexLocation,
  5763.             _In_  INT BaseVertexLocation,
  5764.             _In_  UINT StartInstanceLocation);
  5765.        
  5766.         void ( STDMETHODCALLTYPE *Dispatch )(
  5767.             ID3D12GraphicsCommandList * This,
  5768.             _In_  UINT ThreadGroupCountX,
  5769.             _In_  UINT ThreadGroupCountY,
  5770.             _In_  UINT ThreadGroupCountZ);
  5771.        
  5772.         void ( STDMETHODCALLTYPE *CopyBufferRegion )(
  5773.             ID3D12GraphicsCommandList * This,
  5774.             _In_  ID3D12Resource *pDstBuffer,
  5775.             UINT64 DstOffset,
  5776.             _In_  ID3D12Resource *pSrcBuffer,
  5777.             UINT64 SrcOffset,
  5778.             UINT64 NumBytes,
  5779.             D3D12_COPY_FLAGS CopyFlags);
  5780.        
  5781.         void ( STDMETHODCALLTYPE *CopyTextureRegion )(
  5782.             ID3D12GraphicsCommandList * This,
  5783.             _In_  const D3D12_TEXTURE_COPY_LOCATION *pDst,
  5784.             UINT DstX,
  5785.             UINT DstY,
  5786.             UINT DstZ,
  5787.             _In_  const D3D12_TEXTURE_COPY_LOCATION *pSrc,
  5788.             _In_opt_  const D3D12_BOX *pSrcBox,
  5789.             D3D12_COPY_FLAGS CopyFlags);
  5790.        
  5791.         void ( STDMETHODCALLTYPE *CopyResource )(
  5792.             ID3D12GraphicsCommandList * This,
  5793.             _In_  ID3D12Resource *pDstResource,
  5794.             _In_  ID3D12Resource *pSrcResource);
  5795.        
  5796.         void ( STDMETHODCALLTYPE *CopyTiles )(
  5797.             ID3D12GraphicsCommandList * This,
  5798.             _In_  ID3D12Resource *pTiledResource,
  5799.             _In_  const D3D12_TILED_RESOURCE_COORDINATE *pTileRegionStartCoordinate,
  5800.             _In_  const D3D12_TILE_REGION_SIZE *pTileRegionSize,
  5801.             _In_  ID3D12Resource *pBuffer,
  5802.             UINT64 BufferStartOffsetInBytes,
  5803.             D3D12_TILE_COPY_FLAG Flags);
  5804.        
  5805.         void ( STDMETHODCALLTYPE *ResolveSubresource )(
  5806.             ID3D12GraphicsCommandList * This,
  5807.             _In_  ID3D12Resource *pDstResource,
  5808.             _In_  UINT DstSubresource,
  5809.             _In_  ID3D12Resource *pSrcResource,
  5810.             _In_  UINT SrcSubresource,
  5811.             _In_  DXGI_FORMAT Format);
  5812.        
  5813.         void ( STDMETHODCALLTYPE *IASetPrimitiveTopology )(
  5814.             ID3D12GraphicsCommandList * This,
  5815.             _In_  D3D12_PRIMITIVE_TOPOLOGY PrimitiveTopology);
  5816.        
  5817.         void ( STDMETHODCALLTYPE *RSSetViewports )(
  5818.             ID3D12GraphicsCommandList * This,
  5819.             _In_range_(0, D3D12_VIEWPORT_AND_SCISSORRECT_OBJECT_COUNT_PER_PIPELINE)  UINT Count,
  5820.             _In_reads_( Count)  const D3D12_VIEWPORT *pViewports);
  5821.        
  5822.         void ( STDMETHODCALLTYPE *RSSetScissorRects )(
  5823.             ID3D12GraphicsCommandList * This,
  5824.             _In_range_(0, D3D12_VIEWPORT_AND_SCISSORRECT_OBJECT_COUNT_PER_PIPELINE)  UINT Count,
  5825.             _In_reads_( Count)  const D3D12_RECT *pRects);
  5826.        
  5827.         void ( STDMETHODCALLTYPE *OMSetBlendFactor )(
  5828.             ID3D12GraphicsCommandList * This,
  5829.             _In_opt_  const FLOAT BlendFactor[ 4 ]);
  5830.        
  5831.         void ( STDMETHODCALLTYPE *OMSetStencilRef )(
  5832.             ID3D12GraphicsCommandList * This,
  5833.             _In_  UINT StencilRef);
  5834.        
  5835.         void ( STDMETHODCALLTYPE *SetPipelineState )(
  5836.             ID3D12GraphicsCommandList * This,
  5837.             _In_  ID3D12PipelineState *pPipelineState);
  5838.        
  5839.         void ( STDMETHODCALLTYPE *ResourceBarrier )(
  5840.             ID3D12GraphicsCommandList * This,
  5841.             _In_  UINT Count,
  5842.             _In_reads_(Count)  const D3D12_RESOURCE_BARRIER_DESC *pDesc);
  5843.        
  5844.         void ( STDMETHODCALLTYPE *ExecuteBundle )(
  5845.             ID3D12GraphicsCommandList * This,
  5846.             _In_  ID3D12GraphicsCommandList *pCommandList);
  5847.        
  5848.         void ( STDMETHODCALLTYPE *SetDescriptorHeaps )(
  5849.             ID3D12GraphicsCommandList * This,
  5850.             _In_reads_(NumDescriptorHeaps)  ID3D12DescriptorHeap **pDescriptorHeaps,
  5851.             _In_  UINT NumDescriptorHeaps);
  5852.        
  5853.         void ( STDMETHODCALLTYPE *SetComputeRootSignature )(
  5854.             ID3D12GraphicsCommandList * This,
  5855.             _In_  ID3D12RootSignature *pRootSignature);
  5856.        
  5857.         void ( STDMETHODCALLTYPE *SetGraphicsRootSignature )(
  5858.             ID3D12GraphicsCommandList * This,
  5859.             _In_  ID3D12RootSignature *pRootSignature);
  5860.        
  5861.         void ( STDMETHODCALLTYPE *SetComputeRootDescriptorTable )(
  5862.             ID3D12GraphicsCommandList * This,
  5863.             _In_  UINT RootParameterIndex,
  5864.             _In_  D3D12_GPU_DESCRIPTOR_HANDLE BaseDescriptor);
  5865.        
  5866.         void ( STDMETHODCALLTYPE *SetGraphicsRootDescriptorTable )(
  5867.             ID3D12GraphicsCommandList * This,
  5868.             _In_  UINT RootParameterIndex,
  5869.             _In_  D3D12_GPU_DESCRIPTOR_HANDLE BaseDescriptor);
  5870.        
  5871.         void ( STDMETHODCALLTYPE *SetComputeRoot32BitConstant )(
  5872.             ID3D12GraphicsCommandList * This,
  5873.             _In_  UINT RootParameterIndex,
  5874.             _In_  UINT SrcData,
  5875.             _In_  UINT DestOffsetIn32BitValues);
  5876.        
  5877.         void ( STDMETHODCALLTYPE *SetGraphicsRoot32BitConstant )(
  5878.             ID3D12GraphicsCommandList * This,
  5879.             _In_  UINT RootParameterIndex,
  5880.             _In_  UINT SrcData,
  5881.             _In_  UINT DestOffsetIn32BitValues);
  5882.        
  5883.         void ( STDMETHODCALLTYPE *SetComputeRoot32BitConstants )(
  5884.             ID3D12GraphicsCommandList * This,
  5885.             _In_  UINT RootParameterIndex,
  5886.             _In_reads_(Num32BitValuesToSet*sizeof(UINT))  const void *pSrcData,
  5887.             _In_  UINT DestOffsetIn32BitValues,
  5888.             _In_  UINT Num32BitValuesToSet);
  5889.        
  5890.         void ( STDMETHODCALLTYPE *SetGraphicsRoot32BitConstants )(
  5891.             ID3D12GraphicsCommandList * This,
  5892.             _In_  UINT RootParameterIndex,
  5893.             _In_reads_(Num32BitValuesToSet*sizeof(UINT))  const void *pSrcData,
  5894.             _In_  UINT DestOffsetIn32BitValues,
  5895.             _In_  UINT Num32BitValuesToSet);
  5896.        
  5897.         void ( STDMETHODCALLTYPE *SetComputeRootConstantBufferView )(
  5898.             ID3D12GraphicsCommandList * This,
  5899.             _In_  UINT RootParameterIndex,
  5900.             _In_  D3D12_GPU_VIRTUAL_ADDRESS BufferLocation);
  5901.        
  5902.         void ( STDMETHODCALLTYPE *SetGraphicsRootConstantBufferView )(
  5903.             ID3D12GraphicsCommandList * This,
  5904.             _In_  UINT RootParameterIndex,
  5905.             _In_  D3D12_GPU_VIRTUAL_ADDRESS BufferLocation);
  5906.        
  5907.         void ( STDMETHODCALLTYPE *SetComputeRootShaderResourceView )(
  5908.             ID3D12GraphicsCommandList * This,
  5909.             _In_  UINT RootParameterIndex,
  5910.             _In_  D3D12_GPU_VIRTUAL_ADDRESS BufferLocation);
  5911.        
  5912.         void ( STDMETHODCALLTYPE *SetGraphicsRootShaderResourceView )(
  5913.             ID3D12GraphicsCommandList * This,
  5914.             _In_  UINT RootParameterIndex,
  5915.             _In_  D3D12_GPU_VIRTUAL_ADDRESS BufferLocation);
  5916.        
  5917.         void ( STDMETHODCALLTYPE *SetComputeRootUnorderedAccessView )(
  5918.             ID3D12GraphicsCommandList * This,
  5919.             _In_  UINT RootParameterIndex,
  5920.             _In_  D3D12_GPU_VIRTUAL_ADDRESS BufferLocation);
  5921.        
  5922.         void ( STDMETHODCALLTYPE *SetGraphicsRootUnorderedAccessView )(
  5923.             ID3D12GraphicsCommandList * This,
  5924.             _In_  UINT RootParameterIndex,
  5925.             _In_  D3D12_GPU_VIRTUAL_ADDRESS BufferLocation);
  5926.        
  5927.         void ( STDMETHODCALLTYPE *SetIndexBuffer )(
  5928.             ID3D12GraphicsCommandList * This,
  5929.             _In_opt_  const D3D12_INDEX_BUFFER_VIEW *pDesc);
  5930.        
  5931.         void ( STDMETHODCALLTYPE *SetVertexBuffers )(
  5932.             ID3D12GraphicsCommandList * This,
  5933.             _In_  UINT StartSlot,
  5934.             _In_reads_opt_(NumBuffers)  const D3D12_VERTEX_BUFFER_VIEW *pDesc,
  5935.             _In_  UINT NumBuffers);
  5936.        
  5937.         void ( STDMETHODCALLTYPE *SetStreamOutputBuffers )(
  5938.             ID3D12GraphicsCommandList * This,
  5939.             _In_  UINT StartSlot,
  5940.             _In_reads_opt_(NumBuffers)  const D3D12_STREAM_OUTPUT_BUFFER_VIEW *pDesc,
  5941.             _In_  UINT NumBuffers);
  5942.        
  5943.         void ( STDMETHODCALLTYPE *SetRenderTargets )(
  5944.             ID3D12GraphicsCommandList * This,
  5945.             _In_  const D3D12_CPU_DESCRIPTOR_HANDLE *pRenderTargetDescriptors,
  5946.             _In_  BOOL RTsSingleHandleToDescriptorRange,
  5947.             _In_  UINT NumRenderTargetDescriptors,
  5948.             _In_opt_  const D3D12_CPU_DESCRIPTOR_HANDLE *pDepthStencilDescriptor);
  5949.        
  5950.         void ( STDMETHODCALLTYPE *ClearDepthStencilView )(
  5951.             ID3D12GraphicsCommandList * This,
  5952.             _In_  D3D12_CPU_DESCRIPTOR_HANDLE DepthStencilView,
  5953.             _In_  D3D12_CLEAR_FLAG ClearFlags,
  5954.             _In_  FLOAT Depth,
  5955.             _In_  UINT8 Stencil,
  5956.             _In_reads_(NumRects)  const D3D12_RECT *pRect,
  5957.             _In_  UINT NumRects);
  5958.        
  5959.         void ( STDMETHODCALLTYPE *ClearRenderTargetView )(
  5960.             ID3D12GraphicsCommandList * This,
  5961.             _In_  D3D12_CPU_DESCRIPTOR_HANDLE RenderTargetView,
  5962.             _In_  const FLOAT ColorRGBA[ 4 ],
  5963.             _In_reads_(NumRects)  const D3D12_RECT *pRects,
  5964.             _In_  UINT NumRects);
  5965.        
  5966.         void ( STDMETHODCALLTYPE *ClearUnorderedAccessViewUint )(
  5967.             ID3D12GraphicsCommandList * This,
  5968.             _In_  D3D12_GPU_DESCRIPTOR_HANDLE ViewGPUHandleInCurrentHeap,
  5969.             _In_  D3D12_CPU_DESCRIPTOR_HANDLE ViewCPUHandle,
  5970.             _In_  ID3D12Resource *pResource,
  5971.             _In_  const UINT Values[ 4 ],
  5972.             _In_reads_(NumRects)  const D3D12_RECT *pRects,
  5973.             _In_  UINT NumRects);
  5974.        
  5975.         void ( STDMETHODCALLTYPE *ClearUnorderedAccessViewFloat )(
  5976.             ID3D12GraphicsCommandList * This,
  5977.             _In_  D3D12_GPU_DESCRIPTOR_HANDLE ViewGPUHandleInCurrentHeap,
  5978.             _In_  D3D12_CPU_DESCRIPTOR_HANDLE ViewCPUHandle,
  5979.             _In_  ID3D12Resource *pResource,
  5980.             _In_  const FLOAT Values[ 4 ],
  5981.             _In_reads_(NumRects)  const D3D12_RECT *pRects,
  5982.             _In_  UINT NumRects);
  5983.        
  5984.         void ( STDMETHODCALLTYPE *DiscardResource )(
  5985.             ID3D12GraphicsCommandList * This,
  5986.             _In_  ID3D12Resource *pResource,
  5987.             _In_opt_  const D3D12_DISCARD_RESOURCE_DESC *pDesc);
  5988.        
  5989.         void ( STDMETHODCALLTYPE *BeginQuery )(
  5990.             ID3D12GraphicsCommandList * This,
  5991.             _In_  ID3D12QueryHeap *pQueryHeap,
  5992.             _In_  UINT Index,
  5993.             _In_  D3D12_QUERY_TYPE Type);
  5994.        
  5995.         void ( STDMETHODCALLTYPE *EndQuery )(
  5996.             ID3D12GraphicsCommandList * This,
  5997.             _In_  ID3D12QueryHeap *pQueryHeap,
  5998.             _In_  UINT Index,
  5999.             _In_  D3D12_QUERY_TYPE Type);
  6000.        
  6001.         void ( STDMETHODCALLTYPE *ResolveQueryData )(
  6002.             ID3D12GraphicsCommandList * This,
  6003.             _In_  ID3D12QueryHeap *pQueryHeap,
  6004.             _In_  D3D12_QUERY_TYPE Type,
  6005.             _In_  UINT StartElement,
  6006.             _In_  UINT ElementCount,
  6007.             _In_  ID3D12Resource *pDestinationBuffer,
  6008.             _In_  UINT64 AlignedDestinationBufferOffset);
  6009.        
  6010.         void ( STDMETHODCALLTYPE *SetPredication )(
  6011.             ID3D12GraphicsCommandList * This,
  6012.             _In_opt_  ID3D12Resource *pBuffer,
  6013.             _In_  UINT64 AlignedBufferOffset,
  6014.             _In_  D3D12_PREDICATION_OP Operation);
  6015.        
  6016.         INT ( STDMETHODCALLTYPE *PIXBeginEvent )(
  6017.             ID3D12GraphicsCommandList * This,
  6018.             _In_z_  LPCWSTR Name);
  6019.        
  6020.         INT ( STDMETHODCALLTYPE *PIXEndEvent )(
  6021.             ID3D12GraphicsCommandList * This);
  6022.        
  6023.         void ( STDMETHODCALLTYPE *PIXSetMarker )(
  6024.             ID3D12GraphicsCommandList * This,
  6025.             _In_z_  LPCWSTR Name);
  6026.        
  6027.         BOOL ( STDMETHODCALLTYPE *PIXGetStatus )(
  6028.             ID3D12GraphicsCommandList * This);
  6029.        
  6030.         void ( STDMETHODCALLTYPE *SetMarkerInt )(
  6031.             ID3D12GraphicsCommandList * This,
  6032.             _In_  LPCWSTR pLabel,
  6033.             INT Data);
  6034.        
  6035.         void ( STDMETHODCALLTYPE *BeginEventInt )(
  6036.             ID3D12GraphicsCommandList * This,
  6037.             _In_  LPCWSTR pLabel,
  6038.             INT Data);
  6039.        
  6040.         void ( STDMETHODCALLTYPE *EndEvent )(
  6041.             ID3D12GraphicsCommandList * This);
  6042.        
  6043.         void ( STDMETHODCALLTYPE *ExecuteIndirect )(
  6044.             ID3D12GraphicsCommandList * This,
  6045.             _In_  ID3D12CommandSignature *pCommandSignature,
  6046.             _In_  UINT MaxCommandCount,
  6047.             _In_  ID3D12Resource *pArgumentBuffer,
  6048.             _In_  UINT64 ArgumentBufferOffset,
  6049.             _In_opt_  ID3D12Resource *pCountBuffer,
  6050.             _In_  UINT64 CountBufferOffset);
  6051.        
  6052.         END_INTERFACE
  6053.     } ID3D12GraphicsCommandListVtbl;
  6054.  
  6055.     interface ID3D12GraphicsCommandList
  6056.     {
  6057.         CONST_VTBL struct ID3D12GraphicsCommandListVtbl *lpVtbl;
  6058.     };
  6059.  
  6060.    
  6061.  
  6062. #ifdef COBJMACROS
  6063.  
  6064.  
  6065. #define ID3D12GraphicsCommandList_QueryInterface(This,riid,ppvObject)   \
  6066.     ( (This)->lpVtbl -> QueryInterface(This,riid,ppvObject) )
  6067.  
  6068. #define ID3D12GraphicsCommandList_AddRef(This)  \
  6069.     ( (This)->lpVtbl -> AddRef(This) )
  6070.  
  6071. #define ID3D12GraphicsCommandList_Release(This) \
  6072.     ( (This)->lpVtbl -> Release(This) )
  6073.  
  6074.  
  6075. #define ID3D12GraphicsCommandList_GetPrivateData(This,guid,pDataSize,pData) \
  6076.     ( (This)->lpVtbl -> GetPrivateData(This,guid,pDataSize,pData) )
  6077.  
  6078. #define ID3D12GraphicsCommandList_SetPrivateData(This,guid,DataSize,pData)  \
  6079.     ( (This)->lpVtbl -> SetPrivateData(This,guid,DataSize,pData) )
  6080.  
  6081. #define ID3D12GraphicsCommandList_SetPrivateDataInterface(This,guid,pData)  \
  6082.     ( (This)->lpVtbl -> SetPrivateDataInterface(This,guid,pData) )
  6083.  
  6084. #define ID3D12GraphicsCommandList_SetName(This,Name)    \
  6085.     ( (This)->lpVtbl -> SetName(This,Name) )
  6086.  
  6087.  
  6088. #define ID3D12GraphicsCommandList_GetDevice(This,riid,ppvDevice)    \
  6089.     ( (This)->lpVtbl -> GetDevice(This,riid,ppvDevice) )
  6090.  
  6091.  
  6092. #define ID3D12GraphicsCommandList_GetType(This) \
  6093.     ( (This)->lpVtbl -> GetType(This) )
  6094.  
  6095.  
  6096. #define ID3D12GraphicsCommandList_Close(This)   \
  6097.     ( (This)->lpVtbl -> Close(This) )
  6098.  
  6099. #define ID3D12GraphicsCommandList_Reset(This,pAllocator,pInitialState)  \
  6100.     ( (This)->lpVtbl -> Reset(This,pAllocator,pInitialState) )
  6101.  
  6102. #define ID3D12GraphicsCommandList_ClearState(This,pPipelineState)   \
  6103.     ( (This)->lpVtbl -> ClearState(This,pPipelineState) )
  6104.  
  6105. #define ID3D12GraphicsCommandList_DrawInstanced(This,VertexCountPerInstance,InstanceCount,StartVertexLocation,StartInstanceLocation)    \
  6106.     ( (This)->lpVtbl -> DrawInstanced(This,VertexCountPerInstance,InstanceCount,StartVertexLocation,StartInstanceLocation) )
  6107.  
  6108. #define ID3D12GraphicsCommandList_DrawIndexedInstanced(This,IndexCountPerInstance,InstanceCount,StartIndexLocation,BaseVertexLocation,StartInstanceLocation)    \
  6109.     ( (This)->lpVtbl -> DrawIndexedInstanced(This,IndexCountPerInstance,InstanceCount,StartIndexLocation,BaseVertexLocation,StartInstanceLocation) )
  6110.  
  6111. #define ID3D12GraphicsCommandList_Dispatch(This,ThreadGroupCountX,ThreadGroupCountY,ThreadGroupCountZ)  \
  6112.     ( (This)->lpVtbl -> Dispatch(This,ThreadGroupCountX,ThreadGroupCountY,ThreadGroupCountZ) )
  6113.  
  6114. #define ID3D12GraphicsCommandList_CopyBufferRegion(This,pDstBuffer,DstOffset,pSrcBuffer,SrcOffset,NumBytes,CopyFlags)   \
  6115.     ( (This)->lpVtbl -> CopyBufferRegion(This,pDstBuffer,DstOffset,pSrcBuffer,SrcOffset,NumBytes,CopyFlags) )
  6116.  
  6117. #define ID3D12GraphicsCommandList_CopyTextureRegion(This,pDst,DstX,DstY,DstZ,pSrc,pSrcBox,CopyFlags)    \
  6118.     ( (This)->lpVtbl -> CopyTextureRegion(This,pDst,DstX,DstY,DstZ,pSrc,pSrcBox,CopyFlags) )
  6119.  
  6120. #define ID3D12GraphicsCommandList_CopyResource(This,pDstResource,pSrcResource)  \
  6121.     ( (This)->lpVtbl -> CopyResource(This,pDstResource,pSrcResource) )
  6122.  
  6123. #define ID3D12GraphicsCommandList_CopyTiles(This,pTiledResource,pTileRegionStartCoordinate,pTileRegionSize,pBuffer,BufferStartOffsetInBytes,Flags)  \
  6124.     ( (This)->lpVtbl -> CopyTiles(This,pTiledResource,pTileRegionStartCoordinate,pTileRegionSize,pBuffer,BufferStartOffsetInBytes,Flags) )
  6125.  
  6126. #define ID3D12GraphicsCommandList_ResolveSubresource(This,pDstResource,DstSubresource,pSrcResource,SrcSubresource,Format)   \
  6127.     ( (This)->lpVtbl -> ResolveSubresource(This,pDstResource,DstSubresource,pSrcResource,SrcSubresource,Format) )
  6128.  
  6129. #define ID3D12GraphicsCommandList_IASetPrimitiveTopology(This,PrimitiveTopology)    \
  6130.     ( (This)->lpVtbl -> IASetPrimitiveTopology(This,PrimitiveTopology) )
  6131.  
  6132. #define ID3D12GraphicsCommandList_RSSetViewports(This,Count,pViewports) \
  6133.     ( (This)->lpVtbl -> RSSetViewports(This,Count,pViewports) )
  6134.  
  6135. #define ID3D12GraphicsCommandList_RSSetScissorRects(This,Count,pRects)  \
  6136.     ( (This)->lpVtbl -> RSSetScissorRects(This,Count,pRects) )
  6137.  
  6138. #define ID3D12GraphicsCommandList_OMSetBlendFactor(This,BlendFactor)    \
  6139.     ( (This)->lpVtbl -> OMSetBlendFactor(This,BlendFactor) )
  6140.  
  6141. #define ID3D12GraphicsCommandList_OMSetStencilRef(This,StencilRef)  \
  6142.     ( (This)->lpVtbl -> OMSetStencilRef(This,StencilRef) )
  6143.  
  6144. #define ID3D12GraphicsCommandList_SetPipelineState(This,pPipelineState) \
  6145.     ( (This)->lpVtbl -> SetPipelineState(This,pPipelineState) )
  6146.  
  6147. #define ID3D12GraphicsCommandList_ResourceBarrier(This,Count,pDesc) \
  6148.     ( (This)->lpVtbl -> ResourceBarrier(This,Count,pDesc) )
  6149.  
  6150. #define ID3D12GraphicsCommandList_ExecuteBundle(This,pCommandList)  \
  6151.     ( (This)->lpVtbl -> ExecuteBundle(This,pCommandList) )
  6152.  
  6153. #define ID3D12GraphicsCommandList_SetDescriptorHeaps(This,pDescriptorHeaps,NumDescriptorHeaps)  \
  6154.     ( (This)->lpVtbl -> SetDescriptorHeaps(This,pDescriptorHeaps,NumDescriptorHeaps) )
  6155.  
  6156. #define ID3D12GraphicsCommandList_SetComputeRootSignature(This,pRootSignature)  \
  6157.     ( (This)->lpVtbl -> SetComputeRootSignature(This,pRootSignature) )
  6158.  
  6159. #define ID3D12GraphicsCommandList_SetGraphicsRootSignature(This,pRootSignature) \
  6160.     ( (This)->lpVtbl -> SetGraphicsRootSignature(This,pRootSignature) )
  6161.  
  6162. #define ID3D12GraphicsCommandList_SetComputeRootDescriptorTable(This,RootParameterIndex,BaseDescriptor) \
  6163.     ( (This)->lpVtbl -> SetComputeRootDescriptorTable(This,RootParameterIndex,BaseDescriptor) )
  6164.  
  6165. #define ID3D12GraphicsCommandList_SetGraphicsRootDescriptorTable(This,RootParameterIndex,BaseDescriptor)    \
  6166.     ( (This)->lpVtbl -> SetGraphicsRootDescriptorTable(This,RootParameterIndex,BaseDescriptor) )
  6167.  
  6168. #define ID3D12GraphicsCommandList_SetComputeRoot32BitConstant(This,RootParameterIndex,SrcData,DestOffsetIn32BitValues)  \
  6169.     ( (This)->lpVtbl -> SetComputeRoot32BitConstant(This,RootParameterIndex,SrcData,DestOffsetIn32BitValues) )
  6170.  
  6171. #define ID3D12GraphicsCommandList_SetGraphicsRoot32BitConstant(This,RootParameterIndex,SrcData,DestOffsetIn32BitValues) \
  6172.     ( (This)->lpVtbl -> SetGraphicsRoot32BitConstant(This,RootParameterIndex,SrcData,DestOffsetIn32BitValues) )
  6173.  
  6174. #define ID3D12GraphicsCommandList_SetComputeRoot32BitConstants(This,RootParameterIndex,pSrcData,DestOffsetIn32BitValues,Num32BitValuesToSet)    \
  6175.     ( (This)->lpVtbl -> SetComputeRoot32BitConstants(This,RootParameterIndex,pSrcData,DestOffsetIn32BitValues,Num32BitValuesToSet) )
  6176.  
  6177. #define ID3D12GraphicsCommandList_SetGraphicsRoot32BitConstants(This,RootParameterIndex,pSrcData,DestOffsetIn32BitValues,Num32BitValuesToSet)   \
  6178.     ( (This)->lpVtbl -> SetGraphicsRoot32BitConstants(This,RootParameterIndex,pSrcData,DestOffsetIn32BitValues,Num32BitValuesToSet) )
  6179.  
  6180. #define ID3D12GraphicsCommandList_SetComputeRootConstantBufferView(This,RootParameterIndex,BufferLocation)  \
  6181.     ( (This)->lpVtbl -> SetComputeRootConstantBufferView(This,RootParameterIndex,BufferLocation) )
  6182.  
  6183. #define ID3D12GraphicsCommandList_SetGraphicsRootConstantBufferView(This,RootParameterIndex,BufferLocation) \
  6184.     ( (This)->lpVtbl -> SetGraphicsRootConstantBufferView(This,RootParameterIndex,BufferLocation) )
  6185.  
  6186. #define ID3D12GraphicsCommandList_SetComputeRootShaderResourceView(This,RootParameterIndex,BufferLocation)  \
  6187.     ( (This)->lpVtbl -> SetComputeRootShaderResourceView(This,RootParameterIndex,BufferLocation) )
  6188.  
  6189. #define ID3D12GraphicsCommandList_SetGraphicsRootShaderResourceView(This,RootParameterIndex,BufferLocation) \
  6190.     ( (This)->lpVtbl -> SetGraphicsRootShaderResourceView(This,RootParameterIndex,BufferLocation) )
  6191.  
  6192. #define ID3D12GraphicsCommandList_SetComputeRootUnorderedAccessView(This,RootParameterIndex,BufferLocation) \
  6193.     ( (This)->lpVtbl -> SetComputeRootUnorderedAccessView(This,RootParameterIndex,BufferLocation) )
  6194.  
  6195. #define ID3D12GraphicsCommandList_SetGraphicsRootUnorderedAccessView(This,RootParameterIndex,BufferLocation)    \
  6196.     ( (This)->lpVtbl -> SetGraphicsRootUnorderedAccessView(This,RootParameterIndex,BufferLocation) )
  6197.  
  6198. #define ID3D12GraphicsCommandList_SetIndexBuffer(This,pDesc)    \
  6199.     ( (This)->lpVtbl -> SetIndexBuffer(This,pDesc) )
  6200.  
  6201. #define ID3D12GraphicsCommandList_SetVertexBuffers(This,StartSlot,pDesc,NumBuffers) \
  6202.     ( (This)->lpVtbl -> SetVertexBuffers(This,StartSlot,pDesc,NumBuffers) )
  6203.  
  6204. #define ID3D12GraphicsCommandList_SetStreamOutputBuffers(This,StartSlot,pDesc,NumBuffers)   \
  6205.     ( (This)->lpVtbl -> SetStreamOutputBuffers(This,StartSlot,pDesc,NumBuffers) )
  6206.  
  6207. #define ID3D12GraphicsCommandList_SetRenderTargets(This,pRenderTargetDescriptors,RTsSingleHandleToDescriptorRange,NumRenderTargetDescriptors,pDepthStencilDescriptor)   \
  6208.     ( (This)->lpVtbl -> SetRenderTargets(This,pRenderTargetDescriptors,RTsSingleHandleToDescriptorRange,NumRenderTargetDescriptors,pDepthStencilDescriptor) )
  6209.  
  6210. #define ID3D12GraphicsCommandList_ClearDepthStencilView(This,DepthStencilView,ClearFlags,Depth,Stencil,pRect,NumRects)  \
  6211.     ( (This)->lpVtbl -> ClearDepthStencilView(This,DepthStencilView,ClearFlags,Depth,Stencil,pRect,NumRects) )
  6212.  
  6213. #define ID3D12GraphicsCommandList_ClearRenderTargetView(This,RenderTargetView,ColorRGBA,pRects,NumRects)    \
  6214.     ( (This)->lpVtbl -> ClearRenderTargetView(This,RenderTargetView,ColorRGBA,pRects,NumRects) )
  6215.  
  6216. #define ID3D12GraphicsCommandList_ClearUnorderedAccessViewUint(This,ViewGPUHandleInCurrentHeap,ViewCPUHandle,pResource,Values,pRects,NumRects)  \
  6217.     ( (This)->lpVtbl -> ClearUnorderedAccessViewUint(This,ViewGPUHandleInCurrentHeap,ViewCPUHandle,pResource,Values,pRects,NumRects) )
  6218.  
  6219. #define ID3D12GraphicsCommandList_ClearUnorderedAccessViewFloat(This,ViewGPUHandleInCurrentHeap,ViewCPUHandle,pResource,Values,pRects,NumRects) \
  6220.     ( (This)->lpVtbl -> ClearUnorderedAccessViewFloat(This,ViewGPUHandleInCurrentHeap,ViewCPUHandle,pResource,Values,pRects,NumRects) )
  6221.  
  6222. #define ID3D12GraphicsCommandList_DiscardResource(This,pResource,pDesc) \
  6223.     ( (This)->lpVtbl -> DiscardResource(This,pResource,pDesc) )
  6224.  
  6225. #define ID3D12GraphicsCommandList_BeginQuery(This,pQueryHeap,Index,Type)    \
  6226.     ( (This)->lpVtbl -> BeginQuery(This,pQueryHeap,Index,Type) )
  6227.  
  6228. #define ID3D12GraphicsCommandList_EndQuery(This,pQueryHeap,Index,Type)  \
  6229.     ( (This)->lpVtbl -> EndQuery(This,pQueryHeap,Index,Type) )
  6230.  
  6231. #define ID3D12GraphicsCommandList_ResolveQueryData(This,pQueryHeap,Type,StartElement,ElementCount,pDestinationBuffer,AlignedDestinationBufferOffset)    \
  6232.     ( (This)->lpVtbl -> ResolveQueryData(This,pQueryHeap,Type,StartElement,ElementCount,pDestinationBuffer,AlignedDestinationBufferOffset) )
  6233.  
  6234. #define ID3D12GraphicsCommandList_SetPredication(This,pBuffer,AlignedBufferOffset,Operation)    \
  6235.     ( (This)->lpVtbl -> SetPredication(This,pBuffer,AlignedBufferOffset,Operation) )
  6236.  
  6237. #define ID3D12GraphicsCommandList_PIXBeginEvent(This,Name)  \
  6238.     ( (This)->lpVtbl -> PIXBeginEvent(This,Name) )
  6239.  
  6240. #define ID3D12GraphicsCommandList_PIXEndEvent(This) \
  6241.     ( (This)->lpVtbl -> PIXEndEvent(This) )
  6242.  
  6243. #define ID3D12GraphicsCommandList_PIXSetMarker(This,Name)   \
  6244.     ( (This)->lpVtbl -> PIXSetMarker(This,Name) )
  6245.  
  6246. #define ID3D12GraphicsCommandList_PIXGetStatus(This)    \
  6247.     ( (This)->lpVtbl -> PIXGetStatus(This) )
  6248.  
  6249. #define ID3D12GraphicsCommandList_SetMarkerInt(This,pLabel,Data)    \
  6250.     ( (This)->lpVtbl -> SetMarkerInt(This,pLabel,Data) )
  6251.  
  6252. #define ID3D12GraphicsCommandList_BeginEventInt(This,pLabel,Data)   \
  6253.     ( (This)->lpVtbl -> BeginEventInt(This,pLabel,Data) )
  6254.  
  6255. #define ID3D12GraphicsCommandList_EndEvent(This)    \
  6256.     ( (This)->lpVtbl -> EndEvent(This) )
  6257.  
  6258. #define ID3D12GraphicsCommandList_ExecuteIndirect(This,pCommandSignature,MaxCommandCount,pArgumentBuffer,ArgumentBufferOffset,pCountBuffer,CountBufferOffset)   \
  6259.     ( (This)->lpVtbl -> ExecuteIndirect(This,pCommandSignature,MaxCommandCount,pArgumentBuffer,ArgumentBufferOffset,pCountBuffer,CountBufferOffset) )
  6260.  
  6261. #endif /* COBJMACROS */
  6262.  
  6263.  
  6264. #endif  /* C style interface */
  6265.  
  6266.  
  6267.  
  6268.  
  6269. #endif  /* __ID3D12GraphicsCommandList_INTERFACE_DEFINED__ */
  6270.  
  6271.  
  6272. #ifndef __ID3D12CommandQueue_INTERFACE_DEFINED__
  6273. #define __ID3D12CommandQueue_INTERFACE_DEFINED__
  6274.  
  6275. /* interface ID3D12CommandQueue */
  6276. /* [unique][local][object][uuid] */
  6277.  
  6278.  
  6279. EXTERN_C const IID IID_ID3D12CommandQueue;
  6280.  
  6281. #if defined(__cplusplus) && !defined(CINTERFACE)
  6282.    
  6283.     MIDL_INTERFACE("c93c8c3d-bf95-441a-b0cd-56ea3c3287f1")
  6284.     ID3D12CommandQueue : public ID3D12Pageable
  6285.     {
  6286.     public:
  6287.         virtual void STDMETHODCALLTYPE UpdateTileMappings(
  6288.             _In_  ID3D12Resource *pResource,
  6289.             UINT NumResourceRegions,
  6290.             _In_reads_opt_(NumResourceRegions)  const D3D12_TILED_RESOURCE_COORDINATE *pResourceRegionStartCoordinates,
  6291.             _In_reads_opt_(NumResourceRegions)  const D3D12_TILE_REGION_SIZE *pResourceRegionSizes,
  6292.             _In_opt_  ID3D12Heap *pHeap,
  6293.             UINT NumRanges,
  6294.             _In_reads_opt_(NumRanges)  const D3D12_TILE_RANGE_FLAG *pRangeFlags,
  6295.             _In_reads_opt_(NumRanges)  const UINT *pHeapRangeStartOffsets,
  6296.             _In_reads_opt_(NumRanges)  const UINT *pRangeTileCounts,
  6297.             D3D12_TILE_MAPPING_FLAG Flags) = 0;
  6298.        
  6299.         virtual void STDMETHODCALLTYPE CopyTileMappings(
  6300.             _In_  ID3D12Resource *pDstResource,
  6301.             _In_  const D3D12_TILED_RESOURCE_COORDINATE *pDstRegionStartCoordinate,
  6302.             _In_  ID3D12Resource *pSrcResource,
  6303.             _In_  const D3D12_TILED_RESOURCE_COORDINATE *pSrcRegionStartCoordinate,
  6304.             _In_  const D3D12_TILE_REGION_SIZE *pRegionSize,
  6305.             D3D12_TILE_MAPPING_FLAG Flags) = 0;
  6306.        
  6307.         virtual void STDMETHODCALLTYPE ExecuteCommandLists(
  6308.             _In_  UINT Count,
  6309.             _In_reads_(Count)  ID3D12CommandList *const *ppCommandLists) = 0;
  6310.        
  6311.         virtual INT STDMETHODCALLTYPE PIXBeginEvent(
  6312.             _In_z_  LPCWSTR Name) = 0;
  6313.        
  6314.         virtual INT STDMETHODCALLTYPE PIXEndEvent( void) = 0;
  6315.        
  6316.         virtual void STDMETHODCALLTYPE PIXSetMarker(
  6317.             _In_z_  LPCWSTR Name) = 0;
  6318.        
  6319.         virtual BOOL STDMETHODCALLTYPE PIXGetStatus( void) = 0;
  6320.        
  6321.         virtual HRESULT STDMETHODCALLTYPE Signal(
  6322.             ID3D12Fence *pFence,
  6323.             UINT64 Value) = 0;
  6324.        
  6325.         virtual HRESULT STDMETHODCALLTYPE Wait(
  6326.             ID3D12Fence *pFence,
  6327.             UINT64 Value) = 0;
  6328.        
  6329.         virtual HRESULT STDMETHODCALLTYPE GetTimestampFrequency(
  6330.             _Out_  UINT64 *pFrequency) = 0;
  6331.        
  6332.         virtual HRESULT STDMETHODCALLTYPE GetClockCalibration(
  6333.             _Out_  UINT64 *pGpuTimestamp,
  6334.             _Out_  UINT64 *pCpuTimestamp) = 0;
  6335.        
  6336.         virtual D3D12_COMMAND_QUEUE_DESC STDMETHODCALLTYPE GetDesc( void) = 0;
  6337.        
  6338.     };
  6339.    
  6340.    
  6341. #else   /* C style interface */
  6342.  
  6343.     typedef struct ID3D12CommandQueueVtbl
  6344.     {
  6345.         BEGIN_INTERFACE
  6346.        
  6347.         HRESULT ( STDMETHODCALLTYPE *QueryInterface )(
  6348.             ID3D12CommandQueue * This,
  6349.             REFIID riid,
  6350.             _COM_Outptr_  void **ppvObject);
  6351.        
  6352.         ULONG ( STDMETHODCALLTYPE *AddRef )(
  6353.             ID3D12CommandQueue * This);
  6354.        
  6355.         ULONG ( STDMETHODCALLTYPE *Release )(
  6356.             ID3D12CommandQueue * This);
  6357.        
  6358.         HRESULT ( STDMETHODCALLTYPE *GetPrivateData )(
  6359.             ID3D12CommandQueue * This,
  6360.             _In_  REFGUID guid,
  6361.             _Inout_  UINT *pDataSize,
  6362.             _Out_writes_bytes_opt_( *pDataSize )  void *pData);
  6363.        
  6364.         HRESULT ( STDMETHODCALLTYPE *SetPrivateData )(
  6365.             ID3D12CommandQueue * This,
  6366.             _In_  REFGUID guid,
  6367.             _In_  UINT DataSize,
  6368.             _In_reads_bytes_opt_( DataSize )  const void *pData);
  6369.        
  6370.         HRESULT ( STDMETHODCALLTYPE *SetPrivateDataInterface )(
  6371.             ID3D12CommandQueue * This,
  6372.             _In_  REFGUID guid,
  6373.             _In_opt_  const IUnknown *pData);
  6374.        
  6375.         HRESULT ( STDMETHODCALLTYPE *SetName )(
  6376.             ID3D12CommandQueue * This,
  6377.             _In_z_  LPCWSTR Name);
  6378.        
  6379.         HRESULT ( STDMETHODCALLTYPE *GetDevice )(
  6380.             ID3D12CommandQueue * This,
  6381.             REFIID riid,
  6382.             _COM_Outptr_opt_  void **ppvDevice);
  6383.        
  6384.         void ( STDMETHODCALLTYPE *UpdateTileMappings )(
  6385.             ID3D12CommandQueue * This,
  6386.             _In_  ID3D12Resource *pResource,
  6387.             UINT NumResourceRegions,
  6388.             _In_reads_opt_(NumResourceRegions)  const D3D12_TILED_RESOURCE_COORDINATE *pResourceRegionStartCoordinates,
  6389.             _In_reads_opt_(NumResourceRegions)  const D3D12_TILE_REGION_SIZE *pResourceRegionSizes,
  6390.             _In_opt_  ID3D12Heap *pHeap,
  6391.             UINT NumRanges,
  6392.             _In_reads_opt_(NumRanges)  const D3D12_TILE_RANGE_FLAG *pRangeFlags,
  6393.             _In_reads_opt_(NumRanges)  const UINT *pHeapRangeStartOffsets,
  6394.             _In_reads_opt_(NumRanges)  const UINT *pRangeTileCounts,
  6395.             D3D12_TILE_MAPPING_FLAG Flags);
  6396.        
  6397.         void ( STDMETHODCALLTYPE *CopyTileMappings )(
  6398.             ID3D12CommandQueue * This,
  6399.             _In_  ID3D12Resource *pDstResource,
  6400.             _In_  const D3D12_TILED_RESOURCE_COORDINATE *pDstRegionStartCoordinate,
  6401.             _In_  ID3D12Resource *pSrcResource,
  6402.             _In_  const D3D12_TILED_RESOURCE_COORDINATE *pSrcRegionStartCoordinate,
  6403.             _In_  const D3D12_TILE_REGION_SIZE *pRegionSize,
  6404.             D3D12_TILE_MAPPING_FLAG Flags);
  6405.        
  6406.         void ( STDMETHODCALLTYPE *ExecuteCommandLists )(
  6407.             ID3D12CommandQueue * This,
  6408.             _In_  UINT Count,
  6409.             _In_reads_(Count)  ID3D12CommandList *const *ppCommandLists);
  6410.        
  6411.         INT ( STDMETHODCALLTYPE *PIXBeginEvent )(
  6412.             ID3D12CommandQueue * This,
  6413.             _In_z_  LPCWSTR Name);
  6414.        
  6415.         INT ( STDMETHODCALLTYPE *PIXEndEvent )(
  6416.             ID3D12CommandQueue * This);
  6417.        
  6418.         void ( STDMETHODCALLTYPE *PIXSetMarker )(
  6419.             ID3D12CommandQueue * This,
  6420.             _In_z_  LPCWSTR Name);
  6421.        
  6422.         BOOL ( STDMETHODCALLTYPE *PIXGetStatus )(
  6423.             ID3D12CommandQueue * This);
  6424.        
  6425.         HRESULT ( STDMETHODCALLTYPE *Signal )(
  6426.             ID3D12CommandQueue * This,
  6427.             ID3D12Fence *pFence,
  6428.             UINT64 Value);
  6429.        
  6430.         HRESULT ( STDMETHODCALLTYPE *Wait )(
  6431.             ID3D12CommandQueue * This,
  6432.             ID3D12Fence *pFence,
  6433.             UINT64 Value);
  6434.        
  6435.         HRESULT ( STDMETHODCALLTYPE *GetTimestampFrequency )(
  6436.             ID3D12CommandQueue * This,
  6437.             _Out_  UINT64 *pFrequency);
  6438.        
  6439.         HRESULT ( STDMETHODCALLTYPE *GetClockCalibration )(
  6440.             ID3D12CommandQueue * This,
  6441.             _Out_  UINT64 *pGpuTimestamp,
  6442.             _Out_  UINT64 *pCpuTimestamp);
  6443.        
  6444.         D3D12_COMMAND_QUEUE_DESC ( STDMETHODCALLTYPE *GetDesc )(
  6445.             ID3D12CommandQueue * This);
  6446.        
  6447.         END_INTERFACE
  6448.     } ID3D12CommandQueueVtbl;
  6449.  
  6450.     interface ID3D12CommandQueue
  6451.     {
  6452.         CONST_VTBL struct ID3D12CommandQueueVtbl *lpVtbl;
  6453.     };
  6454.  
  6455.    
  6456.  
  6457. #ifdef COBJMACROS
  6458.  
  6459.  
  6460. #define ID3D12CommandQueue_QueryInterface(This,riid,ppvObject)  \
  6461.     ( (This)->lpVtbl -> QueryInterface(This,riid,ppvObject) )
  6462.  
  6463. #define ID3D12CommandQueue_AddRef(This) \
  6464.     ( (This)->lpVtbl -> AddRef(This) )
  6465.  
  6466. #define ID3D12CommandQueue_Release(This)    \
  6467.     ( (This)->lpVtbl -> Release(This) )
  6468.  
  6469.  
  6470. #define ID3D12CommandQueue_GetPrivateData(This,guid,pDataSize,pData)    \
  6471.     ( (This)->lpVtbl -> GetPrivateData(This,guid,pDataSize,pData) )
  6472.  
  6473. #define ID3D12CommandQueue_SetPrivateData(This,guid,DataSize,pData) \
  6474.     ( (This)->lpVtbl -> SetPrivateData(This,guid,DataSize,pData) )
  6475.  
  6476. #define ID3D12CommandQueue_SetPrivateDataInterface(This,guid,pData) \
  6477.     ( (This)->lpVtbl -> SetPrivateDataInterface(This,guid,pData) )
  6478.  
  6479. #define ID3D12CommandQueue_SetName(This,Name)   \
  6480.     ( (This)->lpVtbl -> SetName(This,Name) )
  6481.  
  6482.  
  6483. #define ID3D12CommandQueue_GetDevice(This,riid,ppvDevice)   \
  6484.     ( (This)->lpVtbl -> GetDevice(This,riid,ppvDevice) )
  6485.  
  6486.  
  6487.  
  6488. #define ID3D12CommandQueue_UpdateTileMappings(This,pResource,NumResourceRegions,pResourceRegionStartCoordinates,pResourceRegionSizes,pHeap,NumRanges,pRangeFlags,pHeapRangeStartOffsets,pRangeTileCounts,Flags) \
  6489.     ( (This)->lpVtbl -> UpdateTileMappings(This,pResource,NumResourceRegions,pResourceRegionStartCoordinates,pResourceRegionSizes,pHeap,NumRanges,pRangeFlags,pHeapRangeStartOffsets,pRangeTileCounts,Flags) )
  6490.  
  6491. #define ID3D12CommandQueue_CopyTileMappings(This,pDstResource,pDstRegionStartCoordinate,pSrcResource,pSrcRegionStartCoordinate,pRegionSize,Flags)   \
  6492.     ( (This)->lpVtbl -> CopyTileMappings(This,pDstResource,pDstRegionStartCoordinate,pSrcResource,pSrcRegionStartCoordinate,pRegionSize,Flags) )
  6493.  
  6494. #define ID3D12CommandQueue_ExecuteCommandLists(This,Count,ppCommandLists)   \
  6495.     ( (This)->lpVtbl -> ExecuteCommandLists(This,Count,ppCommandLists) )
  6496.  
  6497. #define ID3D12CommandQueue_PIXBeginEvent(This,Name) \
  6498.     ( (This)->lpVtbl -> PIXBeginEvent(This,Name) )
  6499.  
  6500. #define ID3D12CommandQueue_PIXEndEvent(This)    \
  6501.     ( (This)->lpVtbl -> PIXEndEvent(This) )
  6502.  
  6503. #define ID3D12CommandQueue_PIXSetMarker(This,Name)  \
  6504.     ( (This)->lpVtbl -> PIXSetMarker(This,Name) )
  6505.  
  6506. #define ID3D12CommandQueue_PIXGetStatus(This)   \
  6507.     ( (This)->lpVtbl -> PIXGetStatus(This) )
  6508.  
  6509. #define ID3D12CommandQueue_Signal(This,pFence,Value)    \
  6510.     ( (This)->lpVtbl -> Signal(This,pFence,Value) )
  6511.  
  6512. #define ID3D12CommandQueue_Wait(This,pFence,Value)  \
  6513.     ( (This)->lpVtbl -> Wait(This,pFence,Value) )
  6514.  
  6515. #define ID3D12CommandQueue_GetTimestampFrequency(This,pFrequency)   \
  6516.     ( (This)->lpVtbl -> GetTimestampFrequency(This,pFrequency) )
  6517.  
  6518. #define ID3D12CommandQueue_GetClockCalibration(This,pGpuTimestamp,pCpuTimestamp)    \
  6519.     ( (This)->lpVtbl -> GetClockCalibration(This,pGpuTimestamp,pCpuTimestamp) )
  6520.  
  6521. #define ID3D12CommandQueue_GetDesc(This)    \
  6522.     ( (This)->lpVtbl -> GetDesc(This) )
  6523.  
  6524. #endif /* COBJMACROS */
  6525.  
  6526.  
  6527. #endif  /* C style interface */
  6528.  
  6529.  
  6530.  
  6531.  
  6532.  
  6533.  
  6534.  
  6535.  
  6536. #endif  /* __ID3D12CommandQueue_INTERFACE_DEFINED__ */
  6537.  
  6538.  
  6539. #ifndef __ID3D12Device_INTERFACE_DEFINED__
  6540. #define __ID3D12Device_INTERFACE_DEFINED__
  6541.  
  6542. /* interface ID3D12Device */
  6543. /* [unique][local][object][uuid] */
  6544.  
  6545.  
  6546. EXTERN_C const IID IID_ID3D12Device;
  6547.  
  6548. #if defined(__cplusplus) && !defined(CINTERFACE)
  6549.    
  6550.     MIDL_INTERFACE("d0a3ba20-b46d-468b-911b-071fe10e0bcd")
  6551.     ID3D12Device : public ID3D12Object
  6552.     {
  6553.     public:
  6554.         virtual UINT STDMETHODCALLTYPE GetNodeCount( void) = 0;
  6555.        
  6556.         virtual HRESULT STDMETHODCALLTYPE CreateCommandQueue(
  6557.             _In_  const D3D12_COMMAND_QUEUE_DESC *pDesc,
  6558.             REFIID riid,
  6559.             _COM_Outptr_  void **ppCommandQueue) = 0;
  6560.        
  6561.         virtual HRESULT STDMETHODCALLTYPE CreateCommandAllocator(
  6562.             _In_  D3D12_COMMAND_LIST_TYPE type,
  6563.             REFIID riid,
  6564.             _COM_Outptr_  void **ppCommandAllocator) = 0;
  6565.        
  6566.         virtual HRESULT STDMETHODCALLTYPE CreateGraphicsPipelineState(
  6567.             _In_  const D3D12_GRAPHICS_PIPELINE_STATE_DESC *pDesc,
  6568.             REFIID riid,
  6569.             _COM_Outptr_  void **ppPipelineState) = 0;
  6570.        
  6571.         virtual HRESULT STDMETHODCALLTYPE CreateComputePipelineState(
  6572.             _In_  const D3D12_COMPUTE_PIPELINE_STATE_DESC *pDesc,
  6573.             REFIID riid,
  6574.             _COM_Outptr_  void **ppPipelineState) = 0;
  6575.        
  6576.         virtual HRESULT STDMETHODCALLTYPE CreateCommandList(
  6577.             _In_  UINT nodeMask,
  6578.             _In_  D3D12_COMMAND_LIST_TYPE type,
  6579.             _In_  ID3D12CommandAllocator *pCommandAllocator,
  6580.             _In_opt_  ID3D12PipelineState *pInitialState,
  6581.             REFIID riid,
  6582.             _COM_Outptr_  void **ppCommandList) = 0;
  6583.        
  6584.         virtual HRESULT STDMETHODCALLTYPE CheckFeatureSupport(
  6585.             D3D12_FEATURE Feature,
  6586.             _Inout_updates_bytes_(FeatureSupportDataSize)  void *pFeatureSupportData,
  6587.             UINT FeatureSupportDataSize) = 0;
  6588.        
  6589.         virtual HRESULT STDMETHODCALLTYPE CreateDescriptorHeap(
  6590.             _In_  const D3D12_DESCRIPTOR_HEAP_DESC *pDescriptorHeapDesc,
  6591.             REFIID riid,
  6592.             _COM_Outptr_  void **ppvHeap) = 0;
  6593.        
  6594.         virtual UINT STDMETHODCALLTYPE GetDescriptorHandleIncrementSize(
  6595.             _In_  D3D12_DESCRIPTOR_HEAP_TYPE DescriptorHeapType) = 0;
  6596.        
  6597.         virtual HRESULT STDMETHODCALLTYPE CreateRootSignature(
  6598.             _In_  UINT nodeMask,
  6599.             _In_reads_(blobLengthInBytes)  const void *pBlobWithRootSignature,
  6600.             _In_  SIZE_T blobLengthInBytes,
  6601.             REFIID riid,
  6602.             _COM_Outptr_  void **ppvRootSignature) = 0;
  6603.        
  6604.         virtual void STDMETHODCALLTYPE CreateConstantBufferView(
  6605.             _In_opt_  const D3D12_CONSTANT_BUFFER_VIEW_DESC *pDesc,
  6606.             _In_  D3D12_CPU_DESCRIPTOR_HANDLE DestDescriptor) = 0;
  6607.        
  6608.         virtual void STDMETHODCALLTYPE CreateShaderResourceView(
  6609.             _In_opt_  ID3D12Resource *pResource,
  6610.             _In_opt_  const D3D12_SHADER_RESOURCE_VIEW_DESC *pDesc,
  6611.             _In_  D3D12_CPU_DESCRIPTOR_HANDLE DestDescriptor) = 0;
  6612.        
  6613.         virtual void STDMETHODCALLTYPE CreateUnorderedAccessView(
  6614.             _In_opt_  ID3D12Resource *pResource,
  6615.             _In_opt_  ID3D12Resource *pCounterResource,
  6616.             _In_opt_  const D3D12_UNORDERED_ACCESS_VIEW_DESC *pDesc,
  6617.             _In_  D3D12_CPU_DESCRIPTOR_HANDLE DestDescriptor) = 0;
  6618.        
  6619.         virtual void STDMETHODCALLTYPE CreateRenderTargetView(
  6620.             _In_opt_  ID3D12Resource *pResource,
  6621.             _In_opt_  const D3D12_RENDER_TARGET_VIEW_DESC *pDesc,
  6622.             _In_  D3D12_CPU_DESCRIPTOR_HANDLE DestDescriptor) = 0;
  6623.        
  6624.         virtual void STDMETHODCALLTYPE CreateDepthStencilView(
  6625.             _In_opt_  ID3D12Resource *pResource,
  6626.             _In_opt_  const D3D12_DEPTH_STENCIL_VIEW_DESC *pDesc,
  6627.             _In_  D3D12_CPU_DESCRIPTOR_HANDLE DestDescriptor) = 0;
  6628.        
  6629.         virtual void STDMETHODCALLTYPE CreateSampler(
  6630.             _In_  const D3D12_SAMPLER_DESC *pDesc,
  6631.             _In_  D3D12_CPU_DESCRIPTOR_HANDLE DestDescriptor) = 0;
  6632.        
  6633.         virtual void STDMETHODCALLTYPE CopyDescriptors(
  6634.             _In_reads_(NumDestDescriptorRanges)  const D3D12_CPU_DESCRIPTOR_HANDLE *pDestDescriptorRangeStarts,
  6635.             _In_reads_opt_(NumDestDescriptorRanges)  const UINT *pDestDescriptorRangeSizes,
  6636.             _In_  UINT NumDestDescriptorRanges,
  6637.             _In_reads_(NumSrcDescriptorRanges)  const D3D12_CPU_DESCRIPTOR_HANDLE *pSrcDescriptorRangeStarts,
  6638.             _In_reads_opt_(NumSrcDescriptorRanges)  const UINT *pSrcDescriptorRangeSizes,
  6639.             _In_  UINT NumSrcDescriptorRanges,
  6640.             _In_  D3D12_DESCRIPTOR_HEAP_TYPE DescriptorHeapsType) = 0;
  6641.        
  6642.         virtual void STDMETHODCALLTYPE CopyDescriptorsSimple(
  6643.             _In_  D3D12_CPU_DESCRIPTOR_HANDLE DestDescriptorRangeStart,
  6644.             _In_  D3D12_CPU_DESCRIPTOR_HANDLE SrcDescriptorRangeStart,
  6645.             _In_  UINT NumDescriptors,
  6646.             _In_  D3D12_DESCRIPTOR_HEAP_TYPE DescriptorHeapsType) = 0;
  6647.        
  6648.         virtual D3D12_RESOURCE_ALLOCATION_INFO STDMETHODCALLTYPE GetResourceAllocationInfo(
  6649.             _In_  UINT visibleMask,
  6650.             _In_  UINT numResourceDescs,
  6651.             _In_reads_(numResourceDescs)  const D3D12_RESOURCE_DESC *pResourceDescs) = 0;
  6652.        
  6653.         virtual D3D12_HEAP_PROPERTIES STDMETHODCALLTYPE GetCustomHeapProperties(
  6654.             _In_  UINT nodeMask,
  6655.             D3D12_HEAP_TYPE heapType) = 0;
  6656.        
  6657.         virtual HRESULT STDMETHODCALLTYPE CreateCommittedResource(
  6658.             _In_  const D3D12_HEAP_PROPERTIES *pHeapProperties,
  6659.             D3D12_HEAP_MISC_FLAG HeapMiscFlags,
  6660.             _In_  const D3D12_RESOURCE_DESC *pResourceDesc,
  6661.             D3D12_RESOURCE_USAGE InitialResourceState,
  6662.             _In_opt_  const D3D12_CLEAR_VALUE *pOptimizedClearValue,
  6663.             REFIID riidResource,
  6664.             _COM_Outptr_opt_  void **ppvResource) = 0;
  6665.        
  6666.         virtual HRESULT STDMETHODCALLTYPE CreateHeap(
  6667.             _In_  const D3D12_HEAP_DESC *pDesc,
  6668.             REFIID riid,
  6669.             _COM_Outptr_opt_  void **ppvHeap) = 0;
  6670.        
  6671.         virtual HRESULT STDMETHODCALLTYPE CreatePlacedResource(
  6672.             _In_  ID3D12Heap *pHeap,
  6673.             UINT64 HeapOffset,
  6674.             _In_  const D3D12_RESOURCE_DESC *pDesc,
  6675.             D3D12_RESOURCE_USAGE InitialState,
  6676.             _In_opt_  const D3D12_CLEAR_VALUE *pOptimizedClearValue,
  6677.             REFIID riid,
  6678.             _COM_Outptr_opt_  void **ppvResource) = 0;
  6679.        
  6680.         virtual HRESULT STDMETHODCALLTYPE CreateReservedResource(
  6681.             _In_  const D3D12_RESOURCE_DESC *pDesc,
  6682.             D3D12_RESOURCE_USAGE InitialState,
  6683.             _In_opt_  const D3D12_CLEAR_VALUE *pOptimizedClearValue,
  6684.             REFIID riid,
  6685.             _COM_Outptr_opt_  void **ppvResource) = 0;
  6686.        
  6687.         virtual HRESULT STDMETHODCALLTYPE CreateSharedHandle(
  6688.             _In_  ID3D12DeviceChild *pObject,
  6689.             _In_opt_  const SECURITY_ATTRIBUTES *pAttributes,
  6690.             DWORD Access,
  6691.             _In_opt_  LPCWSTR Name,
  6692.             _Out_  HANDLE *pHandle) = 0;
  6693.        
  6694.         virtual HRESULT STDMETHODCALLTYPE OpenSharedHandle(
  6695.             _In_  HANDLE NTHandle,
  6696.             REFIID riid,
  6697.             _COM_Outptr_opt_  void **ppvObj) = 0;
  6698.        
  6699.         virtual HRESULT STDMETHODCALLTYPE OpenSharedHandleByName(
  6700.             _In_  LPCWSTR Name,
  6701.             DWORD Access,
  6702.             /* [annotation][out] */
  6703.             _Out_  HANDLE *pNTHandle) = 0;
  6704.        
  6705.         virtual HRESULT STDMETHODCALLTYPE MakeResident(
  6706.             UINT NumObjects,
  6707.             _In_reads_(NumObjects)  ID3D12Pageable *const *ppObjects) = 0;
  6708.        
  6709.         virtual HRESULT STDMETHODCALLTYPE Evict(
  6710.             UINT NumObjects,
  6711.             _In_reads_(NumObjects)  ID3D12Pageable *const *ppObjects) = 0;
  6712.        
  6713.         virtual HRESULT STDMETHODCALLTYPE CreateFence(
  6714.             UINT64 InitialValue,
  6715.             D3D12_FENCE_MISC_FLAG Flags,
  6716.             REFIID riid,
  6717.             _COM_Outptr_  void **ppFence) = 0;
  6718.        
  6719.         virtual D3D12_CREATE_DEVICE_FLAG STDMETHODCALLTYPE GetCreateDeviceFlags( void) = 0;
  6720.        
  6721.         virtual HRESULT STDMETHODCALLTYPE GetDeviceRemovedReason( void) = 0;
  6722.        
  6723.         virtual void STDMETHODCALLTYPE GetCopyableLayout(
  6724.             _In_  const D3D12_RESOURCE_DESC *pResourceDesc,
  6725.             _In_range_(0,D3D12_REQ_SUBRESOURCES)  UINT FirstSubresource,
  6726.             _In_range_(0,D3D12_REQ_SUBRESOURCES-FirstSubresource)  UINT NumSubresources,
  6727.             UINT64 BaseOffset,
  6728.             _Out_writes_opt_(NumSubresources)  D3D12_PLACED_PITCHED_SUBRESOURCE_DESC *pLayouts,
  6729.             _Out_writes_opt_(NumSubresources)  UINT *pNumRows,
  6730.             _Out_writes_opt_(NumSubresources)  UINT64 *pRowSizeInBytes,
  6731.             _Out_opt_  UINT64 *pTotalBytes) = 0;
  6732.        
  6733.         virtual HRESULT STDMETHODCALLTYPE CreateQueryHeap(
  6734.             _In_  const D3D12_QUERY_HEAP_DESC *pDesc,
  6735.             REFIID riid,
  6736.             _COM_Outptr_opt_  void **ppvHeap) = 0;
  6737.        
  6738.         virtual HRESULT STDMETHODCALLTYPE SetStablePowerState(
  6739.             BOOL Enable) = 0;
  6740.        
  6741.         virtual HRESULT STDMETHODCALLTYPE CreateCommandSignature(
  6742.             _In_  const D3D12_COMMAND_SIGNATURE *pDesc,
  6743.             _In_opt_  ID3D12RootSignature *pRootSignature,
  6744.             REFIID riid,
  6745.             _COM_Outptr_opt_  void **ppvCommandSignature) = 0;
  6746.        
  6747.         virtual HRESULT STDMETHODCALLTYPE OfferResources(
  6748.             UINT NumObjects,
  6749.             _In_reads_(NumObjects)  ID3D12Pageable *const *ppObjects,
  6750.             D3D12_OFFER_RESOURCE_PRIORITY Priority) = 0;
  6751.        
  6752.         virtual HRESULT STDMETHODCALLTYPE ReclaimResources(
  6753.             UINT NumObjects,
  6754.             _In_reads_(NumObjects)  ID3D12Pageable *const *ppObjects,
  6755.             _Out_writes_(NumObjects)  BOOL *pDiscarded) = 0;
  6756.        
  6757.         virtual void STDMETHODCALLTYPE GetResourceTiling(
  6758.             _In_  ID3D12Resource *pTiledResource,
  6759.             _Out_opt_  UINT *pNumTilesForEntireResource,
  6760.             _Out_opt_  D3D12_PACKED_MIP_DESC *pPackedMipDesc,
  6761.             _Out_opt_  D3D12_TILE_SHAPE *pStandardTileShapeForNonPackedMips,
  6762.             _Inout_opt_  UINT *pNumSubresourceTilings,
  6763.             _In_  UINT FirstSubresourceTilingToGet,
  6764.             _Out_writes_(*pNumSubresourceTilings)  D3D12_SUBRESOURCE_TILING *pSubresourceTilingsForNonPackedMips) = 0;
  6765.        
  6766.         virtual LUID STDMETHODCALLTYPE GetAdapterLuid( void) = 0;
  6767.        
  6768.     };
  6769.    
  6770.    
  6771. #else   /* C style interface */
  6772.  
  6773.     typedef struct ID3D12DeviceVtbl
  6774.     {
  6775.         BEGIN_INTERFACE
  6776.        
  6777.         HRESULT ( STDMETHODCALLTYPE *QueryInterface )(
  6778.             ID3D12Device * This,
  6779.             REFIID riid,
  6780.             _COM_Outptr_  void **ppvObject);
  6781.        
  6782.         ULONG ( STDMETHODCALLTYPE *AddRef )(
  6783.             ID3D12Device * This);
  6784.        
  6785.         ULONG ( STDMETHODCALLTYPE *Release )(
  6786.             ID3D12Device * This);
  6787.        
  6788.         HRESULT ( STDMETHODCALLTYPE *GetPrivateData )(
  6789.             ID3D12Device * This,
  6790.             _In_  REFGUID guid,
  6791.             _Inout_  UINT *pDataSize,
  6792.             _Out_writes_bytes_opt_( *pDataSize )  void *pData);
  6793.        
  6794.         HRESULT ( STDMETHODCALLTYPE *SetPrivateData )(
  6795.             ID3D12Device * This,
  6796.             _In_  REFGUID guid,
  6797.             _In_  UINT DataSize,
  6798.             _In_reads_bytes_opt_( DataSize )  const void *pData);
  6799.        
  6800.         HRESULT ( STDMETHODCALLTYPE *SetPrivateDataInterface )(
  6801.             ID3D12Device * This,
  6802.             _In_  REFGUID guid,
  6803.             _In_opt_  const IUnknown *pData);
  6804.        
  6805.         HRESULT ( STDMETHODCALLTYPE *SetName )(
  6806.             ID3D12Device * This,
  6807.             _In_z_  LPCWSTR Name);
  6808.        
  6809.         UINT ( STDMETHODCALLTYPE *GetNodeCount )(
  6810.             ID3D12Device * This);
  6811.        
  6812.         HRESULT ( STDMETHODCALLTYPE *CreateCommandQueue )(
  6813.             ID3D12Device * This,
  6814.             _In_  const D3D12_COMMAND_QUEUE_DESC *pDesc,
  6815.             REFIID riid,
  6816.             _COM_Outptr_  void **ppCommandQueue);
  6817.        
  6818.         HRESULT ( STDMETHODCALLTYPE *CreateCommandAllocator )(
  6819.             ID3D12Device * This,
  6820.             _In_  D3D12_COMMAND_LIST_TYPE type,
  6821.             REFIID riid,
  6822.             _COM_Outptr_  void **ppCommandAllocator);
  6823.        
  6824.         HRESULT ( STDMETHODCALLTYPE *CreateGraphicsPipelineState )(
  6825.             ID3D12Device * This,
  6826.             _In_  const D3D12_GRAPHICS_PIPELINE_STATE_DESC *pDesc,
  6827.             REFIID riid,
  6828.             _COM_Outptr_  void **ppPipelineState);
  6829.        
  6830.         HRESULT ( STDMETHODCALLTYPE *CreateComputePipelineState )(
  6831.             ID3D12Device * This,
  6832.             _In_  const D3D12_COMPUTE_PIPELINE_STATE_DESC *pDesc,
  6833.             REFIID riid,
  6834.             _COM_Outptr_  void **ppPipelineState);
  6835.        
  6836.         HRESULT ( STDMETHODCALLTYPE *CreateCommandList )(
  6837.             ID3D12Device * This,
  6838.             _In_  UINT nodeMask,
  6839.             _In_  D3D12_COMMAND_LIST_TYPE type,
  6840.             _In_  ID3D12CommandAllocator *pCommandAllocator,
  6841.             _In_opt_  ID3D12PipelineState *pInitialState,
  6842.             REFIID riid,
  6843.             _COM_Outptr_  void **ppCommandList);
  6844.        
  6845.         HRESULT ( STDMETHODCALLTYPE *CheckFeatureSupport )(
  6846.             ID3D12Device * This,
  6847.             D3D12_FEATURE Feature,
  6848.             _Inout_updates_bytes_(FeatureSupportDataSize)  void *pFeatureSupportData,
  6849.             UINT FeatureSupportDataSize);
  6850.        
  6851.         HRESULT ( STDMETHODCALLTYPE *CreateDescriptorHeap )(
  6852.             ID3D12Device * This,
  6853.             _In_  const D3D12_DESCRIPTOR_HEAP_DESC *pDescriptorHeapDesc,
  6854.             REFIID riid,
  6855.             _COM_Outptr_  void **ppvHeap);
  6856.        
  6857.         UINT ( STDMETHODCALLTYPE *GetDescriptorHandleIncrementSize )(
  6858.             ID3D12Device * This,
  6859.             _In_  D3D12_DESCRIPTOR_HEAP_TYPE DescriptorHeapType);
  6860.        
  6861.         HRESULT ( STDMETHODCALLTYPE *CreateRootSignature )(
  6862.             ID3D12Device * This,
  6863.             _In_  UINT nodeMask,
  6864.             _In_reads_(blobLengthInBytes)  const void *pBlobWithRootSignature,
  6865.             _In_  SIZE_T blobLengthInBytes,
  6866.             REFIID riid,
  6867.             _COM_Outptr_  void **ppvRootSignature);
  6868.        
  6869.         void ( STDMETHODCALLTYPE *CreateConstantBufferView )(
  6870.             ID3D12Device * This,
  6871.             _In_opt_  const D3D12_CONSTANT_BUFFER_VIEW_DESC *pDesc,
  6872.             _In_  D3D12_CPU_DESCRIPTOR_HANDLE DestDescriptor);
  6873.        
  6874.         void ( STDMETHODCALLTYPE *CreateShaderResourceView )(
  6875.             ID3D12Device * This,
  6876.             _In_opt_  ID3D12Resource *pResource,
  6877.             _In_opt_  const D3D12_SHADER_RESOURCE_VIEW_DESC *pDesc,
  6878.             _In_  D3D12_CPU_DESCRIPTOR_HANDLE DestDescriptor);
  6879.        
  6880.         void ( STDMETHODCALLTYPE *CreateUnorderedAccessView )(
  6881.             ID3D12Device * This,
  6882.             _In_opt_  ID3D12Resource *pResource,
  6883.             _In_opt_  ID3D12Resource *pCounterResource,
  6884.             _In_opt_  const D3D12_UNORDERED_ACCESS_VIEW_DESC *pDesc,
  6885.             _In_  D3D12_CPU_DESCRIPTOR_HANDLE DestDescriptor);
  6886.        
  6887.         void ( STDMETHODCALLTYPE *CreateRenderTargetView )(
  6888.             ID3D12Device * This,
  6889.             _In_opt_  ID3D12Resource *pResource,
  6890.             _In_opt_  const D3D12_RENDER_TARGET_VIEW_DESC *pDesc,
  6891.             _In_  D3D12_CPU_DESCRIPTOR_HANDLE DestDescriptor);
  6892.        
  6893.         void ( STDMETHODCALLTYPE *CreateDepthStencilView )(
  6894.             ID3D12Device * This,
  6895.             _In_opt_  ID3D12Resource *pResource,
  6896.             _In_opt_  const D3D12_DEPTH_STENCIL_VIEW_DESC *pDesc,
  6897.             _In_  D3D12_CPU_DESCRIPTOR_HANDLE DestDescriptor);
  6898.        
  6899.         void ( STDMETHODCALLTYPE *CreateSampler )(
  6900.             ID3D12Device * This,
  6901.             _In_  const D3D12_SAMPLER_DESC *pDesc,
  6902.             _In_  D3D12_CPU_DESCRIPTOR_HANDLE DestDescriptor);
  6903.        
  6904.         void ( STDMETHODCALLTYPE *CopyDescriptors )(
  6905.             ID3D12Device * This,
  6906.             _In_reads_(NumDestDescriptorRanges)  const D3D12_CPU_DESCRIPTOR_HANDLE *pDestDescriptorRangeStarts,
  6907.             _In_reads_opt_(NumDestDescriptorRanges)  const UINT *pDestDescriptorRangeSizes,
  6908.             _In_  UINT NumDestDescriptorRanges,
  6909.             _In_reads_(NumSrcDescriptorRanges)  const D3D12_CPU_DESCRIPTOR_HANDLE *pSrcDescriptorRangeStarts,
  6910.             _In_reads_opt_(NumSrcDescriptorRanges)  const UINT *pSrcDescriptorRangeSizes,
  6911.             _In_  UINT NumSrcDescriptorRanges,
  6912.             _In_  D3D12_DESCRIPTOR_HEAP_TYPE DescriptorHeapsType);
  6913.        
  6914.         void ( STDMETHODCALLTYPE *CopyDescriptorsSimple )(
  6915.             ID3D12Device * This,
  6916.             _In_  D3D12_CPU_DESCRIPTOR_HANDLE DestDescriptorRangeStart,
  6917.             _In_  D3D12_CPU_DESCRIPTOR_HANDLE SrcDescriptorRangeStart,
  6918.             _In_  UINT NumDescriptors,
  6919.             _In_  D3D12_DESCRIPTOR_HEAP_TYPE DescriptorHeapsType);
  6920.        
  6921.         D3D12_RESOURCE_ALLOCATION_INFO ( STDMETHODCALLTYPE *GetResourceAllocationInfo )(
  6922.             ID3D12Device * This,
  6923.             _In_  UINT visibleMask,
  6924.             _In_  UINT numResourceDescs,
  6925.             _In_reads_(numResourceDescs)  const D3D12_RESOURCE_DESC *pResourceDescs);
  6926.        
  6927.         D3D12_HEAP_PROPERTIES ( STDMETHODCALLTYPE *GetCustomHeapProperties )(
  6928.             ID3D12Device * This,
  6929.             _In_  UINT nodeMask,
  6930.             D3D12_HEAP_TYPE heapType);
  6931.        
  6932.         HRESULT ( STDMETHODCALLTYPE *CreateCommittedResource )(
  6933.             ID3D12Device * This,
  6934.             _In_  const D3D12_HEAP_PROPERTIES *pHeapProperties,
  6935.             D3D12_HEAP_MISC_FLAG HeapMiscFlags,
  6936.             _In_  const D3D12_RESOURCE_DESC *pResourceDesc,
  6937.             D3D12_RESOURCE_USAGE InitialResourceState,
  6938.             _In_opt_  const D3D12_CLEAR_VALUE *pOptimizedClearValue,
  6939.             REFIID riidResource,
  6940.             _COM_Outptr_opt_  void **ppvResource);
  6941.        
  6942.         HRESULT ( STDMETHODCALLTYPE *CreateHeap )(
  6943.             ID3D12Device * This,
  6944.             _In_  const D3D12_HEAP_DESC *pDesc,
  6945.             REFIID riid,
  6946.             _COM_Outptr_opt_  void **ppvHeap);
  6947.        
  6948.         HRESULT ( STDMETHODCALLTYPE *CreatePlacedResource )(
  6949.             ID3D12Device * This,
  6950.             _In_  ID3D12Heap *pHeap,
  6951.             UINT64 HeapOffset,
  6952.             _In_  const D3D12_RESOURCE_DESC *pDesc,
  6953.             D3D12_RESOURCE_USAGE InitialState,
  6954.             _In_opt_  const D3D12_CLEAR_VALUE *pOptimizedClearValue,
  6955.             REFIID riid,
  6956.             _COM_Outptr_opt_  void **ppvResource);
  6957.        
  6958.         HRESULT ( STDMETHODCALLTYPE *CreateReservedResource )(
  6959.             ID3D12Device * This,
  6960.             _In_  const D3D12_RESOURCE_DESC *pDesc,
  6961.             D3D12_RESOURCE_USAGE InitialState,
  6962.             _In_opt_  const D3D12_CLEAR_VALUE *pOptimizedClearValue,
  6963.             REFIID riid,
  6964.             _COM_Outptr_opt_  void **ppvResource);
  6965.        
  6966.         HRESULT ( STDMETHODCALLTYPE *CreateSharedHandle )(
  6967.             ID3D12Device * This,
  6968.             _In_  ID3D12DeviceChild *pObject,
  6969.             _In_opt_  const SECURITY_ATTRIBUTES *pAttributes,
  6970.             DWORD Access,
  6971.             _In_opt_  LPCWSTR Name,
  6972.             _Out_  HANDLE *pHandle);
  6973.        
  6974.         HRESULT ( STDMETHODCALLTYPE *OpenSharedHandle )(
  6975.             ID3D12Device * This,
  6976.             _In_  HANDLE NTHandle,
  6977.             REFIID riid,
  6978.             _COM_Outptr_opt_  void **ppvObj);
  6979.        
  6980.         HRESULT ( STDMETHODCALLTYPE *OpenSharedHandleByName )(
  6981.             ID3D12Device * This,
  6982.             _In_  LPCWSTR Name,
  6983.             DWORD Access,
  6984.             /* [annotation][out] */
  6985.             _Out_  HANDLE *pNTHandle);
  6986.        
  6987.         HRESULT ( STDMETHODCALLTYPE *MakeResident )(
  6988.             ID3D12Device * This,
  6989.             UINT NumObjects,
  6990.             _In_reads_(NumObjects)  ID3D12Pageable *const *ppObjects);
  6991.        
  6992.         HRESULT ( STDMETHODCALLTYPE *Evict )(
  6993.             ID3D12Device * This,
  6994.             UINT NumObjects,
  6995.             _In_reads_(NumObjects)  ID3D12Pageable *const *ppObjects);
  6996.        
  6997.         HRESULT ( STDMETHODCALLTYPE *CreateFence )(
  6998.             ID3D12Device * This,
  6999.             UINT64 InitialValue,
  7000.             D3D12_FENCE_MISC_FLAG Flags,
  7001.             REFIID riid,
  7002.             _COM_Outptr_  void **ppFence);
  7003.        
  7004.         D3D12_CREATE_DEVICE_FLAG ( STDMETHODCALLTYPE *GetCreateDeviceFlags )(
  7005.             ID3D12Device * This);
  7006.        
  7007.         HRESULT ( STDMETHODCALLTYPE *GetDeviceRemovedReason )(
  7008.             ID3D12Device * This);
  7009.        
  7010.         void ( STDMETHODCALLTYPE *GetCopyableLayout )(
  7011.             ID3D12Device * This,
  7012.             _In_  const D3D12_RESOURCE_DESC *pResourceDesc,
  7013.             _In_range_(0,D3D12_REQ_SUBRESOURCES)  UINT FirstSubresource,
  7014.             _In_range_(0,D3D12_REQ_SUBRESOURCES-FirstSubresource)  UINT NumSubresources,
  7015.             UINT64 BaseOffset,
  7016.             _Out_writes_opt_(NumSubresources)  D3D12_PLACED_PITCHED_SUBRESOURCE_DESC *pLayouts,
  7017.             _Out_writes_opt_(NumSubresources)  UINT *pNumRows,
  7018.             _Out_writes_opt_(NumSubresources)  UINT64 *pRowSizeInBytes,
  7019.             _Out_opt_  UINT64 *pTotalBytes);
  7020.        
  7021.         HRESULT ( STDMETHODCALLTYPE *CreateQueryHeap )(
  7022.             ID3D12Device * This,
  7023.             _In_  const D3D12_QUERY_HEAP_DESC *pDesc,
  7024.             REFIID riid,
  7025.             _COM_Outptr_opt_  void **ppvHeap);
  7026.        
  7027.         HRESULT ( STDMETHODCALLTYPE *SetStablePowerState )(
  7028.             ID3D12Device * This,
  7029.             BOOL Enable);
  7030.        
  7031.         HRESULT ( STDMETHODCALLTYPE *CreateCommandSignature )(
  7032.             ID3D12Device * This,
  7033.             _In_  const D3D12_COMMAND_SIGNATURE *pDesc,
  7034.             _In_opt_  ID3D12RootSignature *pRootSignature,
  7035.             REFIID riid,
  7036.             _COM_Outptr_opt_  void **ppvCommandSignature);
  7037.        
  7038.         HRESULT ( STDMETHODCALLTYPE *OfferResources )(
  7039.             ID3D12Device * This,
  7040.             UINT NumObjects,
  7041.             _In_reads_(NumObjects)  ID3D12Pageable *const *ppObjects,
  7042.             D3D12_OFFER_RESOURCE_PRIORITY Priority);
  7043.        
  7044.         HRESULT ( STDMETHODCALLTYPE *ReclaimResources )(
  7045.             ID3D12Device * This,
  7046.             UINT NumObjects,
  7047.             _In_reads_(NumObjects)  ID3D12Pageable *const *ppObjects,
  7048.             _Out_writes_(NumObjects)  BOOL *pDiscarded);
  7049.        
  7050.         void ( STDMETHODCALLTYPE *GetResourceTiling )(
  7051.             ID3D12Device * This,
  7052.             _In_  ID3D12Resource *pTiledResource,
  7053.             _Out_opt_  UINT *pNumTilesForEntireResource,
  7054.             _Out_opt_  D3D12_PACKED_MIP_DESC *pPackedMipDesc,
  7055.             _Out_opt_  D3D12_TILE_SHAPE *pStandardTileShapeForNonPackedMips,
  7056.             _Inout_opt_  UINT *pNumSubresourceTilings,
  7057.             _In_  UINT FirstSubresourceTilingToGet,
  7058.             _Out_writes_(*pNumSubresourceTilings)  D3D12_SUBRESOURCE_TILING *pSubresourceTilingsForNonPackedMips);
  7059.        
  7060.         LUID ( STDMETHODCALLTYPE *GetAdapterLuid )(
  7061.             ID3D12Device * This);
  7062.        
  7063.         END_INTERFACE
  7064.     } ID3D12DeviceVtbl;
  7065.  
  7066.     interface ID3D12Device
  7067.     {
  7068.         CONST_VTBL struct ID3D12DeviceVtbl *lpVtbl;
  7069.     };
  7070.  
  7071.    
  7072.  
  7073. #ifdef COBJMACROS
  7074.  
  7075.  
  7076. #define ID3D12Device_QueryInterface(This,riid,ppvObject)    \
  7077.     ( (This)->lpVtbl -> QueryInterface(This,riid,ppvObject) )
  7078.  
  7079. #define ID3D12Device_AddRef(This)   \
  7080.     ( (This)->lpVtbl -> AddRef(This) )
  7081.  
  7082. #define ID3D12Device_Release(This)  \
  7083.     ( (This)->lpVtbl -> Release(This) )
  7084.  
  7085.  
  7086. #define ID3D12Device_GetPrivateData(This,guid,pDataSize,pData)  \
  7087.     ( (This)->lpVtbl -> GetPrivateData(This,guid,pDataSize,pData) )
  7088.  
  7089. #define ID3D12Device_SetPrivateData(This,guid,DataSize,pData)   \
  7090.     ( (This)->lpVtbl -> SetPrivateData(This,guid,DataSize,pData) )
  7091.  
  7092. #define ID3D12Device_SetPrivateDataInterface(This,guid,pData)   \
  7093.     ( (This)->lpVtbl -> SetPrivateDataInterface(This,guid,pData) )
  7094.  
  7095. #define ID3D12Device_SetName(This,Name) \
  7096.     ( (This)->lpVtbl -> SetName(This,Name) )
  7097.  
  7098.  
  7099. #define ID3D12Device_GetNodeCount(This) \
  7100.     ( (This)->lpVtbl -> GetNodeCount(This) )
  7101.  
  7102. #define ID3D12Device_CreateCommandQueue(This,pDesc,riid,ppCommandQueue) \
  7103.     ( (This)->lpVtbl -> CreateCommandQueue(This,pDesc,riid,ppCommandQueue) )
  7104.  
  7105. #define ID3D12Device_CreateCommandAllocator(This,type,riid,ppCommandAllocator)  \
  7106.     ( (This)->lpVtbl -> CreateCommandAllocator(This,type,riid,ppCommandAllocator) )
  7107.  
  7108. #define ID3D12Device_CreateGraphicsPipelineState(This,pDesc,riid,ppPipelineState)   \
  7109.     ( (This)->lpVtbl -> CreateGraphicsPipelineState(This,pDesc,riid,ppPipelineState) )
  7110.  
  7111. #define ID3D12Device_CreateComputePipelineState(This,pDesc,riid,ppPipelineState)    \
  7112.     ( (This)->lpVtbl -> CreateComputePipelineState(This,pDesc,riid,ppPipelineState) )
  7113.  
  7114. #define ID3D12Device_CreateCommandList(This,nodeMask,type,pCommandAllocator,pInitialState,riid,ppCommandList)   \
  7115.     ( (This)->lpVtbl -> CreateCommandList(This,nodeMask,type,pCommandAllocator,pInitialState,riid,ppCommandList) )
  7116.  
  7117. #define ID3D12Device_CheckFeatureSupport(This,Feature,pFeatureSupportData,FeatureSupportDataSize)   \
  7118.     ( (This)->lpVtbl -> CheckFeatureSupport(This,Feature,pFeatureSupportData,FeatureSupportDataSize) )
  7119.  
  7120. #define ID3D12Device_CreateDescriptorHeap(This,pDescriptorHeapDesc,riid,ppvHeap)    \
  7121.     ( (This)->lpVtbl -> CreateDescriptorHeap(This,pDescriptorHeapDesc,riid,ppvHeap) )
  7122.  
  7123. #define ID3D12Device_GetDescriptorHandleIncrementSize(This,DescriptorHeapType)  \
  7124.     ( (This)->lpVtbl -> GetDescriptorHandleIncrementSize(This,DescriptorHeapType) )
  7125.  
  7126. #define ID3D12Device_CreateRootSignature(This,nodeMask,pBlobWithRootSignature,blobLengthInBytes,riid,ppvRootSignature)  \
  7127.     ( (This)->lpVtbl -> CreateRootSignature(This,nodeMask,pBlobWithRootSignature,blobLengthInBytes,riid,ppvRootSignature) )
  7128.  
  7129. #define ID3D12Device_CreateConstantBufferView(This,pDesc,DestDescriptor)    \
  7130.     ( (This)->lpVtbl -> CreateConstantBufferView(This,pDesc,DestDescriptor) )
  7131.  
  7132. #define ID3D12Device_CreateShaderResourceView(This,pResource,pDesc,DestDescriptor)  \
  7133.     ( (This)->lpVtbl -> CreateShaderResourceView(This,pResource,pDesc,DestDescriptor) )
  7134.  
  7135. #define ID3D12Device_CreateUnorderedAccessView(This,pResource,pCounterResource,pDesc,DestDescriptor)    \
  7136.     ( (This)->lpVtbl -> CreateUnorderedAccessView(This,pResource,pCounterResource,pDesc,DestDescriptor) )
  7137.  
  7138. #define ID3D12Device_CreateRenderTargetView(This,pResource,pDesc,DestDescriptor)    \
  7139.     ( (This)->lpVtbl -> CreateRenderTargetView(This,pResource,pDesc,DestDescriptor) )
  7140.  
  7141. #define ID3D12Device_CreateDepthStencilView(This,pResource,pDesc,DestDescriptor)    \
  7142.     ( (This)->lpVtbl -> CreateDepthStencilView(This,pResource,pDesc,DestDescriptor) )
  7143.  
  7144. #define ID3D12Device_CreateSampler(This,pDesc,DestDescriptor)   \
  7145.     ( (This)->lpVtbl -> CreateSampler(This,pDesc,DestDescriptor) )
  7146.  
  7147. #define ID3D12Device_CopyDescriptors(This,pDestDescriptorRangeStarts,pDestDescriptorRangeSizes,NumDestDescriptorRanges,pSrcDescriptorRangeStarts,pSrcDescriptorRangeSizes,NumSrcDescriptorRanges,DescriptorHeapsType)   \
  7148.     ( (This)->lpVtbl -> CopyDescriptors(This,pDestDescriptorRangeStarts,pDestDescriptorRangeSizes,NumDestDescriptorRanges,pSrcDescriptorRangeStarts,pSrcDescriptorRangeSizes,NumSrcDescriptorRanges,DescriptorHeapsType) )
  7149.  
  7150. #define ID3D12Device_CopyDescriptorsSimple(This,DestDescriptorRangeStart,SrcDescriptorRangeStart,NumDescriptors,DescriptorHeapsType)    \
  7151.     ( (This)->lpVtbl -> CopyDescriptorsSimple(This,DestDescriptorRangeStart,SrcDescriptorRangeStart,NumDescriptors,DescriptorHeapsType) )
  7152.  
  7153. #define ID3D12Device_GetResourceAllocationInfo(This,visibleMask,numResourceDescs,pResourceDescs)    \
  7154.     ( (This)->lpVtbl -> GetResourceAllocationInfo(This,visibleMask,numResourceDescs,pResourceDescs) )
  7155.  
  7156. #define ID3D12Device_GetCustomHeapProperties(This,nodeMask,heapType)    \
  7157.     ( (This)->lpVtbl -> GetCustomHeapProperties(This,nodeMask,heapType) )
  7158.  
  7159. #define ID3D12Device_CreateCommittedResource(This,pHeapProperties,HeapMiscFlags,pResourceDesc,InitialResourceState,pOptimizedClearValue,riidResource,ppvResource)   \
  7160.     ( (This)->lpVtbl -> CreateCommittedResource(This,pHeapProperties,HeapMiscFlags,pResourceDesc,InitialResourceState,pOptimizedClearValue,riidResource,ppvResource) )
  7161.  
  7162. #define ID3D12Device_CreateHeap(This,pDesc,riid,ppvHeap)    \
  7163.     ( (This)->lpVtbl -> CreateHeap(This,pDesc,riid,ppvHeap) )
  7164.  
  7165. #define ID3D12Device_CreatePlacedResource(This,pHeap,HeapOffset,pDesc,InitialState,pOptimizedClearValue,riid,ppvResource)   \
  7166.     ( (This)->lpVtbl -> CreatePlacedResource(This,pHeap,HeapOffset,pDesc,InitialState,pOptimizedClearValue,riid,ppvResource) )
  7167.  
  7168. #define ID3D12Device_CreateReservedResource(This,pDesc,InitialState,pOptimizedClearValue,riid,ppvResource)  \
  7169.     ( (This)->lpVtbl -> CreateReservedResource(This,pDesc,InitialState,pOptimizedClearValue,riid,ppvResource) )
  7170.  
  7171. #define ID3D12Device_CreateSharedHandle(This,pObject,pAttributes,Access,Name,pHandle)   \
  7172.     ( (This)->lpVtbl -> CreateSharedHandle(This,pObject,pAttributes,Access,Name,pHandle) )
  7173.  
  7174. #define ID3D12Device_OpenSharedHandle(This,NTHandle,riid,ppvObj)    \
  7175.     ( (This)->lpVtbl -> OpenSharedHandle(This,NTHandle,riid,ppvObj) )
  7176.  
  7177. #define ID3D12Device_OpenSharedHandleByName(This,Name,Access,pNTHandle) \
  7178.     ( (This)->lpVtbl -> OpenSharedHandleByName(This,Name,Access,pNTHandle) )
  7179.  
  7180. #define ID3D12Device_MakeResident(This,NumObjects,ppObjects)    \
  7181.     ( (This)->lpVtbl -> MakeResident(This,NumObjects,ppObjects) )
  7182.  
  7183. #define ID3D12Device_Evict(This,NumObjects,ppObjects)   \
  7184.     ( (This)->lpVtbl -> Evict(This,NumObjects,ppObjects) )
  7185.  
  7186. #define ID3D12Device_CreateFence(This,InitialValue,Flags,riid,ppFence)  \
  7187.     ( (This)->lpVtbl -> CreateFence(This,InitialValue,Flags,riid,ppFence) )
  7188.  
  7189. #define ID3D12Device_GetCreateDeviceFlags(This) \
  7190.     ( (This)->lpVtbl -> GetCreateDeviceFlags(This) )
  7191.  
  7192. #define ID3D12Device_GetDeviceRemovedReason(This)   \
  7193.     ( (This)->lpVtbl -> GetDeviceRemovedReason(This) )
  7194.  
  7195. #define ID3D12Device_GetCopyableLayout(This,pResourceDesc,FirstSubresource,NumSubresources,BaseOffset,pLayouts,pNumRows,pRowSizeInBytes,pTotalBytes)    \
  7196.     ( (This)->lpVtbl -> GetCopyableLayout(This,pResourceDesc,FirstSubresource,NumSubresources,BaseOffset,pLayouts,pNumRows,pRowSizeInBytes,pTotalBytes) )
  7197.  
  7198. #define ID3D12Device_CreateQueryHeap(This,pDesc,riid,ppvHeap)   \
  7199.     ( (This)->lpVtbl -> CreateQueryHeap(This,pDesc,riid,ppvHeap) )
  7200.  
  7201. #define ID3D12Device_SetStablePowerState(This,Enable)   \
  7202.     ( (This)->lpVtbl -> SetStablePowerState(This,Enable) )
  7203.  
  7204. #define ID3D12Device_CreateCommandSignature(This,pDesc,pRootSignature,riid,ppvCommandSignature) \
  7205.     ( (This)->lpVtbl -> CreateCommandSignature(This,pDesc,pRootSignature,riid,ppvCommandSignature) )
  7206.  
  7207. #define ID3D12Device_OfferResources(This,NumObjects,ppObjects,Priority) \
  7208.     ( (This)->lpVtbl -> OfferResources(This,NumObjects,ppObjects,Priority) )
  7209.  
  7210. #define ID3D12Device_ReclaimResources(This,NumObjects,ppObjects,pDiscarded) \
  7211.     ( (This)->lpVtbl -> ReclaimResources(This,NumObjects,ppObjects,pDiscarded) )
  7212.  
  7213. #define ID3D12Device_GetResourceTiling(This,pTiledResource,pNumTilesForEntireResource,pPackedMipDesc,pStandardTileShapeForNonPackedMips,pNumSubresourceTilings,FirstSubresourceTilingToGet,pSubresourceTilingsForNonPackedMips) \
  7214.     ( (This)->lpVtbl -> GetResourceTiling(This,pTiledResource,pNumTilesForEntireResource,pPackedMipDesc,pStandardTileShapeForNonPackedMips,pNumSubresourceTilings,FirstSubresourceTilingToGet,pSubresourceTilingsForNonPackedMips) )
  7215.  
  7216. #define ID3D12Device_GetAdapterLuid(This)   \
  7217.     ( (This)->lpVtbl -> GetAdapterLuid(This) )
  7218.  
  7219. #endif /* COBJMACROS */
  7220.  
  7221.  
  7222. #endif  /* C style interface */
  7223.  
  7224.  
  7225.  
  7226.  
  7227.  
  7228.  
  7229.  
  7230.  
  7231.  
  7232.  
  7233.  
  7234.  
  7235.  
  7236.  
  7237.  
  7238.  
  7239. #endif  /* __ID3D12Device_INTERFACE_DEFINED__ */
  7240.  
  7241.  
  7242. /* interface __MIDL_itf_d3d12_0000_0017 */
  7243. /* [local] */
  7244.  
  7245. typedef struct D3D12_SUBRESOURCE_DATA
  7246.     {
  7247.     const void *pData;
  7248.     LONG_PTR RowPitch;
  7249.     LONG_PTR SlicePitch;
  7250.     }   D3D12_SUBRESOURCE_DATA;
  7251.  
  7252. typedef struct D3D12_MEMCPY_DEST
  7253.     {
  7254.     void *pData;
  7255.     SIZE_T RowPitch;
  7256.     SIZE_T SlicePitch;
  7257.     }   D3D12_MEMCPY_DEST;
  7258.  
  7259. #if !defined( D3D12_NO_HELPERS ) && defined( __cplusplus )
  7260. }
  7261. // Row-by-row memcpy
  7262. inline void MemcpySubresource(
  7263.     const D3D12_MEMCPY_DEST* pDest,
  7264.     const D3D12_SUBRESOURCE_DATA* pSrc,
  7265.     SIZE_T RowSizeInBytes,
  7266.     UINT NumRows,
  7267.     UINT NumSlices)
  7268. {
  7269.     for (UINT z = 0; z < NumSlices; ++z)
  7270.     {
  7271.         BYTE* pDestSlice = reinterpret_cast<BYTE*>(pDest->pData) + pDest->SlicePitch * z;
  7272.         const BYTE* pSrcSlice = reinterpret_cast<const BYTE*>(pSrc->pData) + pSrc->SlicePitch * z;
  7273.         for (UINT y = 0; y < NumRows; ++y)
  7274.         {
  7275.             memcpy(pDestSlice + pDest->RowPitch * y,
  7276.                    pSrcSlice + pSrc->RowPitch * y,
  7277.                    RowSizeInBytes);
  7278.         }
  7279.     }
  7280. }
  7281.  
  7282. // Returns required size of a buffer to be used for data upload
  7283. inline UINT64 GetRequiredIntermediateSize(
  7284.     _In_ ID3D12Resource* pDestinationResource,
  7285.     _In_range_(0,D3D12_REQ_SUBRESOURCES) UINT FirstSubresource,
  7286.     _In_range_(0,D3D12_REQ_SUBRESOURCES-FirstSubresource) UINT NumSubresources)
  7287. {
  7288.     D3D12_RESOURCE_DESC Desc = pDestinationResource->GetDesc();
  7289.     UINT64 RequiredSize = 0;
  7290.    
  7291.     ID3D12Device* pDevice;
  7292.     pDestinationResource->GetDevice(__uuidof(*pDevice), reinterpret_cast<void**>(&pDevice));
  7293.     pDevice->GetCopyableLayout(&Desc, FirstSubresource, NumSubresources, 0, nullptr, nullptr, nullptr, &RequiredSize);
  7294.     pDevice->Release();
  7295.    
  7296.     return RequiredSize;
  7297. }
  7298.  
  7299. // All arrays must be populated (e.g. by calling GetCopyableLayout)
  7300. inline UINT64 UpdateSubresources(
  7301.     _In_ ID3D12GraphicsCommandList* pCmdList,
  7302.     _In_ ID3D12Resource* pDestinationResource,
  7303.     _In_ ID3D12Resource* pIntermediate,
  7304.     _In_range_(0,D3D12_REQ_SUBRESOURCES) UINT FirstSubresource,
  7305.     _In_range_(0,D3D12_REQ_SUBRESOURCES-FirstSubresource) UINT NumSubresources,
  7306.     UINT64 RequiredSize,
  7307.     _In_reads_(NumSubresources) const D3D12_PLACED_PITCHED_SUBRESOURCE_DESC* pLayouts,
  7308.     _In_reads_(NumSubresources) const UINT* pNumRows,
  7309.     _In_reads_(NumSubresources) const UINT64* pRowSizesInBytes,
  7310.     _In_reads_(NumSubresources) const D3D12_SUBRESOURCE_DATA* pSrcData)
  7311. {
  7312.     // Minor validation
  7313.     D3D12_RESOURCE_DESC IntermediateDesc = pIntermediate->GetDesc();
  7314.     D3D12_RESOURCE_DESC DestinationDesc = pDestinationResource->GetDesc();
  7315.     if (IntermediateDesc.Dimension != D3D12_RESOURCE_DIMENSION_BUFFER ||
  7316.         IntermediateDesc.Width < RequiredSize + pLayouts[0].Offset ||
  7317.         RequiredSize > (SIZE_T)-1 ||
  7318.         (DestinationDesc.Dimension == D3D12_RESOURCE_DIMENSION_BUFFER &&
  7319.             (FirstSubresource != 0 || NumSubresources != 1)))
  7320.     {
  7321.         return 0;
  7322.     }
  7323.    
  7324.     BYTE* pData;
  7325.     HRESULT hr = pIntermediate->Map(0, NULL, reinterpret_cast<void**>(&pData));
  7326.     if (FAILED(hr))
  7327.     {
  7328.         return 0;
  7329.     }
  7330.    
  7331.     for (UINT i = 0; i < NumSubresources; ++i)
  7332.     {
  7333.         if (pRowSizesInBytes[i] > (SIZE_T)-1) return 0;
  7334.         D3D12_MEMCPY_DEST DestData = { pData + pLayouts[i].Offset, pLayouts[i].Placement.RowPitch, pLayouts[i].Placement.RowPitch * pNumRows[i] };
  7335.         MemcpySubresource(&DestData, &pSrcData[i], (SIZE_T)pRowSizesInBytes[i], pNumRows[i], pLayouts[i].Placement.Depth);
  7336.     }
  7337.     pIntermediate->Unmap(0, NULL);
  7338.    
  7339.     if (DestinationDesc.Dimension == D3D12_RESOURCE_DIMENSION_BUFFER)
  7340.     {
  7341.         CD3D12_BOX SrcBox( UINT( pLayouts[0].Offset ), UINT( pLayouts[0].Offset + pLayouts[0].Placement.Width ) );
  7342.         pCmdList->CopyBufferRegion(
  7343.             pDestinationResource, 0, pIntermediate, pLayouts[0].Offset, pLayouts[0].Placement.Width, D3D12_COPY_NO_OVERWRITE);
  7344.     }
  7345.     else
  7346.     {
  7347.         for (UINT i = 0; i < NumSubresources; ++i)
  7348.         {
  7349.             CD3D12_TEXTURE_COPY_LOCATION Dst(pDestinationResource, i + FirstSubresource);
  7350.             CD3D12_TEXTURE_COPY_LOCATION Src(pIntermediate, pLayouts[i]);
  7351.             pCmdList->CopyTextureRegion(&Dst, 0, 0, 0, &Src, nullptr, D3D12_COPY_NO_OVERWRITE);
  7352.         }
  7353.     }
  7354.     return RequiredSize;
  7355. }
  7356.  
  7357. // Heap-allocating UpdateSubresources implementation
  7358. inline UINT64 UpdateSubresources(
  7359.     _In_ ID3D12GraphicsCommandList* pCmdList,
  7360.     _In_ ID3D12Resource* pDestinationResource,
  7361.     _In_ ID3D12Resource* pIntermediate,
  7362.     UINT64 IntermediateOffset,
  7363.     _In_range_(0,D3D12_REQ_SUBRESOURCES) UINT FirstSubresource,
  7364.     _In_range_(0,D3D12_REQ_SUBRESOURCES-FirstSubresource) UINT NumSubresources,
  7365.     _In_reads_(NumSubresources) D3D12_SUBRESOURCE_DATA* pSrcData)
  7366. {
  7367.     UINT64 RequiredSize = 0;
  7368.     D3D12_PLACED_PITCHED_SUBRESOURCE_DESC* pLayouts = new D3D12_PLACED_PITCHED_SUBRESOURCE_DESC[NumSubresources];
  7369.     UINT* pNumRows = new UINT[NumSubresources];
  7370.     UINT64* pRowSizesInBytes = new UINT64[NumSubresources];
  7371.    
  7372.     D3D12_RESOURCE_DESC Desc = pDestinationResource->GetDesc();
  7373.     ID3D12Device* pDevice;
  7374.     pDestinationResource->GetDevice(__uuidof(*pDevice), reinterpret_cast<void**>(&pDevice));
  7375.     pDevice->GetCopyableLayout(&Desc, FirstSubresource, NumSubresources, IntermediateOffset, pLayouts, pNumRows, pRowSizesInBytes, &RequiredSize);
  7376.     pDevice->Release();
  7377.    
  7378.     UINT64 Result = UpdateSubresources(pCmdList, pDestinationResource, pIntermediate, FirstSubresource, NumSubresources, RequiredSize, pLayouts, pNumRows, pRowSizesInBytes, pSrcData);
  7379.     delete[] pLayouts;
  7380.     delete[] pNumRows;
  7381.     delete[] pRowSizesInBytes;
  7382.     return Result;
  7383. }
  7384.  
  7385. // Stack-allocating UpdateSubresources implementation
  7386. template <UINT MaxSubresources>
  7387. inline UINT64 UpdateSubresources(
  7388.     _In_ ID3D12GraphicsCommandList* pCmdList,
  7389.     _In_ ID3D12Resource* pDestinationResource,
  7390.     _In_ ID3D12Resource* pIntermediate,
  7391.     UINT64 IntermediateOffset,
  7392.     _In_range_(0, MaxSubresources) UINT FirstSubresource,
  7393.     _In_range_(1, MaxSubresources - FirstSubresource) UINT NumSubresources,
  7394.     _In_reads_(NumSubresources) D3D12_SUBRESOURCE_DATA* pSrcData)
  7395. {
  7396.     UINT64 RequiredSize = 0;
  7397.     D3D12_PLACED_PITCHED_SUBRESOURCE_DESC Layouts[MaxSubresources];
  7398.     UINT NumRows[MaxSubresources];
  7399.     UINT64 RowSizesInBytes[MaxSubresources];
  7400.    
  7401.     D3D12_RESOURCE_DESC Desc = pDestinationResource->GetDesc();
  7402.     ID3D12Device* pDevice;
  7403.     pDestinationResource->GetDevice(__uuidof(*pDevice), reinterpret_cast<void**>(&pDevice));
  7404.     pDevice->GetCopyableLayout(&Desc, FirstSubresource, NumSubresources, IntermediateOffset, Layouts, NumRows, RowSizesInBytes, &RequiredSize);
  7405.     pDevice->Release();
  7406.    
  7407.     return UpdateSubresources(pCmdList, pDestinationResource, pIntermediate, FirstSubresource, NumSubresources, RequiredSize, Layouts, NumRows, RowSizesInBytes, pSrcData);
  7408. }
  7409. extern "C"{
  7410. #endif
  7411. #if !defined( D3D12_IGNORE_SDK_LAYERS )
  7412. #include "d3d12sdklayers.h"
  7413. #endif
  7414.  
  7415. ///////////////////////////////////////////////////////////////////////////
  7416. // D3D12CreateDevice
  7417. // ------------------
  7418. //
  7419. // pAdapter
  7420. //      If NULL, D3D12CreateDevice will choose the primary adapter and
  7421. //      create a new instance from a temporarily created IDXGIFactory.
  7422. //      If non-NULL, D3D12CreateDevice will use the provided adapter.
  7423. // DriverType
  7424. //      Specifies the driver type to be created: hardware or WARP
  7425. // Flags
  7426. //      Combinations of D3D12_CREATE_DEVICE_FLAG bits.
  7427. // MinimumFeatureLevel
  7428. //      The minimum feature level required for successful device creation.
  7429. // SDKVersion
  7430. //      SDK version. Use the D3D12_SDK_VERSION macro.
  7431. // riid
  7432. //      The interface IID of the device to be returned. Expected: ID3D12Device.
  7433. // ppDevice
  7434. //      Pointer to returned interface. May be NULL.
  7435. // pFeatureLevel
  7436. //      Pointer to returned feature level. May be NULL.
  7437. //
  7438. // Return Values
  7439. //  Any of those documented for
  7440. //          CreateDXGIFactory1
  7441. //          IDXGIFactory::EnumAdapters
  7442. //          D3D12CreateDevice
  7443. //
  7444. ///////////////////////////////////////////////////////////////////////////
  7445. typedef HRESULT (WINAPI* PFN_D3D12_CREATE_DEVICE)( _In_opt_ IDXGIAdapter*,
  7446.     D3D_DRIVER_TYPE, D3D12_CREATE_DEVICE_FLAG,
  7447.     D3D_FEATURE_LEVEL,
  7448.     UINT, _In_ REFIID, _COM_Outptr_opt_ void** );
  7449.  
  7450. HRESULT WINAPI D3D12CreateDevice(
  7451.     _In_opt_ IDXGIAdapter* pAdapter,
  7452.     D3D_DRIVER_TYPE DriverType,
  7453.     D3D12_CREATE_DEVICE_FLAG Flags,
  7454.     D3D_FEATURE_LEVEL MinimumFeatureLevel,
  7455.     UINT SDKVersion,
  7456.     _In_ REFIID riid, // Expected: ID3D12Device
  7457.     _COM_Outptr_opt_ void** ppDevice );
  7458.  
  7459. #if !defined( D3D12_NO_HELPERS ) && defined( __cplusplus )
  7460. inline ID3D12CommandList * const * CommandListCast(ID3D12GraphicsCommandList * const * pp)
  7461. {
  7462.     // This cast is useful for passing strongly typed command list pointers into
  7463.     // ExecuteCommandLists.
  7464.     // This cast is valid as long as the const-ness is respected. D3D12 APIs do
  7465.     // respect the const-ness of their arguments.
  7466.     return reinterpret_cast<ID3D12CommandList * const *>(pp);
  7467. }
  7468. #endif
  7469. #endif /* WINAPI_FAMILY_PARTITION(WINAPI_PARTITION_APP) */
  7470. #pragma endregion
  7471. DEFINE_GUID(IID_ID3D12Object,0xc4fec28f,0x7966,0x4e95,0x9f,0x94,0xf4,0x31,0xcb,0x56,0xc3,0xb8);
  7472. DEFINE_GUID(IID_ID3D12DeviceChild,0x905db94b,0xa00c,0x4140,0x9d,0xf5,0x2b,0x64,0xca,0x9e,0xa3,0x57);
  7473. DEFINE_GUID(IID_ID3D12RootSignature,0xc54a6b66,0x72df,0x4ee8,0x8b,0xe5,0xa9,0x46,0xa1,0x42,0x92,0x14);
  7474. DEFINE_GUID(IID_ID3D12RootSignatureDeserializer,0x34AB647B,0x3CC8,0x46AC,0x84,0x1B,0xC0,0x96,0x56,0x45,0xC0,0x46);
  7475. DEFINE_GUID(IID_ID3D12Pageable,0x63ee58fb,0x1268,0x4835,0x86,0xda,0xf0,0x08,0xce,0x62,0xf0,0xd6);
  7476. DEFINE_GUID(IID_ID3D12Heap,0x6b3b2502,0x6e51,0x45b3,0x90,0xee,0x98,0x84,0x26,0x5e,0x8d,0xf3);
  7477. DEFINE_GUID(IID_ID3D12Resource,0x696442be,0xa72e,0x4059,0xbc,0x79,0x5b,0x5c,0x98,0x04,0x0f,0xad);
  7478. DEFINE_GUID(IID_ID3D12CommandAllocator,0x6102dee4,0xaf59,0x4b09,0xb9,0x99,0xb4,0x4d,0x73,0xf0,0x9b,0x24);
  7479. DEFINE_GUID(IID_ID3D12Fence,0x0a753dcf,0xc4d8,0x4b91,0xad,0xf6,0xbe,0x5a,0x60,0xd9,0x5a,0x76);
  7480. DEFINE_GUID(IID_ID3D12PipelineState,0x765a30f3,0xf624,0x4c6f,0xa8,0x28,0xac,0xe9,0x48,0x62,0x24,0x45);
  7481. DEFINE_GUID(IID_ID3D12DescriptorHeap,0x8efb471d,0x616c,0x4f49,0x90,0xf7,0x12,0x7b,0xb7,0x63,0xfa,0x51);
  7482. DEFINE_GUID(IID_ID3D12QueryHeap,0x0d9658ae,0xed45,0x469e,0xa6,0x1d,0x97,0x0e,0xc5,0x83,0xca,0xb4);
  7483. DEFINE_GUID(IID_ID3D12CommandSignature,0xc36a797c,0xec80,0x4f0a,0x89,0x85,0xa7,0xb2,0x47,0x50,0x82,0xd1);
  7484. DEFINE_GUID(IID_ID3D12CommandList,0x7116d91c,0xe7e4,0x47ce,0xb8,0xc6,0xec,0x81,0x68,0xf4,0x37,0xe5);
  7485. DEFINE_GUID(IID_ID3D12GraphicsCommandList,0xd60db31f,0xef2c,0x4914,0xbc,0xd8,0x25,0x07,0xf2,0x93,0xc8,0x3a);
  7486. DEFINE_GUID(IID_ID3D12CommandQueue,0xc93c8c3d,0xbf95,0x441a,0xb0,0xcd,0x56,0xea,0x3c,0x32,0x87,0xf1);
  7487. DEFINE_GUID(IID_ID3D12Device,0xd0a3ba20,0xb46d,0x468b,0x91,0x1b,0x07,0x1f,0xe1,0x0e,0x0b,0xcd);
  7488.  
  7489.  
  7490. extern RPC_IF_HANDLE __MIDL_itf_d3d12_0000_0017_v0_0_c_ifspec;
  7491. extern RPC_IF_HANDLE __MIDL_itf_d3d12_0000_0017_v0_0_s_ifspec;
  7492.  
  7493. /* Additional Prototypes for ALL interfaces */
  7494.  
  7495. /* end of Additional Prototypes */
  7496.  
  7497. #ifdef __cplusplus
  7498. }
  7499. #endif
  7500.  
  7501. #endif
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement