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