blob: 6a370944f58818a1dc8e54b1c1f20ad1e6a42ec9 [file] [log] [blame]
Nicolas Capensee16f0d2015-07-16 17:40:10 -04001// SwiftShader Software Renderer
2//
3// Copyright(c) 2005-2011 TransGaming Inc.
4//
5// All rights reserved. No part of this software may be copied, distributed, transmitted,
6// transcribed, stored in a retrieval system, translated into any human or computer
7// language by any means, or disclosed to third parties without the explicit written
8// agreement of TransGaming Inc. Without such an agreement, no rights or licenses, express
9// or implied, including but not limited to any patent rights, are granted to you.
10//
11
12#include "Direct3D9.hpp"
13#include "Direct3D9Ex.hpp"
14
15#include "Debug.hpp"
16
17#include "resource.h"
18
19#include <stdio.h>
20#include <assert.h>
21
22namespace D3D9
23{
24 class Direct3DShaderValidator9
25 {
26 public:
27 Direct3DShaderValidator9();
28
29 virtual ~Direct3DShaderValidator9();
30
31 virtual int __stdcall ValidateShader(long *shader, long *shader1, long *shader2, long *shader3);
32 virtual int __stdcall ValidateShader2(long *shader);
33 virtual int __stdcall ValidateShader3(long *shader, long *shader1, long *shader2, long *shader3);
34 virtual int __stdcall ValidateShader4(long *shader, long *shader1, long *shader2, long *shader3);
35 virtual int __stdcall ValidateShader5(long *shader, long *shader1, long *shader2);
36 virtual int __stdcall ValidateShader6(long *shader, long *shader1, long *shader2, long *shader3);
37 };
38
39 Direct3DShaderValidator9::Direct3DShaderValidator9()
40 {
41 }
42
43 Direct3DShaderValidator9::~Direct3DShaderValidator9()
44 {
45 }
46
47 int __stdcall Direct3DShaderValidator9::ValidateShader(long *shader, long *shader1, long *shader2, long *shader3) // FIXME
48 {
49 TRACE("");
50
51 UNIMPLEMENTED();
52
53 return true; // FIXME
54 }
55
56 int __stdcall Direct3DShaderValidator9::ValidateShader2(long *shader) // FIXME
57 {
58 TRACE("");
59
60 UNIMPLEMENTED();
61
62 return true; // FIXME
63 }
64
65 int __stdcall Direct3DShaderValidator9::ValidateShader3(long *shader, long *shader1, long *shader2, long *shader3)
66 {
67 TRACE("");
68
69 UNIMPLEMENTED();
70
71 return true; // FIXME
72 }
73
74 int __stdcall Direct3DShaderValidator9::ValidateShader4(long *shader, long *shader1, long *shader2, long *shader3)
75 {
76 TRACE("");
77
78 UNIMPLEMENTED();
79
80 return true; // FIXME
81 }
82
83 int __stdcall Direct3DShaderValidator9::ValidateShader5(long *shader, long *shader1, long *shader2) // FIXME
84 {
85 TRACE("");
86
87 UNIMPLEMENTED();
88
89 return true; // FIXME
90 }
91
92 int __stdcall Direct3DShaderValidator9::ValidateShader6(long *shader, long *shader1, long *shader2, long *shader3) // FIXME
93 {
94 TRACE("");
95
96 UNIMPLEMENTED();
97
98 return true; // FIXME
99 }
100}
101
Nicolas Capensd9e4c612015-07-17 13:28:14 -0400102static INT_PTR CALLBACK DebuggerWaitDialogProc(HWND hwnd, UINT uMsg, WPARAM wParam, LPARAM lParam)
103{
104 RECT rect;
105
106 switch(uMsg)
107 {
108 case WM_INITDIALOG:
109 GetWindowRect(GetDesktopWindow(), &rect);
110 SetWindowPos(hwnd, HWND_TOP, rect.right / 2, rect.bottom / 2, 0, 0, SWP_NOSIZE);
111 SetTimer(hwnd, 1, 100, NULL);
112 return TRUE;
113 case WM_COMMAND:
114 if(LOWORD(wParam) == IDCANCEL)
115 {
116 EndDialog(hwnd, 0);
117 }
118 break;
119 case WM_TIMER:
120 if(IsDebuggerPresent())
121 {
122 EndDialog(hwnd, 0);
123 }
124 }
125
126 return FALSE;
127}
128
129static void WaitForDebugger(HINSTANCE instance)
130{
131 if(!IsDebuggerPresent())
132 {
133 HRSRC dialog = FindResource(instance, MAKEINTRESOURCE(IDD_DIALOG1), RT_DIALOG);
134 DLGTEMPLATE *dialogTemplate = (DLGTEMPLATE*)LoadResource(instance, dialog);
135 DialogBoxIndirect(instance, dialogTemplate, NULL, DebuggerWaitDialogProc);
136 }
137}
138
Nicolas Capensee16f0d2015-07-16 17:40:10 -0400139using namespace D3D9;
140
141extern "C"
142{
143 HINSTANCE dllInstance = 0;
144
145 int __stdcall DllMain(HINSTANCE instance, unsigned long reason, void *reserved)
146 {
147 #ifndef NDEBUG
148 if(dllInstance == 0)
149 {
150 FILE *file = fopen("debug.txt", "w"); // Clear debug log
Nicolas Capensd9e4c612015-07-17 13:28:14 -0400151 if(file) fclose(file);
Nicolas Capensee16f0d2015-07-16 17:40:10 -0400152 }
153 #endif
154
155 GTRACE("HINSTANCE instance = 0x%0.8p, unsigned long reason = %d, void *reserved = 0x%0.8p", instance, reason, reserved);
156
157 dllInstance = instance;
158
159 switch(reason)
160 {
161 case DLL_PROCESS_DETACH:
162 break;
163 case DLL_PROCESS_ATTACH:
Nicolas Capensd9e4c612015-07-17 13:28:14 -0400164 #ifndef NDEBUG
165 WaitForDebugger(instance);
166 #endif
Nicolas Capensee16f0d2015-07-16 17:40:10 -0400167 DisableThreadLibraryCalls(instance);
168 break;
169 case DLL_THREAD_ATTACH:
170 break;
171 case DLL_THREAD_DETACH:
172 break;
173 default:
174 SetLastError(ERROR_INVALID_PARAMETER);
175 return FALSE;
176 }
177
178 return TRUE;
179 }
180
181 IDirect3D9 *__stdcall Direct3DCreate9(unsigned int version)
182 {
183 GTRACE("");
184
185 // D3D_SDK_VERSION check
186 if(version != (31 | 0x80000000) && // 9.0a/b DEBUG_INFO
187 version != 31 && // 9.0a/b
188 version != (32 | 0x80000000) && // 9.0c DEBUG_INFO
189 version != 32) // 9.0c
190 {
191 return 0;
192 }
193
194 IDirect3D9 *device = new D3D9::Direct3D9(version, dllInstance);
195
196 if(device)
197 {
198 device->AddRef();
199 }
200
201 return device;
202 }
203
204 HRESULT __stdcall Direct3DCreate9Ex(unsigned int version, IDirect3D9Ex **device)
205 {
206 // D3D_SDK_VERSION check
207 if(version != (31 | 0x80000000) && // 9.0a/b DEBUG_INFO
208 version != 31 && // 9.0a/b
209 version != (32 | 0x80000000) && // 9.0c DEBUG_INFO
210 version != 32) // 9.0c
211 {
212 return NOTAVAILABLE();
213 }
214
215 *device = new D3D9::Direct3D9Ex(version, dllInstance);
216
217 if(device)
218 {
219 (*device)->AddRef();
220 }
221 else
222 {
223 return OUTOFMEMORY();
224 }
225
226 return D3D_OK;
227 }
228
229 int __stdcall CheckFullscreen()
230 {
231 GTRACE("");
232
233 UNIMPLEMENTED();
234
235 return FALSE;
236 }
237
238 int __stdcall D3DPERF_BeginEvent(D3DCOLOR color, const wchar_t *name)
239 {
240 GTRACE("");
241
242 // UNIMPLEMENTED(); // PIX unsupported
243
244 return -1;
245 }
246
247 int __stdcall D3DPERF_EndEvent()
248 {
249 GTRACE("");
250
251 // UNIMPLEMENTED(); // PIX unsupported
252
253 return -1;
254 }
255
256 unsigned long __stdcall D3DPERF_GetStatus()
257 {
258 GTRACE("");
259
260 // UNIMPLEMENTED(); // PIX unsupported
261
262 return 0;
263 }
264
265 int __stdcall D3DPERF_QueryRepeatFrame()
266 {
267 GTRACE("");
268
269 // UNIMPLEMENTED(); // PIX unsupported
270
271 return FALSE;
272 }
273
274 void __stdcall D3DPERF_SetMarker(D3DCOLOR color, const wchar_t *name)
275 {
276 GTRACE("");
277
278 // UNIMPLEMENTED(); // PIX unsupported
279 }
280
281 void __stdcall D3DPERF_SetOptions(unsigned long options)
282 {
283 GTRACE("");
284
285 // UNIMPLEMENTED(); // PIX unsupported
286 }
287
288 void __stdcall D3DPERF_SetRegion(D3DCOLOR color, const wchar_t *name)
289 {
290 GTRACE("");
291
292 // UNIMPLEMENTED(); // PIX unsupported
293 }
294
295 void __cdecl DebugSetLevel(long level)
296 {
297 GTRACE("long level = %d", level);
298
299 // UNIMPLEMENTED(); // Debug output unsupported
300 }
301
302 void __cdecl DebugSetMute(long mute)
303 {
304 GTRACE("long mute = %d", mute);
305
306 // UNIMPLEMENTED(); // Debug output unsupported
307 }
308
309 void *__stdcall Direct3DShaderValidatorCreate9()
310 {
311 GTRACE("");
312
313 // UNIMPLEMENTED();
314
315 return 0;
316
317 // return new D3D9::Direct3DShaderValidator9();
318 }
319
320 void __stdcall PSGPError()
321 {
322 GTRACE("");
323
324 UNIMPLEMENTED();
325 }
326
327 void __stdcall PSGPSampleTexture()
328 {
329 GTRACE("");
330
331 UNIMPLEMENTED();
332 }
333}