1 /*
2 * Copyright 2011 Joakim Sindholt <opensource@zhasha.com>
3 *
4 * Permission is hereby granted, free of charge, to any person obtaining a
5 * copy of this software and associated documentation files (the "Software"),
6 * to deal in the Software without restriction, including without limitation
7 * on the rights to use, copy, modify, merge, publish, distribute, sub
8 * license, and/or sell copies of the Software, and to permit persons to whom
9 * the Software is furnished to do so, subject to the following conditions:
10 *
11 * The above copyright notice and this permission notice (including the next
12 * paragraph) shall be included in all copies or substantial portions of the
13 * Software.
14 *
15 * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
16 * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
17 * FITNESS FOR A PARTICULAR PURPOSE AND NON-INFRINGEMENT. IN NO EVENT SHALL
18 * THE AUTHOR(S) AND/OR THEIR SUPPLIERS BE LIABLE FOR ANY CLAIM,
19 * DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR
20 * OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE
21 * USE OR OTHER DEALINGS IN THE SOFTWARE. */
22
23 #include "swapchain9ex.h"
24 #include "device9.h"
25
26 #include "nine_helpers.h"
27
28 #define DBG_CHANNEL DBG_SWAPCHAIN
29
30 static HRESULT
NineSwapChain9Ex_ctor(struct NineSwapChain9Ex * This,struct NineUnknownParams * pParams,BOOL implicit,ID3DPresent * pPresent,D3DPRESENT_PARAMETERS * pPresentationParameters,struct d3dadapter9_context * pCTX,HWND hFocusWindow,D3DDISPLAYMODEEX * mode)31 NineSwapChain9Ex_ctor( struct NineSwapChain9Ex *This,
32 struct NineUnknownParams *pParams,
33 BOOL implicit,
34 ID3DPresent *pPresent,
35 D3DPRESENT_PARAMETERS *pPresentationParameters,
36 struct d3dadapter9_context *pCTX,
37 HWND hFocusWindow,
38 D3DDISPLAYMODEEX *mode )
39 {
40 DBG("This=%p pParams=%p implicit=%d pPresent=%p pPresentationParameters=%p "
41 "pCTX=%p hFocusWindow=%p mode=%p",
42 This, pParams, (int) implicit, pPresent, pPresentationParameters, pCTX, hFocusWindow, mode);
43
44 return NineSwapChain9_ctor(&This->base, pParams, implicit, pPresent,
45 pPresentationParameters, pCTX, hFocusWindow, mode);
46 }
47
48 static void
NineSwapChain9Ex_dtor(struct NineSwapChain9Ex * This)49 NineSwapChain9Ex_dtor( struct NineSwapChain9Ex *This )
50 {
51 NineSwapChain9_dtor(&This->base);
52 }
53
54 HRESULT NINE_WINAPI
NineSwapChain9Ex_GetLastPresentCount(struct NineSwapChain9Ex * This,UINT * pLastPresentCount)55 NineSwapChain9Ex_GetLastPresentCount( struct NineSwapChain9Ex *This,
56 UINT *pLastPresentCount )
57 {
58 STUB(D3DERR_INVALIDCALL);
59 }
60
61 HRESULT NINE_WINAPI
NineSwapChain9Ex_GetPresentStats(struct NineSwapChain9Ex * This,D3DPRESENTSTATS * pPresentationStatistics)62 NineSwapChain9Ex_GetPresentStats( struct NineSwapChain9Ex *This,
63 D3DPRESENTSTATS *pPresentationStatistics )
64 {
65 STUB(D3DERR_INVALIDCALL);
66 }
67
68 HRESULT NINE_WINAPI
NineSwapChain9Ex_GetDisplayModeEx(struct NineSwapChain9Ex * This,D3DDISPLAYMODEEX * pMode,D3DDISPLAYROTATION * pRotation)69 NineSwapChain9Ex_GetDisplayModeEx( struct NineSwapChain9Ex *This,
70 D3DDISPLAYMODEEX *pMode,
71 D3DDISPLAYROTATION *pRotation )
72 {
73 D3DDISPLAYROTATION rot;
74
75 user_assert(pMode != NULL, E_POINTER);
76 if (!pRotation) { pRotation = &rot; }
77
78 return ID3DPresent_GetDisplayMode(This->base.present, pMode, pRotation);
79 }
80
81 IDirect3DSwapChain9ExVtbl NineSwapChain9Ex_vtable = {
82 (void *)NineUnknown_QueryInterface,
83 (void *)NineUnknown_AddRef,
84 (void *)NineUnknown_Release,
85 (void *)NineSwapChain9_Present,
86 (void *)NineSwapChain9_GetFrontBufferData,
87 (void *)NineSwapChain9_GetBackBuffer,
88 (void *)NineSwapChain9_GetRasterStatus,
89 (void *)NineSwapChain9_GetDisplayMode,
90 (void *)NineUnknown_GetDevice, /* actually part of NineSwapChain9 iface */
91 (void *)NineSwapChain9_GetPresentParameters,
92 (void *)NineSwapChain9Ex_GetLastPresentCount,
93 (void *)NineSwapChain9Ex_GetPresentStats,
94 (void *)NineSwapChain9Ex_GetDisplayModeEx
95 };
96
97 static const GUID *NineSwapChain9Ex_IIDs[] = {
98 &IID_IDirect3DSwapChain9Ex,
99 &IID_IDirect3DSwapChain9,
100 &IID_IUnknown,
101 NULL
102 };
103
104 HRESULT
NineSwapChain9Ex_new(struct NineDevice9 * pDevice,BOOL implicit,ID3DPresent * pPresent,D3DPRESENT_PARAMETERS * pPresentationParameters,struct d3dadapter9_context * pCTX,HWND hFocusWindow,D3DDISPLAYMODEEX * mode,struct NineSwapChain9Ex ** ppOut)105 NineSwapChain9Ex_new( struct NineDevice9 *pDevice,
106 BOOL implicit,
107 ID3DPresent *pPresent,
108 D3DPRESENT_PARAMETERS *pPresentationParameters,
109 struct d3dadapter9_context *pCTX,
110 HWND hFocusWindow,
111 D3DDISPLAYMODEEX *mode,
112 struct NineSwapChain9Ex **ppOut )
113 {
114 NINE_DEVICE_CHILD_NEW(SwapChain9Ex, ppOut, pDevice, /* args */
115 implicit, pPresent, pPresentationParameters,
116 pCTX, hFocusWindow, mode);
117 }
118