--- tarballs/dxgi1_2.idl.orig	2016-03-02 16:01:30.243405100 +0100
+++ tarballs/dxgi1_2.idl	2016-03-02 16:19:58.006959300 +0100
@@ -232,3 +232,106 @@ interface IDXGIAdapter2 : IDXGIAdapter1
 {
     HRESULT GetDesc2([out] DXGI_ADAPTER_DESC2 *pDesc);
 }
+
+typedef struct DXGI_OUTDUPL_DESC {
+    DXGI_MODE_DESC ModeDesc;
+    DXGI_MODE_ROTATION Rotation;
+    BOOL DesktopImageInSystemMemory;
+} DXGI_OUTDUPL_DESC;
+
+typedef struct DXGI_OUTDUPL_POINTER_POSITION {
+    POINT Position;
+    BOOL Visible;
+} DXGI_OUTDUPL_POINTER_POSITION;
+
+typedef struct DXGI_OUTDUPL_FRAME_INFO {
+    LARGE_INTEGER LastPresentTime;
+    LARGE_INTEGER LastMouseUpdateTime;
+    UINT AccumulatedFrames;
+    BOOL RectsCoalesced;
+    BOOL ProtectedContentMaskedOut;
+    DXGI_OUTDUPL_POINTER_POSITION PointerPosition;
+    UINT TotalMetadataBufferSize;
+    UINT PointerShapeBufferSize;
+} DXGI_OUTDUPL_FRAME_INFO;
+
+typedef struct DXGI_OUTDUPL_MOVE_RECT {
+    POINT SourcePoint;
+    RECT  DestinationRect;
+} DXGI_OUTDUPL_MOVE_RECT;
+
+typedef struct DXGI_OUTDUPL_POINTER_SHAPE_INFO {
+    UINT Type;
+    UINT Width;
+    UINT Height;
+    UINT Pitch;
+    POINT HotSpot;
+} DXGI_OUTDUPL_POINTER_SHAPE_INFO;
+[
+    object,
+    uuid(191cfac3-a341-470d-b26e-a864f428319c),
+    local,
+    pointer_default(unique)
+]
+interface IDXGIOutputDuplication :
+    IDXGIObject
+{
+    void GetDesc(
+            [out] DXGI_OUTDUPL_DESC* pDesc);
+    HRESULT AcquireNextFrame(
+            [in] UINT TimeoutInMilliseconds,
+            [out] DXGI_OUTDUPL_FRAME_INFO* pFrameInfo,
+            [out] IDXGIResource** ppDesktopResource);
+    HRESULT GetFrameDirtyRects(
+            [in] UINT DirtyRectsBufferSize,
+            [out] RECT* pDirtyRectsBuffer,
+            [out] UINT* pDirtyRectsBufferSizeRequired);
+    HRESULT GetFrameMoveRects(
+            [in] UINT MoveRectsBufferSize,
+            [out] DXGI_OUTDUPL_MOVE_RECT* pMoveRectBuffer,
+            [out] UINT* pMoveRectsBufferSizeRequired);
+    HRESULT GetFramePointerShape(
+            [in] UINT PointerShapeBufferSize,
+            [out] void* pPointerShapeBuffer,
+            [out] UINT* pPointerShapeBufferSizeRequired,
+            [out] DXGI_OUTDUPL_POINTER_SHAPE_INFO* pPointerShapeInfo);
+    HRESULT MapDesktopSurface(
+            [out] DXGI_MAPPED_RECT* pLockedRect);
+    HRESULT UnMapDesktopSurface();
+    HRESULT ReleaseFrame();
+};
+
+typedef struct DXGI_MODE_DESC1
+{
+    UINT Width;
+    UINT Height;
+    DXGI_RATIONAL RefreshRate;
+    DXGI_FORMAT Format;
+    DXGI_MODE_SCANLINE_ORDER ScanlineOrdering;
+    DXGI_MODE_SCALING Scaling;
+    BOOL Stereo;
+} DXGI_MODE_DESC1;
+
+[
+    object,
+    uuid(00cddea8-939b-4b83-a340-a685226666cc),
+    local,
+    pointer_default(unique)
+]
+interface IDXGIOutput1 : IDXGIOutput
+{
+    HRESULT GetDisplayModeList1(
+            [in] DXGI_FORMAT EnumFormat,
+            [in] UINT Flags,
+            [in, out] UINT * pNumModes,
+            [out] DXGI_MODE_DESC1 *pDesc);
+    HRESULT FindClosestMatchingMode1(
+            [in] const DXGI_MODE_DESC1 *pModeToMatch,
+            [out] DXGI_MODE_DESC1 *pClosestMatch,
+            [in] IUnknown * pConcernedDevice);
+    HRESULT GetDisplaySurfaceData1(
+            [in] IDXGIResource *pDestination);
+    HRESULT DuplicateOutput(
+            [in] IUnknown    *pDevice,
+            [out] IDXGIOutputDuplication **ppOutputDuplication);
+};
