Home | History | Annotate | Download | only in include
      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 import "oaidl.idl";
     20 import "ocidl.idl";
     21 import "dxgitype.h";
     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 const UINT DXGI_ENUM_MODES_INTERLACED               = 1;
     65 const UINT DXGI_ENUM_MODES_SCALING                  = 2;
     66 
     67 typedef enum DXGI_SWAP_EFFECT {
     68     DXGI_SWAP_EFFECT_DISCARD    = 0,
     69     DXGI_SWAP_EFFECT_SEQUENTIAL = 1,
     70 } DXGI_SWAP_EFFECT;
     71 
     72 typedef enum DXGI_RESIDENCY {
     73     DXGI_RESIDENCY_FULLY_RESIDENT               = 1,
     74     DXGI_RESIDENCY_RESIDENT_IN_SHARED_MEMORY    = 2,
     75     DXGI_RESIDENCY_EVICTED_TO_DISK              = 3,
     76 } DXGI_RESIDENCY;
     77 
     78 typedef struct DXGI_SURFACE_DESC {
     79     UINT Width;
     80     UINT Height;
     81     DXGI_FORMAT Format;
     82     DXGI_SAMPLE_DESC SampleDesc;
     83 } DXGI_SURFACE_DESC;
     84 
     85 typedef struct DXGI_MAPPED_RECT {
     86     INT Pitch;
     87     BYTE *pBits;
     88 } DXGI_MAPPED_RECT;
     89 
     90 typedef struct DXGI_OUTPUT_DESC {
     91     WCHAR DeviceName[32];
     92     RECT DesktopCoordinates;
     93     BOOL AttachedToDesktop;
     94     DXGI_MODE_ROTATION Rotation;
     95     HMONITOR Monitor;
     96 } DXGI_OUTPUT_DESC;
     97 
     98 typedef struct DXGI_FRAME_STATISTICS {
     99     UINT PresentCount;
    100     UINT PresentRefreshCount;
    101     UINT SyncRefreshCount;
    102     LARGE_INTEGER SyncQPCTime;
    103     LARGE_INTEGER SyncGPUTime;
    104 } DXGI_FRAME_STATISTICS;
    105 
    106 typedef struct DXGI_ADAPTER_DESC {
    107     WCHAR Description[128];
    108     UINT VendorId;
    109     UINT DeviceId;
    110     UINT SubSysId;
    111     UINT Revision;
    112     SIZE_T DedicatedVideoMemory;
    113     SIZE_T DedicatedSystemMemory;
    114     SIZE_T SharedSystemMemory;
    115     LUID AdapterLuid;
    116 } DXGI_ADAPTER_DESC;
    117 
    118 typedef enum DXGI_SWAP_CHAIN_FLAG {
    119     DXGI_SWAP_CHAIN_FLAG_NONPREROTATED      = 1,
    120     DXGI_SWAP_CHAIN_FLAG_ALLOW_MODE_SWITCH  = 2,
    121     DXGI_SWAP_CHAIN_FLAG_GDI_COMPATIBLE     = 4
    122 } DXGI_SWAP_CHAIN_FLAG;
    123 
    124 typedef struct DXGI_SWAP_CHAIN_DESC {
    125     DXGI_MODE_DESC BufferDesc;
    126     DXGI_SAMPLE_DESC SampleDesc;
    127     DXGI_USAGE BufferUsage;
    128     UINT BufferCount;
    129     HWND OutputWindow;
    130     BOOL Windowed;
    131     DXGI_SWAP_EFFECT SwapEffect;
    132     UINT Flags;
    133 } DXGI_SWAP_CHAIN_DESC;
    134 
    135 typedef struct DXGI_SHARED_RESOURCE {
    136     HANDLE Handle;
    137 } DXGI_SHARED_RESOURCE;
    138 
    139 [
    140     object,
    141     local,
    142     uuid(aec22fb8-76f3-4639-9be0-28eb43a67a2e)
    143 ]
    144 interface IDXGIObject : IUnknown
    145 {
    146     HRESULT SetPrivateData(
    147         [in] REFGUID guid,
    148         [in] UINT data_size,
    149         [in] const void *data
    150     );
    151     HRESULT SetPrivateDataInterface(
    152         [in] REFGUID guid,
    153         [in] const IUnknown *object
    154     );
    155     HRESULT GetPrivateData(
    156         [in] REFGUID guid,
    157         [in, out] UINT *data_size,
    158         [out] void *data
    159     );
    160     HRESULT GetParent(
    161         [in] REFIID riid,
    162         [out] void **parent
    163     );
    164 }
    165 
    166 [
    167     object,
    168     local,
    169     uuid(3d3e0379-f9de-4d58-bb6c-18d62992f1a6)
    170 ]
    171 interface IDXGIDeviceSubObject : IDXGIObject
    172 {
    173     HRESULT GetDevice(
    174         [in] REFIID riid,
    175         [out] void **device
    176     );
    177 }
    178 
    179 [
    180     object,
    181     uuid(035f3ab4-482e-4e50-b41f-8a7f8bd8960b),
    182     local,
    183     pointer_default(unique)
    184 ]
    185 interface IDXGIResource : IDXGIDeviceSubObject
    186 {
    187     HRESULT GetSharedHandle([out] HANDLE *pSharedHandle);
    188     HRESULT GetUsage([out] DXGI_USAGE *pUsage);
    189     HRESULT SetEvictionPriority([in] UINT EvictionPriority);
    190     HRESULT GetEvictionPriority([out, retval] UINT *pEvictionPriority);
    191 }
    192 
    193 [
    194     object,
    195     uuid(9d8e1289-d7b3-465f-8126-250e349af85d),
    196     local,
    197     pointer_default(unique)
    198 ]
    199 interface IDXGIKeyedMutex : IDXGIDeviceSubObject
    200 {
    201     HRESULT AcquireSync([in] UINT64 Key, [in] DWORD dwMilliseconds);
    202     HRESULT ReleaseSync([in] UINT64 Key);
    203 }
    204 
    205 [
    206     object,
    207     local,
    208     uuid(cafcb56c-6ac3-4889-bf47-9e23bbd260ec)
    209 ]
    210 interface IDXGISurface : IDXGIDeviceSubObject
    211 {
    212     HRESULT GetDesc(
    213         [out] DXGI_SURFACE_DESC *desc
    214     );
    215     HRESULT Map(
    216         [out] DXGI_MAPPED_RECT *mapped_rect,
    217         [in] UINT flags
    218     );
    219     HRESULT Unmap(
    220     );
    221 }
    222 
    223 [
    224     object,
    225     local,
    226     uuid(ae02eedb-c735-4690-8d52-5a8dc20213aa)
    227 ]
    228 interface IDXGIOutput : IDXGIObject
    229 {
    230     HRESULT GetDesc(
    231         [out] DXGI_OUTPUT_DESC *desc
    232     );
    233     HRESULT GetDisplayModeList(
    234         [in] DXGI_FORMAT format,
    235         [in] UINT flags,
    236         [in, out] UINT *mode_count,
    237         [out] DXGI_MODE_DESC *desc
    238     );
    239     HRESULT FindClosestMatchingMode(
    240         [in] const DXGI_MODE_DESC *mode,
    241         [out] DXGI_MODE_DESC *closest_match,
    242         [in] IUnknown *device
    243     );
    244     HRESULT WaitForVBlank(
    245     );
    246     HRESULT TakeOwnership(
    247         [in] IUnknown *device,
    248         [in] BOOL exclusive
    249     );
    250     void ReleaseOwnership(
    251     );
    252     HRESULT GetGammaControlCapabilities(
    253         [out] DXGI_GAMMA_CONTROL_CAPABILITIES *gamma_caps
    254     );
    255     HRESULT SetGammaControl(
    256         [in] const DXGI_GAMMA_CONTROL *gamma_control
    257     );
    258     HRESULT GetGammaControl(
    259         [out] DXGI_GAMMA_CONTROL *gamma_control
    260     );
    261     HRESULT SetDisplaySurface(
    262         [in] IDXGISurface *surface
    263     );
    264     HRESULT GetDisplaySurfaceData(
    265         [in] IDXGISurface *surface
    266     );
    267     HRESULT GetFrameStatistics(
    268         [out] DXGI_FRAME_STATISTICS *stats
    269     );
    270 }
    271 
    272 [
    273     object,
    274     local,
    275     uuid(2411e7e1-12ac-4ccf-bd14-9798e8534dc0)
    276 ]
    277 interface IDXGIAdapter : IDXGIObject
    278 {
    279     HRESULT EnumOutputs(
    280         [in] UINT output_idx,
    281         [in, out] IDXGIOutput **output
    282     );
    283     HRESULT GetDesc(
    284         [out] DXGI_ADAPTER_DESC *desc
    285     );
    286     HRESULT CheckInterfaceSupport(
    287         [in] REFGUID guid,
    288         [out] LARGE_INTEGER *umd_version
    289     );
    290 }
    291 
    292 [
    293     object,
    294     local,
    295     uuid(310d36a0-d2e7-4c0a-aa04-6a9d23b8886a)
    296 ]
    297 interface IDXGISwapChain : IDXGIDeviceSubObject
    298 {
    299     HRESULT Present(
    300         [in] UINT sync_interval,
    301         [in] UINT flags
    302     );
    303     HRESULT GetBuffer(
    304         [in] UINT buffer_idx,
    305         [in] REFIID riid,
    306         [in, out] void **surface
    307     );
    308     HRESULT SetFullscreenState(
    309         [in] BOOL fullscreen,
    310         [in] IDXGIOutput *target
    311     );
    312     HRESULT GetFullscreenState(
    313         [out] BOOL *fullscreen,
    314         [out] IDXGIOutput **target
    315     );
    316     HRESULT GetDesc(
    317         [out] DXGI_SWAP_CHAIN_DESC *desc
    318     );
    319     HRESULT ResizeBuffers(
    320         [in] UINT buffer_count,
    321         [in] UINT width,
    322         [in] UINT height,
    323         [in] DXGI_FORMAT format,
    324         [in] UINT flags
    325     );
    326     HRESULT ResizeTarget(
    327         [in] const DXGI_MODE_DESC *target_mode_desc
    328     );
    329     HRESULT GetContainingOutput(
    330         [out] IDXGIOutput **output
    331     );
    332     HRESULT GetFrameStatistics(
    333         [out] DXGI_FRAME_STATISTICS *stats
    334     );
    335     HRESULT GetLastPresentCount(
    336         [out] UINT *last_present_count
    337     );
    338 }
    339 
    340 cpp_quote("#define DXGI_MWA_NO_WINDOW_CHANGES  0x1")
    341 cpp_quote("#define DXGI_MWA_NO_ALT_ENTER       0x2")
    342 cpp_quote("#define DXGI_MWA_NO_PRINT_SCREEN    0x4")
    343 cpp_quote("#define DXGI_MWA_VALID              0x7")
    344 
    345 [
    346     object,
    347     local,
    348     uuid(7b7166ec-21c7-44ae-b21a-c9ae321ae369)
    349 ]
    350 interface IDXGIFactory : IDXGIObject
    351 {
    352     HRESULT EnumAdapters(
    353         [in] UINT adapter_idx,
    354         [out] IDXGIAdapter **adapter
    355     );
    356     HRESULT MakeWindowAssociation(
    357         [in] HWND window,
    358         [in] UINT flags
    359     );
    360     HRESULT GetWindowAssociation(
    361         [in] HWND *window
    362     );
    363     HRESULT CreateSwapChain(
    364         [in] IUnknown *device,
    365         [in] DXGI_SWAP_CHAIN_DESC *desc,
    366         [out] IDXGISwapChain **swapchain
    367     );
    368     HRESULT CreateSoftwareAdapter(
    369         [in] HMODULE swrast,
    370         [out] IDXGIAdapter **adapter
    371     );
    372 }
    373 
    374 [local] HRESULT __stdcall CreateDXGIFactory(REFIID riid, void **factory);
    375 
    376 [
    377     object,
    378     local,
    379     uuid(54ec77fa-1377-44e6-8c32-88fd5f44c84c)
    380 ]
    381 interface IDXGIDevice : IDXGIObject
    382 {
    383     HRESULT GetAdapter(
    384         [out] IDXGIAdapter **adapter
    385     );
    386     HRESULT CreateSurface(
    387         [in] const DXGI_SURFACE_DESC *desc,
    388         [in] UINT surface_count,
    389         [in] DXGI_USAGE usage,
    390         [in] const DXGI_SHARED_RESOURCE *shared_resource,
    391         [out] IDXGISurface **surface
    392     );
    393     HRESULT QueryResourceResidency(
    394         [in] IUnknown *const *resources,
    395         [out] DXGI_RESIDENCY *residency,
    396         [in] UINT resource_count
    397     );
    398     HRESULT SetGPUThreadPriority(
    399         [in] INT priority
    400     );
    401     HRESULT GetGPUThreadPriority(
    402         [out] INT *priority
    403     );
    404 }
    405 
    406 typedef enum DXGI_ADAPTER_FLAG {
    407     DXGI_ADAPTER_FLAG_NONE         = 0,
    408     DXGI_ADAPTER_FLAG_REMOTE       = 1,
    409     DXGI_ADAPTER_FLAG_FORCE_DWORD  = 0xFFFFFFFF
    410 } DXGI_ADAPTER_FLAG;
    411 
    412 typedef struct DXGI_ADAPTER_DESC1 {
    413     WCHAR  Description[128];
    414     UINT   VendorId;
    415     UINT   DeviceId;
    416     UINT   SubSysId;
    417     UINT   Revision;
    418     SIZE_T DedicatedVideoMemory;
    419     SIZE_T DedicatedSystemMemory;
    420     SIZE_T SharedSystemMemory;
    421     LUID   AdapterLuid;
    422     UINT   Flags;
    423 } DXGI_ADAPTER_DESC1;
    424 
    425 [
    426     object,
    427     uuid(29038f61-3839-4626-91fd-086879011a05),
    428     local,
    429     pointer_default(unique)
    430 ]
    431 interface IDXGIAdapter1 : IDXGIAdapter
    432 {
    433     HRESULT GetDesc1([out] DXGI_ADAPTER_DESC1 *pDesc);
    434 }
    435 
    436 [
    437     object,
    438     uuid(770aae78-f26f-4dba-a829-253c83d1b387),
    439     local,
    440     pointer_default(unique)
    441  ]
    442 interface IDXGIFactory1 : IDXGIFactory
    443 {
    444     HRESULT EnumAdapters1([in] UINT Adapter, [out] IDXGIAdapter1 **ppAdapter);
    445     BOOL IsCurrent();
    446 }
    447