]> git.cworth.org Git - apitrace/blob - wrappers/dxgistubs.cpp
Use skiplist-based FastCallSet within trace::CallSet
[apitrace] / wrappers / dxgistubs.cpp
1 /**************************************************************************
2  *
3  * Copyright 2012 VMware, Inc.
4  * All Rights Reserved.
5  *
6  * Permission is hereby granted, free of charge, to any person obtaining a copy
7  * of this software and associated documentation files (the "Software"), to deal
8  * in the Software without restriction, including without limitation the rights
9  * to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
10  * copies of the Software, and to permit persons to whom the Software is
11  * furnished to do so, subject to the following conditions:
12  *
13  * The above copyright notice and this permission notice shall be included in
14  * all copies or substantial portions of the Software.
15  *
16  * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
17  * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
18  * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
19  * AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
20  * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
21  * OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN
22  * THE SOFTWARE.
23  *
24  **************************************************************************/
25
26
27 /*
28  * Stubs for internal DXGI functions.
29  */
30
31
32 #include <assert.h>
33
34 #include "d3d10imports.hpp"
35
36 #include "os.hpp"
37
38
39 static HMODULE g_hDXGIModule = NULL;
40
41
42 static PROC
43 _getDXGIProcAddress(LPCSTR lpProcName) {
44     if (!g_hDXGIModule) {
45         char szDll[MAX_PATH] = {0};
46         if (!GetSystemDirectoryA(szDll, MAX_PATH)) {
47             return NULL;
48         }
49         strcat(szDll, "\\\\dxgi.dll");
50         g_hDXGIModule = LoadLibraryA(szDll);
51         if (!g_hDXGIModule) {
52            return NULL;
53         }
54     }
55     return GetProcAddress(g_hDXGIModule, lpProcName);
56 }
57
58
59 #define STUB(_Ret, _Name, _ArgsDecl, _Args) \
60     EXTERN_C _Ret WINAPI \
61     _Name _ArgsDecl { \
62         typedef _Ret (WINAPI *_PFN) _ArgsDecl; \
63         static _PFN _pfn = NULL; \
64         if (!_pfn) { \
65             static const char *_name = #_Name; \
66             _pfn = (_PFN)_getDXGIProcAddress(_name); \
67             if (!_pfn) { \
68                 os::log("error: unavailable function %s\n", _name); \
69                 os::abort(); \
70             } \
71         } \
72         return _pfn _Args; \
73     }
74
75
76 STUB(HRESULT, DXGID3D10CreateDevice,
77      (HMODULE hModule, IDXGIFactory *pFactory, IDXGIAdapter *pAdapter, UINT Flags, void *unknown, void *ppDevice),
78      (hModule, pFactory, pAdapter, Flags, unknown, ppDevice)
79 )
80
81 struct UNKNOWN {
82     BYTE unknown[20];
83 };
84
85 STUB(HRESULT, DXGID3D10CreateLayeredDevice,
86     (UNKNOWN Unknown),
87     (Unknown)
88 )
89
90 STUB(SIZE_T, DXGID3D10GetLayeredDeviceSize,
91     (const void *pLayers, UINT NumLayers),
92     (pLayers, NumLayers)
93 )
94
95 STUB(HRESULT, DXGID3D10RegisterLayers,
96     (const void *pLayers, UINT NumLayers),
97     (pLayers, NumLayers)
98 )
99
100 EXTERN_C HRESULT WINAPI
101 DXGIDumpJournal()
102 {
103     assert(0);
104     return E_NOTIMPL;
105 }
106
107 EXTERN_C HRESULT WINAPI
108 DXGIReportAdapterConfiguration()
109 {
110     assert(0);
111     return E_NOTIMPL;
112 }
113
114