dxgi1_2.idl 11 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313314315316317318319320321322323324325326327328329330331332333334335336337338339340341342343344345346347348349350351352353354355356357358359360361362363364365366367368369370371372373374375376377378379380381382383384385386387388389390391392393394395396397398399400401402403404405406407408409410411412413414415416417418419420421422423
  1. /*
  2. * Copyright 2014 Jacek Caban for CodeWeavers
  3. *
  4. * This library is free software; you can redistribute it and/or
  5. * modify it under the terms of the GNU Lesser General Public
  6. * License as published by the Free Software Foundation; either
  7. * version 2.1 of the License, or (at your option) any later version.
  8. *
  9. * This library is distributed in the hope that it will be useful,
  10. * but WITHOUT ANY WARRANTY; without even the implied warranty of
  11. * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
  12. * Lesser General Public License for more details.
  13. *
  14. * You should have received a copy of the GNU Lesser General Public
  15. * License along with this library; if not, write to the Free Software
  16. * Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301, USA
  17. */
  18. import "dxgi.idl";
  19. const UINT DXGI_ENUM_MODES_STEREO = 0x4;
  20. const UINT DXGI_ENUM_MODES_DISABLED_STEREO = 0x8;
  21. const DWORD DXGI_SHARED_RESOURCE_READ = 0x80000000;
  22. const DWORD DXGI_SHARED_RESOURCE_WRITE = 0x00000001;
  23. typedef enum _DXGI_OFFER_RESOURCE_PRIORITY {
  24. DXGI_OFFER_RESOURCE_PRIORITY_LOW = 1,
  25. DXGI_OFFER_RESOURCE_PRIORITY_NORMAL,
  26. DXGI_OFFER_RESOURCE_PRIORITY_HIGH
  27. } DXGI_OFFER_RESOURCE_PRIORITY;
  28. typedef enum DXGI_ALPHA_MODE {
  29. DXGI_ALPHA_MODE_UNSPECIFIED = 0,
  30. DXGI_ALPHA_MODE_PREMULTIPLIED = 1,
  31. DXGI_ALPHA_MODE_STRAIGHT = 2,
  32. DXGI_ALPHA_MODE_IGNORE = 3,
  33. DXGI_ALPHA_MODE_FORCE_DWORD = 0xffffffff
  34. } DXGI_ALPHA_MODE;
  35. typedef struct DXGI_OUTDUPL_MOVE_RECT
  36. {
  37. POINT SourcePoint;
  38. RECT DestinationRect;
  39. } DXGI_OUTDUPL_MOVE_RECT;
  40. typedef struct DXGI_OUTDUPL_DESC
  41. {
  42. DXGI_MODE_DESC ModeDesc;
  43. DXGI_MODE_ROTATION Rotation;
  44. BOOL DesktopImageInSystemMemory;
  45. } DXGI_OUTDUPL_DESC;
  46. typedef struct DXGI_OUTDUPL_POINTER_POSITION
  47. {
  48. POINT Position;
  49. BOOL Visible;
  50. } DXGI_OUTDUPL_POINTER_POSITION;
  51. typedef enum DXGI_OUTDUPL_POINTER_SHAPE_TYPE
  52. {
  53. DXGI_OUTDUPL_POINTER_SHAPE_TYPE_MONOCHROME = 0x00000001,
  54. DXGI_OUTDUPL_POINTER_SHAPE_TYPE_COLOR = 0x00000002,
  55. DXGI_OUTDUPL_POINTER_SHAPE_TYPE_MASKED_COLOR = 0x00000004
  56. } DXGI_OUTDUPL_POINTER_SHAPE_TYPE;
  57. typedef struct DXGI_OUTDUPL_POINTER_SHAPE_INFO
  58. {
  59. UINT Type;
  60. UINT Width;
  61. UINT Height;
  62. UINT Pitch;
  63. POINT HotSpot;
  64. } DXGI_OUTDUPL_POINTER_SHAPE_INFO;
  65. typedef struct DXGI_OUTDUPL_FRAME_INFO
  66. {
  67. LARGE_INTEGER LastPresentTime;
  68. LARGE_INTEGER LastMouseUpdateTime;
  69. UINT AccumulatedFrames;
  70. BOOL RectsCoalesced;
  71. BOOL ProtectedContentMaskedOut;
  72. DXGI_OUTDUPL_POINTER_POSITION PointerPosition;
  73. UINT TotalMetadataBufferSize;
  74. UINT PointerShapeBufferSize;
  75. } DXGI_OUTDUPL_FRAME_INFO;
  76. typedef struct DXGI_MODE_DESC1
  77. {
  78. UINT Width;
  79. UINT Height;
  80. DXGI_RATIONAL RefreshRate;
  81. DXGI_FORMAT Format;
  82. DXGI_MODE_SCANLINE_ORDER ScanlineOrdering;
  83. DXGI_MODE_SCALING Scaling;
  84. BOOL Stereo;
  85. } DXGI_MODE_DESC1;
  86. [
  87. object,
  88. uuid(191cfac3-a341-470d-b26e-a864f428319c),
  89. local,
  90. pointer_default(unique)
  91. ]
  92. interface IDXGIOutputDuplication : IDXGIObject
  93. {
  94. void GetDesc(
  95. [out] DXGI_OUTDUPL_DESC *desc
  96. );
  97. HRESULT AcquireNextFrame(
  98. [in] UINT timeout_in_milliseconds,
  99. [out] DXGI_OUTDUPL_FRAME_INFO *frame_info,
  100. [out] IDXGIResource **desktop_resource
  101. );
  102. HRESULT GetFrameDirtyRects(
  103. [in] UINT dirty_rects_buffer_size,
  104. [out] RECT *dirty_rects_buffer,
  105. [out] UINT *dirty_rects_buffer_size_required
  106. );
  107. HRESULT GetFrameMoveRects(
  108. [in] UINT move_rects_buffer_size,
  109. [out] DXGI_OUTDUPL_MOVE_RECT *move_rect_buffer,
  110. [out] UINT *move_rects_buffer_size_required
  111. );
  112. HRESULT GetFramePointerShape(
  113. [in] UINT pointer_shape_buffer_size,
  114. [out] void *pointer_shape_buffer,
  115. [out] UINT *pointer_shape_buffer_size_required,
  116. [out] DXGI_OUTDUPL_POINTER_SHAPE_INFO *pointer_shape_info
  117. );
  118. HRESULT MapDesktopSurface(
  119. [out] DXGI_MAPPED_RECT *locked_rect
  120. );
  121. HRESULT UnMapDesktopSurface();
  122. HRESULT ReleaseFrame();
  123. }
  124. [
  125. object,
  126. uuid(aba496dd-b617-4cb8-a866-bc44d7eb1fa2),
  127. local,
  128. pointer_default(unique)
  129. ]
  130. interface IDXGISurface2 : IDXGISurface1
  131. {
  132. HRESULT GetResource(
  133. [in] REFIID iid,
  134. [out] void **parent_resource,
  135. [out] UINT *subresource_idx
  136. );
  137. }
  138. [
  139. object,
  140. uuid(30961379-4609-4a41-998e-54fe567ee0c1),
  141. local,
  142. pointer_default(unique)
  143. ]
  144. interface IDXGIResource1 : IDXGIResource
  145. {
  146. HRESULT CreateSubresourceSurface(
  147. UINT index,
  148. [out] IDXGISurface2 **surface
  149. );
  150. HRESULT CreateSharedHandle(
  151. [in] const SECURITY_ATTRIBUTES *attributes,
  152. [in] DWORD access,
  153. [in] const WCHAR *name,
  154. [out] HANDLE *handle
  155. );
  156. }
  157. [
  158. object,
  159. uuid(ea9dbf1a-c88e-4486-854a-98aa0138f30c),
  160. local,
  161. pointer_default(unique)
  162. ]
  163. interface IDXGIDisplayControl : IUnknown
  164. {
  165. BOOL IsStereoEnabled();
  166. void SetStereoEnabled(BOOL enabled);
  167. }
  168. [
  169. object,
  170. uuid(05008617-fbfd-4051-a790-144884b4f6a9),
  171. local,
  172. pointer_default(unique)
  173. ]
  174. interface IDXGIDevice2 : IDXGIDevice1
  175. {
  176. HRESULT OfferResources(
  177. [in] UINT NumResources,
  178. [in, size_is(NumResources)] IDXGIResource *const *ppResources,
  179. [in] DXGI_OFFER_RESOURCE_PRIORITY Priority);
  180. HRESULT ReclaimResources(
  181. [in] UINT NumResources,
  182. [in, size_is(NumResources)] IDXGIResource *const *ppResources,
  183. [out, size_is(NumResources)] BOOL *pDiscarded);
  184. HRESULT EnqueueSetEvent(
  185. [in] HANDLE hEvent);
  186. }
  187. typedef enum DXGI_SCALING {
  188. DXGI_SCALING_STRETCH = 0,
  189. DXGI_SCALING_NONE = 1,
  190. DXGI_SCALING_ASPECT_RATIO_STRETCH = 2,
  191. } DXGI_SCALING;
  192. typedef struct DXGI_SWAP_CHAIN_DESC1 {
  193. UINT Width;
  194. UINT Height;
  195. DXGI_FORMAT Format;
  196. BOOL Stereo;
  197. DXGI_SAMPLE_DESC SampleDesc;
  198. DXGI_USAGE BufferUsage;
  199. UINT BufferCount;
  200. DXGI_SCALING Scaling;
  201. DXGI_SWAP_EFFECT SwapEffect;
  202. DXGI_ALPHA_MODE AlphaMode;
  203. UINT Flags;
  204. } DXGI_SWAP_CHAIN_DESC1;
  205. typedef struct DXGI_SWAP_CHAIN_FULLSCREEN_DESC {
  206. DXGI_RATIONAL RefreshRate;
  207. DXGI_MODE_SCANLINE_ORDER ScanlineOrdering;
  208. DXGI_MODE_SCALING Scaling;
  209. BOOL Windowed;
  210. } DXGI_SWAP_CHAIN_FULLSCREEN_DESC;
  211. typedef struct DXGI_PRESENT_PARAMETERS {
  212. UINT DirtyRectsCount;
  213. RECT *pDirtyRects;
  214. RECT *pScrollRect;
  215. POINT *pScrollOffset;
  216. } DXGI_PRESENT_PARAMETERS;
  217. [
  218. object,
  219. uuid(790a45f7-0d42-4876-983a-0a55cfe6f4aa),
  220. local,
  221. pointer_default(unique)
  222. ]
  223. interface IDXGISwapChain1 : IDXGISwapChain
  224. {
  225. HRESULT GetDesc1(
  226. [out] DXGI_SWAP_CHAIN_DESC1 *pDesc);
  227. HRESULT GetFullscreenDesc(
  228. [out] DXGI_SWAP_CHAIN_FULLSCREEN_DESC *pDesc);
  229. HRESULT GetHwnd(
  230. [out] HWND *pHwnd);
  231. HRESULT GetCoreWindow(
  232. [in] REFIID refiid,
  233. [out] void **ppUnk);
  234. HRESULT Present1(
  235. [in] UINT SyncInterval,
  236. [in] UINT PresentFlags,
  237. [in] const DXGI_PRESENT_PARAMETERS *pPresentParameters);
  238. BOOL IsTemporaryMonoSupported();
  239. HRESULT GetRestrictToOutput(
  240. [out] IDXGIOutput **ppRestrictToOutput);
  241. HRESULT SetBackgroundColor(
  242. [in] const DXGI_RGBA *pColor);
  243. HRESULT GetBackgroundColor(
  244. [out] DXGI_RGBA *pColor);
  245. HRESULT SetRotation(
  246. [in] DXGI_MODE_ROTATION Rotation);
  247. HRESULT GetRotation(
  248. [out] DXGI_MODE_ROTATION *pRotation);
  249. }
  250. [
  251. object,
  252. uuid(50c83a1c-e072-4c48-87b0-3630fa36a6d0),
  253. local,
  254. pointer_default(unique)
  255. ]
  256. interface IDXGIFactory2 : IDXGIFactory1
  257. {
  258. BOOL IsWindowedStereoEnabled();
  259. HRESULT CreateSwapChainForHwnd(
  260. [in] IUnknown *pDevice,
  261. [in] HWND hWnd,
  262. [in] const DXGI_SWAP_CHAIN_DESC1 *pDesc,
  263. [in] const DXGI_SWAP_CHAIN_FULLSCREEN_DESC *pFullscreenDesc,
  264. [in] IDXGIOutput *pRestrictToOutput,
  265. [out] IDXGISwapChain1 **ppSwapChain);
  266. HRESULT CreateSwapChainForCoreWindow(
  267. [in] IUnknown *pDevice,
  268. [in] IUnknown *pWindow,
  269. [in] const DXGI_SWAP_CHAIN_DESC1 *pDesc,
  270. [in] IDXGIOutput *pRestrictToOutput,
  271. [out] IDXGISwapChain1 **ppSwapChain);
  272. HRESULT GetSharedResourceAdapterLuid(
  273. [in] HANDLE hResource,
  274. [out] LUID *pLuid);
  275. HRESULT RegisterStereoStatusWindow(
  276. [in] HWND WindowHandle,
  277. [in] UINT wMsg,
  278. [out] DWORD *pdwCookie);
  279. HRESULT RegisterStereoStatusEvent(
  280. [in] HANDLE hEvent,
  281. [out] DWORD *pdwCookie);
  282. void UnregisterStereoStatus(
  283. [in] DWORD dwCookie);
  284. HRESULT RegisterOcclusionStatusWindow(
  285. [in] HWND WindowHandle,
  286. [in] UINT wMsg,
  287. [out] DWORD *pdwCookie);
  288. HRESULT RegisterOcclusionStatusEvent(
  289. [in] HANDLE hEvent,
  290. [out] DWORD *pdwCookie);
  291. void UnregisterOcclusionStatus(
  292. [in] DWORD dwCookie);
  293. HRESULT CreateSwapChainForComposition(
  294. [in] IUnknown *pDevice,
  295. [in] const DXGI_SWAP_CHAIN_DESC1 *pDesc,
  296. [in] IDXGIOutput *pRestrictToOutput,
  297. [out] IDXGISwapChain1 **ppSwapChain);
  298. }
  299. typedef enum DXGI_GRAPHICS_PREEMPTION_GRANULARITY {
  300. DXGI_GRAPHICS_PREEMPTION_DMA_BUFFER_BOUNDARY,
  301. DXGI_GRAPHICS_PREEMPTION_PRIMITIVE_BOUNDARY,
  302. DXGI_GRAPHICS_PREEMPTION_TRIANGLE_BOUNDARY,
  303. DXGI_GRAPHICS_PREEMPTION_PIXEL_BOUNDARY,
  304. DXGI_GRAPHICS_PREEMPTION_INSTRUCTION_BOUNDARY
  305. } DXGI_GRAPHICS_PREEMPTION_GRANULARITY;
  306. typedef enum DXGI_COMPUTE_PREEMPTION_GRANULARITY {
  307. DXGI_COMPUTE_PREEMPTION_DMA_BUFFER_BOUNDARY,
  308. DXGI_COMPUTE_PREEMPTION_DISPATCH_BOUNDARY,
  309. DXGI_COMPUTE_PREEMPTION_THREAD_GROUP_BOUNDARY,
  310. DXGI_COMPUTE_PREEMPTION_THREAD_BOUNDARY,
  311. DXGI_COMPUTE_PREEMPTION_INSTRUCTION_BOUNDARY
  312. } DXGI_COMPUTE_PREEMPTION_GRANULARITY;
  313. typedef struct DXGI_ADAPTER_DESC2 {
  314. WCHAR Description[128];
  315. UINT VendorId;
  316. UINT DeviceId;
  317. UINT SubSysId;
  318. UINT Revision;
  319. SIZE_T DedicatedVideoMemory;
  320. SIZE_T DedicatedSystemMemory;
  321. SIZE_T SharedSystemMemory;
  322. LUID AdapterLuid;
  323. UINT Flags;
  324. DXGI_GRAPHICS_PREEMPTION_GRANULARITY GraphicsPreemptionGranularity;
  325. DXGI_COMPUTE_PREEMPTION_GRANULARITY ComputePreemptionGranularity;
  326. } DXGI_ADAPTER_DESC2;
  327. [
  328. object,
  329. uuid(0aa1ae0a-fa0e-4b84-8644-e05ff8e5acb5),
  330. local,
  331. pointer_default(unique)
  332. ]
  333. interface IDXGIAdapter2 : IDXGIAdapter1
  334. {
  335. HRESULT GetDesc2([out] DXGI_ADAPTER_DESC2 *pDesc);
  336. }
  337. [
  338. object,
  339. uuid(00cddea8-939b-4b83-a340-a685226666cc),
  340. local,
  341. pointer_default(unique)
  342. ]
  343. interface IDXGIOutput1 : IDXGIOutput
  344. {
  345. HRESULT GetDisplayModeList1(
  346. [in] DXGI_FORMAT enum_format,
  347. [in] UINT flags,
  348. [in, out] UINT *num_modes,
  349. [out] DXGI_MODE_DESC1 *desc
  350. );
  351. HRESULT FindClosestMatchingMode1(
  352. [in] const DXGI_MODE_DESC1 *mode_to_match,
  353. [out] DXGI_MODE_DESC1 *closest_match,
  354. [in] IUnknown *concerned_device
  355. );
  356. HRESULT GetDisplaySurfaceData1(
  357. [in] IDXGIResource *destination
  358. );
  359. HRESULT DuplicateOutput(
  360. [in] IUnknown *device,
  361. [out] IDXGIOutputDuplication **output_duplication
  362. );
  363. }