Skip to content

Commit 8230b9f

Browse files
committed
dxgi facroty com obj wrapping
1 parent 36a69ab commit 8230b9f

File tree

7 files changed

+337
-2
lines changed

7 files changed

+337
-2
lines changed

addon/com_wrapper.cpp

Lines changed: 30 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -21,6 +21,10 @@ static void* wrap_pass_vtable[METHOD_WRAP_COUNT+1] = {
2121

2222
#define WRAPPED_METH_PREFIX(b) wrap_pass_swc_##b, __SPECIAL_IGNORANCE
2323
#include "com_wrapper_swc_methods.inc"
24+
#undef WRAPPED_METH_PREFIX
25+
26+
#define WRAPPED_METH_PREFIX(b) wrap_pass_dxgi_##b, __SPECIAL_IGNORANCE
27+
#include "com_wrapper_dxgi_methods.inc"
2428
#undef WRAPPED_METH_PREFIX
2529

2630
0
@@ -42,6 +46,10 @@ static void* wrap_pre_vtable[METHOD_WRAP_COUNT+1] = {
4246

4347
#define WRAPPED_METH_PREFIX(b) wrap_pre_swc_##b, __SPECIAL_IGNORANCE
4448
#include "com_wrapper_swc_methods.inc"
49+
#undef WRAPPED_METH_PREFIX
50+
51+
#define WRAPPED_METH_PREFIX(b) wrap_pre_dxgi_##b, __SPECIAL_IGNORANCE
52+
#include "com_wrapper_dxgi_methods.inc"
4553
#undef WRAPPED_METH_PREFIX
4654

4755
0
@@ -63,6 +71,10 @@ static void* wrap_post_vtable[METHOD_WRAP_COUNT+1] = {
6371

6472
#define WRAPPED_METH_PREFIX(b) wrap_post_swc_##b, __SPECIAL_IGNORANCE
6573
#include "com_wrapper_swc_methods.inc"
74+
#undef WRAPPED_METH_PREFIX
75+
76+
#define WRAPPED_METH_PREFIX(b) wrap_post_dxgi_##b, __SPECIAL_IGNORANCE
77+
#include "com_wrapper_dxgi_methods.inc"
6678
#undef WRAPPED_METH_PREFIX
6779

6880
0
@@ -84,6 +96,10 @@ static void* wrap_prepost_vtable[METHOD_WRAP_COUNT+1] = {
8496

8597
#define WRAPPED_METH_PREFIX(b) wrap_prepost_swc_##b, __SPECIAL_IGNORANCE
8698
#include "com_wrapper_swc_methods.inc"
99+
#undef WRAPPED_METH_PREFIX
100+
101+
#define WRAPPED_METH_PREFIX(b) wrap_post_dxgi_##b, __SPECIAL_IGNORANCE
102+
#include "com_wrapper_dxgi_methods.inc"
87103
#undef WRAPPED_METH_PREFIX
88104

89105
0
@@ -145,7 +161,12 @@ IDXGISwapChain* wrap_CreateSwapchain(IDXGISwapChain* origSwc)
145161

146162
void* wrap_CreateDXGI(void* origDXGI)
147163
{
148-
return origDXGI;
164+
wrapped_com_obj* ret = (wrapped_com_obj*)malloc(sizeof(wrapped_com_obj));
165+
166+
ret->vtable = (com_vtable*)&g_main_vtable[METH_DXGI_QueryInterface];
167+
ret->orig_dxgi = (IDXGIFactory5*)origDXGI;
168+
169+
return (void*)ret;
149170
}
150171

151172
void wrap_SwitchMethod(d3d9_vtable_method method, vtable_wrap_mode mode)
@@ -209,4 +230,12 @@ void wrap_InitEvents()
209230
#include "com_wrapper_swc_methods.inc"
210231
#undef WRAPPED_METH_PREFIX
211232

233+
#define WRAPPED_METH_PREFIX(b) \
234+
preCallEvents[METH_DXGI_##b] = gAPI->query_event(gAPI->hash_name((wchar_t*)EVENT_NAME_STR(DXGI_##b, PRE_))); \
235+
postCallEvents[METH_DXGI_##b] = gAPI->query_event(gAPI->hash_name((wchar_t*)EVENT_NAME_STR(DXGI_##b, POST_))); \
236+
g_main_vtable[METH_DXGI_##b] = wrap_pass_vtable[METH_DXGI_##b]; \
237+
__SPECIAL_IGNORANCE
238+
#include "com_wrapper_dxgi_methods.inc"
239+
#undef WRAPPED_METH_PREFIX
240+
212241
}

addon/com_wrapper.h

Lines changed: 5 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -14,7 +14,7 @@ typedef struct wrapped_com_obj {
1414
IDirect3DDevice9* orig_dev;
1515
ID3D11Device5* orig_dev11;
1616
IDXGISwapChain* orig_swc;
17-
IDXGIFactory* orig_dxgi;
17+
IDXGIFactory5* orig_dxgi;
1818
};
1919
} wrapped_com_obj;
2020
#pragma pack(pop)
@@ -73,6 +73,10 @@ typedef enum d3d9_vtable_method {
7373

7474
#define WRAPPED_METH_PREFIX(b) METH_SWC_##b, __SPECIAL_IGNORANCE
7575
#include "com_wrapper_swc_methods.inc"
76+
#undef WRAPPED_METH_PREFIX
77+
78+
#define WRAPPED_METH_PREFIX(b) METH_DXGI_##b, __SPECIAL_IGNORANCE
79+
#include "com_wrapper_dxgi_methods.inc"
7680
#undef WRAPPED_METH_PREFIX
7781

7882
METHOD_WRAP_COUNT

addon/com_wrapper_dxgi_methods.inc

Lines changed: 240 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,240 @@
1+
//IUnknown
2+
3+
#define WRAP_METH_NAME QueryInterface
4+
WRAPPED_METH_DECL(WRAP_METH_NAME)(WRAPPED_THIS_ REFIID v1, void** v2) WRAP_CALLTHRU_V2 CUSTOM_ENDLINE_DEF
5+
#undef WRAP_METH_NAME
6+
7+
#define WRAP_METH_NAME AddRef
8+
WRAPPED_METH_DECL_(ULONG, WRAP_METH_NAME)(WRAPPED_THIS) WRAP_CALLTHRU_V0 CUSTOM_ENDLINE_DEF
9+
#undef WRAP_METH_NAME
10+
11+
#define WRAP_METH_NAME Release
12+
WRAPPED_METH_DECL_(ULONG, WRAP_METH_NAME)(WRAPPED_THIS) WRAP_CALLTHRU_V0 CUSTOM_ENDLINE_DEF
13+
#undef WRAP_METH_NAME
14+
15+
// obj
16+
#define WRAP_METH_NAME SetPrivateData
17+
WRAPPED_METH_DECL(WRAP_METH_NAME)( WRAPPED_THIS_
18+
/* [annotation][in] */
19+
_In_ REFGUID v1,
20+
/* [in] */ UINT v2,
21+
/* [annotation][in] */
22+
_In_reads_bytes_(DataSize) const void *v3) WRAP_CALLTHRU_V3 CUSTOM_ENDLINE_DEF
23+
#undef WRAP_METH_NAME
24+
25+
#define WRAP_METH_NAME SetPrivateDataInterface
26+
WRAPPED_METH_DECL(WRAP_METH_NAME)( WRAPPED_THIS_
27+
/* [annotation][in] */
28+
_In_ REFGUID v1,
29+
/* [annotation][in] */
30+
_In_opt_ const IUnknown *v2) WRAP_CALLTHRU_V2 CUSTOM_ENDLINE_DEF
31+
#undef WRAP_METH_NAME
32+
33+
#define WRAP_METH_NAME GetPrivateData
34+
WRAPPED_METH_DECL(WRAP_METH_NAME)( WRAPPED_THIS_
35+
/* [annotation][in] */
36+
_In_ REFGUID v1,
37+
/* [annotation][out][in] */
38+
_Inout_ UINT *v2,
39+
/* [annotation][out] */
40+
_Out_writes_bytes_(*pDataSize) void *v3) WRAP_CALLTHRU_V3 CUSTOM_ENDLINE_DEF
41+
#undef WRAP_METH_NAME
42+
43+
#define WRAP_METH_NAME GetParent
44+
WRAPPED_METH_DECL(WRAP_METH_NAME)( WRAPPED_THIS_
45+
/* [annotation][in] */
46+
_In_ REFIID v1,
47+
/* [annotation][retval][out] */
48+
_COM_Outptr_ void **v2) WRAP_CALLTHRU_V2 CUSTOM_ENDLINE_DEF
49+
#undef WRAP_METH_NAME
50+
51+
// dxgi
52+
53+
#define WRAP_METH_NAME EnumAdapters
54+
WRAPPED_METH_DECL(WRAP_METH_NAME)( WRAPPED_THIS_
55+
/* [in] */ UINT v1,
56+
/* [annotation][out] */
57+
_COM_Outptr_ IDXGIAdapter **v2) WRAP_CALLTHRU_V2 CUSTOM_ENDLINE_DEF
58+
#undef WRAP_METH_NAME
59+
60+
#define WRAP_METH_NAME MakeWindowAssociation
61+
WRAPPED_METH_DECL(WRAP_METH_NAME)( WRAPPED_THIS_
62+
HWND v1,
63+
UINT v2) WRAP_CALLTHRU_V2 CUSTOM_ENDLINE_DEF
64+
#undef WRAP_METH_NAME
65+
66+
#define WRAP_METH_NAME GetWindowAssociation
67+
WRAPPED_METH_DECL(WRAP_METH_NAME)( WRAPPED_THIS_
68+
/* [annotation][out] */
69+
_Out_ HWND *v1) WRAP_CALLTHRU_V1 CUSTOM_ENDLINE_DEF
70+
#undef WRAP_METH_NAME
71+
72+
#define WRAP_METH_NAME CreateSwapChain
73+
WRAPPED_METH_DECL(WRAP_METH_NAME)( WRAPPED_THIS_
74+
/* [annotation][in] */
75+
_In_ IUnknown *v1,
76+
/* [annotation][in] */
77+
_In_ DXGI_SWAP_CHAIN_DESC *v2,
78+
/* [annotation][out] */
79+
_COM_Outptr_ IDXGISwapChain **v3) WRAP_CALLTHRU_V3 CUSTOM_ENDLINE_DEF
80+
#undef WRAP_METH_NAME
81+
82+
#define WRAP_METH_NAME CreateSoftwareAdapter
83+
WRAPPED_METH_DECL(WRAP_METH_NAME)( WRAPPED_THIS_
84+
/* [in] */ HMODULE v1,
85+
/* [annotation][out] */
86+
_COM_Outptr_ IDXGIAdapter **v2) WRAP_CALLTHRU_V2 CUSTOM_ENDLINE_DEF
87+
#undef WRAP_METH_NAME
88+
89+
// dxgi1
90+
91+
#define WRAP_METH_NAME EnumAdapters1
92+
WRAPPED_METH_DECL(WRAP_METH_NAME)( WRAPPED_THIS_
93+
/* [in] */ UINT v1,
94+
/* [annotation][out] */
95+
_COM_Outptr_ IDXGIAdapter1 **v2) WRAP_CALLTHRU_V2 CUSTOM_ENDLINE_DEF
96+
#undef WRAP_METH_NAME
97+
98+
#define WRAP_METH_NAME IsCurrent
99+
WRAPPED_METH_DECL_(BOOL, WRAP_METH_NAME)(WRAPPED_THIS) WRAP_CALLTHRU_V0 CUSTOM_ENDLINE_DEF
100+
#undef WRAP_METH_NAME
101+
102+
// dxgi2
103+
104+
#define WRAP_METH_NAME IsWindowedStereoEnabled
105+
WRAPPED_METH_DECL_(BOOL, WRAP_METH_NAME)(WRAPPED_THIS) WRAP_CALLTHRU_V0 CUSTOM_ENDLINE_DEF
106+
#undef WRAP_METH_NAME
107+
108+
#define WRAP_METH_NAME CreateSwapChainForHwnd
109+
WRAPPED_METH_DECL(WRAP_METH_NAME)( WRAPPED_THIS_
110+
/* [annotation][in] */
111+
_In_ IUnknown *v1,
112+
/* [annotation][in] */
113+
_In_ HWND v2,
114+
/* [annotation][in] */
115+
_In_ const DXGI_SWAP_CHAIN_DESC1 *v3,
116+
/* [annotation][in] */
117+
_In_opt_ const DXGI_SWAP_CHAIN_FULLSCREEN_DESC *v4,
118+
/* [annotation][in] */
119+
_In_opt_ IDXGIOutput *v5,
120+
/* [annotation][out] */
121+
_COM_Outptr_ IDXGISwapChain1 **v6) WRAP_CALLTHRU_V6 CUSTOM_ENDLINE_DEF
122+
#undef WRAP_METH_NAME
123+
124+
#define WRAP_METH_NAME CreateSwapChainForCoreWindow
125+
WRAPPED_METH_DECL(WRAP_METH_NAME)( WRAPPED_THIS_
126+
/* [annotation][in] */
127+
_In_ IUnknown *v1,
128+
/* [annotation][in] */
129+
_In_ IUnknown *v2,
130+
/* [annotation][in] */
131+
_In_ const DXGI_SWAP_CHAIN_DESC1 *v3,
132+
/* [annotation][in] */
133+
_In_opt_ IDXGIOutput *v4,
134+
/* [annotation][out] */
135+
_COM_Outptr_ IDXGISwapChain1 **v5) WRAP_CALLTHRU_V5 CUSTOM_ENDLINE_DEF
136+
#undef WRAP_METH_NAME
137+
138+
#define WRAP_METH_NAME GetSharedResourceAdapterLuid
139+
WRAPPED_METH_DECL(WRAP_METH_NAME)( WRAPPED_THIS_
140+
/* [annotation] */
141+
_In_ HANDLE v1,
142+
/* [annotation] */
143+
_Out_ LUID *v2) WRAP_CALLTHRU_V2 CUSTOM_ENDLINE_DEF
144+
#undef WRAP_METH_NAME
145+
146+
#define WRAP_METH_NAME RegisterStereoStatusWindow
147+
WRAPPED_METH_DECL(WRAP_METH_NAME)( WRAPPED_THIS_
148+
/* [annotation][in] */
149+
_In_ HWND v1,
150+
/* [annotation][in] */
151+
_In_ UINT v2,
152+
/* [annotation][out] */
153+
_Out_ DWORD *v3) WRAP_CALLTHRU_V3 CUSTOM_ENDLINE_DEF
154+
#undef WRAP_METH_NAME
155+
156+
#define WRAP_METH_NAME RegisterStereoStatusEvent
157+
WRAPPED_METH_DECL(WRAP_METH_NAME)( WRAPPED_THIS_
158+
/* [annotation][in] */
159+
_In_ HANDLE v1,
160+
/* [annotation][out] */
161+
_Out_ DWORD *v2) WRAP_CALLTHRU_V2 CUSTOM_ENDLINE_DEF
162+
#undef WRAP_METH_NAME
163+
164+
#define WRAP_METH_NAME UnregisterStereoStatus
165+
WRAPPED_METH_DECL_(void, WRAP_METH_NAME)( WRAPPED_THIS_
166+
/* [annotation][in] */
167+
_In_ DWORD v1) WRAP_CALLTHRU_V1_ CUSTOM_ENDLINE_DEF
168+
#undef WRAP_METH_NAME
169+
170+
#define WRAP_METH_NAME RegisterOcclusionStatusWindow
171+
WRAPPED_METH_DECL(WRAP_METH_NAME)( WRAPPED_THIS_
172+
/* [annotation][in] */
173+
_In_ HWND v1,
174+
/* [annotation][in] */
175+
_In_ UINT v2,
176+
/* [annotation][out] */
177+
_Out_ DWORD *v3) WRAP_CALLTHRU_V3 CUSTOM_ENDLINE_DEF
178+
#undef WRAP_METH_NAME
179+
180+
#define WRAP_METH_NAME RegisterOcclusionStatusEvent
181+
WRAPPED_METH_DECL(WRAP_METH_NAME)( WRAPPED_THIS_
182+
/* [annotation][in] */
183+
_In_ HANDLE v1,
184+
/* [annotation][out] */
185+
_Out_ DWORD *v2) WRAP_CALLTHRU_V2 CUSTOM_ENDLINE_DEF
186+
#undef WRAP_METH_NAME
187+
188+
#define WRAP_METH_NAME UnregisterOcclusionStatus
189+
WRAPPED_METH_DECL_(void, WRAP_METH_NAME)( WRAPPED_THIS_
190+
/* [annotation][in] */
191+
_In_ DWORD v1) WRAP_CALLTHRU_V1_ CUSTOM_ENDLINE_DEF
192+
#undef WRAP_METH_NAME
193+
194+
#define WRAP_METH_NAME CreateSwapChainForComposition
195+
WRAPPED_METH_DECL(WRAP_METH_NAME)( WRAPPED_THIS_
196+
/* [annotation][in] */
197+
_In_ IUnknown *v1,
198+
/* [annotation][in] */
199+
_In_ const DXGI_SWAP_CHAIN_DESC1 *v2,
200+
/* [annotation][in] */
201+
_In_opt_ IDXGIOutput *v3,
202+
/* [annotation][out] */
203+
_COM_Outptr_ IDXGISwapChain1 **v4) WRAP_CALLTHRU_V4 CUSTOM_ENDLINE_DEF
204+
#undef WRAP_METH_NAME
205+
206+
// dxgi3
207+
208+
#define WRAP_METH_NAME GetCreationFlags
209+
WRAPPED_METH_DECL_(UINT, WRAP_METH_NAME)(WRAPPED_THIS) WRAP_CALLTHRU_V0 CUSTOM_ENDLINE_DEF
210+
#undef WRAP_METH_NAME
211+
212+
// dxgi4
213+
214+
#define WRAP_METH_NAME EnumAdapterByLuid
215+
WRAPPED_METH_DECL(WRAP_METH_NAME)( WRAPPED_THIS_
216+
/* [annotation] */
217+
_In_ LUID v1,
218+
/* [annotation] */
219+
_In_ REFIID v2,
220+
/* [annotation] */
221+
_COM_Outptr_ void **v3) WRAP_CALLTHRU_V3 CUSTOM_ENDLINE_DEF
222+
#undef WRAP_METH_NAME
223+
224+
#define WRAP_METH_NAME EnumWarpAdapter
225+
WRAPPED_METH_DECL(WRAP_METH_NAME)( WRAPPED_THIS_
226+
/* [annotation] */
227+
_In_ REFIID v1,
228+
/* [annotation] */
229+
_COM_Outptr_ void **v2) WRAP_CALLTHRU_V2 CUSTOM_ENDLINE_DEF
230+
#undef WRAP_METH_NAME
231+
232+
// dxgi5
233+
234+
#define WRAP_METH_NAME CheckFeatureSupport
235+
WRAPPED_METH_DECL(WRAP_METH_NAME)( WRAPPED_THIS_
236+
DXGI_FEATURE v1,
237+
/* [annotation] */
238+
_Inout_updates_bytes_(FeatureSupportDataSize) void *v2,
239+
UINT v3) WRAP_CALLTHRU_V3 CUSTOM_ENDLINE_DEF
240+
#undef WRAP_METH_NAME

addon/com_wrapper_method_dcl.h

Lines changed: 16 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -68,4 +68,20 @@
6868
#include "com_wrapper_swc_methods.inc"
6969
#undef WRAPPED_METH_PREFIX
7070

71+
#define WRAPPED_METH_PREFIX(b) wrap_pass_dxgi_##b
72+
#include "com_wrapper_dxgi_methods.inc"
73+
#undef WRAPPED_METH_PREFIX
74+
75+
#define WRAPPED_METH_PREFIX(b) wrap_pre_dxgi_##b
76+
#include "com_wrapper_dxgi_methods.inc"
77+
#undef WRAPPED_METH_PREFIX
78+
79+
#define WRAPPED_METH_PREFIX(b) wrap_post_dxgi_##b
80+
#include "com_wrapper_dxgi_methods.inc"
81+
#undef WRAPPED_METH_PREFIX
82+
83+
#define WRAPPED_METH_PREFIX(b) wrap_prepost_dxgi_##b
84+
#include "com_wrapper_dxgi_methods.inc"
85+
#undef WRAPPED_METH_PREFIX
86+
7187
#undef CUSTOM_ENDLINE_DEF

0 commit comments

Comments
 (0)