1 module directx.dxgi; 2 3 version(Windows): 4 5 public import directx.com; 6 public import directx.dxgitype; 7 8 enum DXGI_CPU_ACCESS_NONE = ( 0 ); 9 enum DXGI_CPU_ACCESS_DYNAMIC = ( 1 ); 10 enum DXGI_CPU_ACCESS_READ_WRITE = ( 2 ); 11 enum DXGI_CPU_ACCESS_SCRATCH = ( 3 ); 12 enum DXGI_CPU_ACCESS_FIELD = 15; 13 enum DXGI_USAGE_SHADER_INPUT = ( 1L << (0 + 4) ); 14 enum DXGI_USAGE_RENDER_TARGET_OUTPUT = ( 1L << (1 + 4) ); 15 enum DXGI_USAGE_BACK_BUFFER = ( 1L << (2 + 4) ); 16 enum DXGI_USAGE_SHARED = ( 1L << (3 + 4) ); 17 enum DXGI_USAGE_READ_ONLY = ( 1L << (4 + 4) ); 18 enum DXGI_USAGE_DISCARD_ON_PRESENT = ( 1L << (5 + 4) ); 19 enum DXGI_USAGE_UNORDERED_ACCESS = ( 1L << (6 + 4) ); 20 alias UINT DXGI_USAGE; 21 22 struct DXGI_FRAME_STATISTICS 23 { 24 UINT PresentCount; 25 UINT PresentRefreshCount; 26 UINT SyncRefreshCount; 27 LARGE_INTEGER SyncQPCTime; 28 LARGE_INTEGER SyncGPUTime; 29 } 30 31 struct DXGI_MAPPED_RECT 32 { 33 INT Pitch; 34 BYTE *pBits; 35 } 36 37 struct DXGI_ADAPTER_DESC 38 { 39 WCHAR[ 128 ] Description; 40 UINT VendorId; 41 UINT DeviceId; 42 UINT SubSysId; 43 UINT Revision; 44 SIZE_T DedicatedVideoMemory; 45 SIZE_T DedicatedSystemMemory; 46 SIZE_T SharedSystemMemory; 47 LUID AdapterLuid; 48 } 49 50 alias HANDLE HMONITOR; 51 52 struct DXGI_OUTPUT_DESC 53 { 54 WCHAR[32] DeviceName; 55 RECT DesktopCoordinates; 56 BOOL AttachedToDesktop; 57 DXGI_MODE_ROTATION Rotation; 58 HMONITOR Monitor; 59 } 60 61 struct DXGI_SHARED_RESOURCE 62 { 63 HANDLE Handle; 64 } 65 66 enum DXGI_RESOURCE_PRIORITY_MINIMUM = ( 0x28000000 ); 67 enum DXGI_RESOURCE_PRIORITY_LOW = ( 0x50000000 ); 68 enum DXGI_RESOURCE_PRIORITY_NORMAL = ( 0x78000000 ); 69 enum DXGI_RESOURCE_PRIORITY_HIGH = ( 0xa0000000 ); 70 enum DXGI_RESOURCE_PRIORITY_MAXIMUM = ( 0xc8000000 ); 71 72 alias DXGI_RESIDENCY = int; 73 enum : DXGI_RESIDENCY 74 { 75 DXGI_RESIDENCY_FULLY_RESIDENT = 1, 76 DXGI_RESIDENCY_RESIDENT_IN_SHARED_MEMORY = 2, 77 DXGI_RESIDENCY_EVICTED_TO_DISK = 3 78 } 79 80 struct DXGI_SURFACE_DESC 81 { 82 UINT Width; 83 UINT Height; 84 DXGI_FORMAT Format; 85 DXGI_SAMPLE_DESC SampleDesc; 86 } 87 88 alias DXGI_SWAP_EFFECT = int; 89 enum : DXGI_SWAP_EFFECT 90 { 91 DXGI_SWAP_EFFECT_DISCARD = 0, 92 DXGI_SWAP_EFFECT_SEQUENTIAL = 1, 93 DXGI_SWAP_EFFECT_FLIP_SEQUENTIAL = 3, 94 DXGI_SWAP_EFFECT_FLIP_DISCARD = 4 95 } 96 97 alias DXGI_SWAP_CHAIN_FLAG = int; 98 enum : DXGI_SWAP_CHAIN_FLAG 99 { 100 DXGI_SWAP_CHAIN_FLAG_NONPREROTATED = 1, 101 DXGI_SWAP_CHAIN_FLAG_ALLOW_MODE_SWITCH = 2, 102 DXGI_SWAP_CHAIN_FLAG_GDI_COMPATIBLE = 4 103 } 104 105 struct DXGI_SWAP_CHAIN_DESC 106 { 107 DXGI_MODE_DESC BufferDesc; 108 DXGI_SAMPLE_DESC SampleDesc; 109 DXGI_USAGE BufferUsage; 110 UINT BufferCount; 111 HWND OutputWindow; 112 BOOL Windowed; 113 DXGI_SWAP_EFFECT SwapEffect; 114 UINT Flags; 115 } 116 117 mixin( uuid!(IDXGIObject, "aec22fb8-76f3-4639-9be0-28eb43a67a2e") ); 118 extern (C++) interface IDXGIObject : IUnknown 119 { 120 HRESULT SetPrivateData( 121 REFGUID Name, 122 UINT DataSize, 123 const void* pData); 124 125 HRESULT SetPrivateDataInterface( 126 REFGUID Name, 127 const(IUnknown) pUnknown); 128 129 HRESULT GetPrivateData( 130 REFGUID Name, 131 UINT* pDataSize, 132 void* pData); 133 134 HRESULT GetParent( 135 REFIID riid, 136 void** ppParent); 137 } 138 139 mixin( uuid!(IDXGIDeviceSubObject, "3d3e0379-f9de-4d58-bb6c-18d62992f1a6") ); 140 extern (C++) interface IDXGIDeviceSubObject : IDXGIObject 141 { 142 HRESULT GetDevice( 143 REFIID riid, 144 void** ppDevice); 145 } 146 147 mixin( uuid!(IDXGIResource, "035f3ab4-482e-4e50-b41f-8a7f8bd8960b") ); 148 extern (C++) interface IDXGIResource : IDXGIDeviceSubObject 149 { 150 HRESULT GetSharedHandle( 151 HANDLE* pSharedHandle); 152 153 HRESULT GetUsage( 154 DXGI_USAGE* pUsage); 155 156 HRESULT SetEvictionPriority( 157 UINT EvictionPriority); 158 159 HRESULT GetEvictionPriority( 160 UINT* pEvictionPriority); 161 } 162 163 mixin( uuid!(IDXGIKeyedMutex, "9d8e1289-d7b3-465f-8126-250e349af85d") ); 164 extern (C++) interface IDXGIKeyedMutex : IDXGIDeviceSubObject 165 { 166 HRESULT AcquireSync( 167 UINT64 Key, 168 DWORD dwMilliseconds); 169 170 HRESULT ReleaseSync( 171 UINT64 Key); 172 } 173 174 enum DXGI_MAP_READ = ( 1UL ); 175 enum DXGI_MAP_WRITE = ( 2UL ); 176 enum DXGI_MAP_DISCARD = ( 4UL ); 177 178 mixin( uuid!(IDXGISurface, "cafcb56c-6ac3-4889-bf47-9e23bbd260ec") ); 179 extern (C++) interface IDXGISurface : IDXGIDeviceSubObject 180 { 181 HRESULT GetDesc( 182 DXGI_SURFACE_DESC* pDesc); 183 184 HRESULT Map( 185 DXGI_MAPPED_RECT* pLockedRect, 186 UINT MapFlags); 187 188 HRESULT Unmap(); 189 } 190 191 mixin( uuid!(IDXGISurface1, "4AE63092-6327-4c1b-80AE-BFE12EA32B86") ); 192 extern (C++) interface IDXGISurface1 : IDXGISurface 193 { 194 HRESULT GetDC( 195 BOOL Discard, 196 HDC* phdc); 197 198 HRESULT ReleaseDC( 199 RECT* pDirtyRect); 200 } 201 202 mixin( uuid!(IDXGIAdapter, "2411e7e1-12ac-4ccf-bd14-9798e8534dc0") ); 203 extern (C++) interface IDXGIAdapter : IDXGIObject 204 { 205 HRESULT EnumOutputs( 206 UINT Output, 207 IDXGIOutput* ppOutput); 208 209 HRESULT GetDesc( 210 DXGI_ADAPTER_DESC* pDesc); 211 212 HRESULT CheckInterfaceSupport( 213 REFGUID InterfaceName, 214 LARGE_INTEGER* pUMDVersion); 215 } 216 217 mixin( uuid!(IDXGIOutput, "ae02eedb-c735-4690-8d52-5a8dc20213aa") ); 218 extern (C++) interface IDXGIOutput : IDXGIObject 219 { 220 HRESULT GetDesc( 221 DXGI_OUTPUT_DESC* pDesc); 222 223 HRESULT GetDisplayModeList( 224 DXGI_FORMAT EnumFormat, 225 UINT Flags, 226 UINT* pNumModes, 227 DXGI_MODE_DESC* pDesc); 228 229 HRESULT FindClosestMatchingMode( 230 const (DXGI_MODE_DESC)* pModeToMatch, 231 DXGI_MODE_DESC* pClosestMatch, 232 IUnknown pConcernedDevice); 233 234 HRESULT WaitForVBlank(); 235 236 HRESULT TakeOwnership( 237 IUnknown pDevice, 238 BOOL Exclusive); 239 240 void ReleaseOwnership(); 241 242 HRESULT GetGammaControlCapabilities( 243 DXGI_GAMMA_CONTROL_CAPABILITIES* pGammaCaps); 244 245 HRESULT SetGammaControl( 246 const(DXGI_GAMMA_CONTROL)* pArray); 247 248 HRESULT GetGammaControl( 249 DXGI_GAMMA_CONTROL* pArray); 250 251 HRESULT SetDisplaySurface( 252 IDXGISurface pScanoutSurface); 253 254 HRESULT GetDisplaySurfaceData( 255 IDXGISurface pDestination); 256 257 HRESULT GetFrameStatistics( 258 DXGI_FRAME_STATISTICS* pStats); 259 } 260 261 enum DXGI_MAX_SWAP_CHAIN_BUFFERS = ( 16 ); 262 enum DXGI_PRESENT_TEST = 0x00000001UL; 263 enum DXGI_PRESENT_DO_NOT_SEQUENCE = 0x00000002UL; 264 enum DXGI_PRESENT_RESTART = 0x00000004UL; 265 enum DXGI_PRESENT_DO_NOT_WAIT = 0x00000008UL; 266 enum DXGI_PRESENT_STEREO_PREFER_RIGHT = 0x00000010UL; 267 enum DXGI_PRESENT_STEREO_TEMPORARY_MONO = 0x00000020UL; 268 enum DXGI_PRESENT_RESTRICT_TO_OUTPUT = 0x00000040UL; 269 enum DXGI_PRESENT_USE_DURATION = 0x00000100UL; 270 271 mixin( uuid!(IDXGISwapChain, "310d36a0-d2e7-4c0a-aa04-6a9d23b8886a") ); 272 extern (C++) interface IDXGISwapChain : IDXGIDeviceSubObject 273 { 274 HRESULT Present( 275 UINT SyncInterval, 276 UINT Flags); 277 278 HRESULT GetBuffer( 279 UINT Buffer, 280 REFIID riid, 281 void **ppSurface); 282 283 HRESULT SetFullscreenState( 284 BOOL Fullscreen, 285 IDXGIOutput pTarget); 286 287 HRESULT GetFullscreenState( 288 BOOL* pFullscreen, 289 IDXGIOutput* ppTarget); 290 291 HRESULT GetDesc( 292 DXGI_SWAP_CHAIN_DESC* pDesc); 293 294 HRESULT ResizeBuffers( 295 UINT BufferCount, 296 UINT Width, 297 UINT Height, 298 DXGI_FORMAT NewFormat, 299 UINT SwapChainFlags); 300 301 HRESULT ResizeTarget( 302 const(DXGI_MODE_DESC)* pNewTargetParameters); 303 304 HRESULT GetContainingOutput( 305 IDXGIOutput* ppOutput); 306 307 HRESULT GetFrameStatistics( 308 DXGI_FRAME_STATISTICS* pStats); 309 310 HRESULT GetLastPresentCount( 311 UINT* pLastPresentCount); 312 } 313 314 enum DXGI_MWA_NO_WINDOW_CHANGES = ( 1 << 0 ); 315 enum DXGI_MWA_NO_ALT_ENTER = ( 1 << 1 ); 316 enum DXGI_MWA_NO_PRINT_SCREEN = ( 1 << 2 ); 317 enum DXGI_MWA_VALID = ( 0x7 ); 318 319 mixin( uuid!(IDXGIFactory, "7b7166ec-21c7-44ae-b21a-c9ae321ae369") ); 320 extern (C++) interface IDXGIFactory : IDXGIObject 321 { 322 HRESULT EnumAdapters( 323 UINT Adapter, 324 IDXGIAdapter* ppAdapter); 325 326 HRESULT MakeWindowAssociation( 327 HWND WindowHandle, 328 UINT Flags); 329 330 HRESULT GetWindowAssociation( 331 HWND *pWindowHandle); 332 333 HRESULT CreateSwapChain( 334 IUnknown pDevice, 335 DXGI_SWAP_CHAIN_DESC* pDesc, 336 IDXGISwapChain* ppSwapChain); 337 338 HRESULT CreateSoftwareAdapter( 339 HMODULE Module, 340 IDXGIAdapter* ppAdapter); 341 } 342 343 344 extern(Windows) nothrow 345 HRESULT CreateDXGIFactory(REFIID riid, IDXGIFactory* ppFactory); 346 347 extern(Windows) nothrow 348 HRESULT CreateDXGIFactory1(REFIID riid, void** ppFactory); 349 350 351 alias _CreateDXGIFactory = extern(Windows) nothrow HRESULT function(REFIID riid, 352 void** ppFactory); 353 354 alias _CreateDXGIFactory1 = extern(Windows) nothrow HRESULT function(REFIID riid, 355 void** ppFactory); 356 357 358 mixin( uuid!(IDXGIDevice, "54ec77fa-1377-44e6-8c32-88fd5f44c84c") ); 359 extern (C++) interface IDXGIDevice : IDXGIObject 360 { 361 HRESULT GetAdapter( 362 IDXGIAdapter* pAdapter); 363 364 HRESULT CreateSurface( 365 const(DXGI_SURFACE_DESC)* pDesc, 366 UINT NumSurfaces, 367 DXGI_USAGE Usage, 368 const(DXGI_SHARED_RESOURCE)* pSharedResource, 369 IDXGISurface* ppSurface); 370 371 HRESULT QueryResourceResidency( 372 const(IUnknown)* ppResources, 373 DXGI_RESIDENCY* pResidencyStatus, 374 UINT NumResources); 375 376 HRESULT SetGPUThreadPriority( 377 INT Priority); 378 379 HRESULT GetGPUThreadPriority( 380 INT* pPriority); 381 } 382 383 alias DXGI_ADAPTER_FLAG = int; 384 enum : DXGI_ADAPTER_FLAG 385 { 386 DXGI_ADAPTER_FLAG_NONE = 0, 387 DXGI_ADAPTER_FLAG_REMOTE = 1, 388 DXGI_ADAPTER_FLAG_SOFTWARE = 2, 389 DXGI_ADAPTER_FLAG_FORCE_DWORD = 0xffffffff 390 } 391 392 struct DXGI_ADAPTER_DESC1 393 { 394 WCHAR[128] Description; 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 } 405 406 struct DXGI_DISPLAY_COLOR_SPACE 407 { 408 FLOAT[8 ][2] PrimaryCoordinates; 409 FLOAT[16][2] WhitePoints; 410 } 411 412 mixin( uuid!(IDXGIFactory1, "770aae78-f26f-4dba-a829-253c83d1b387") ); 413 extern (C++) interface IDXGIFactory1 : IDXGIFactory 414 { 415 HRESULT EnumAdapters1( 416 UINT Adapter, 417 IDXGIAdapter1* ppAdapter); 418 419 BOOL IsCurrent(); 420 } 421 422 mixin( uuid!(IDXGIAdapter1, "29038f61-3839-4626-91fd-086879011a05") ); 423 extern (C++) interface IDXGIAdapter1 : IDXGIAdapter 424 { 425 HRESULT GetDesc1( 426 DXGI_ADAPTER_DESC1* pDesc); 427 } 428 429 mixin( uuid!(IDXGIDevice1, "77db970f-6276-48ba-ba28-070143b4392c") ); 430 extern (C++) interface IDXGIDevice1 : IDXGIDevice 431 { 432 HRESULT SetMaximumFrameLatency( 433 UINT MaxLatency); 434 435 HRESULT GetMaximumFrameLatency( 436 UINT *pMaxLatency); 437 }