From 1ffc0007081ead915a9b8ca9486a5c9606384d44 Mon Sep 17 00:00:00 2001
From: MArtell Malone <martellmalone@gmail.com>
Date: Mon, 2 Feb 2015 21:25:14 +0000
Subject: [PATCH] Add missing dxgi1.2 functions

---
 mingw-w64-headers/direct-x/include/dxgi1_2.idl | 310 +++++++++++++++++++++++--
 1 file changed, 290 insertions(+), 20 deletions(-)

diff --git a/mingw-w64-headers/direct-x/include/dxgi1_2.idl b/mingw-w64-headers/direct-x/include/dxgi1_2.idl
index bba4ab8..ccbf8f7 100644
--- a/mingw-w64-headers/direct-x/include/dxgi1_2.idl
+++ b/mingw-w64-headers/direct-x/include/dxgi1_2.idl
@@ -1,5 +1,6 @@
 /*
  * Copyright 2014 Jacek Caban for CodeWeavers
+ * Copyright 2015 Martell Malone
  *
  * This library is free software; you can redistribute it and/or
  * modify it under the terms of the GNU Lesser General Public
@@ -18,6 +19,115 @@
 
 import "dxgi.idl";
 
+cpp_quote("#include <winapifamily.h>")
+cpp_quote("")
+cpp_quote("#if WINAPI_FAMILY_PARTITION(WINAPI_PARTITION_DESKTOP)")
+
+[
+    object,
+    uuid(ea9dbf1a-c88e-4486-854a-98aa0138f30c),
+    local,
+    pointer_default(unique)
+]
+interface IDXGIDisplayControl : IUnknown
+{
+    BOOL IsStereoEnabled();
+
+    void SetStereoEnabled(
+        BOOL enabled
+    );
+};
+
+typedef struct DXGI_OUTDUPL_MOVE_RECT {
+    POINT SourcePoint;
+    RECT DestinationRect;
+} DXGI_OUTDUPL_MOVE_RECT;
+
+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 enum DXGI_OUTDUPL_POINTER_SHAPE_TYPE {
+    DXGI_OUTDUPL_POINTER_SHAPE_TYPE_MONOCHROME = 0x00000001,
+    DXGI_OUTDUPL_POINTER_SHAPE_TYPE_COLOR = 0x00000002,
+    DXGI_OUTDUPL_POINTER_SHAPE_TYPE_MASKED_COLOR = 0x00000004
+} DXGI_OUTDUPL_POINTER_SHAPE_TYPE;
+
+typedef struct DXGI_OUTDUPL_POINTER_SHAPE_INFO {
+    UINT Type;
+    UINT Width;
+    UINT Height;
+    UINT Pitch;
+    POINT HotSpot;
+} DXGI_OUTDUPL_POINTER_SHAPE_INFO;
+
+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;
+
+[
+    object,
+    uuid(191cfac3-a341-470d-b26e-a864f428319c),
+    local,
+    pointer_default(unique)
+]
+interface IDXGIOutputDuplication : IDXGIObject {
+    void GetDesc(
+        [out] DXGI_OUTDUPL_DESC* desc
+    );
+
+    HRESULT AcquireNextFrame(
+        [in] UINT timeout,
+        [out] DXGI_OUTDUPL_FRAME_INFO* frame_info,
+        [out] IDXGIResource** resource
+    );
+
+    HRESULT GetFrameDirtyRects(
+        [in] UINT dirty_size,
+        [out] RECT* buffer,
+        [out] UINT* buffer_size
+    );
+
+    HRESULT GetFrameMoveRects(
+        [in] UINT move_size,
+        [out] DXGI_OUTDUPL_MOVE_RECT* rect,
+        [out] UINT* rect_size
+    );
+
+    HRESULT GetFramePointerShape(
+        [in] UINT shape_size,
+        [out] void* buffer,
+        [out] UINT* buffer_size,
+        [out] DXGI_OUTDUPL_POINTER_SHAPE_INFO* shape_info
+    );
+
+    HRESULT MapDesktopSurface(
+        [out] DXGI_MAPPED_RECT* rect
+    );
+
+    HRESULT UnMapDesktopSurface();
+
+    HRESULT ReleaseFrame();
+}
+
+cpp_quote("#endif")
+cpp_quote("")
+cpp_quote("#if WINAPI_FAMILY_PARTITION(WINAPI_PARTITION_APP)")
+
 typedef enum _DXGI_OFFER_RESOURCE_PRIORITY {
     DXGI_OFFER_RESOURCE_PRIORITY_LOW = 1,
     DXGI_OFFER_RESOURCE_PRIORITY_NORMAL,
@@ -41,17 +151,20 @@ typedef enum DXGI_ALPHA_MODE {
 interface IDXGIDevice2 : IDXGIDevice1
 {
     HRESULT OfferResources(
-            [in] UINT NumResources,
-            [in, size_is(NumResources)] IDXGIResource *const *ppResources,
-            [in] DXGI_OFFER_RESOURCE_PRIORITY Priority);
+        [in] UINT num_resources,
+        [in, size_is(num_resources)] IDXGIResource *const *resources,
+        [in] DXGI_OFFER_RESOURCE_PRIORITY priority
+    );
 
     HRESULT ReclaimResources(
-            [in] UINT NumResources,
-            [in, size_is(NumResources)] IDXGIResource *const *ppResources,
-            [out, size_is(NumResources)] BOOL *pDiscarded);
+        [in] UINT num_resources,
+        [in, size_is(num_resources)] IDXGIResource *const *resources,
+        [out, size_is(num_resources)] BOOL *discarded
+    );
 
     HRESULT EnqueueSetEvent(
-            [in] HANDLE hEvent);
+        [in] HANDLE event
+    );
 }
 
 typedef enum DXGI_SCALING {
@@ -96,37 +209,194 @@ typedef struct DXGI_PRESENT_PARAMETERS {
 interface IDXGISwapChain1 : IDXGISwapChain
 {
     HRESULT GetDesc1(
-            [out] DXGI_SWAP_CHAIN_DESC1 *pDesc);
+        [out] DXGI_SWAP_CHAIN_DESC1 *desc
+    );
 
     HRESULT GetFullscreenDesc(
-            [out] DXGI_SWAP_CHAIN_FULLSCREEN_DESC *pDesc);
+        [out] DXGI_SWAP_CHAIN_FULLSCREEN_DESC *desc
+    );
 
     HRESULT GetHwnd(
-            [out] HWND *pHwnd);
+        [out] HWND *hwnd
+    );
 
     HRESULT GetCoreWindow(
-            [in] REFIID refiid,
-            [out] void **ppUnk);
+        [in] REFIID refiid,
+        [out] void **window
+    );
 
     HRESULT Present1(
-            [in] UINT SyncInterval,
-            [in] UINT PresentFlags,
-            [in] const DXGI_PRESENT_PARAMETERS *pPresentParameters);
+        [in] UINT sync_interval,
+        [in] UINT flags,
+        [in] const DXGI_PRESENT_PARAMETERS *parameters
+    );
 
     BOOL IsTemporaryMonoSupported();
 
     HRESULT GetRestrictToOutput(
-            [out] IDXGIOutput **ppRestrictToOutput);
+        [out] IDXGIOutput **output
+    );
 
     HRESULT SetBackgroundColor(
-            [in] const DXGI_RGBA *pColor);
+        [in] const DXGI_RGBA *color
+    );
 
     HRESULT GetBackgroundColor(
-            [out] DXGI_RGBA *pColor);
+        [out] DXGI_RGBA *color
+    );
 
     HRESULT SetRotation(
-            [in] DXGI_MODE_ROTATION Rotation);
+        [in] DXGI_MODE_ROTATION rotation
+    );
 
     HRESULT GetRotation(
-            [out] DXGI_MODE_ROTATION *pRotation);
+        [out] DXGI_MODE_ROTATION *rotation
+    );
+}
+
+[
+    object,
+    uuid(50c83a1c-e072-4c48-87b0-3630fa36a6d0),
+    local,
+    pointer_default(unique)
+]
+interface IDXGIFactory2 : IDXGIFactory1
+{
+    BOOL IsWindowedStereoEnabled();
+
+    HRESULT CreateSwapChainForHwnd(
+        [in] IUnknown *device,
+        [in] HWND hwnd,
+        [in] const DXGI_SWAP_CHAIN_DESC1 *desc,
+        [in] const DXGI_SWAP_CHAIN_FULLSCREEN_DESC *desc,
+        [in] IDXGIOutput *output,
+        [out] IDXGISwapChain1 **swapchain
+    );
+
+    HRESULT CreateSwapChainForCoreWindow(
+        [in] IUnknown *pDevice,
+        [in] IUnknown *pWindow,
+        [in] const DXGI_SWAP_CHAIN_DESC1 *pDesc,
+        [in] IDXGIOutput *output,
+        [out] IDXGISwapChain1 **swapchain
+    );
+
+    HRESULT GetSharedResourceAdapterLuid(
+        [in] HANDLE resource,
+        [out] LUID* luid
+    );
+
+    HRESULT RegisterStereoStatusWindow(
+        [in] HWND window,
+        [in] UINT msg,
+        [out] DWORD *cookie
+    );
+
+    HRESULT RegisterStereoStatusEvent(
+        [in] HANDLE event,
+        [out] DWORD *cookie
+    );
+
+    void UnregisterStereoStatus(
+        [in] DWORD cookie
+    );
+
+    HRESULT RegisterOcclusionStatusWindow(
+        [in] HWND window,
+        [in] UINT msg,
+        [out] DWORD *cookie
+    );
+
+    HRESULT RegisterOcclusionStatusEvent(
+        [in] HANDLE event,
+        [out] DWORD *cookie
+    );
+
+    void UnregisterOcclusionStatus(
+        [in] DWORD cookie
+    );
+
+    HRESULT CreateSwapChainForComposition(
+        [in] IUnknown *device,
+        [in] const DXGI_SWAP_CHAIN_DESC1 *desc,
+        [in] IDXGIOutput *output,
+        [out] IDXGISwapChain1 **swapchain
+    );
+}
+
+typedef enum DXGI_GRAPHICS_PREEMPTION_GRANULARITY {
+    DXGI_GRAPHICS_PREEMPTION_DMA_BUFFER_BOUNDARY = 0,
+    DXGI_GRAPHICS_PREEMPTION_PRIMITIVE_BOUNDARY = 1,
+    DXGI_GRAPHICS_PREEMPTION_TRIANGLE_BOUNDARY = 2,
+    DXGI_GRAPHICS_PREEMPTION_PIXEL_BOUNDARY = 3,
+    DXGI_GRAPHICS_PREEMPTION_INSTRUCTION_BOUNDARY = 4,
+} DXGI_GRAPHICS_PREEMPTION_GRANULARITY;
+
+typedef enum DXGI_COMPUTE_PREEMPTION_GRANULARITY {
+    DXGI_COMPUTE_PREEMPTION_DMA_BUFFER_BOUNDARY = 0,
+    DXGI_COMPUTE_PREEMPTION_DISPATCH_BOUNDARY = 1,
+    DXGI_COMPUTE_PREEMPTION_THREAD_GROUP_BOUNDARY = 2,
+    DXGI_COMPUTE_PREEMPTION_THREAD_BOUNDARY = 3,
+    DXGI_COMPUTE_PREEMPTION_INSTRUCTION_BOUNDARY = 4,
+} DXGI_COMPUTE_PREEMPTION_GRANULARITY;
+
+typedef struct DXGI_ADAPTER_DESC2 {
+    WCHAR  Description[128];
+    UINT   VendorId;
+    UINT   DeviceId;
+    UINT   SubSysId;
+    UINT   Revision;
+    SIZE_T DedicatedVideoMemory;
+    SIZE_T DedicatedSystemMemory;
+    SIZE_T SharedSystemMemory;
+    LUID   AdapterLuid;
+    UINT   Flags;
+    DXGI_GRAPHICS_PREEMPTION_GRANULARITY GraphicsPreemptionGranularity;
+    DXGI_COMPUTE_PREEMPTION_GRANULARITY  ComputePreemptionGranularity;
+} DXGI_ADAPTER_DESC2;
+
+[
+    object,
+    uuid(0aa1ae0a-fa0e-4B84-8644-e05ff8e5acb5),
+    local,
+    pointer_default(unique)
+]
+interface IDXGIAdapter2 : IDXGIAdapter1
+{
+    HRESULT GetDesc2(
+        [out] DXGI_ADAPTER_DESC2 *desc
+    );
 }
+
+[
+    object,
+    uuid(00cddea8-939b-4b83-a340-a685226666cc),
+    local,
+    pointer_default(unique)
+]
+interface IDXGIOutput1 : IDXGIOutput
+{
+    HRESULT GetDisplayModeList1(
+        [in] DXGI_FORMAT format,
+        [in] UINT flags,
+        [in, out] UINT * mode_count,
+        [out] DXGI_MODE_DESC1 *desc
+    );
+
+    HRESULT FindClosestMatchingMode1(
+        [in] const DXGI_MODE_DESC1 *mode,
+        [out] DXGI_MODE_DESC1 *closest_match,
+        [in] IUnknown * device
+    );
+
+    HRESULT GetDisplaySurfaceData1( 
+        [in] IDXGIResource *resource
+    );
+
+    HRESULT DuplicateOutput(
+        [in] IUnknown *device,
+        [out] IDXGIOutputDuplication **output
+    );
+};
+
+cpp_quote("#endif")
-- 
2.2.2

