Home | History | Annotate | Download | only in d3dapi
      1 /*
      2  * Copyright 2007 Andras Kovacs
      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 
     19 /*DXGI 1.1 IDL, and missing DXGI 1.0 parts added by Luca Barbieri on Sep 2010 */
     20 
     21 import "dxgitype.idl";
     22 
     23 const UINT _FACDXGI = 0x87a;
     24 
     25 cpp_quote("#define MAKE_DXGI_STATUS(x)			 MAKE_HRESULT(0, _FACDXGI, x)")
     26 cpp_quote("#define DXGI_STATUS_OCCLUDED			MAKE_DXGI_STATUS(1)")
     27 cpp_quote("#define DXGI_STATUS_CLIPPED			 MAKE_DXGI_STATUS(2)")
     28 cpp_quote("#define DXGI_STATUS_NO_REDIRECTION		 MAKE_DXGI_STATUS(4)")
     29 cpp_quote("#define DXGI_STATUS_NO_DESKTOP_ACCESS		 MAKE_DXGI_STATUS(5)")
     30 cpp_quote("#define DXGI_STATUS_GRAPHICS_VIDPN_SOURCE_IN_USE	MAKE_DXGI_STATUS(6)")
     31 cpp_quote("#define DXGI_STATUS_MODE_CHANGED			MAKE_DXGI_STATUS(7)")
     32 cpp_quote("#define DXGI_STATUS_MODE_CHANGE_IN_PROGRESS	 MAKE_DXGI_STATUS(8)")
     33 
     34 cpp_quote("#define MAKE_DXGI_HRESULT(x)			MAKE_HRESULT(1, _FACDXGI, x)")
     35 cpp_quote("#define DXGI_ERROR_INVALID_CALL			 MAKE_DXGI_HRESULT(1)")
     36 cpp_quote("#define DXGI_ERROR_NOT_FOUND			MAKE_DXGI_HRESULT(2)")
     37 cpp_quote("#define DXGI_ERROR_MORE_DATA			MAKE_DXGI_HRESULT(3)")
     38 cpp_quote("#define DXGI_ERROR_UNSUPPORTED			 MAKE_DXGI_HRESULT(4)")
     39 cpp_quote("#define DXGI_ERROR_DEVICE_REMOVED		 MAKE_DXGI_HRESULT(5)")
     40 cpp_quote("#define DXGI_ERROR_DEVICE_HUNG			 MAKE_DXGI_HRESULT(6)")
     41 cpp_quote("#define DXGI_ERROR_DEVICE_RESET			 MAKE_DXGI_HRESULT(7)")
     42 cpp_quote("#define DXGI_ERROR_WAS_STILL_DRAWING		MAKE_DXGI_HRESULT(10)")
     43 cpp_quote("#define DXGI_ERROR_FRAME_STATISTICS_DISJOINT	MAKE_DXGI_HRESULT(11)")
     44 cpp_quote("#define DXGI_ERROR_GRAPHICS_VIDPN_SOURCE_IN_USE	 MAKE_DXGI_HRESULT(12)")
     45 cpp_quote("#define DXGI_ERROR_DRIVER_INTERNAL_ERROR		MAKE_DXGI_HRESULT(32)")
     46 cpp_quote("#define DXGI_ERROR_NONEXCLUSIVE			 MAKE_DXGI_HRESULT(33)")
     47 cpp_quote("#define DXGI_ERROR_NOT_CURRENTLY_AVAILABLE	 MAKE_DXGI_HRESULT(34)")
     48 
     49 cpp_quote("#if 0")
     50 typedef HANDLE HMONITOR;
     51 typedef struct _LUID {
     52 	DWORD LowPart;
     53 	LONG HighPart;
     54 } LUID, *PLUID;
     55 cpp_quote("#endif")
     56 
     57 typedef UINT DXGI_USAGE;
     58 const DXGI_USAGE DXGI_USAGE_SHADER_INPUT		= 0x10L;
     59 const DXGI_USAGE DXGI_USAGE_RENDER_TARGET_OUTPUT	= 0x20L;
     60 const DXGI_USAGE DXGI_USAGE_BACK_BUFFER		 = 0x40L;
     61 const DXGI_USAGE DXGI_USAGE_SHARED		 = 0x80L;
     62 const DXGI_USAGE DXGI_USAGE_READ_ONLY		 = 0x100L;
     63 
     64 typedef enum DXGI_SWAP_EFFECT {
     65 	DXGI_SWAP_EFFECT_DISCARD	= 0,
     66 	DXGI_SWAP_EFFECT_SEQUENTIAL = 1,
     67 } DXGI_SWAP_EFFECT;
     68 
     69 typedef enum DXGI_RESIDENCY {
     70 	DXGI_RESIDENCY_FULLY_RESIDENT		 = 1,
     71 	DXGI_RESIDENCY_RESIDENT_IN_SHARED_MEMORY	= 2,
     72 	DXGI_RESIDENCY_EVICTED_TO_DISK		 = 3,
     73 } DXGI_RESIDENCY;
     74 
     75 typedef struct DXGI_SURFACE_DESC {
     76 	UINT Width;
     77 	UINT Height;
     78 	DXGI_FORMAT Format;
     79 	DXGI_SAMPLE_DESC SampleDesc;
     80 } DXGI_SURFACE_DESC;
     81 
     82 typedef struct DXGI_MAPPED_RECT {
     83 	INT Pitch;
     84 	BYTE *pBits;
     85 } DXGI_MAPPED_RECT;
     86 
     87 typedef struct DXGI_OUTPUT_DESC {
     88 	WCHAR DeviceName[32];
     89 	RECT DesktopCoordinates;
     90 	BOOL AttachedToDesktop;
     91 	DXGI_MODE_ROTATION Rotation;
     92 	HMONITOR Monitor;
     93 } DXGI_OUTPUT_DESC;
     94 
     95 typedef struct DXGI_FRAME_STATISTICS {
     96 	UINT PresentCount;
     97 	UINT PresentRefreshCount;
     98 	UINT SyncRefreshCount;
     99 	LARGE_INTEGER SyncQPCTime;
    100 	LARGE_INTEGER SyncGPUTime;
    101 } DXGI_FRAME_STATISTICS;
    102 
    103 typedef struct DXGI_ADAPTER_DESC {
    104 	WCHAR Description[128];
    105 	UINT VendorId;
    106 	UINT DeviceId;
    107 	UINT SubSysId;
    108 	UINT Revision;
    109 	SIZE_T DedicatedVideoMemory;
    110 	SIZE_T DedicatedSystemMemory;
    111 	SIZE_T SharedSystemMemory;
    112 	LUID AdapterLuid;
    113 } DXGI_ADAPTER_DESC;
    114 
    115 typedef struct DXGI_SWAP_CHAIN_DESC {
    116 	DXGI_MODE_DESC BufferDesc;
    117 	DXGI_SAMPLE_DESC SampleDesc;
    118 	DXGI_USAGE BufferUsage;
    119 	UINT BufferCount;
    120 	HWND OutputWindow;
    121 	BOOL Windowed;
    122 	DXGI_SWAP_EFFECT SwapEffect;
    123 	UINT Flags;
    124 } DXGI_SWAP_CHAIN_DESC;
    125 
    126 typedef struct DXGI_SHARED_RESOURCE {
    127 	HANDLE Handle;
    128 } DXGI_SHARED_RESOURCE;
    129 
    130 [
    131 	object,
    132 	local,
    133 	uuid(aec22fb8-76f3-4639-9be0-28eb43a67a2e)
    134 ]
    135 interface IDXGIObject : IUnknown
    136 {
    137 	HRESULT SetPrivateData(
    138 	[in] REFGUID a,
    139 	[in] UINT b,
    140 	[in] const void *c
    141 	);
    142 	HRESULT SetPrivateDataInterface(
    143 	[in] REFGUID a,
    144 	[in] const IUnknown *b
    145 	);
    146 	HRESULT GetPrivateData(
    147 	[in] REFGUID a,
    148 	[in, out] UINT *b,
    149 	[out] void *c
    150 	);
    151 	HRESULT GetParent(
    152 	[in] REFIID a,
    153 	[out] void **b
    154 	);
    155 }
    156 
    157 [
    158 	object,
    159 	local,
    160 	uuid(3d3e0379-f9de-4d58-bb6c-18d62992f1a6)
    161 ]
    162 interface IDXGIDeviceSubObject : IDXGIObject
    163 {
    164 	HRESULT GetDevice(
    165 	[in] REFIID a,
    166 	[out] void **b
    167 	);
    168 }
    169 
    170 [
    171 	object,
    172 	local,
    173 	uuid(cafcb56c-6ac3-4889-bf47-9e23bbd260ec)
    174 ]
    175 interface IDXGISurface : IDXGIDeviceSubObject
    176 {
    177 	HRESULT GetDesc(
    178 	[out] DXGI_SURFACE_DESC *a
    179 	);
    180 	HRESULT Map(
    181 	[out] DXGI_MAPPED_RECT *a,
    182 	[in] UINT b
    183 	);
    184 	HRESULT Unmap(
    185 	);
    186 }
    187 
    188 [
    189 	object,
    190 	local,
    191 	uuid(ae02eedb-c735-4690-8d52-5a8dc20213aa)
    192 ]
    193 interface IDXGIOutput : IDXGIObject
    194 {
    195 	HRESULT GetDesc(
    196 	[out] DXGI_OUTPUT_DESC *a
    197 	);
    198 	HRESULT GetDisplayModeList(
    199 	[in] DXGI_FORMAT a,
    200 	[in] UINT b,
    201 	[in, out] UINT *c,
    202 	[out] DXGI_MODE_DESC *d
    203 	);
    204 	HRESULT FindClosestMatchingMode(
    205 	[in] const DXGI_MODE_DESC *a,
    206 	[out] DXGI_MODE_DESC *b,
    207 	[in] IUnknown *c
    208 	);
    209 	HRESULT WaitForVBlank(
    210 	);
    211 	HRESULT TakeOwnership(
    212 	[in] IUnknown *a,
    213 	[in] BOOL b
    214 	);
    215 	void ReleaseOwnership(
    216 	);
    217 	HRESULT GetGammaControlCapabilities(
    218 	[out] DXGI_GAMMA_CONTROL_CAPABILITIES *a
    219 	);
    220 	HRESULT SetGammaControl(
    221 	[in] const DXGI_GAMMA_CONTROL *a
    222 	);
    223 	HRESULT GetGammaControl(
    224 	[out] DXGI_GAMMA_CONTROL *a
    225 	);
    226 	HRESULT SetDisplaySurface(
    227 	[in] IDXGISurface *a
    228 	);
    229 	HRESULT GetDisplaySurfaceData(
    230 	[in] IDXGISurface *a
    231 	);
    232 	HRESULT GetFrameStatistics(
    233 	[out] DXGI_FRAME_STATISTICS *a
    234 	);
    235 }
    236 
    237 [
    238 	object,
    239 	local,
    240 	uuid(2411e7e1-12ac-4ccf-bd14-9798e8534dc0)
    241 ]
    242 interface IDXGIAdapter : IDXGIObject
    243 {
    244 	HRESULT EnumOutputs(
    245 	[in] UINT a,
    246 	[in, out] IDXGIOutput **b
    247 	);
    248 	HRESULT GetDesc(
    249 	[out] DXGI_ADAPTER_DESC *a
    250 	);
    251 	HRESULT CheckInterfaceSupport(
    252 	[in] REFGUID a,
    253 	[out] LARGE_INTEGER *b
    254 	);
    255 }
    256 
    257 [
    258 	object,
    259 	local,
    260 	uuid(310d36a0-d2e7-4c0a-aa04-6a9d23b8886a)
    261 ]
    262 interface IDXGISwapChain : IDXGIDeviceSubObject
    263 {
    264 	HRESULT Present(
    265 	[in] UINT a,
    266 	[in] UINT b
    267 	);
    268 	HRESULT GetBuffer(
    269 	[in] UINT a,
    270 	[in] REFIID b,
    271 	[in, out] void **c
    272 	);
    273 	HRESULT SetFullscreenState(
    274 	[in] BOOL a,
    275 	[in] IDXGIOutput *b
    276 	);
    277 	HRESULT GetFullscreenState(
    278 	[out] BOOL *a,
    279 	[out] IDXGIOutput **b
    280 	);
    281 	HRESULT GetDesc(
    282 	[out] DXGI_SWAP_CHAIN_DESC *a
    283 	);
    284 	HRESULT ResizeBuffers(
    285 	[in] UINT a,
    286 	[in] UINT b,
    287 	[in] UINT c,
    288 	[in] DXGI_FORMAT d,
    289 	[in] UINT e
    290 	);
    291 	HRESULT ResizeTarget(
    292 	[in] const DXGI_MODE_DESC *a
    293 	);
    294 	HRESULT GetContainingOutput(
    295 	[out] IDXGIOutput **a
    296 	);
    297 	HRESULT GetFrameStatistics(
    298 	[out] DXGI_FRAME_STATISTICS *a
    299 	);
    300 	HRESULT GetLastPresentCount(
    301 	[out] UINT *a
    302 	);
    303 }
    304 
    305 [
    306 	object,
    307 	local,
    308 	uuid(7b7166ec-21c7-44ae-b21a-c9ae321ae369)
    309 ]
    310 interface IDXGIFactory : IDXGIObject
    311 {
    312 	HRESULT EnumAdapters(
    313 	[in] UINT a,
    314 	[out] IDXGIAdapter **b
    315 	);
    316 	HRESULT MakeWindowAssociation(
    317 	[in] HWND a,
    318 	[in] UINT b
    319 	);
    320 	HRESULT GetWindowAssociation(
    321 	[in] HWND *a
    322 	);
    323 	HRESULT CreateSwapChain(
    324 	[in] IUnknown *a,
    325 	[in] DXGI_SWAP_CHAIN_DESC *b,
    326 	[out] IDXGISwapChain **c
    327 	);
    328 	HRESULT CreateSoftwareAdapter(
    329 	[in] HMODULE a,
    330 	[out] IDXGIAdapter **b
    331 	);
    332 }
    333 
    334 [local] HRESULT CreateDXGIFactory(REFIID riid, void **factory);
    335 
    336 [
    337 	object,
    338 	local,
    339 	uuid(54ec77fa-1377-44e6-8c32-88fd5f44c84c)
    340 ]
    341 interface IDXGIDevice : IDXGIObject
    342 {
    343 	HRESULT GetAdapter(
    344 	[out] IDXGIAdapter **a
    345 	);
    346 	HRESULT CreateSurface(
    347 	[in] const DXGI_SURFACE_DESC *a,
    348 	[in] UINT b,
    349 	[in] DXGI_USAGE c,
    350 	[in] const DXGI_SHARED_RESOURCE *d,
    351 	[out] IDXGISurface **e
    352 	);
    353 	HRESULT QueryResourceResidency(
    354 	[in] IUnknown *const *a,
    355 	[out] DXGI_RESIDENCY *b,
    356 	[in] UINT c
    357 	);
    358 	HRESULT SetGPUThreadPriority(
    359 	[in] INT a
    360 	);
    361 	HRESULT GetGPUThreadPriority(
    362 	[out] INT *a
    363 	);
    364 }
    365 
    366 
    367 // BEGIN parts added for Gallium
    368 
    369 const unsigned int DXGI_MAP_READ = 1;
    370 const unsigned int DXGI_MAP_WRITE = 2;
    371 const unsigned int DXGI_MAP_DISCARD = 4;
    372 
    373 const unsigned int DXGI_CPU_ACCESS_NONE = 0;
    374 const unsigned int DXGI_CPU_ACCESS_DYNAMIC = 1;
    375 const unsigned int DXGI_CPU_ACCESS_READ_WRITE = 2;
    376 const unsigned int DXGI_CPU_ACCESS_SCRATCH = 3;
    377 const unsigned int DXGI_CPU_ACCESS_FIELD = 15;
    378 const unsigned int DXGI_USAGE_DISCARD_ON_PRESENT = 0x200;
    379 const unsigned int DXGI_USAGE_UNORDERED_ACCESS = 0x400;
    380 
    381 const unsigned int DXGI_PRESENT_TEST = 1;
    382 const unsigned int DXGI_PRESENT_DO_NOT_SEQUENCE = 2;
    383 const unsigned int DXGI_PRESENT_RESTART = 4;
    384 
    385 typedef enum DXGI_SWAP_CHAIN_FLAG
    386 {
    387 	DXGI_SWAP_CHAIN_FLAG_NONPREROTATED = 1,
    388 	DXGI_SWAP_CHAIN_FLAG_ALLOW_MODE_SWITCH = 2,
    389 	DXGI_SWAP_CHAIN_FLAG_GDI_COMPATIBLE = 4
    390 } DXGI_SWAP_CHAIN_FLAG;
    391 
    392 typedef struct DXGI_ADAPTER_DESC1
    393 {
    394 	WCHAR Description[128];
    395 	UINT VendorId;
    396 	UINT DeviceId;
    397 	UINT SubSysId;
    398 	UINT Revision;
    399 	SIZE_T DedicatedVideoMemory;
    400 	SIZE_T DedicatedSystemMemory;
    401 	SIZE_T SharedSystemMemory;
    402 	LUID AdapterLuid;
    403 	UINT Flags;
    404 } DXGI_ADAPTER_DESC1;
    405 
    406 [object, local, uuid("035f3ab4-482e-4e50-b41f-8a7f8bd8960b")]
    407 interface IDXGIResource : IDXGIDeviceSubObject
    408 {
    409 	HRESULT GetSharedHandle(
    410 		[out] HANDLE *a
    411 	);
    412 
    413 	HRESULT GetUsage(
    414 		[out] DXGI_USAGE *a
    415 	);
    416 
    417 	HRESULT SetEvictionPriority(
    418 		[in] UINT a
    419 	);
    420 
    421 	HRESULT GetEvictionPriority(
    422 		[out] UINT *a
    423 	);
    424 };
    425 
    426 [object, local, uuid("4AE63092-6327-4c1b-80AE-BFE12EA32B86")]
    427 interface IDXGISurface1 : IDXGISurface
    428 {
    429 	HRESULT GetDC(
    430 		[in] BOOL a,
    431 		[out] HDC *b
    432 	);
    433 
    434 	HRESULT ReleaseDC(
    435 		[in, optional] RECT *a
    436 	);
    437  };
    438 
    439 [object, local, uuid("77db970f-6276-48ba-ba28-070143b4392c")]
    440 interface IDXGIDevice1 : IDXGIDevice
    441 {
    442 	HRESULT SetMaximumFrameLatency(
    443 		[in] UINT a
    444 	);
    445 
    446 	HRESULT GetMaximumFrameLatency(
    447 		[out] UINT *a
    448 	);
    449 };
    450 
    451 [object, local, uuid("29038f61-3839-4626-91fd-086879011a05")]
    452 interface IDXGIAdapter1 : IDXGIAdapter
    453 {
    454 	HRESULT GetDesc1(
    455 		[out] DXGI_ADAPTER_DESC1 *a
    456 	);
    457 };
    458 
    459 [object, local, uuid("770aae78-f26f-4dba-a829-253c83d1b387")]
    460 interface IDXGIFactory1 : IDXGIFactory
    461 {
    462 	HRESULT EnumAdapters1(
    463 		[in] UINT a,
    464 		[out] IDXGIAdapter1 **b
    465 	);
    466 
    467 	BOOL IsCurrent();
    468 };
    469 
    470 [local] HRESULT CreateDXGIFactory1(REFIID riid, void **factory);
    471