| 1 |
/***********************************************************************\ |
|---|
| 2 |
* dxgi.d * |
|---|
| 3 |
* * |
|---|
| 4 |
* Windows API header module * |
|---|
| 5 |
* * |
|---|
| 6 |
* Placed into public domain * |
|---|
| 7 |
\***********************************************************************/ |
|---|
| 8 |
module win32.directx.dxgi; |
|---|
| 9 |
|
|---|
| 10 |
private import win32.windows; |
|---|
| 11 |
|
|---|
| 12 |
private import win32.directx.dxgitype; |
|---|
| 13 |
|
|---|
| 14 |
enum { |
|---|
| 15 |
DXGI_CPU_ACCESS_NONE = 0, |
|---|
| 16 |
DXGI_CPU_ACCESS_DYNAMIC = 1, |
|---|
| 17 |
DXGI_CPU_ACCESS_READ_WRITE = 2, |
|---|
| 18 |
DXGI_CPU_ACCESS_SCRATCH = 3, |
|---|
| 19 |
DXGI_CPU_ACCESS_FIELD = 15 |
|---|
| 20 |
} |
|---|
| 21 |
|
|---|
| 22 |
enum { |
|---|
| 23 |
DXGI_USAGE_SHADER_INPUT = 0b00_00010000, |
|---|
| 24 |
DXGI_USAGE_RENDER_TARGET_OUTPUT = 0b00_00100000, |
|---|
| 25 |
DXGI_USAGE_BACK_BUFFER = 0b00_01000000, |
|---|
| 26 |
DXGI_USAGE_SHARED = 0b00_10000000, |
|---|
| 27 |
DXGI_USAGE_READ_ONLY = 0b01_00000000, |
|---|
| 28 |
DXGI_USAGE_DISCARD_ON_PRESENT = 0b10_00000000, |
|---|
| 29 |
} |
|---|
| 30 |
alias UINT DXGI_USAGE; |
|---|
| 31 |
|
|---|
| 32 |
struct DXGI_FRAME_STATISTICS { |
|---|
| 33 |
UINT PresentCount; |
|---|
| 34 |
UINT PresentRefreshCount; |
|---|
| 35 |
UINT SyncRefreshCount; |
|---|
| 36 |
LARGE_INTEGER SyncQPCTime; |
|---|
| 37 |
LARGE_INTEGER SyncGPUTime; |
|---|
| 38 |
} |
|---|
| 39 |
|
|---|
| 40 |
struct DXGI_MAPPED_RECT { |
|---|
| 41 |
INT Pitch; |
|---|
| 42 |
BYTE* pBits; |
|---|
| 43 |
} |
|---|
| 44 |
|
|---|
| 45 |
struct DXGI_ADAPTER_DESC { |
|---|
| 46 |
WCHAR[128] Description; |
|---|
| 47 |
UINT VendorId; |
|---|
| 48 |
UINT DeviceId; |
|---|
| 49 |
UINT SubSysId; |
|---|
| 50 |
UINT Revision; |
|---|
| 51 |
SIZE_T DedicatedVideoMemory; |
|---|
| 52 |
SIZE_T DedicatedSystemMemory; |
|---|
| 53 |
SIZE_T SharedSystemMemory; |
|---|
| 54 |
LUID AdapterLuid; |
|---|
| 55 |
} |
|---|
| 56 |
|
|---|
| 57 |
struct DXGI_OUTPUT_DESC { |
|---|
| 58 |
WCHAR[32] DeviceName; |
|---|
| 59 |
RECT DesktopCoordinates; |
|---|
| 60 |
BOOL AttachedToDesktop; |
|---|
| 61 |
DXGI_MODE_ROTATION Rotation; |
|---|
| 62 |
HMONITOR Monitor; |
|---|
| 63 |
} |
|---|
| 64 |
|
|---|
| 65 |
struct DXGI_SHARED_RESOURCE { |
|---|
| 66 |
HANDLE Handle; |
|---|
| 67 |
} |
|---|
| 68 |
|
|---|
| 69 |
enum { |
|---|
| 70 |
DXGI_RESOURCE_PRIORITY_MINIMUM = 0x28000000, |
|---|
| 71 |
DXGI_RESOURCE_PRIORITY_LOW = 0x50000000, |
|---|
| 72 |
DXGI_RESOURCE_PRIORITY_NORMAL = 0x78000000, |
|---|
| 73 |
DXGI_RESOURCE_PRIORITY_HIGH = 0xa0000000, |
|---|
| 74 |
DXGI_RESOURCE_PRIORITY_MAXIMUM = 0xc8000000 |
|---|
| 75 |
} |
|---|
| 76 |
|
|---|
| 77 |
enum DXGI_RESIDENCY { |
|---|
| 78 |
DXGI_RESIDENCY_FULLY_RESIDENT = 1, |
|---|
| 79 |
DXGI_RESIDENCY_RESIDENT_IN_SHARED_MEMORY = 2, |
|---|
| 80 |
DXGI_RESIDENCY_EVICTED_TO_DISK = 3 |
|---|
| 81 |
} |
|---|
| 82 |
|
|---|
| 83 |
struct DXGI_SURFACE_DESC { |
|---|
| 84 |
UINT Width; |
|---|
| 85 |
UINT Height; |
|---|
| 86 |
DXGI_FORMAT Format; |
|---|
| 87 |
DXGI_SAMPLE_DESC SampleDesc; |
|---|
| 88 |
} |
|---|
| 89 |
|
|---|
| 90 |
enum DXGI_SWAP_EFFECT { |
|---|
| 91 |
DXGI_SWAP_EFFECT_DISCARD = 0, |
|---|
| 92 |
DXGI_SWAP_EFFECT_SEQUENTIAL = 1 |
|---|
| 93 |
} |
|---|
| 94 |
|
|---|
| 95 |
enum DXGI_SWAP_CHAIN_FLAG { |
|---|
| 96 |
DXGI_SWAP_CHAIN_FLAG_NONPREROTATED = 1, |
|---|
| 97 |
DXGI_SWAP_CHAIN_FLAG_ALLOW_MODE_SWITCH = 2 |
|---|
| 98 |
} |
|---|
| 99 |
|
|---|
| 100 |
struct DXGI_SWAP_CHAIN_DESC { |
|---|
| 101 |
DXGI_MODE_DESC BufferDesc; |
|---|
| 102 |
DXGI_SAMPLE_DESC SampleDesc; |
|---|
| 103 |
DXGI_USAGE BufferUsage; |
|---|
| 104 |
UINT BufferCount; |
|---|
| 105 |
HWND OutputWindow; |
|---|
| 106 |
BOOL Windowed; |
|---|
| 107 |
DXGI_SWAP_EFFECT SwapEffect; |
|---|
| 108 |
UINT Flags; |
|---|
| 109 |
} |
|---|
| 110 |
|
|---|
| 111 |
interface IDXGIObject : IUnknown { |
|---|
| 112 |
extern(Windows) : |
|---|
| 113 |
HRESULT SetPrivateData(REFGUID Name, UINT DataSize, void* pData); |
|---|
| 114 |
HRESULT SetPrivateDataInterface(REFGUID Name, IUnknown pUnknown); |
|---|
| 115 |
HRESULT GetPrivateData(REFGUID Name, UINT* pDataSize, void* pData); |
|---|
| 116 |
HRESULT GetParent(REFIID riid, void** ppParent); |
|---|
| 117 |
} |
|---|
| 118 |
|
|---|
| 119 |
interface IDXGIDeviceSubObject : IDXGIObject { |
|---|
| 120 |
extern(Windows) : |
|---|
| 121 |
HRESULT GetDevice(REFIID riid, void** ppDevice); |
|---|
| 122 |
} |
|---|
| 123 |
|
|---|
| 124 |
interface IDXGIResource : IDXGIDeviceSubObject { |
|---|
| 125 |
extern(Windows) : |
|---|
| 126 |
HRESULT GetSharedHandle(HANDLE* pSharedHandle); |
|---|
| 127 |
HRESULT GetUsage(DXGI_USAGE* pUsage); |
|---|
| 128 |
HRESULT SetEvictionPriority(UINT EvictionPriority); |
|---|
| 129 |
HRESULT GetEvictionPriority(UINT* pEvictionPriority); |
|---|
| 130 |
} |
|---|
| 131 |
|
|---|
| 132 |
interface IDXGISurface : IDXGIDeviceSubObject { |
|---|
| 133 |
extern(Windows) : |
|---|
| 134 |
HRESULT GetDesc(DXGI_SURFACE_DESC* pDesc); |
|---|
| 135 |
HRESULT Map(DXGI_MAPPED_RECT* pLockedRect, UINT MapFlags); |
|---|
| 136 |
HRESULT Unmap(); |
|---|
| 137 |
} |
|---|
| 138 |
|
|---|
| 139 |
interface IDXGIAdapter : IDXGIObject { |
|---|
| 140 |
extern(Windows) : |
|---|
| 141 |
HRESULT EnumOutputs(UINT Output, IDXGIOutput* ppOutput); |
|---|
| 142 |
HRESULT GetDesc(DXGI_ADAPTER_DESC* pDesc); |
|---|
| 143 |
HRESULT CheckInterfaceSupport(REFGUID InterfaceName, LARGE_INTEGER* pUMDVersion); |
|---|
| 144 |
} |
|---|
| 145 |
|
|---|
| 146 |
interface IDXGIOutput : IDXGIObject { |
|---|
| 147 |
extern(Windows) : |
|---|
| 148 |
HRESULT GetDesc(DXGI_OUTPUT_DESC* pDesc); |
|---|
| 149 |
HRESULT GetDisplayModeList(DXGI_FORMAT EnumFormat, UINT Flags, UINT* pNumModes, DXGI_MODE_DESC* pDesc); |
|---|
| 150 |
HRESULT FindClosestMatchingMode(DXGI_MODE_DESC* pModeToMatch, DXGI_MODE_DESC* pClosestMatch, IUnknown pConcernedDevice); |
|---|
| 151 |
HRESULT WaitForVBlank(); |
|---|
| 152 |
HRESULT TakeOwnership(IUnknown pDevice, BOOL Exclusive); |
|---|
| 153 |
void ReleaseOwnership(); |
|---|
| 154 |
HRESULT GetGammaControlCapabilities(DXGI_GAMMA_CONTROL_CAPABILITIES* pGammaCaps); |
|---|
| 155 |
HRESULT SetGammaControl(DXGI_GAMMA_CONTROL* pArray); |
|---|
| 156 |
HRESULT GetGammaControl(DXGI_GAMMA_CONTROL* pArray); |
|---|
| 157 |
HRESULT SetDisplaySurface(IDXGISurface pScanoutSurface); |
|---|
| 158 |
HRESULT GetDisplaySurfaceData(IDXGISurface pDestination); |
|---|
| 159 |
HRESULT GetFrameStatistics(DXGI_FRAME_STATISTICS* pStats); |
|---|
| 160 |
} |
|---|
| 161 |
|
|---|
| 162 |
const DXGI_MAX_SWAP_CHAIN_BUFFERS = 16; |
|---|
| 163 |
|
|---|
| 164 |
enum { |
|---|
| 165 |
DXGI_PRESENT_TEST = 0x00000001, |
|---|
| 166 |
DXGI_PRESENT_DO_NOT_SEQUENCE = 0x00000002, |
|---|
| 167 |
DXGI_PRESENT_RESTART = 0x00000004 |
|---|
| 168 |
} |
|---|
| 169 |
|
|---|
| 170 |
interface IDXGISwapChain : IDXGIDeviceSubObject { |
|---|
| 171 |
extern(Windows) : |
|---|
| 172 |
HRESULT Present(UINT SyncInterval, UINT Flags); |
|---|
| 173 |
HRESULT GetBuffer(UINT Buffer, REFIID riid, void** ppSurface); |
|---|
| 174 |
HRESULT SetFullscreenState(BOOL Fullscreen, IDXGIOutput pTarget); |
|---|
| 175 |
HRESULT GetFullscreenState(BOOL* pFullscreen, IDXGIOutput* ppTarget); |
|---|
| 176 |
HRESULT GetDesc(DXGI_SWAP_CHAIN_DESC* pDesc); |
|---|
| 177 |
HRESULT ResizeBuffers(UINT BufferCount, UINT Width, UINT Height, DXGI_FORMAT NewFormat, UINT SwapChainFlags); |
|---|
| 178 |
HRESULT ResizeTarget(DXGI_MODE_DESC* pNewTargetParameters); |
|---|
| 179 |
HRESULT GetContainingOutput(IDXGIOutput* ppOutput); |
|---|
| 180 |
HRESULT GetFrameStatistics(DXGI_FRAME_STATISTICS* pStats); |
|---|
| 181 |
HRESULT GetLastPresentCount(UINT* pLastPresentCount); |
|---|
| 182 |
} |
|---|
| 183 |
|
|---|
| 184 |
interface IDXGIFactory : IDXGIObject { |
|---|
| 185 |
extern(Windows) : |
|---|
| 186 |
HRESULT EnumAdapters(UINT Adapter, IDXGIAdapter* ppAdapter); |
|---|
| 187 |
HRESULT MakeWindowAssociation(HWND WindowHandle, UINT Flags); |
|---|
| 188 |
HRESULT GetWindowAssociation(HWND* pWindowHandle); |
|---|
| 189 |
HRESULT CreateSwapChain(IUnknown pDevice, DXGI_SWAP_CHAIN_DESC* pDesc, IDXGISwapChain* ppSwapChain); |
|---|
| 190 |
HRESULT CreateSoftwareAdapter(HMODULE Module, IDXGIAdapter* ppAdapter); |
|---|
| 191 |
} |
|---|
| 192 |
|
|---|
| 193 |
interface IDXGIDevice : IDXGIObject { |
|---|
| 194 |
extern(Windows) : |
|---|
| 195 |
HRESULT GetAdapter(IDXGIAdapter* pAdapter); |
|---|
| 196 |
HRESULT CreateSurface(DXGI_SURFACE_DESC* pDesc, UINT NumSurfaces, DXGI_USAGE Usage, DXGI_SHARED_RESOURCE* pSharedResource, IDXGISurface* ppSurface); |
|---|
| 197 |
HRESULT QueryResourceResidency(IUnknown* ppResources, DXGI_RESIDENCY* pResidencyStatus, UINT NumResources); |
|---|
| 198 |
HRESULT SetGPUThreadPriority(INT Priority); |
|---|
| 199 |
HRESULT GetGPUThreadPriority(INT* pPriority); |
|---|
| 200 |
} |
|---|
| 201 |
|
|---|
| 202 |
extern(C) const GUID IID_IDXGIObject = {0xaec22fb8, 0x76f3, 0x4639, [0x9b, 0xe0, 0x28, 0xeb, 0x43, 0xa6, 0x7a, 0x2e]}; |
|---|
| 203 |
extern(C) const GUID IID_IDXGIDeviceSubObject = {0x3d3e0379, 0xf9de, 0x4d58, [0xbb, 0x6c, 0x18, 0xd6, 0x29, 0x92, 0xf1, 0xa6]}; |
|---|
| 204 |
extern(C) const GUID IID_IDXGIResource = {0x035f3ab4, 0x482e, 0x4e50, [0xb4, 0x1f, 0x8a, 0x7f, 0x8b, 0xd8, 0x96, 0x0b]}; |
|---|
| 205 |
extern(C) const GUID IID_IDXGISurface = {0xcafcb56c, 0x6ac3, 0x4889, [0xbf, 0x47, 0x9e, 0x23, 0xbb, 0xd2, 0x60, 0xec]}; |
|---|
| 206 |
extern(C) const GUID IID_IDXGIAdapter = {0x2411e7e1, 0x12ac, 0x4ccf, [0xbd, 0x14, 0x97, 0x98, 0xe8, 0x53, 0x4d, 0xc0]}; |
|---|
| 207 |
extern(C) const GUID IID_IDXGIOutput = {0xae02eedb, 0xc735, 0x4690, [0x8d, 0x52, 0x5a, 0x8d, 0xc2, 0x02, 0x13, 0xaa]}; |
|---|
| 208 |
extern(C) const GUID IID_IDXGISwapChain = {0x310d36a0, 0xd2e7, 0x4c0a, [0xaa, 0x04, 0x6a, 0x9d, 0x23, 0xb8, 0x88, 0x6a]}; |
|---|
| 209 |
extern(C) const GUID IID_IDXGIFactory = {0x7b7166ec, 0x21c7, 0x44ae, [0xb2, 0x1a, 0xc9, 0xae, 0x32, 0x1a, 0xe3, 0x69]}; |
|---|
| 210 |
extern(C) const GUID IID_IDXGIDevice = {0x54ec77fa, 0x1377, 0x44e6, [0x8c, 0x32, 0x88, 0xfd, 0x5f, 0x44, 0xc8, 0x4c]}; |
|---|