ReactOS  0.4.14-dev-614-gbfd8a84
wined3d_main.c
Go to the documentation of this file.
1 /*
2  * Direct3D wine internal interface main
3  *
4  * Copyright 2002-2003 The wine-d3d team
5  * Copyright 2002-2003 Raphael Junqueira
6  * Copyright 2004 Jason Edmeades
7  * Copyright 2007-2008 Stefan Dösinger for CodeWeavers
8  * Copyright 2009 Henri Verbeet for CodeWeavers
9  *
10  * This library is free software; you can redistribute it and/or
11  * modify it under the terms of the GNU Lesser General Public
12  * License as published by the Free Software Foundation; either
13  * version 2.1 of the License, or (at your option) any later version.
14  *
15  * This library is distributed in the hope that it will be useful,
16  * but WITHOUT ANY WARRANTY; without even the implied warranty of
17  * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
18  * Lesser General Public License for more details.
19  *
20  * You should have received a copy of the GNU Lesser General Public
21  * License along with this library; if not, write to the Free Software
22  * Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301, USA
23  */
24 
25 #include "config.h"
26 #include "wine/port.h"
27 
28 #include "initguid.h"
29 #include "wined3d_private.h"
30 
33 
35 {
40 };
41 
43 {
45  unsigned int count;
47 };
48 
50 
53 {
54  0, 0, &wined3d_cs,
57  0, 0, {(DWORD_PTR)(__FILE__ ": wined3d_cs")}
58 };
59 static CRITICAL_SECTION wined3d_cs = {&wined3d_cs_debug, -1, 0, 0, 0, 0};
60 
63 {
64  0, 0, &wined3d_wndproc_cs,
67  0, 0, {(DWORD_PTR)(__FILE__ ": wined3d_wndproc_cs")}
68 };
70 
71 /* When updating default value here, make sure to update winecfg as well,
72  * where appropriate. */
74 {
75  TRUE, /* Multithreaded CS by default. */
76  FALSE, /* explicit_gl_version */
77  MAKEDWORD_VERSION(1, 0), /* Default to legacy OpenGL */
78  TRUE, /* Use of GLSL enabled by default */
79  ORM_FBO, /* Use FBOs to do offscreen rendering */
80  PCI_VENDOR_NONE,/* PCI Vendor ID */
81  PCI_DEVICE_NONE,/* PCI Device ID */
82  0, /* The default of memory is set in init_driver_info */
83  NULL, /* No wine logo by default */
84  TRUE, /* Prefer multisample textures to multisample renderbuffers. */
85  ~0u, /* Don't force a specific sample count by default. */
86  FALSE, /* No strict draw ordering. */
87  FALSE, /* Don't range check relative addressing indices in float constants. */
88  ~0U, /* No VS shader model limit by default. */
89  ~0U, /* No HS shader model limit by default. */
90  ~0U, /* No DS shader model limit by default. */
91  ~0U, /* No GS shader model limit by default. */
92  ~0U, /* No PS shader model limit by default. */
93  ~0u, /* No CS shader model limit by default. */
94  FALSE, /* 3D support enabled by default. */
95 };
96 
98 {
99  struct wined3d *object;
100  HRESULT hr;
101 
102  if (!(object = heap_alloc_zero(FIELD_OFFSET(struct wined3d, adapters[1]))))
103  {
104  ERR("Failed to allocate wined3d object memory.\n");
105  return NULL;
106  }
107 
109  flags |= WINED3D_NO3D;
110 
111  hr = wined3d_init(object, flags);
112  if (FAILED(hr))
113  {
114  WARN("Failed to initialize wined3d object, hr %#x.\n", hr);
115  heap_free(object);
116  return NULL;
117  }
118 
119  TRACE("Created wined3d object %p.\n", object);
120 
121  return object;
122 }
123 
124 static DWORD get_config_key(HKEY defkey, HKEY appkey, const char *name, char *buffer, DWORD size)
125 {
126  if (appkey && !RegQueryValueExA(appkey, name, 0, NULL, (BYTE *)buffer, &size)) return 0;
127  if (defkey && !RegQueryValueExA(defkey, name, 0, NULL, (BYTE *)buffer, &size)) return 0;
128  return ERROR_FILE_NOT_FOUND;
129 }
130 
131 static DWORD get_config_key_dword(HKEY defkey, HKEY appkey, const char *name, DWORD *value)
132 {
133  DWORD type, data, size;
134 
135  size = sizeof(data);
136  if (appkey && !RegQueryValueExA(appkey, name, 0, &type, (BYTE *)&data, &size) && type == REG_DWORD) goto success;
137  size = sizeof(data);
138  if (defkey && !RegQueryValueExA(defkey, name, 0, &type, (BYTE *)&data, &size) && type == REG_DWORD) goto success;
139 
140  return ERROR_FILE_NOT_FOUND;
141 
142 success:
143  *value = data;
144  return 0;
145 }
146 
148 {
150  char buffer[MAX_PATH+10];
151  DWORD size = sizeof(buffer);
152  HKEY hkey = 0;
153  HKEY appkey = 0;
154  DWORD len, tmpvalue;
155  WNDCLASSA wc;
156 
159  {
160  DWORD err = GetLastError();
161  ERR("Failed to allocate context TLS index, err %#x.\n", err);
162  return FALSE;
163  }
165 
166  /* We need our own window class for a fake window which we use to retrieve GL capabilities */
167  /* We might need CS_OWNDC in the future if we notice strange things on Windows.
168  * Various articles/posts about OpenGL problems on Windows recommend this. */
169  wc.style = CS_HREDRAW | CS_VREDRAW;
171  wc.cbClsExtra = 0;
172  wc.cbWndExtra = 0;
173  wc.hInstance = hInstDLL;
174  wc.hIcon = LoadIconA(NULL, (const char *)IDI_WINLOGO);
175  wc.hCursor = LoadCursorA(NULL, (const char *)IDC_ARROW);
176  wc.hbrBackground = NULL;
177  wc.lpszMenuName = NULL;
179 
180  if (!RegisterClassA(&wc))
181  {
182  ERR("Failed to register window class 'WineD3D_OpenGL'!\n");
184  {
185  DWORD err = GetLastError();
186  ERR("Failed to free context TLS index, err %#x.\n", err);
187  }
188  return FALSE;
189  }
190 
191  DisableThreadLibraryCalls(hInstDLL);
192 
193  /* @@ Wine registry key: HKCU\Software\Wine\Direct3D */
194  if ( RegOpenKeyA( HKEY_CURRENT_USER, "Software\\Wine\\Direct3D", &hkey ) ) hkey = 0;
195 
197  if (len && len < MAX_PATH)
198  {
199  HKEY tmpkey;
200  /* @@ Wine registry key: HKCU\Software\Wine\AppDefaults\app.exe\Direct3D */
201  if (!RegOpenKeyA( HKEY_CURRENT_USER, "Software\\Wine\\AppDefaults", &tmpkey ))
202  {
203  char *p, *appname = buffer;
204  if ((p = strrchr( appname, '/' ))) appname = p + 1;
205  if ((p = strrchr( appname, '\\' ))) appname = p + 1;
206  strcat( appname, "\\Direct3D" );
207  TRACE("appname = [%s]\n", appname);
208  if (RegOpenKeyA( tmpkey, appname, &appkey )) appkey = 0;
209  RegCloseKey( tmpkey );
210  }
211  }
212 
213  if (hkey || appkey)
214  {
215  if (!get_config_key_dword(hkey, appkey, "csmt", &wined3d_settings.cs_multithreaded))
216  ERR_(winediag)("Setting multithreaded command stream to %#x.\n", wined3d_settings.cs_multithreaded);
217  if (!get_config_key_dword(hkey, appkey, "MaxVersionGL", &tmpvalue))
218  {
219  ERR_(winediag)("Setting maximum allowed wined3d GL version to %u.%u.\n",
220  tmpvalue >> 16, tmpvalue & 0xffff);
222  wined3d_settings.max_gl_version = tmpvalue;
223  }
224  if ( !get_config_key( hkey, appkey, "UseGLSL", buffer, size) )
225  {
226  if (!strcmp(buffer,"disabled"))
227  {
228  ERR_(winediag)("The GLSL shader backend has been disabled. You get to keep all the pieces if it breaks.\n");
229  TRACE("Use of GL Shading Language disabled\n");
231  }
232  }
233  if (!get_config_key(hkey, appkey, "OffscreenRenderingMode", buffer, size)
234  && !strcmp(buffer,"backbuffer"))
236  if ( !get_config_key_dword( hkey, appkey, "VideoPciDeviceID", &tmpvalue) )
237  {
238  int pci_device_id = tmpvalue;
239 
240  /* A pci device id is 16-bit */
241  if(pci_device_id > 0xffff)
242  {
243  ERR("Invalid value for VideoPciDeviceID. The value should be smaller or equal to 65535 or 0xffff\n");
244  }
245  else
246  {
247  TRACE("Using PCI Device ID %04x\n", pci_device_id);
248  wined3d_settings.pci_device_id = pci_device_id;
249  }
250  }
251  if ( !get_config_key_dword( hkey, appkey, "VideoPciVendorID", &tmpvalue) )
252  {
253  int pci_vendor_id = tmpvalue;
254 
255  /* A pci device id is 16-bit */
256  if(pci_vendor_id > 0xffff)
257  {
258  ERR("Invalid value for VideoPciVendorID. The value should be smaller or equal to 65535 or 0xffff\n");
259  }
260  else
261  {
262  TRACE("Using PCI Vendor ID %04x\n", pci_vendor_id);
263  wined3d_settings.pci_vendor_id = pci_vendor_id;
264  }
265  }
266  if ( !get_config_key( hkey, appkey, "VideoMemorySize", buffer, size) )
267  {
268  int TmpVideoMemorySize = atoi(buffer);
269  if(TmpVideoMemorySize > 0)
270  {
271  wined3d_settings.emulated_textureram = (UINT64)TmpVideoMemorySize *1024*1024;
272  TRACE("Use %iMiB = 0x%s bytes for emulated_textureram\n",
273  TmpVideoMemorySize,
275  }
276  else
277  ERR("VideoMemorySize is %i but must be >0\n", TmpVideoMemorySize);
278  }
279  if ( !get_config_key( hkey, appkey, "WineLogo", buffer, size) )
280  {
281  size_t len = strlen(buffer) + 1;
282 
284  ERR("Failed to allocate logo path memory.\n");
285  else
287  }
288  if (!get_config_key_dword(hkey, appkey, "MultisampleTextures", &wined3d_settings.multisample_textures))
289  ERR_(winediag)("Setting multisample textures to %#x.\n", wined3d_settings.multisample_textures);
290  if (!get_config_key_dword(hkey, appkey, "SampleCount", &wined3d_settings.sample_count))
291  ERR_(winediag)("Forcing sample count to %u. This may not be compatible with all applications.\n",
293  if (!get_config_key(hkey, appkey, "StrictDrawOrdering", buffer, size)
294  && !strcmp(buffer,"enabled"))
295  {
296  ERR_(winediag)("\"StrictDrawOrdering\" is deprecated, please use \"csmt\" instead.\n");
297  TRACE("Enforcing strict draw ordering.\n");
299  }
300  if (!get_config_key(hkey, appkey, "CheckFloatConstants", buffer, size)
301  && !strcmp(buffer, "enabled"))
302  {
303  TRACE("Checking relative addressing indices in float constants.\n");
305  }
306  if (!get_config_key_dword(hkey, appkey, "MaxShaderModelVS", &wined3d_settings.max_sm_vs))
307  TRACE("Limiting VS shader model to %u.\n", wined3d_settings.max_sm_vs);
308  if (!get_config_key_dword(hkey, appkey, "MaxShaderModelHS", &wined3d_settings.max_sm_hs))
309  TRACE("Limiting HS shader model to %u.\n", wined3d_settings.max_sm_hs);
310  if (!get_config_key_dword(hkey, appkey, "MaxShaderModelDS", &wined3d_settings.max_sm_ds))
311  TRACE("Limiting DS shader model to %u.\n", wined3d_settings.max_sm_ds);
312  if (!get_config_key_dword(hkey, appkey, "MaxShaderModelGS", &wined3d_settings.max_sm_gs))
313  TRACE("Limiting GS shader model to %u.\n", wined3d_settings.max_sm_gs);
314  if (!get_config_key_dword(hkey, appkey, "MaxShaderModelPS", &wined3d_settings.max_sm_ps))
315  TRACE("Limiting PS shader model to %u.\n", wined3d_settings.max_sm_ps);
316  if (!get_config_key_dword(hkey, appkey, "MaxShaderModelCS", &wined3d_settings.max_sm_cs))
317  TRACE("Limiting CS shader model to %u.\n", wined3d_settings.max_sm_cs);
318  if (!get_config_key(hkey, appkey, "DirectDrawRenderer", buffer, size)
319  && !strcmp(buffer, "gdi"))
320  {
321  TRACE("Disabling 3D support.\n");
323  }
324  }
325 
326  if (appkey) RegCloseKey( appkey );
327  if (hkey) RegCloseKey( hkey );
328 
330 
331  return TRUE;
332 }
333 
335 {
337  unsigned int i;
338 
340  {
341  DWORD err = GetLastError();
342  ERR("Failed to free context TLS index, err %#x.\n", err);
343  }
344 
345  for (i = 0; i < wndproc_table.count; ++i)
346  {
347  /* Trying to unregister these would be futile. These entries can only
348  * exist if either we skipped them in wined3d_unregister_window() due
349  * to the application replacing the wndproc after the entry was
350  * registered, or if the application still has an active wined3d
351  * device. In the latter case the application has bigger problems than
352  * these entries. */
353  WARN("Leftover wndproc table entry %p.\n", &wndproc_table.entries[i]);
354  }
355  heap_free(wndproc_table.entries);
356 
359 
362 
364 
365  return TRUE;
366 }
367 
369 {
371 }
372 
374 {
376 }
377 
378 static void wined3d_wndproc_mutex_lock(void)
379 {
381 }
382 
384 {
386 }
387 
389 {
390  unsigned int i;
391 
392  for (i = 0; i < wndproc_table.count; ++i)
393  {
394  if (wndproc_table.entries[i].window == window)
395  {
396  return &wndproc_table.entries[i];
397  }
398  }
399 
400  return NULL;
401 }
402 
404 {
405  struct wined3d_wndproc *entry;
406  struct wined3d_device *device;
407  BOOL unicode;
408  WNDPROC proc;
409 
412 
413  if (!entry)
414  {
416  ERR("Window %p is not registered with wined3d.\n", window);
418  }
419 
420  device = entry->device;
421  unicode = entry->unicode;
422  proc = entry->proc;
424 
425  if (device)
427  if (unicode)
430 }
431 
433 {
434  struct wined3d_wndproc *entry;
435 
437 
439  {
441  WARN("Window %p is already registered with wined3d.\n", window);
442  return TRUE;
443  }
444 
445  if (!wined3d_array_reserve((void **)&wndproc_table.entries, &wndproc_table.size,
446  wndproc_table.count + 1, sizeof(*entry)))
447  {
449  ERR("Failed to grow table.\n");
450  return FALSE;
451  }
452 
453  entry = &wndproc_table.entries[wndproc_table.count++];
454  entry->window = window;
455  entry->unicode = IsWindowUnicode(window);
456  /* Set a window proc that matches the window. Some applications (e.g. NoX)
457  * replace the window proc after we've set ours, and expect to be able to
458  * call the previous one (ours) directly, without using CallWindowProc(). */
459  if (entry->unicode)
461  else
463  entry->device = device;
464 
466 
467  return TRUE;
468 }
469 
471 {
472  struct wined3d_wndproc *entry, *last;
473  LONG_PTR proc;
474 
476 
478  {
480  ERR("Window %p is not registered with wined3d.\n", window);
481  return;
482  }
483 
484  if (entry->unicode)
485  {
487  if (proc != (LONG_PTR)wined3d_wndproc)
488  {
489  entry->device = NULL;
491  WARN("Not unregistering window %p, window proc %#lx doesn't match wined3d window proc %p.\n",
493  return;
494  }
495 
497  }
498  else
499  {
501  if (proc != (LONG_PTR)wined3d_wndproc)
502  {
503  entry->device = NULL;
505  WARN("Not unregistering window %p, window proc %#lx doesn't match wined3d window proc %p.\n",
507  return;
508  }
509 
511  }
512 
513  last = &wndproc_table.entries[--wndproc_table.count];
514  if (entry != last) *entry = *last;
515 
517 }
518 
520 {
522 }
523 
524 /* At process attach */
526 {
527  switch (reason)
528  {
529  case DLL_PROCESS_ATTACH:
530  return wined3d_dll_init(inst);
531 
532  case DLL_PROCESS_DETACH:
533  if (!reserved)
534  return wined3d_dll_destroy(inst);
535  break;
536 
537  case DLL_THREAD_DETACH:
539  {
540  ERR("Failed to clear current context.\n");
541  }
542  return TRUE;
543  }
544  return TRUE;
545 }
GLsizei GLenum const GLvoid GLsizei GLenum GLbyte GLbyte GLbyte GLdouble GLdouble GLdouble GLfloat GLfloat GLfloat GLint GLint GLint GLshort GLshort GLshort GLubyte GLubyte GLubyte GLuint GLuint GLuint GLushort GLushort GLushort GLbyte GLbyte GLbyte GLbyte GLdouble GLdouble GLdouble GLdouble GLfloat GLfloat GLfloat GLfloat GLint GLint GLint GLint GLshort GLshort GLshort GLshort GLubyte GLubyte GLubyte GLubyte GLuint GLuint GLuint GLuint GLushort GLushort GLushort GLushort GLboolean const GLdouble const GLfloat const GLint const GLshort const GLbyte const GLdouble const GLfloat const GLint const GLshort const GLdouble const GLfloat const GLint const GLshort const GLdouble const GLfloat const GLint const GLshort const GLdouble const GLfloat const GLint const GLshort const GLdouble const GLdouble const GLfloat const GLfloat const GLint const GLint const GLshort const GLshort const GLdouble const GLfloat const GLint const GLshort const GLdouble const GLfloat const GLint const GLshort const GLdouble const GLfloat const GLint const GLshort const GLdouble const GLfloat const GLint const GLshort const GLdouble const GLfloat const GLint const GLshort const GLdouble const GLfloat const GLint const GLshort const GLdouble const GLfloat const GLint const GLshort GLenum GLenum GLenum GLfloat GLenum GLint GLenum GLenum GLenum GLfloat GLenum GLenum GLint GLenum GLfloat GLenum GLint GLint GLushort GLenum GLenum GLfloat GLenum GLenum GLint GLfloat const GLubyte GLenum GLenum GLenum const GLfloat GLenum GLenum const GLint GLenum GLint GLint GLsizei GLsizei GLint GLenum GLenum const GLvoid GLenum GLenum const GLfloat GLenum GLenum const GLint GLenum GLenum const GLdouble GLenum GLenum const GLfloat GLenum GLenum const GLint GLsizei GLuint GLfloat GLuint GLbitfield GLfloat GLint GLuint GLboolean GLenum GLfloat GLenum GLbitfield GLenum GLfloat GLfloat GLint GLint const GLfloat GLenum GLfloat GLfloat GLint GLint GLfloat GLfloat GLint GLint const GLfloat GLint GLfloat GLfloat GLint GLfloat GLfloat GLint GLfloat GLfloat const GLdouble * u
Definition: glfuncs.h:240
#define ORM_FBO
LONG WINAPI RegOpenKeyA(HKEY hKey, LPCSTR lpSubKey, PHKEY phkResult)
Definition: reg.c:3257
static LRESULT CALLBACK wined3d_wndproc(HWND window, UINT message, WPARAM wparam, LPARAM lparam)
Definition: wined3d_main.c:403
LONG WINAPI RegQueryValueExA(_In_ HKEY hkeyorg, _In_ LPCSTR name, _In_ LPDWORD reserved, _Out_opt_ LPDWORD type, _Out_opt_ LPBYTE data, _Inout_opt_ LPDWORD count)
Definition: reg.c:4023
Definition: tftpd.h:59
unsigned int count
Definition: wined3d_main.c:45
#define TRUE
Definition: types.h:120
struct wined3d_adapter adapters[1]
#define DWORD_PTR
Definition: treelist.c:76
HRESULT hr
Definition: shlfolder.c:183
char * strcat(char *DstString, const char *SrcString)
Definition: utclib.c:568
ACPI_SIZE strlen(const char *String)
Definition: utclib.c:269
POINT last
Definition: font.c:46
#define HKEY_CURRENT_USER
Definition: winreg.h:11
BOOL wined3d_dxtn_init(void)
Definition: dxtn.c:461
unsigned int sample_count
#define WARN(fmt,...)
Definition: debug.h:111
#define U(x)
Definition: wordpad.c:44
#define ERR_(ch,...)
Definition: debug.h:156
void WINAPI wined3d_mutex_lock(void)
Definition: wined3d_main.c:368
#define CALLBACK
Definition: compat.h:27
void CDECL wined3d_strictdrawing_set(int value)
Definition: wined3d_main.c:519
void context_set_tls_idx(DWORD idx)
Definition: context.c:1502
BOOL WINAPI DisableThreadLibraryCalls(IN HMODULE hLibModule)
Definition: loader.c:85
int cbClsExtra
Definition: winuser.h:3140
GLuint GLuint GLsizei GLenum type
Definition: gl.h:1545
DWORD WINAPI GetLastError(VOID)
Definition: except.c:1059
#define CS_HREDRAW
Definition: winuser.h:648
LPCSTR lpszMenuName
Definition: winuser.h:3146
GLuint buffer
Definition: glext.h:5915
#define DLL_PROCESS_ATTACH
Definition: compat.h:120
UINT_PTR WPARAM
Definition: windef.h:207
HBRUSH hbrBackground
Definition: winuser.h:3145
static HANDLE proc()
Definition: pdb.c:32
#define GetWindowLongPtrW
Definition: winuser.h:4804
_Check_return_ _CRTIMP _CONST_RETURN char *__cdecl strrchr(_In_z_ const char *_Str, _In_ int _Ch)
BOOL WINAPI DllMain(HINSTANCE inst, DWORD reason, void *reserved)
Definition: wined3d_main.c:525
void WINAPI EnterCriticalSection(LPCRITICAL_SECTION)
struct wined3d_device * device
Definition: wined3d_main.c:39
unsigned int max_sm_hs
DWORD WINAPI GetModuleFileNameA(HINSTANCE hModule, LPSTR lpFilename, DWORD nSize)
Definition: loader.c:548
#define DLL_THREAD_DETACH
Definition: compat.h:122
HICON WINAPI LoadIconA(_In_opt_ HINSTANCE, _In_ LPCSTR)
Definition: cursoricon.c:2029
static BOOL wined3d_dll_destroy(HINSTANCE hInstDLL)
Definition: wined3d_main.c:334
static void * heap_alloc(size_t len)
Definition: appwiz.h:65
LRESULT WINAPI DefWindowProcW(_In_ HWND, _In_ UINT, _In_ WPARAM, _In_ LPARAM)
LRESULT WINAPI CallWindowProcA(_In_ WNDPROC, _In_ HWND, _In_ UINT, _In_ WPARAM, _In_ LPARAM)
static CRITICAL_SECTION_DEBUG wined3d_cs_debug
Definition: wined3d_main.c:52
struct wined3d *CDECL wined3d_create(DWORD flags)
Definition: wined3d_main.c:97
static struct wined3d_wndproc_table wndproc_table
Definition: wined3d_main.c:49
WINE_DECLARE_DEBUG_CHANNEL(winediag)
int cbWndExtra
Definition: winuser.h:3141
GLsizei GLenum const GLvoid GLsizei GLenum GLbyte GLbyte GLbyte GLdouble GLdouble GLdouble GLfloat GLfloat GLfloat GLint GLint GLint GLshort GLshort GLshort GLubyte GLubyte GLubyte GLuint GLuint GLuint GLushort GLushort GLushort GLbyte GLbyte GLbyte GLbyte GLdouble GLdouble GLdouble GLdouble GLfloat GLfloat GLfloat GLfloat GLint GLint GLint GLint GLshort GLshort GLshort GLshort GLubyte GLubyte GLubyte GLubyte GLuint GLuint GLuint GLuint GLushort GLushort GLushort GLushort GLboolean const GLdouble const GLfloat const GLint const GLshort const GLbyte const GLdouble const GLfloat const GLint const GLshort const GLdouble const GLfloat const GLint const GLshort const GLdouble const GLfloat const GLint const GLshort const GLdouble const GLfloat const GLint const GLshort const GLdouble const GLdouble const GLfloat const GLfloat const GLint const GLint const GLshort const GLshort const GLdouble const GLfloat const GLint const GLshort const GLdouble const GLfloat const GLint const GLshort const GLdouble const GLfloat const GLint const GLshort const GLdouble const GLfloat const GLint const GLshort const GLdouble const GLfloat const GLint const GLshort const GLdouble const GLfloat const GLint const GLshort const GLdouble const GLfloat const GLint const GLshort GLenum GLenum GLenum GLfloat GLenum GLint GLenum GLenum GLenum GLfloat GLenum GLenum GLint GLenum GLfloat GLenum GLint GLint GLushort GLenum GLenum GLfloat GLenum GLenum GLint GLfloat const GLubyte GLenum GLenum GLenum const GLfloat GLenum GLenum const GLint GLenum GLint GLint GLsizei GLsizei GLint GLenum GLenum const GLvoid GLenum GLenum const GLfloat GLenum GLenum const GLint GLenum GLenum const GLdouble GLenum GLenum const GLfloat GLenum GLenum const GLint GLsizei GLuint GLfloat GLuint GLbitfield GLfloat GLint GLuint GLboolean GLenum GLfloat GLenum GLbitfield GLenum GLfloat GLfloat GLint GLint const GLfloat GLenum GLfloat GLfloat GLint GLint GLfloat GLfloat GLint GLint const GLfloat GLint GLfloat GLfloat GLint GLfloat GLfloat GLint GLfloat GLfloat const GLdouble const GLfloat const GLdouble const GLfloat GLint i
Definition: glfuncs.h:248
static CRITICAL_SECTION_DEBUG wined3d_wndproc_cs_debug
Definition: wined3d_main.c:62
#define WINED3D_OPENGL_WINDOW_CLASS_NAME
LONG WINAPI RegCloseKey(HKEY hKey)
Definition: reg.c:423
#define PCI_DEVICE_NONE
void wined3d_unregister_window(HWND window)
Definition: wined3d_main.c:470
unsigned int BOOL
Definition: ntddk_ex.h:94
Definition: devices.h:37
static UINT WPARAM LPARAM lparam
Definition: combo.c:716
r reserved
Definition: btrfs.c:2865
HCURSOR hCursor
Definition: winuser.h:3144
#define ORM_BACKBUFFER
smooth NULL
Definition: ftsmooth.c:416
LONG_PTR LPARAM
Definition: windef.h:208
static DWORD get_config_key_dword(HKEY defkey, HKEY appkey, const char *name, DWORD *value)
Definition: wined3d_main.c:131
BOOL WINAPI IsWindowUnicode(_In_ HWND)
#define ERROR_FILE_NOT_FOUND
Definition: disk.h:79
unsigned int max_sm_gs
#define DLL_PROCESS_DETACH
Definition: compat.h:119
#define GetWindowLongPtrA
Definition: winuser.h:4803
#define CS_VREDRAW
Definition: winuser.h:653
#define TRACE(s)
Definition: solgame.cpp:4
GLsizeiptr size
Definition: glext.h:5919
BOOL WINAPI TlsFree(IN DWORD Index)
Definition: thread.c:1154
static struct wined3d_wndproc * wined3d_find_wndproc(HWND window)
Definition: wined3d_main.c:388
void WINAPI DeleteCriticalSection(PCRITICAL_SECTION)
unsigned int cs_multithreaded
LONG HRESULT
Definition: typedefs.h:77
#define MAX_PATH
Definition: compat.h:26
#define WINAPI
Definition: msvc.h:6
BOOL wined3d_array_reserve(void **elements, SIZE_T *capacity, SIZE_T count, SIZE_T size)
Definition: utils.c:6526
#define IDI_WINLOGO
Definition: winuser.h:704
unsigned short pci_vendor_id
unsigned long DWORD
Definition: ntddk_ex.h:95
#define success(from, fromstr, to, tostr)
static DWORD wined3d_context_tls_idx
Definition: context.c:48
GLint GLenum GLsizei GLsizei GLsizei GLint GLsizei const GLvoid * data
Definition: gl.h:1950
static CRITICAL_SECTION wined3d_cs
Definition: wined3d_main.c:51
GLbitfield flags
Definition: glext.h:7161
static WCHAR reason[MAX_STRING_RESOURCE_LEN]
Definition: object.c:1904
static void wined3d_wndproc_mutex_lock(void)
Definition: wined3d_main.c:378
BOOL wined3d_register_window(HWND window, struct wined3d_device *device)
Definition: wined3d_main.c:432
#define MAKEDWORD_VERSION(maj, min)
#define PCI_VENDOR_NONE
uint32_t entry
Definition: isohybrid.c:63
struct wined3d_wndproc * entries
Definition: wined3d_main.c:44
#define memcpy(s1, s2, n)
Definition: mkisofs.h:878
GLenum GLsizei len
Definition: glext.h:6722
#define SetWindowLongPtrA
Definition: winuser.h:5320
unsigned char BYTE
Definition: mem.h:68
unsigned short pci_device_id
DWORD WINAPI TlsAlloc(VOID)
Definition: thread.c:1088
#define TLS_OUT_OF_INDEXES
Definition: winbase.h:530
#define err(...)
LRESULT WINAPI DefWindowProcA(_In_ HWND, _In_ UINT, _In_ WPARAM, _In_ LPARAM)
static IHTMLWindow2 * window
Definition: events.c:77
LPCSTR lpszClassName
Definition: winuser.h:3147
LIST_ENTRY ProcessLocksList
Definition: winbase.h:855
HRESULT wined3d_init(struct wined3d *wined3d, DWORD flags)
Definition: directx.c:6820
GLsizei const GLfloat * value
Definition: glext.h:6069
HCURSOR WINAPI LoadCursorA(_In_opt_ HINSTANCE, _In_ LPCSTR)
Definition: cursoricon.c:2059
#define GWLP_WNDPROC
Definition: treelist.c:66
static CRITICAL_SECTION wined3d_wndproc_cs
Definition: wined3d_main.c:61
unsigned int max_sm_ps
UINT style
Definition: winuser.h:3138
LRESULT(CALLBACK * WNDPROC)(HWND, UINT, WPARAM, LPARAM)
Definition: winuser.h:2881
#define ERR(fmt,...)
Definition: debug.h:109
ULONG_PTR SIZE_T
Definition: typedefs.h:78
WINE_DEFAULT_DEBUG_CHANNEL(d3d)
BOOL context_set_current(struct wined3d_context *ctx)
Definition: context.c:1512
#define CDECL
Definition: compat.h:21
HINSTANCE hInstance
Definition: winuser.h:3142
unsigned int multisample_textures
static DWORD get_config_key(HKEY defkey, HKEY appkey, const char *name, char *buffer, DWORD size)
Definition: wined3d_main.c:124
void wined3d_dxtn_free(void)
Definition: dxtn.c:515
#define FIELD_OFFSET(t, f)
Definition: typedefs.h:254
__int3264 LONG_PTR
Definition: mstsclib_h.h:276
unsigned int UINT
Definition: ndis.h:50
static BOOL wined3d_dll_init(HINSTANCE hInstDLL)
Definition: wined3d_main.c:147
DWORD context_get_tls_idx(void)
Definition: context.c:1497
WNDPROC lpfnWndProc
Definition: winuser.h:3139
#define IDC_ARROW
Definition: winuser.h:682
_Check_return_ int __cdecl atoi(_In_z_ const char *_Str)
Definition: name.c:38
static void wined3d_wndproc_mutex_unlock(void)
Definition: wined3d_main.c:383
LRESULT WINAPI CallWindowProcW(_In_ WNDPROC, _In_ HWND, _In_ UINT, _In_ WPARAM, _In_ LPARAM)
unsigned int max_sm_ds
static __inline const char * wine_dbgstr_longlong(ULONGLONG ll)
Definition: compat.h:41
int strcmp(const char *String1, const char *String2)
Definition: utclib.c:469
unsigned int max_sm_cs
#define SetWindowLongPtrW
Definition: winuser.h:5321
BOOL WINAPI UnregisterClassA(_In_ LPCSTR, HINSTANCE)
void WINAPI LeaveCriticalSection(LPCRITICAL_SECTION)
unsigned long long UINT64
GLfloat GLfloat p
Definition: glext.h:8902
LONG_PTR LRESULT
Definition: windef.h:209
unsigned int max_sm_vs
#define WINED3D_NO3D
Definition: wined3d.h:1316
void WINAPI wined3d_mutex_unlock(void)
Definition: wined3d_main.c:373
LRESULT device_process_message(struct wined3d_device *device, HWND window, BOOL unicode, UINT message, WPARAM wparam, LPARAM lparam, WNDPROC proc)
Definition: device.c:5292
#define REG_DWORD
Definition: sdbapi.c:596
ATOM WINAPI RegisterClassA(_In_ CONST WNDCLASSA *)
void * object
Definition: jmemsys.h:48
static UINT WPARAM wparam
Definition: combo.c:716
static BOOL heap_free(void *mem)
Definition: appwiz.h:75
HICON hIcon
Definition: winuser.h:3143