ReactOS 0.4.17-dev-970-gcf0f1a6
directx.c
Go to the documentation of this file.
1/*
2 * Copyright 2002-2004 Jason Edmeades
3 * Copyright 2003-2004 Raphael Junqueira
4 * Copyright 2004 Christian Costa
5 * Copyright 2005 Oliver Stieber
6 * Copyright 2007-2008 Stefan Dösinger for CodeWeavers
7 * Copyright 2009-2011 Henri Verbeet for CodeWeavers
8 *
9 * This library is free software; you can redistribute it and/or
10 * modify it under the terms of the GNU Lesser General Public
11 * License as published by the Free Software Foundation; either
12 * version 2.1 of the License, or (at your option) any later version.
13 *
14 * This library is distributed in the hope that it will be useful,
15 * but WITHOUT ANY WARRANTY; without even the implied warranty of
16 * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
17 * Lesser General Public License for more details.
18 *
19 * You should have received a copy of the GNU Lesser General Public
20 * License along with this library; if not, write to the Free Software
21 * Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301, USA
22 */
23
24#include "wined3d_private.h"
25#include "wined3d_gl.h"
26#include "winternl.h"
27#include "wine/list.h"
28
31
32#define DEFAULT_REFRESH_RATE 0
33
35{
41};
42
44{
45 const struct wined3d_adapter *adapter;
50 struct list entry;
51};
52
55
56/* The d3d device ID */
57static const GUID IID_D3DDEVICE_D3DUID = { 0xaeb2cdd4, 0x6e41, 0x43ea, { 0x94,0x1c,0x83,0x61,0xcc,0x76,0x07,0x81 } };
58
59/**********************************************************
60 * Utility functions follow
61 **********************************************************/
62
63const struct min_lookup minMipLookup[] =
64{
65 /* NONE POINT LINEAR */
66 {{GL_NEAREST, GL_NEAREST, GL_NEAREST}}, /* NONE */
69};
70
72{
73 /* NONE POINT LINEAR */
75};
76
78{
79 D3DKMT_SETVIDPNSOURCEOWNER set_owner_desc = {0};
80
81 TRACE("output %p.\n", output);
82
83 set_owner_desc.hDevice = output->kmt_device;
84 D3DKMTSetVidPnSourceOwner(&set_owner_desc);
85}
86
88{
89 D3DKMT_SETVIDPNSOURCEOWNER set_owner_desc;
92
93 TRACE("output %p, exclusive %#x.\n", output, exclusive);
94
96 set_owner_desc.pType = &owner_type;
97 set_owner_desc.pVidPnSourceId = &output->vidpn_source_id;
98 set_owner_desc.VidPnSourceCount = 1;
99 set_owner_desc.hDevice = output->kmt_device;
100 status = D3DKMTSetVidPnSourceOwner(&set_owner_desc);
101
102 switch (status)
103 {
107 return E_INVALIDARG;
109 return E_NOINTERFACE;
110 case STATUS_SUCCESS:
111 return S_OK;
112 default:
113 FIXME("Unhandled error %#lx.\n", status);
114 return E_FAIL;
115 }
116}
117
118static void wined3d_output_cleanup(const struct wined3d_output *output)
119{
120 D3DKMT_DESTROYDEVICE destroy_device_desc;
121
122 TRACE("output %p.\n", output);
123
124 destroy_device_desc.hDevice = output->kmt_device;
125 D3DKMTDestroyDevice(&destroy_device_desc);
126}
127
128static HRESULT wined3d_output_init(struct wined3d_output *output, unsigned int ordinal,
130{
131 D3DKMT_OPENADAPTERFROMGDIDISPLAYNAME open_adapter_desc;
132 D3DKMT_CREATEDEVICE create_device_desc = {{0}};
133 D3DKMT_CLOSEADAPTER close_adapter_desc;
134
135 TRACE("output %p, device_name %s.\n", output, wine_dbgstr_w(device_name));
136
137 lstrcpyW(open_adapter_desc.DeviceName, device_name);
138 if (D3DKMTOpenAdapterFromGdiDisplayName(&open_adapter_desc))
139 return E_INVALIDARG;
140 close_adapter_desc.hAdapter = open_adapter_desc.hAdapter;
141 D3DKMTCloseAdapter(&close_adapter_desc);
142
143 create_device_desc.hAdapter = adapter->kmt_adapter;
144 if (D3DKMTCreateDevice(&create_device_desc))
145 return E_FAIL;
146
147 output->ordinal = ordinal;
149 output->adapter = adapter;
151 output->kmt_device = create_device_desc.hDevice;
152 output->vidpn_source_id = open_adapter_desc.VidPnSourceId;
153
154 return WINED3D_OK;
155}
156
157/* Adjust the amount of used texture memory */
159{
160 adapter->vram_bytes_used += amount;
161 TRACE("Adjusted used adapter memory by 0x%s to 0x%s.\n",
162 wine_dbgstr_longlong(amount),
163 wine_dbgstr_longlong(adapter->vram_bytes_used));
164 return adapter->vram_bytes_used;
165}
166
168{
169 /* Note that this needs to be thread-safe; the Vulkan adapter may map from
170 * client threads. */
172 TRACE("Adjusted mapped adapter memory by %Id to %Id.\n", size, ret);
173 return ret;
174}
175
177{
178 D3DKMT_CLOSEADAPTER close_adapter_desc;
179 unsigned int output_idx;
180
181 for (output_idx = 0; output_idx < adapter->output_count; ++output_idx)
182 wined3d_output_cleanup(&adapter->outputs[output_idx]);
183 free(adapter->outputs);
184 free(adapter->formats);
185 close_adapter_desc.hAdapter = adapter->kmt_adapter;
186 D3DKMTCloseAdapter(&close_adapter_desc);
187}
188
190{
191 unsigned int refcount = InterlockedIncrement(&wined3d->ref);
192
193 TRACE("%p increasing refcount to %u.\n", wined3d, refcount);
194
195 return refcount;
196}
197
199{
200 unsigned int refcount = InterlockedDecrement(&wined3d->ref);
201
202 TRACE("%p decreasing refcount to %u.\n", wined3d, refcount);
203
204 if (!refcount)
205 {
206 unsigned int i;
207
209 for (i = 0; i < wined3d->adapter_count; ++i)
210 {
212
213 adapter->adapter_ops->adapter_destroy(adapter);
214 }
215 free(wined3d);
217 }
218
219 return refcount;
220}
221
222/* Certain applications (e.g. Steam) complain if we report an outdated driver
223 * version.
224 *
225 * The driver version has the form "x.y.z.w".
226 *
227 * "x" is the Windows version / driver model the driver is meant for:
228 * 4 -> 95/98/NT4
229 * 5 -> 2000
230 * 6 -> XP
231 * 7 -> Vista - WDDM 1.0
232 * 8 -> Windows 7 - WDDM 1.1
233 * 9 -> Windows 8 - WDDM 1.2
234 * 10 -> Windows 8.1 - WDDM 1.3
235 * 20 -> Windows 10 - WDDM 2.0
236 * 21 -> Windows 10 Anniversary Update - WDDM 2.1
237 * 22 -> Windows 10 Creators Update - WDDM 2.2
238 * 23 -> Windows 10 Fall Creators Update - WDDM 2.3
239 * 24 -> Windows 10 April 2018 Update - WDDM 2.4
240 * 25 -> Windows 10 October 2018 Update - WDDM 2.5
241 * 26 -> Windows 10 May 2019 Update - WDDM 2.6
242 * 27 -> Windows 10 May 2020 Update - WDDM 2.7
243 * 30 -> Windows 11 21H2 - WDDM 3.0
244 * 31 -> Windows 11 22H2 - WDDM 3.1
245 *
246 * "y" is the maximum Direct3D version / feature level the driver supports.
247 * 11 -> 6
248 * 12 -> 7
249 * 13 -> 8
250 * 14 -> 9
251 * 15 -> 10_0
252 * 16 -> 10_1
253 * 17 -> 11_0
254 * 18 -> 11_1
255 * 19 -> 12_0
256 * 20 -> 12_1
257 * 21 -> 12_x
258 *
259 * "z" is the subversion number.
260 *
261 * "w" is the vendor specific driver build number.
262 *
263 * In practice the reported version is tied to the driver, not the actual
264 * Windows version or feature level. E.g. NVIDIA driver 445.87 advertises the
265 * exact same version 26.21.14.4587 on Windows 7 as it does on Windows 10
266 * (it's in fact the same driver). Similarly for driver 310.90 that advertises
267 * itself as 9.18.13.1090 on Windows Vista with a GeForce 9600M. */
268
270{
273 const char *driver_name; /* name of Windows driver */
274 WORD subversion; /* subversion word ('z'), contained in high word of DriverVersion.LowPart */
275 WORD build; /* build number ('w'), contained in low word of DriverVersion.LowPart */
276};
277
278/* The driver version table contains driver information for different devices on several OS versions. */
280{
281 /* AMD
282 * - Radeon HD2x00 (R600) and up supported by current drivers.
283 * - Radeon 9500 (R300) - X1*00 (R5xx) supported up to Catalyst 9.3 (Linux) and 10.2 (XP/Vista/Win7)
284 * - Radeon 7xxx (R100) - 9250 (RV250) supported up to Catalyst 6.11 (XP)
285 * - Rage 128 supported up to XP, latest official build 6.13.3279 dated October 2001 */
286 {DRIVER_AMD_RAGE_128PRO, DRIVER_MODEL_NT5X, "ati2dvaa.dll", 3279, 0},
287 {DRIVER_AMD_R100, DRIVER_MODEL_NT5X, "ati2dvag.dll", 10, 6614},
288 {DRIVER_AMD_R300, DRIVER_MODEL_NT5X, "ati2dvag.dll", 10, 6764},
289 {DRIVER_AMD_R600, DRIVER_MODEL_NT5X, "ati2dvag.dll", 10, 1280},
290 {DRIVER_AMD_R300, DRIVER_MODEL_NT6X, "atiumdag.dll", 10, 741 },
291 {DRIVER_AMD_R600, DRIVER_MODEL_NT6X, "atiumdag.dll", 10, 1280},
292 {DRIVER_AMD_RX, DRIVER_MODEL_NT6X, "aticfx32.dll", 23013, 1023}, /* Adrenalin 23.12.1 */
293
294 /* Intel
295 * The drivers are unified but not all versions support all GPUs. At some point the 2k/xp
296 * drivers used ialmrnt5.dll for GMA800/GMA900 but at some point the file was renamed to
297 * igxprd32.dll but the GMA800 driver was never updated. */
298 {DRIVER_INTEL_GMA800, DRIVER_MODEL_NT5X, "ialmrnt5.dll", 10, 3889},
299 {DRIVER_INTEL_GMA900, DRIVER_MODEL_NT5X, "igxprd32.dll", 10, 4764},
300 {DRIVER_INTEL_GMA950, DRIVER_MODEL_NT5X, "igxprd32.dll", 10, 4926},
301 {DRIVER_INTEL_GMA3000, DRIVER_MODEL_NT5X, "igxprd32.dll", 10, 5218},
302 {DRIVER_INTEL_GMA950, DRIVER_MODEL_NT6X, "igdumd32.dll", 10, 1504},
303 {DRIVER_INTEL_GMA3000, DRIVER_MODEL_NT6X, "igdumd32.dll", 10, 1666},
304 {DRIVER_INTEL_HD4000, DRIVER_MODEL_NT6X, "igdumdim32.dll", 101, 4577},
305
306 /* Nvidia
307 * - Geforce8 and newer is supported by the current 340.52 driver on XP-Win8
308 * - Geforce6 and 7 support is up to 307.83 on XP-Win8
309 * - GeforceFX support is up to 173.x on <= XP
310 * - Geforce2MX/3/4 up to 96.x on <= XP
311 * - TNT/Geforce1/2 up to 71.x on <= XP
312 * All version numbers used below are from the Linux nvidia drivers. */
313 {DRIVER_NVIDIA_TNT, DRIVER_MODEL_NT5X, "nv4_disp.dll", 10, 7186},
314 {DRIVER_NVIDIA_GEFORCE2MX, DRIVER_MODEL_NT5X, "nv4_disp.dll", 10, 9371},
315 {DRIVER_NVIDIA_GEFORCEFX, DRIVER_MODEL_NT5X, "nv4_disp.dll", 11, 7516},
316 {DRIVER_NVIDIA_GEFORCE6, DRIVER_MODEL_NT5X, "nv4_disp.dll", 13, 783},
317 {DRIVER_NVIDIA_GEFORCE8, DRIVER_MODEL_NT5X, "nv4_disp.dll", 13, 4052},
318 {DRIVER_NVIDIA_GEFORCE6, DRIVER_MODEL_NT6X, "nvd3dum.dll", 13, 783},
319 {DRIVER_NVIDIA_GEFORCE8, DRIVER_MODEL_NT6X, "nvd3dum.dll", 13, 4052},
320 {DRIVER_NVIDIA_FERMI, DRIVER_MODEL_NT6X, "nvd3dum.dll", 13, 9135},
321 {DRIVER_NVIDIA_KEPLER, DRIVER_MODEL_NT6X, "nvd3dum.dll", 15, 3118}, /* 531.18 */
322
323 /* Red Hat */
324 {DRIVER_REDHAT_VIRGL, DRIVER_MODEL_GENERIC, "virgl.dll", 0, 0},
325
326 /* VMware */
327 {DRIVER_VMWARE, DRIVER_MODEL_NT5X, "vm3dum.dll", 1, 1134},
328
329 /* Wine */
330 {DRIVER_WINE, DRIVER_MODEL_GENERIC, "wined3d.dll", 0, 0},
331};
332
333/* The amount of video memory stored in the gpu description table is the minimum amount of video memory
334 * found on a board containing a specific GPU. */
336{
337 /* Nvidia cards */
339 {HW_VENDOR_NVIDIA, CARD_NVIDIA_RIVA_TNT, "NVIDIA RIVA TNT", DRIVER_NVIDIA_TNT, 16 },
340 {HW_VENDOR_NVIDIA, CARD_NVIDIA_RIVA_TNT2, "NVIDIA RIVA TNT2/TNT2 Pro", DRIVER_NVIDIA_TNT, 32 },
341 {HW_VENDOR_NVIDIA, CARD_NVIDIA_GEFORCE, "NVIDIA GeForce 256", DRIVER_NVIDIA_TNT, 32 },
342 {HW_VENDOR_NVIDIA, CARD_NVIDIA_GEFORCE2, "NVIDIA GeForce2 GTS/GeForce2 Pro", DRIVER_NVIDIA_TNT, 32 },
343 {HW_VENDOR_NVIDIA, CARD_NVIDIA_GEFORCE2_MX, "NVIDIA GeForce2 MX/MX 400", DRIVER_NVIDIA_GEFORCE2MX,32 },
345 {HW_VENDOR_NVIDIA, CARD_NVIDIA_GEFORCE4_MX, "NVIDIA GeForce4 MX 460", DRIVER_NVIDIA_GEFORCE2MX,64 },
348 {HW_VENDOR_NVIDIA, CARD_NVIDIA_GEFORCEFX_5600, "NVIDIA GeForce FX 5600", DRIVER_NVIDIA_GEFORCEFX, 128 },
349 {HW_VENDOR_NVIDIA, CARD_NVIDIA_GEFORCEFX_5800, "NVIDIA GeForce FX 5800", DRIVER_NVIDIA_GEFORCEFX, 256 },
351 {HW_VENDOR_NVIDIA, CARD_NVIDIA_GEFORCE_6600GT, "NVIDIA GeForce 6600 GT", DRIVER_NVIDIA_GEFORCE6, 128 },
353 {HW_VENDOR_NVIDIA, CARD_NVIDIA_GEFORCE_7300, "NVIDIA GeForce Go 7300", DRIVER_NVIDIA_GEFORCE6, 256 },
354 {HW_VENDOR_NVIDIA, CARD_NVIDIA_GEFORCE_7400, "NVIDIA GeForce Go 7400", DRIVER_NVIDIA_GEFORCE6, 256 },
355 {HW_VENDOR_NVIDIA, CARD_NVIDIA_GEFORCE_7600, "NVIDIA GeForce 7600 GT", DRIVER_NVIDIA_GEFORCE6, 256 },
356 {HW_VENDOR_NVIDIA, CARD_NVIDIA_GEFORCE_7800GT, "NVIDIA GeForce 7800 GT", DRIVER_NVIDIA_GEFORCE6, 256 },
358 {HW_VENDOR_NVIDIA, CARD_NVIDIA_GEFORCE_8300GS, "NVIDIA GeForce 8300 GS", DRIVER_NVIDIA_GEFORCE8, 128 },
359 {HW_VENDOR_NVIDIA, CARD_NVIDIA_GEFORCE_8400GS, "NVIDIA GeForce 8400 GS", DRIVER_NVIDIA_GEFORCE8, 128 },
360 {HW_VENDOR_NVIDIA, CARD_NVIDIA_GEFORCE_8500GT, "NVIDIA GeForce 8500 GT", DRIVER_NVIDIA_GEFORCE8, 256 },
361 {HW_VENDOR_NVIDIA, CARD_NVIDIA_GEFORCE_8600GT, "NVIDIA GeForce 8600 GT", DRIVER_NVIDIA_GEFORCE8, 256 },
362 {HW_VENDOR_NVIDIA, CARD_NVIDIA_GEFORCE_8600MGT, "NVIDIA GeForce 8600M GT", DRIVER_NVIDIA_GEFORCE8, 512 },
363 {HW_VENDOR_NVIDIA, CARD_NVIDIA_GEFORCE_8800GTS, "NVIDIA GeForce 8800 GTS", DRIVER_NVIDIA_GEFORCE8, 320 },
364 {HW_VENDOR_NVIDIA, CARD_NVIDIA_GEFORCE_8800GTX, "NVIDIA GeForce 8800 GTX", DRIVER_NVIDIA_GEFORCE8, 768 },
367 {HW_VENDOR_NVIDIA, CARD_NVIDIA_GEFORCE_9400M, "NVIDIA GeForce 9400M", DRIVER_NVIDIA_GEFORCE8, 256 },
368 {HW_VENDOR_NVIDIA, CARD_NVIDIA_GEFORCE_9400GT, "NVIDIA GeForce 9400 GT", DRIVER_NVIDIA_GEFORCE8, 256 },
369 {HW_VENDOR_NVIDIA, CARD_NVIDIA_GEFORCE_9500GT, "NVIDIA GeForce 9500 GT", DRIVER_NVIDIA_GEFORCE8, 256 },
370 {HW_VENDOR_NVIDIA, CARD_NVIDIA_GEFORCE_9600GT, "NVIDIA GeForce 9600 GT", DRIVER_NVIDIA_GEFORCE8, 512 },
371 {HW_VENDOR_NVIDIA, CARD_NVIDIA_GEFORCE_9700MGT, "NVIDIA GeForce 9700M GT", DRIVER_NVIDIA_GEFORCE8, 512 },
372 {HW_VENDOR_NVIDIA, CARD_NVIDIA_GEFORCE_9800GT, "NVIDIA GeForce 9800 GT", DRIVER_NVIDIA_GEFORCE8, 512 },
374 {HW_VENDOR_NVIDIA, CARD_NVIDIA_GEFORCE_GT220, "NVIDIA GeForce GT 220", DRIVER_NVIDIA_GEFORCE8, 512 },
375 {HW_VENDOR_NVIDIA, CARD_NVIDIA_GEFORCE_GT240, "NVIDIA GeForce GT 240", DRIVER_NVIDIA_GEFORCE8, 512 },
376 {HW_VENDOR_NVIDIA, CARD_NVIDIA_GEFORCE_GTS250, "NVIDIA GeForce GTS 250", DRIVER_NVIDIA_GEFORCE8, 1024},
377 {HW_VENDOR_NVIDIA, CARD_NVIDIA_GEFORCE_GTX260, "NVIDIA GeForce GTX 260", DRIVER_NVIDIA_GEFORCE8, 1024},
378 {HW_VENDOR_NVIDIA, CARD_NVIDIA_GEFORCE_GTX275, "NVIDIA GeForce GTX 275", DRIVER_NVIDIA_GEFORCE8, 896 },
379 {HW_VENDOR_NVIDIA, CARD_NVIDIA_GEFORCE_GTX280, "NVIDIA GeForce GTX 280", DRIVER_NVIDIA_GEFORCE8, 1024},
382 {HW_VENDOR_NVIDIA, CARD_NVIDIA_GEFORCE_GT320M, "NVIDIA GeForce GT 320M", DRIVER_NVIDIA_GEFORCE8, 1024},
383 {HW_VENDOR_NVIDIA, CARD_NVIDIA_GEFORCE_GT325M, "NVIDIA GeForce GT 325M", DRIVER_NVIDIA_GEFORCE8, 1024},
384 {HW_VENDOR_NVIDIA, CARD_NVIDIA_GEFORCE_GT330, "NVIDIA GeForce GT 330", DRIVER_NVIDIA_GEFORCE8, 1024},
385 {HW_VENDOR_NVIDIA, CARD_NVIDIA_GEFORCE_GTS350M, "NVIDIA GeForce GTS 350M", DRIVER_NVIDIA_GEFORCE8, 1024},
386 {HW_VENDOR_NVIDIA, CARD_NVIDIA_GEFORCE_410M, "NVIDIA GeForce 410M", DRIVER_NVIDIA_FERMI, 512},
387 {HW_VENDOR_NVIDIA, CARD_NVIDIA_GEFORCE_GT420, "NVIDIA GeForce GT 420", DRIVER_NVIDIA_FERMI, 2048},
388 {HW_VENDOR_NVIDIA, CARD_NVIDIA_GEFORCE_GT425M, "NVIDIA GeForce GT 425M", DRIVER_NVIDIA_FERMI, 1024},
389 {HW_VENDOR_NVIDIA, CARD_NVIDIA_GEFORCE_GT430, "NVIDIA GeForce GT 430", DRIVER_NVIDIA_FERMI, 1024},
390 {HW_VENDOR_NVIDIA, CARD_NVIDIA_GEFORCE_GT440, "NVIDIA GeForce GT 440", DRIVER_NVIDIA_FERMI, 1024},
391 {HW_VENDOR_NVIDIA, CARD_NVIDIA_GEFORCE_GTS450, "NVIDIA GeForce GTS 450", DRIVER_NVIDIA_FERMI, 1024},
392 {HW_VENDOR_NVIDIA, CARD_NVIDIA_GEFORCE_GTX460, "NVIDIA GeForce GTX 460", DRIVER_NVIDIA_FERMI, 768 },
393 {HW_VENDOR_NVIDIA, CARD_NVIDIA_GEFORCE_GTX460M, "NVIDIA GeForce GTX 460M", DRIVER_NVIDIA_FERMI, 1536},
394 {HW_VENDOR_NVIDIA, CARD_NVIDIA_GEFORCE_GTX465, "NVIDIA GeForce GTX 465", DRIVER_NVIDIA_FERMI, 1024},
395 {HW_VENDOR_NVIDIA, CARD_NVIDIA_GEFORCE_GTX470, "NVIDIA GeForce GTX 470", DRIVER_NVIDIA_FERMI, 1280},
396 {HW_VENDOR_NVIDIA, CARD_NVIDIA_GEFORCE_GTX480, "NVIDIA GeForce GTX 480", DRIVER_NVIDIA_FERMI, 1536},
397 {HW_VENDOR_NVIDIA, CARD_NVIDIA_GEFORCE_GT520, "NVIDIA GeForce GT 520", DRIVER_NVIDIA_FERMI, 1024},
398 {HW_VENDOR_NVIDIA, CARD_NVIDIA_GEFORCE_GT525M, "NVIDIA GeForce GT 525M", DRIVER_NVIDIA_FERMI, 1024},
399 {HW_VENDOR_NVIDIA, CARD_NVIDIA_GEFORCE_GT540M, "NVIDIA GeForce GT 540M", DRIVER_NVIDIA_FERMI, 1024},
400 {HW_VENDOR_NVIDIA, CARD_NVIDIA_GEFORCE_GTX550, "NVIDIA GeForce GTX 550 Ti", DRIVER_NVIDIA_FERMI, 1024},
401 {HW_VENDOR_NVIDIA, CARD_NVIDIA_GEFORCE_GT555M, "NVIDIA GeForce GT 555M", DRIVER_NVIDIA_FERMI, 1024},
402 {HW_VENDOR_NVIDIA, CARD_NVIDIA_GEFORCE_GTX560TI, "NVIDIA GeForce GTX 560 Ti", DRIVER_NVIDIA_FERMI, 1024},
403 {HW_VENDOR_NVIDIA, CARD_NVIDIA_GEFORCE_GTX560M, "NVIDIA GeForce GTX 560M", DRIVER_NVIDIA_FERMI, 3072},
404 {HW_VENDOR_NVIDIA, CARD_NVIDIA_GEFORCE_GTX560, "NVIDIA GeForce GTX 560", DRIVER_NVIDIA_FERMI, 1024},
405 {HW_VENDOR_NVIDIA, CARD_NVIDIA_GEFORCE_GTX570, "NVIDIA GeForce GTX 570", DRIVER_NVIDIA_FERMI, 1280},
406 {HW_VENDOR_NVIDIA, CARD_NVIDIA_GEFORCE_GTX580, "NVIDIA GeForce GTX 580", DRIVER_NVIDIA_FERMI, 1536},
407 {HW_VENDOR_NVIDIA, CARD_NVIDIA_GEFORCE_GT610, "NVIDIA GeForce GT 610", DRIVER_NVIDIA_FERMI, 1024},
408 {HW_VENDOR_NVIDIA, CARD_NVIDIA_GEFORCE_GT630, "NVIDIA GeForce GT 630", DRIVER_NVIDIA_KEPLER, 1024},
409 {HW_VENDOR_NVIDIA, CARD_NVIDIA_GEFORCE_GT630M, "NVIDIA GeForce GT 630M", DRIVER_NVIDIA_FERMI, 1024},
410 {HW_VENDOR_NVIDIA, CARD_NVIDIA_GEFORCE_GT640, "NVIDIA GeForce GT 640", DRIVER_NVIDIA_KEPLER, 1024},
411 {HW_VENDOR_NVIDIA, CARD_NVIDIA_GEFORCE_GT640M, "NVIDIA GeForce GT 640M", DRIVER_NVIDIA_KEPLER, 1024},
412 {HW_VENDOR_NVIDIA, CARD_NVIDIA_GEFORCE_GT650M, "NVIDIA GeForce GT 650M", DRIVER_NVIDIA_KEPLER, 2048},
413 {HW_VENDOR_NVIDIA, CARD_NVIDIA_GEFORCE_GTX650, "NVIDIA GeForce GTX 650", DRIVER_NVIDIA_KEPLER, 1024},
414 {HW_VENDOR_NVIDIA, CARD_NVIDIA_GEFORCE_GTX650TI, "NVIDIA GeForce GTX 650 Ti", DRIVER_NVIDIA_KEPLER, 1024},
415 {HW_VENDOR_NVIDIA, CARD_NVIDIA_GEFORCE_GTX660, "NVIDIA GeForce GTX 660", DRIVER_NVIDIA_KEPLER, 2048},
416 {HW_VENDOR_NVIDIA, CARD_NVIDIA_GEFORCE_GTX660M, "NVIDIA GeForce GTX 660M", DRIVER_NVIDIA_KEPLER, 2048},
417 {HW_VENDOR_NVIDIA, CARD_NVIDIA_GEFORCE_GTX660TI, "NVIDIA GeForce GTX 660 Ti", DRIVER_NVIDIA_KEPLER, 2048},
418 {HW_VENDOR_NVIDIA, CARD_NVIDIA_GEFORCE_GTX670, "NVIDIA GeForce GTX 670", DRIVER_NVIDIA_KEPLER, 2048},
419 {HW_VENDOR_NVIDIA, CARD_NVIDIA_GEFORCE_GTX670MX, "NVIDIA GeForce GTX 670MX", DRIVER_NVIDIA_KEPLER, 3072},
420 {HW_VENDOR_NVIDIA, CARD_NVIDIA_GEFORCE_GTX675MX_1, "NVIDIA GeForce GTX 675MX", DRIVER_NVIDIA_KEPLER, 4096},
421 {HW_VENDOR_NVIDIA, CARD_NVIDIA_GEFORCE_GTX675MX_2, "NVIDIA GeForce GTX 675MX", DRIVER_NVIDIA_KEPLER, 2048},
422 {HW_VENDOR_NVIDIA, CARD_NVIDIA_GEFORCE_GTX680, "NVIDIA GeForce GTX 680", DRIVER_NVIDIA_KEPLER, 2048},
423 {HW_VENDOR_NVIDIA, CARD_NVIDIA_GEFORCE_GTX690, "NVIDIA GeForce GTX 690", DRIVER_NVIDIA_KEPLER, 2048},
424 {HW_VENDOR_NVIDIA, CARD_NVIDIA_GEFORCE_GT720, "NVIDIA GeForce GT 720", DRIVER_NVIDIA_KEPLER, 2048},
425 {HW_VENDOR_NVIDIA, CARD_NVIDIA_GEFORCE_GT730, "NVIDIA GeForce GT 730", DRIVER_NVIDIA_KEPLER, 2048},
426 {HW_VENDOR_NVIDIA, CARD_NVIDIA_GEFORCE_GT730M, "NVIDIA GeForce GT 730M", DRIVER_NVIDIA_KEPLER, 1024},
427 {HW_VENDOR_NVIDIA, CARD_NVIDIA_GEFORCE_GT740M, "NVIDIA GeForce GT 740M", DRIVER_NVIDIA_KEPLER, 2048},
428 {HW_VENDOR_NVIDIA, CARD_NVIDIA_GEFORCE_GT750M, "NVIDIA GeForce GT 750M", DRIVER_NVIDIA_KEPLER, 1024},
429 {HW_VENDOR_NVIDIA, CARD_NVIDIA_GEFORCE_GT755M, "NVIDIA GeForce GT 755M", DRIVER_NVIDIA_KEPLER, 1024},
430 {HW_VENDOR_NVIDIA, CARD_NVIDIA_GEFORCE_GTX750, "NVIDIA GeForce GTX 750", DRIVER_NVIDIA_KEPLER, 1024},
431 {HW_VENDOR_NVIDIA, CARD_NVIDIA_GEFORCE_GTX750TI, "NVIDIA GeForce GTX 750 Ti", DRIVER_NVIDIA_KEPLER, 2048},
432 {HW_VENDOR_NVIDIA, CARD_NVIDIA_GEFORCE_GTX760, "NVIDIA GeForce GTX 760", DRIVER_NVIDIA_KEPLER, 2048},
433 {HW_VENDOR_NVIDIA, CARD_NVIDIA_GEFORCE_GTX760TI, "NVIDIA GeForce GTX 760 Ti", DRIVER_NVIDIA_KEPLER, 2048},
434 {HW_VENDOR_NVIDIA, CARD_NVIDIA_GEFORCE_GTX765M, "NVIDIA GeForce GTX 765M", DRIVER_NVIDIA_KEPLER, 2048},
435 {HW_VENDOR_NVIDIA, CARD_NVIDIA_GEFORCE_GTX770M, "NVIDIA GeForce GTX 770M", DRIVER_NVIDIA_KEPLER, 3072},
436 {HW_VENDOR_NVIDIA, CARD_NVIDIA_GEFORCE_GTX770, "NVIDIA GeForce GTX 770", DRIVER_NVIDIA_KEPLER, 2048},
437 {HW_VENDOR_NVIDIA, CARD_NVIDIA_GEFORCE_GTX775M, "NVIDIA GeForce GTX 775M", DRIVER_NVIDIA_KEPLER, 3072},
438 {HW_VENDOR_NVIDIA, CARD_NVIDIA_GEFORCE_GTX780, "NVIDIA GeForce GTX 780", DRIVER_NVIDIA_KEPLER, 3072},
439 {HW_VENDOR_NVIDIA, CARD_NVIDIA_GEFORCE_GTX780M, "NVIDIA GeForce GTX 780M", DRIVER_NVIDIA_KEPLER, 4096},
440 {HW_VENDOR_NVIDIA, CARD_NVIDIA_GEFORCE_GTX780TI, "NVIDIA GeForce GTX 780 Ti", DRIVER_NVIDIA_KEPLER, 3072},
441 {HW_VENDOR_NVIDIA, CARD_NVIDIA_GEFORCE_GTXTITAN, "NVIDIA GeForce GTX TITAN", DRIVER_NVIDIA_KEPLER, 6144},
442 {HW_VENDOR_NVIDIA, CARD_NVIDIA_GEFORCE_GTXTITANB, "NVIDIA GeForce GTX TITAN Black", DRIVER_NVIDIA_KEPLER, 6144},
443 {HW_VENDOR_NVIDIA, CARD_NVIDIA_GEFORCE_GTXTITANX, "NVIDIA GeForce GTX TITAN X", DRIVER_NVIDIA_KEPLER, 12288},
444 {HW_VENDOR_NVIDIA, CARD_NVIDIA_GEFORCE_GTXTITANZ, "NVIDIA GeForce GTX TITAN Z", DRIVER_NVIDIA_KEPLER, 12288},
445 {HW_VENDOR_NVIDIA, CARD_NVIDIA_GEFORCE_820M, "NVIDIA GeForce 820M", DRIVER_NVIDIA_FERMI, 2048},
446 {HW_VENDOR_NVIDIA, CARD_NVIDIA_GEFORCE_830M, "NVIDIA GeForce 830M", DRIVER_NVIDIA_KEPLER, 2048},
447 {HW_VENDOR_NVIDIA, CARD_NVIDIA_GEFORCE_840M, "NVIDIA GeForce 840M", DRIVER_NVIDIA_KEPLER, 2048},
448 {HW_VENDOR_NVIDIA, CARD_NVIDIA_GEFORCE_845M, "NVIDIA GeForce 845M", DRIVER_NVIDIA_KEPLER, 2048},
449 {HW_VENDOR_NVIDIA, CARD_NVIDIA_GEFORCE_GTX850M, "NVIDIA GeForce GTX 850M", DRIVER_NVIDIA_KEPLER, 2048},
450 {HW_VENDOR_NVIDIA, CARD_NVIDIA_GEFORCE_GTX860M, "NVIDIA GeForce GTX 860M", DRIVER_NVIDIA_KEPLER, 2048},
451 {HW_VENDOR_NVIDIA, CARD_NVIDIA_GEFORCE_GTX870M, "NVIDIA GeForce GTX 870M", DRIVER_NVIDIA_KEPLER, 3072},
452 {HW_VENDOR_NVIDIA, CARD_NVIDIA_GEFORCE_GTX880M, "NVIDIA GeForce GTX 880M", DRIVER_NVIDIA_KEPLER, 4096},
453 {HW_VENDOR_NVIDIA, CARD_NVIDIA_GEFORCE_940M, "NVIDIA GeForce 940M", DRIVER_NVIDIA_KEPLER, 4096},
454 {HW_VENDOR_NVIDIA, CARD_NVIDIA_GEFORCE_GTX950, "NVIDIA GeForce GTX 950", DRIVER_NVIDIA_KEPLER, 2048},
455 {HW_VENDOR_NVIDIA, CARD_NVIDIA_GEFORCE_GTX950M, "NVIDIA GeForce GTX 950M", DRIVER_NVIDIA_KEPLER, 4096},
456 {HW_VENDOR_NVIDIA, CARD_NVIDIA_GEFORCE_GTX960, "NVIDIA GeForce GTX 960", DRIVER_NVIDIA_KEPLER, 4096},
457 {HW_VENDOR_NVIDIA, CARD_NVIDIA_GEFORCE_GTX960M, "NVIDIA GeForce GTX 960M", DRIVER_NVIDIA_KEPLER, 2048},
458 {HW_VENDOR_NVIDIA, CARD_NVIDIA_GEFORCE_GTX970, "NVIDIA GeForce GTX 970", DRIVER_NVIDIA_KEPLER, 4096},
459 {HW_VENDOR_NVIDIA, CARD_NVIDIA_GEFORCE_GTX970M, "NVIDIA GeForce GTX 970M", DRIVER_NVIDIA_KEPLER, 3072},
460 {HW_VENDOR_NVIDIA, CARD_NVIDIA_GEFORCE_GTX980, "NVIDIA GeForce GTX 980", DRIVER_NVIDIA_KEPLER, 4096},
461 {HW_VENDOR_NVIDIA, CARD_NVIDIA_GEFORCE_GTX980TI, "NVIDIA GeForce GTX 980 Ti", DRIVER_NVIDIA_KEPLER, 6144},
462 {HW_VENDOR_NVIDIA, CARD_NVIDIA_GEFORCE_GT1030, "NVIDIA GeForce GT 1030", DRIVER_NVIDIA_KEPLER, 2048},
463 {HW_VENDOR_NVIDIA, CARD_NVIDIA_GEFORCE_GTX1050, "NVIDIA GeForce GTX 1050", DRIVER_NVIDIA_KEPLER, 2048},
464 {HW_VENDOR_NVIDIA, CARD_NVIDIA_GEFORCE_GTX1050TI, "NVIDIA GeForce GTX 1050 Ti", DRIVER_NVIDIA_KEPLER, 4096},
465 {HW_VENDOR_NVIDIA, CARD_NVIDIA_GEFORCE_GTX1060_3GB,"NVIDIA GeForce GTX 1060 3GB", DRIVER_NVIDIA_KEPLER, 3072},
466 {HW_VENDOR_NVIDIA, CARD_NVIDIA_GEFORCE_GTX1060, "NVIDIA GeForce GTX 1060", DRIVER_NVIDIA_KEPLER, 6144},
467 {HW_VENDOR_NVIDIA, CARD_NVIDIA_GEFORCE_GTX1060M, "NVIDIA GeForce GTX 1060M", DRIVER_NVIDIA_KEPLER, 6144},
468 {HW_VENDOR_NVIDIA, CARD_NVIDIA_GEFORCE_GTX1070, "NVIDIA GeForce GTX 1070", DRIVER_NVIDIA_KEPLER, 8192},
469 {HW_VENDOR_NVIDIA, CARD_NVIDIA_GEFORCE_GTX1070M, "NVIDIA GeForce GTX 1070M", DRIVER_NVIDIA_KEPLER, 8192},
470 {HW_VENDOR_NVIDIA, CARD_NVIDIA_GEFORCE_GTX1080, "NVIDIA GeForce GTX 1080", DRIVER_NVIDIA_KEPLER, 8192},
471 {HW_VENDOR_NVIDIA, CARD_NVIDIA_GEFORCE_GTX1080M, "NVIDIA GeForce GTX 1080M", DRIVER_NVIDIA_KEPLER, 8192},
472 {HW_VENDOR_NVIDIA, CARD_NVIDIA_GEFORCE_GTX1080TI, "NVIDIA GeForce GTX 1080 Ti", DRIVER_NVIDIA_KEPLER, 11264},
473 {HW_VENDOR_NVIDIA, CARD_NVIDIA_TITANX_PASCAL, "NVIDIA TITAN X (Pascal)", DRIVER_NVIDIA_KEPLER, 12288},
474 {HW_VENDOR_NVIDIA, CARD_NVIDIA_TITANV, "NVIDIA TITAN V", DRIVER_NVIDIA_KEPLER, 12288},
475 {HW_VENDOR_NVIDIA, CARD_NVIDIA_GEFORCE_GTX1650 ,"NVIDIA GeForce GTX 1650" , DRIVER_NVIDIA_KEPLER, 4096},
476 {HW_VENDOR_NVIDIA, CARD_NVIDIA_GEFORCE_GTX1650SUPER,"NVIDIA GeForce GTX 1650 SUPER", DRIVER_NVIDIA_KEPLER, 4096},
477 {HW_VENDOR_NVIDIA, CARD_NVIDIA_GEFORCE_GTX1660SUPER,"NVIDIA GeForce GTX 1660 SUPER", DRIVER_NVIDIA_KEPLER, 6144},
478 {HW_VENDOR_NVIDIA, CARD_NVIDIA_GEFORCE_GTX1660TI, "NVIDIA GeForce GTX 1660 Ti", DRIVER_NVIDIA_KEPLER, 6144},
479 {HW_VENDOR_NVIDIA, CARD_NVIDIA_GEFORCE_RTX2060, "NVIDIA GeForce RTX 2060", DRIVER_NVIDIA_KEPLER, 6144},
480 {HW_VENDOR_NVIDIA, CARD_NVIDIA_GEFORCE_RTX2070, "NVIDIA GeForce RTX 2070", DRIVER_NVIDIA_KEPLER, 8192},
481 {HW_VENDOR_NVIDIA, CARD_NVIDIA_GEFORCE_RTX2080, "NVIDIA GeForce RTX 2080", DRIVER_NVIDIA_KEPLER, 8192},
482 {HW_VENDOR_NVIDIA, CARD_NVIDIA_GEFORCE_RTX2080TI, "NVIDIA GeForce RTX 2080 Ti", DRIVER_NVIDIA_KEPLER, 11264},
483 {HW_VENDOR_NVIDIA, CARD_NVIDIA_GEFORCE_RTX3050, "NVIDIA GeForce RTX 3050", DRIVER_NVIDIA_KEPLER, 6144},
484 {HW_VENDOR_NVIDIA, CARD_NVIDIA_GEFORCE_RTX3060, "NVIDIA GeForce RTX 3060", DRIVER_NVIDIA_KEPLER, 8192},
485 {HW_VENDOR_NVIDIA, CARD_NVIDIA_GEFORCE_RTX3060_LHR, "NVIDIA GeForce RTX 3060 (Low Hash Rate)", DRIVER_NVIDIA_KEPLER, 8192},
486 {HW_VENDOR_NVIDIA, CARD_NVIDIA_GEFORCE_RTX3060TI_GA103, "NVIDIA GeForce RTX 3060 Ti (GA103)", DRIVER_NVIDIA_KEPLER, 8192},
487 {HW_VENDOR_NVIDIA, CARD_NVIDIA_GEFORCE_RTX3060TI_GA104, "NVIDIA GeForce RTX 3060 Ti (GA104)", DRIVER_NVIDIA_KEPLER, 8192},
488 {HW_VENDOR_NVIDIA, CARD_NVIDIA_GEFORCE_RTX3060TI_GA104_LHR, "NVIDIA GeForce RTX 3060 Ti (GA104, Low Hash Rate)", DRIVER_NVIDIA_KEPLER, 8192},
489 {HW_VENDOR_NVIDIA, CARD_NVIDIA_GEFORCE_RTX3070, "NVIDIA GeForce RTX 3070", DRIVER_NVIDIA_KEPLER, 8192},
490 {HW_VENDOR_NVIDIA, CARD_NVIDIA_GEFORCE_RTX3070_LHR, "NVIDIA GeForce RTX 3070 (Low Hash Rate)", DRIVER_NVIDIA_KEPLER, 8192},
491 {HW_VENDOR_NVIDIA, CARD_NVIDIA_GEFORCE_RTX3070_MOBILE, "NVIDIA GeForce RTX 3070 (mobile)", DRIVER_NVIDIA_KEPLER, 8192},
492 {HW_VENDOR_NVIDIA, CARD_NVIDIA_GEFORCE_RTX3070TI, "NVIDIA GeForce RTX 3070 Ti", DRIVER_NVIDIA_KEPLER, 8192},
493 {HW_VENDOR_NVIDIA, CARD_NVIDIA_GEFORCE_RTX3080_10GB, "NVIDIA GeForce RTX 3080 10GB", DRIVER_NVIDIA_KEPLER, 10240},
494 {HW_VENDOR_NVIDIA, CARD_NVIDIA_GEFORCE_RTX3080_10GB_LHR, "NVIDIA GeForce RTX 3080 10GB (Low Hash Rate)", DRIVER_NVIDIA_KEPLER, 10240},
495 {HW_VENDOR_NVIDIA, CARD_NVIDIA_GEFORCE_RTX3080_12GB, "NVIDIA GeForce RTX 3080 12GB", DRIVER_NVIDIA_KEPLER, 10240},
496 {HW_VENDOR_NVIDIA, CARD_NVIDIA_GEFORCE_RTX3080TI, "NVIDIA GeForce RTX 3080 Ti", DRIVER_NVIDIA_KEPLER, 12288},
497 {HW_VENDOR_NVIDIA, CARD_NVIDIA_GEFORCE_RTX3090, "NVIDIA GeForce RTX 3090", DRIVER_NVIDIA_KEPLER, 24576},
498 {HW_VENDOR_NVIDIA, CARD_NVIDIA_GEFORCE_RTX3090TI, "NVIDIA GeForce RTX 3090 Ti", DRIVER_NVIDIA_KEPLER, 24576},
499 {HW_VENDOR_NVIDIA, CARD_NVIDIA_TESLA_T4, "NVIDIA Tesla T4", DRIVER_NVIDIA_KEPLER, 16384},
500 {HW_VENDOR_NVIDIA, CARD_NVIDIA_AMPERE_A10, "NVIDIA Ampere A10", DRIVER_NVIDIA_KEPLER, 24576},
501 {HW_VENDOR_NVIDIA, CARD_NVIDIA_GEFORCE_RTX4060, "NVIDIA GeForce RTX 4060", DRIVER_NVIDIA_KEPLER, 8192},
502 {HW_VENDOR_NVIDIA, CARD_NVIDIA_GEFORCE_RTX4060TI8G, "NVIDIA GeForce RTX 4060 Ti 8GB", DRIVER_NVIDIA_KEPLER, 8192},
503 {HW_VENDOR_NVIDIA, CARD_NVIDIA_GEFORCE_RTX4060TI16G, "NVIDIA GeForce RTX 4060 Ti 16GB", DRIVER_NVIDIA_KEPLER, 16384},
504 {HW_VENDOR_NVIDIA, CARD_NVIDIA_GEFORCE_RTX4070, "NVIDIA GeForce RTX 4070", DRIVER_NVIDIA_KEPLER, 12288},
505 {HW_VENDOR_NVIDIA, CARD_NVIDIA_GEFORCE_RTX4070SUPER, "NVIDIA GeForce RTX 4070 SUPER", DRIVER_NVIDIA_KEPLER, 12288},
506 {HW_VENDOR_NVIDIA, CARD_NVIDIA_GEFORCE_RTX4070TI, "NVIDIA GeForce RTX 4070 Ti", DRIVER_NVIDIA_KEPLER, 12288},
507 {HW_VENDOR_NVIDIA, CARD_NVIDIA_GEFORCE_RTX4070TISUPER, "NVIDIA GeForce RTX 4070 Ti SUPER", DRIVER_NVIDIA_KEPLER, 16384},
508 {HW_VENDOR_NVIDIA, CARD_NVIDIA_GEFORCE_RTX4080, "NVIDIA GeForce RTX 4080", DRIVER_NVIDIA_KEPLER, 16384},
509 {HW_VENDOR_NVIDIA, CARD_NVIDIA_GEFORCE_RTX4080SUPER, "NVIDIA GeForce RTX 4080 SUPER", DRIVER_NVIDIA_KEPLER, 16384},
510 {HW_VENDOR_NVIDIA, CARD_NVIDIA_GEFORCE_RTX4090, "NVIDIA GeForce RTX 4090", DRIVER_NVIDIA_KEPLER, 24576},
511
512 /* AMD cards */
514 {HW_VENDOR_AMD, CARD_AMD_RADEON_7200, "ATI RADEON 7200 SERIES", DRIVER_AMD_R100, 32 },
515 {HW_VENDOR_AMD, CARD_AMD_RADEON_8500, "ATI RADEON 8500 SERIES", DRIVER_AMD_R100, 64 },
516 {HW_VENDOR_AMD, CARD_AMD_RADEON_9500, "ATI Radeon 9500", DRIVER_AMD_R300, 64 },
517 {HW_VENDOR_AMD, CARD_AMD_RADEON_XPRESS_200M, "ATI RADEON XPRESS 200M Series", DRIVER_AMD_R300, 64 },
518 {HW_VENDOR_AMD, CARD_AMD_RADEON_X700, "ATI Radeon X700 SE", DRIVER_AMD_R300, 128 },
519 {HW_VENDOR_AMD, CARD_AMD_RADEON_X1600, "ATI Radeon X1600 Series", DRIVER_AMD_R300, 128 },
520 {HW_VENDOR_AMD, CARD_AMD_RADEON_HD2350, "ATI Mobility Radeon HD 2350", DRIVER_AMD_R600, 256 },
521 {HW_VENDOR_AMD, CARD_AMD_RADEON_HD2600, "ATI Mobility Radeon HD 2600", DRIVER_AMD_R600, 256 },
522 {HW_VENDOR_AMD, CARD_AMD_RADEON_HD2900, "ATI Radeon HD 2900 XT", DRIVER_AMD_R600, 512 },
523 {HW_VENDOR_AMD, CARD_AMD_RADEON_HD3200, "ATI Radeon HD 3200 Graphics", DRIVER_AMD_R600, 128 },
524 {HW_VENDOR_AMD, CARD_AMD_RADEON_HD3850, "ATI Radeon HD 3850 AGP", DRIVER_AMD_R600, 512 },
525 {HW_VENDOR_AMD, CARD_AMD_RADEON_HD4200M, "ATI Mobility Radeon HD 4200", DRIVER_AMD_R600, 256 },
526 {HW_VENDOR_AMD, CARD_AMD_RADEON_HD4350, "ATI Radeon HD 4350", DRIVER_AMD_R600, 256 },
527 {HW_VENDOR_AMD, CARD_AMD_RADEON_HD4600, "ATI Radeon HD 4600 Series", DRIVER_AMD_R600, 512 },
528 {HW_VENDOR_AMD, CARD_AMD_RADEON_HD4700, "ATI Radeon HD 4700 Series", DRIVER_AMD_R600, 512 },
529 {HW_VENDOR_AMD, CARD_AMD_RADEON_HD4800, "ATI Radeon HD 4800 Series", DRIVER_AMD_R600, 512 },
530 {HW_VENDOR_AMD, CARD_AMD_RADEON_HD5400, "ATI Radeon HD 5400 Series", DRIVER_AMD_R600, 512 },
531 {HW_VENDOR_AMD, CARD_AMD_RADEON_HD5600, "ATI Radeon HD 5600 Series", DRIVER_AMD_R600, 512 },
532 {HW_VENDOR_AMD, CARD_AMD_RADEON_HD5700, "ATI Radeon HD 5700 Series", DRIVER_AMD_R600, 512 },
533 {HW_VENDOR_AMD, CARD_AMD_RADEON_HD5800, "ATI Radeon HD 5800 Series", DRIVER_AMD_R600, 1024},
534 {HW_VENDOR_AMD, CARD_AMD_RADEON_HD5900, "ATI Radeon HD 5900 Series", DRIVER_AMD_R600, 1024},
535 {HW_VENDOR_AMD, CARD_AMD_RADEON_HD6300, "AMD Radeon HD 6300 series Graphics", DRIVER_AMD_R600, 1024},
536 {HW_VENDOR_AMD, CARD_AMD_RADEON_HD6400, "AMD Radeon HD 6400 Series", DRIVER_AMD_R600, 1024},
537 {HW_VENDOR_AMD, CARD_AMD_RADEON_HD6410D, "AMD Radeon HD 6410D", DRIVER_AMD_R600, 1024},
538 {HW_VENDOR_AMD, CARD_AMD_RADEON_HD6480G, "AMD Radeon HD 6480G", DRIVER_AMD_R600, 512 },
539 {HW_VENDOR_AMD, CARD_AMD_RADEON_HD6490M, "AMD Radeon HD 6490M", DRIVER_AMD_R600, 1024},
540 {HW_VENDOR_AMD, CARD_AMD_RADEON_HD6550D, "AMD Radeon HD 6550D", DRIVER_AMD_R600, 1024},
541 {HW_VENDOR_AMD, CARD_AMD_RADEON_HD6600, "AMD Radeon HD 6600 Series", DRIVER_AMD_R600, 1024},
542 {HW_VENDOR_AMD, CARD_AMD_RADEON_HD6600M, "AMD Radeon HD 6600M Series", DRIVER_AMD_R600, 512 },
543 {HW_VENDOR_AMD, CARD_AMD_RADEON_HD6700, "AMD Radeon HD 6700 Series", DRIVER_AMD_R600, 1024},
544 {HW_VENDOR_AMD, CARD_AMD_RADEON_HD6800, "AMD Radeon HD 6800 Series", DRIVER_AMD_R600, 1024},
545 {HW_VENDOR_AMD, CARD_AMD_RADEON_HD6900, "AMD Radeon HD 6900 Series", DRIVER_AMD_R600, 2048},
546 {HW_VENDOR_AMD, CARD_AMD_RADEON_HD7660D, "AMD Radeon HD 7660D", DRIVER_AMD_R600, 2048},
547 {HW_VENDOR_AMD, CARD_AMD_RADEON_HD7700, "AMD Radeon HD 7700 Series", DRIVER_AMD_R600, 1024},
548 {HW_VENDOR_AMD, CARD_AMD_RADEON_HD7800, "AMD Radeon HD 7800 Series", DRIVER_AMD_R600, 2048},
549 {HW_VENDOR_AMD, CARD_AMD_RADEON_HD7870, "AMD Radeon HD 7870 Series", DRIVER_AMD_R600, 2048},
550 {HW_VENDOR_AMD, CARD_AMD_RADEON_HD7900, "AMD Radeon HD 7900 Series", DRIVER_AMD_R600, 2048},
551 {HW_VENDOR_AMD, CARD_AMD_RADEON_HD8600M, "AMD Radeon HD 8600M Series", DRIVER_AMD_R600, 1024},
552 {HW_VENDOR_AMD, CARD_AMD_RADEON_HD8670, "AMD Radeon HD 8670", DRIVER_AMD_R600, 2048},
553 {HW_VENDOR_AMD, CARD_AMD_RADEON_HD8770, "AMD Radeon HD 8770", DRIVER_AMD_R600, 2048},
554 {HW_VENDOR_AMD, CARD_AMD_RADEON_R3, "AMD Radeon HD 8400 / R3 Series", DRIVER_AMD_R600, 2048},
555 {HW_VENDOR_AMD, CARD_AMD_RADEON_R7, "AMD Radeon(TM) R7 Graphics", DRIVER_AMD_R600, 2048},
556 {HW_VENDOR_AMD, CARD_AMD_RADEON_R9_285, "AMD Radeon R9 285", DRIVER_AMD_RX, 2048},
557 {HW_VENDOR_AMD, CARD_AMD_RADEON_R9_290, "AMD Radeon R9 290", DRIVER_AMD_RX, 4096},
558 {HW_VENDOR_AMD, CARD_AMD_RADEON_R9_290X, "AMD Radeon R9 290X", DRIVER_AMD_RX, 4096},
559 {HW_VENDOR_AMD, CARD_AMD_RADEON_R9_FURY, "AMD Radeon (TM) R9 Fury Series", DRIVER_AMD_RX, 4096},
560 {HW_VENDOR_AMD, CARD_AMD_RADEON_R9_M370X, "AMD Radeon R9 M370X", DRIVER_AMD_RX, 2048},
561 {HW_VENDOR_AMD, CARD_AMD_RADEON_R9_M380, "AMD Radeon R9 M380", DRIVER_AMD_RX, 2048},
562 {HW_VENDOR_AMD, CARD_AMD_RADEON_R9_M395X, "AMD Radeon R9 M395X", DRIVER_AMD_RX, 4096},
563 {HW_VENDOR_AMD, CARD_AMD_RADEON_RX_460, "Radeon(TM) RX 460 Graphics", DRIVER_AMD_RX, 4096},
564 {HW_VENDOR_AMD, CARD_AMD_RADEON_RX_480, "Radeon (TM) RX 480 Graphics", DRIVER_AMD_RX, 4096},
565 {HW_VENDOR_AMD, CARD_AMD_RADEON_RX_VEGA_10, "Radeon RX Vega", DRIVER_AMD_RX, 8192},
566 {HW_VENDOR_AMD, CARD_AMD_RADEON_RX_VEGA_12, "Radeon Pro Vega 20", DRIVER_AMD_RX, 4096},
567 {HW_VENDOR_AMD, CARD_AMD_RADEON_RAVEN, "AMD Radeon(TM) Vega 10 Mobile Graphics", DRIVER_AMD_RX, 1024},
568 {HW_VENDOR_AMD, CARD_AMD_RADEON_RX_VEGA_20, "Radeon RX Vega 20", DRIVER_AMD_RX, 4096},
569 {HW_VENDOR_AMD, CARD_AMD_RADEON_RX_NAVI_10, "Radeon RX 5700 / 5700 XT", DRIVER_AMD_RX, 8192},
570 {HW_VENDOR_AMD, CARD_AMD_RADEON_RX_NAVI_14, "Radeon RX 5500M", DRIVER_AMD_RX, 4096},
571 {HW_VENDOR_AMD, CARD_AMD_RADEON_RX_NAVI_21, "Radeon RX 6800/6800 XT / 6900 XT", DRIVER_AMD_RX, 16384},
572 {HW_VENDOR_AMD, CARD_AMD_RADEON_PRO_V620, "Radeon Pro V620", DRIVER_AMD_RX, 32768},
573 {HW_VENDOR_AMD, CARD_AMD_RADEON_PRO_V620_VF, "Radeon Pro V620 VF", DRIVER_AMD_RX, 32768},
574 {HW_VENDOR_AMD, CARD_AMD_VANGOGH, "AMD VANGOGH", DRIVER_AMD_RX, 4096},
575 {HW_VENDOR_AMD, CARD_AMD_RAPHAEL, "AMD Radeon(TM) Graphics", DRIVER_AMD_RX, 4096},
576
577 /* Red Hat */
578 {HW_VENDOR_REDHAT, CARD_REDHAT_VIRGL, "Red Hat VirtIO GPU", DRIVER_REDHAT_VIRGL, 1024},
579
580 /* VMware */
581 {HW_VENDOR_VMWARE, CARD_VMWARE_SVGA3D, "VMware SVGA 3D (Microsoft Corporation - WDDM)", DRIVER_VMWARE, 1024},
582
583 /* Intel cards */
584 {HW_VENDOR_INTEL, CARD_INTEL_830M, "Intel(R) 82830M Graphics Controller", DRIVER_INTEL_GMA800, 32 },
585 {HW_VENDOR_INTEL, CARD_INTEL_855GM, "Intel(R) 82852/82855 GM/GME Graphics Controller", DRIVER_INTEL_GMA800, 32 },
586 {HW_VENDOR_INTEL, CARD_INTEL_845G, "Intel(R) 845G", DRIVER_INTEL_GMA800, 32 },
587 {HW_VENDOR_INTEL, CARD_INTEL_865G, "Intel(R) 82865G Graphics Controller", DRIVER_INTEL_GMA800, 32 },
588 {HW_VENDOR_INTEL, CARD_INTEL_915G, "Intel(R) 82915G/GV/910GL Express Chipset Family", DRIVER_INTEL_GMA900, 64 },
589 {HW_VENDOR_INTEL, CARD_INTEL_E7221G, "Intel(R) E7221G", DRIVER_INTEL_GMA900, 64 },
590 {HW_VENDOR_INTEL, CARD_INTEL_915GM, "Mobile Intel(R) 915GM/GMS,910GML Express Chipset Family", DRIVER_INTEL_GMA900, 64 },
591 {HW_VENDOR_INTEL, CARD_INTEL_945G, "Intel(R) 945G", DRIVER_INTEL_GMA950, 64 },
592 {HW_VENDOR_INTEL, CARD_INTEL_945GM, "Mobile Intel(R) 945GM Express Chipset Family", DRIVER_INTEL_GMA950, 64 },
593 {HW_VENDOR_INTEL, CARD_INTEL_945GME, "Intel(R) 945GME", DRIVER_INTEL_GMA950, 64 },
594 {HW_VENDOR_INTEL, CARD_INTEL_Q35, "Intel(R) Q35", DRIVER_INTEL_GMA950, 64 },
595 {HW_VENDOR_INTEL, CARD_INTEL_G33, "Intel(R) G33", DRIVER_INTEL_GMA950, 64 },
596 {HW_VENDOR_INTEL, CARD_INTEL_Q33, "Intel(R) Q33", DRIVER_INTEL_GMA950, 64 },
597 {HW_VENDOR_INTEL, CARD_INTEL_PNVG, "Intel(R) IGD", DRIVER_INTEL_GMA950, 64 },
598 {HW_VENDOR_INTEL, CARD_INTEL_PNVM, "Intel(R) IGD", DRIVER_INTEL_GMA950, 64 },
599 {HW_VENDOR_INTEL, CARD_INTEL_965Q, "Intel(R) 965Q", DRIVER_INTEL_GMA3000, 128},
600 {HW_VENDOR_INTEL, CARD_INTEL_965G, "Intel(R) 965G", DRIVER_INTEL_GMA3000, 128},
601 {HW_VENDOR_INTEL, CARD_INTEL_946GZ, "Intel(R) 946GZ", DRIVER_INTEL_GMA3000, 128},
602 {HW_VENDOR_INTEL, CARD_INTEL_965GM, "Mobile Intel(R) 965 Express Chipset Family", DRIVER_INTEL_GMA3000, 128},
603 {HW_VENDOR_INTEL, CARD_INTEL_965GME, "Intel(R) 965GME", DRIVER_INTEL_GMA3000, 128},
604 {HW_VENDOR_INTEL, CARD_INTEL_GM45, "Mobile Intel(R) GM45 Express Chipset Family", DRIVER_INTEL_GMA3000, 512},
605 {HW_VENDOR_INTEL, CARD_INTEL_IGD, "Intel(R) Integrated Graphics Device", DRIVER_INTEL_GMA3000, 512},
606 {HW_VENDOR_INTEL, CARD_INTEL_G45, "Intel(R) G45/G43", DRIVER_INTEL_GMA3000, 512},
607 {HW_VENDOR_INTEL, CARD_INTEL_Q45, "Intel(R) Q45/Q43", DRIVER_INTEL_GMA3000, 512},
608 {HW_VENDOR_INTEL, CARD_INTEL_G41, "Intel(R) G41", DRIVER_INTEL_GMA3000, 512},
609 {HW_VENDOR_INTEL, CARD_INTEL_B43, "Intel(R) B43", DRIVER_INTEL_GMA3000, 512},
610 {HW_VENDOR_INTEL, CARD_INTEL_ILKD, "Intel(R) HD Graphics", DRIVER_INTEL_GMA3000, 1536},
611 {HW_VENDOR_INTEL, CARD_INTEL_ILKM, "Intel(R) HD Graphics", DRIVER_INTEL_GMA3000, 1536},
612 {HW_VENDOR_INTEL, CARD_INTEL_SNBD, "Intel(R) HD Graphics 3000", DRIVER_INTEL_GMA3000, 1536},
613 {HW_VENDOR_INTEL, CARD_INTEL_SNBM, "Intel(R) HD Graphics 3000", DRIVER_INTEL_GMA3000, 1536},
614 {HW_VENDOR_INTEL, CARD_INTEL_SNBS, "Intel(R) HD Graphics Family", DRIVER_INTEL_GMA3000, 1536},
615 {HW_VENDOR_INTEL, CARD_INTEL_IVBD, "Intel(R) HD Graphics 4000", DRIVER_INTEL_HD4000, 1536},
616 {HW_VENDOR_INTEL, CARD_INTEL_IVBM, "Intel(R) HD Graphics 4000", DRIVER_INTEL_HD4000, 1536},
617 {HW_VENDOR_INTEL, CARD_INTEL_IVBS, "Intel(R) HD Graphics Family", DRIVER_INTEL_HD4000, 1536},
618 {HW_VENDOR_INTEL, CARD_INTEL_HWD, "Intel(R) HD Graphics 4600", DRIVER_INTEL_HD4000, 1536},
619 {HW_VENDOR_INTEL, CARD_INTEL_HWM, "Intel(R) HD Graphics 4600", DRIVER_INTEL_HD4000, 1536},
620 {HW_VENDOR_INTEL, CARD_INTEL_HD5000_1, "Intel(R) HD Graphics 5000", DRIVER_INTEL_HD4000, 1536},
621 {HW_VENDOR_INTEL, CARD_INTEL_HD5000_2, "Intel(R) HD Graphics 5000", DRIVER_INTEL_HD4000, 1536},
622 {HW_VENDOR_INTEL, CARD_INTEL_I5100_1, "Intel(R) Iris(TM) Graphics 5100", DRIVER_INTEL_HD4000, 1536},
623 {HW_VENDOR_INTEL, CARD_INTEL_I5100_2, "Intel(R) Iris(TM) Graphics 5100", DRIVER_INTEL_HD4000, 1536},
624 {HW_VENDOR_INTEL, CARD_INTEL_I5100_3, "Intel(R) Iris(TM) Graphics 5100", DRIVER_INTEL_HD4000, 1536},
625 {HW_VENDOR_INTEL, CARD_INTEL_I5100_4, "Intel(R) Iris(TM) Graphics 5100", DRIVER_INTEL_HD4000, 1536},
626 {HW_VENDOR_INTEL, CARD_INTEL_IP5200_1, "Intel(R) Iris(TM) Pro Graphics 5200", DRIVER_INTEL_HD4000, 1536},
627 {HW_VENDOR_INTEL, CARD_INTEL_IP5200_2, "Intel(R) Iris(TM) Pro Graphics 5200", DRIVER_INTEL_HD4000, 1536},
628 {HW_VENDOR_INTEL, CARD_INTEL_IP5200_3, "Intel(R) Iris(TM) Pro Graphics 5200", DRIVER_INTEL_HD4000, 1536},
629 {HW_VENDOR_INTEL, CARD_INTEL_IP5200_4, "Intel(R) Iris(TM) Pro Graphics 5200", DRIVER_INTEL_HD4000, 1536},
630 {HW_VENDOR_INTEL, CARD_INTEL_IP5200_5, "Intel(R) Iris(TM) Pro Graphics 5200", DRIVER_INTEL_HD4000, 1536},
631 {HW_VENDOR_INTEL, CARD_INTEL_IP5200_6, "Intel(R) Iris(TM) Pro Graphics 5200", DRIVER_INTEL_HD4000, 2048},
632 {HW_VENDOR_INTEL, CARD_INTEL_HD5300, "Intel(R) HD Graphics 5300", DRIVER_INTEL_HD4000, 2048},
633 {HW_VENDOR_INTEL, CARD_INTEL_HD5500, "Intel(R) HD Graphics 5500", DRIVER_INTEL_HD4000, 2048},
634 {HW_VENDOR_INTEL, CARD_INTEL_HD5600, "Intel(R) HD Graphics 5600", DRIVER_INTEL_HD4000, 2048},
635 {HW_VENDOR_INTEL, CARD_INTEL_HD6000, "Intel(R) HD Graphics 6000", DRIVER_INTEL_HD4000, 2048},
636 {HW_VENDOR_INTEL, CARD_INTEL_I6100, "Intel(R) Iris(TM) Graphics 6100", DRIVER_INTEL_HD4000, 2048},
637 {HW_VENDOR_INTEL, CARD_INTEL_IP6200, "Intel(R) Iris(TM) Pro Graphics 6200", DRIVER_INTEL_HD4000, 2048},
638 {HW_VENDOR_INTEL, CARD_INTEL_IPP6300, "Intel(R) Iris(TM) Pro Graphics P6300", DRIVER_INTEL_HD4000, 2048},
639 {HW_VENDOR_INTEL, CARD_INTEL_HD510_1, "Intel(R) HD Graphics 510", DRIVER_INTEL_HD4000, 2048},
640 {HW_VENDOR_INTEL, CARD_INTEL_HD510_2, "Intel(R) HD Graphics 510", DRIVER_INTEL_HD4000, 2048},
641 {HW_VENDOR_INTEL, CARD_INTEL_HD510_3, "Intel(R) HD Graphics 510", DRIVER_INTEL_HD4000, 2048},
642 {HW_VENDOR_INTEL, CARD_INTEL_HD515, "Intel(R) HD Graphics 515", DRIVER_INTEL_HD4000, 2048},
643 {HW_VENDOR_INTEL, CARD_INTEL_HD520_1, "Intel(R) HD Graphics 520", DRIVER_INTEL_HD4000, 2048},
644 {HW_VENDOR_INTEL, CARD_INTEL_HD520_2, "Intel(R) HD Graphics 520", DRIVER_INTEL_HD4000, 2048},
645 {HW_VENDOR_INTEL, CARD_INTEL_HD530_1, "Intel(R) HD Graphics 530", DRIVER_INTEL_HD4000, 2048},
646 {HW_VENDOR_INTEL, CARD_INTEL_HD530_2, "Intel(R) HD Graphics 530", DRIVER_INTEL_HD4000, 2048},
647 {HW_VENDOR_INTEL, CARD_INTEL_HDP530, "Intel(R) HD Graphics P530", DRIVER_INTEL_HD4000, 2048},
648 {HW_VENDOR_INTEL, CARD_INTEL_I540, "Intel(R) Iris(TM) Graphics 540", DRIVER_INTEL_HD4000, 2048},
649 {HW_VENDOR_INTEL, CARD_INTEL_I550, "Intel(R) Iris(TM) Graphics 550", DRIVER_INTEL_HD4000, 2048},
650 {HW_VENDOR_INTEL, CARD_INTEL_I555, "Intel(R) Iris(TM) Graphics 555", DRIVER_INTEL_HD4000, 2048},
651 {HW_VENDOR_INTEL, CARD_INTEL_IP555, "Intel(R) Iris(TM) Graphics P555", DRIVER_INTEL_HD4000, 2048},
652 {HW_VENDOR_INTEL, CARD_INTEL_IP580_1, "Intel(R) Iris(TM) Pro Graphics 580", DRIVER_INTEL_HD4000, 2048},
653 {HW_VENDOR_INTEL, CARD_INTEL_IP580_2, "Intel(R) Iris(TM) Pro Graphics 580", DRIVER_INTEL_HD4000, 2048},
654 {HW_VENDOR_INTEL, CARD_INTEL_IPP580_1, "Intel(R) Iris(TM) Pro Graphics P580", DRIVER_INTEL_HD4000, 2048},
655 {HW_VENDOR_INTEL, CARD_INTEL_IPP580_2, "Intel(R) Iris(TM) Pro Graphics P580", DRIVER_INTEL_HD4000, 2048},
656 {HW_VENDOR_INTEL, CARD_INTEL_UHD617, "Intel(R) UHD Graphics 617", DRIVER_INTEL_HD4000, 2048},
657 {HW_VENDOR_INTEL, CARD_INTEL_UHD620, "Intel(R) UHD Graphics 620", DRIVER_INTEL_HD4000, 3072},
658 {HW_VENDOR_INTEL, CARD_INTEL_HD615, "Intel(R) HD Graphics 615", DRIVER_INTEL_HD4000, 2048},
659 {HW_VENDOR_INTEL, CARD_INTEL_HD620, "Intel(R) HD Graphics 620", DRIVER_INTEL_HD4000, 3072},
660 {HW_VENDOR_INTEL, CARD_INTEL_HD630_1, "Intel(R) HD Graphics 630", DRIVER_INTEL_HD4000, 3072},
661 {HW_VENDOR_INTEL, CARD_INTEL_HD630_2, "Intel(R) HD Graphics 630", DRIVER_INTEL_HD4000, 3072},
662 {HW_VENDOR_INTEL, CARD_INTEL_UHD630_1, "Intel(R) UHD Graphics 630", DRIVER_INTEL_HD4000, 3072},
663 {HW_VENDOR_INTEL, CARD_INTEL_UHD630_2, "Intel(R) UHD Graphics 630", DRIVER_INTEL_HD4000, 3072},
664};
665
668{
669 unsigned int i;
670
671 TRACE("Looking up version info for driver %#x, driver_model %#x.\n", driver, driver_model);
672
673 for (i = 0; i < ARRAY_SIZE(driver_version_table); ++i)
674 {
676
677 if (entry->driver == driver && (driver_model == DRIVER_MODEL_GENERIC
678 || entry->driver_model == driver_model))
679 {
680 TRACE("Found driver \"%s\", subversion %u, build %u.\n",
681 entry->driver_name, entry->subversion, entry->build);
682 return entry;
683 }
684 }
685 return NULL;
686}
687
690{
691 unsigned int i;
692
693 for (i = 0; i < ARRAY_SIZE(gpu_description_table); ++i)
694 {
696 return &gpu_description_table[i];
697 }
698
699 return NULL;
700}
701
704{
705 const struct wined3d_gpu_description *gpu_desc;
706 static unsigned int once;
707
709 return NULL;
710
712 {
714 TRACE("Overriding vendor PCI ID with 0x%04x.\n", vendor);
715 }
717 {
719 TRACE("Overriding device PCI ID with 0x%04x.\n", device);
720 }
721
722 if (!(gpu_desc = wined3d_get_gpu_description(vendor, device)) && !once++)
723 ERR_(winediag)("Invalid GPU override %04x:%04x specified, ignoring.\n", vendor, device);
724
725 return gpu_desc;
726}
727
728static void wined3d_copy_name(char *dst, const char *src, unsigned int dst_size)
729{
730 size_t len;
731
732 if (dst_size)
733 {
734 len = min(strlen(src), dst_size - 1);
735 memcpy(dst, src, len);
736 memset(&dst[len], 0, dst_size - len);
737 }
738}
739
741 const struct wined3d_gpu_description *gpu_desc, enum wined3d_feature_level feature_level,
742 UINT64 vram_bytes, UINT64 sysmem_bytes)
743{
745 WORD driver_os_version, driver_feature_level = 10;
748 MEMORYSTATUSEX memory_status;
749 OSVERSIONINFOW os_version;
750
751 memset(&os_version, 0, sizeof(os_version));
752 os_version.dwOSVersionInfoSize = sizeof(os_version);
753 if (!GetVersionExW(&os_version))
754 {
755 ERR("Failed to get OS version, reporting 2000/XP.\n");
756 driver_os_version = 6;
758 }
759 else
760 {
761 TRACE("OS version %lu.%lu.\n", os_version.dwMajorVersion, os_version.dwMinorVersion);
762 switch (os_version.dwMajorVersion)
763 {
764 case 2:
765 case 3:
766 case 4:
767 /* If needed we could distinguish between 9x and NT4, but this code won't make
768 * sense for NT4 since it had no way to obtain this info through DirectDraw 3.0.
769 */
770 driver_os_version = 4;
772 break;
773
774 case 5:
775 driver_os_version = 6;
777 break;
778
779 case 6:
780 if (os_version.dwMinorVersion == 0)
781 {
782 driver_os_version = 7;
784 }
785 else if (os_version.dwMinorVersion == 1)
786 {
787 driver_os_version = 8;
789 }
790 else if (os_version.dwMinorVersion == 2)
791 {
792 driver_os_version = 9;
794 }
795 else
796 {
797 if (os_version.dwMinorVersion > 3)
798 {
799 FIXME("Unhandled OS version %lu.%lu, reporting Windows 8.1.\n",
800 os_version.dwMajorVersion, os_version.dwMinorVersion);
801 }
802 driver_os_version = 10;
804 }
805 break;
806
807 case 10:
808 driver_os_version = 31;
810 break;
811
812 default:
813 FIXME("Unhandled OS version %lu.%lu, reporting Windows 7.\n",
814 os_version.dwMajorVersion, os_version.dwMinorVersion);
815 driver_os_version = 8;
817 break;
818 }
819 }
820
821 TRACE("GPU maximum feature level %#x.\n", feature_level);
822 switch (feature_level)
823 {
827 driver_feature_level = 5;
828 else
829 driver_feature_level = 10;
830 break;
832 driver_feature_level = 11;
833 break;
835 driver_feature_level = 12;
836 break;
838 driver_feature_level = 13;
839 break;
843 driver_feature_level = 14;
844 break;
846 driver_feature_level = 15;
847 break;
849 driver_feature_level = 16;
850 break;
852 driver_feature_level = 17;
853 break;
855 /* Advertise support for everything up to FL 12_x. */
856 driver_feature_level = 21;
857 break;
858 }
859 if (os_version.dwMajorVersion == 6 && !os_version.dwMinorVersion)
860 driver_feature_level = min(driver_feature_level, 18);
861 else if (os_version.dwMajorVersion < 6)
862 driver_feature_level = min(driver_feature_level, 14);
863
864 /* Drivers with the OS version 30+ all have the feature level word set to 0 */
865 if (driver_os_version >= 30)
866 driver_feature_level = 0;
867
868 driver_info->vendor = gpu_desc->vendor;
869 driver_info->device = gpu_desc->device;
870 wined3d_copy_name(driver_info->description, gpu_desc->description, ARRAY_SIZE(driver_info->description));
871 driver_info->vram_bytes = vram_bytes ? vram_bytes : (UINT64)gpu_desc->vidmem * 1024 * 1024;
872 driver = gpu_desc->driver;
873
875 {
877 TRACE("Overriding amount of video memory with 0x%s bytes.\n",
878 wine_dbgstr_longlong(driver_info->vram_bytes));
879 }
880
886 if (driver_model < DRIVER_MODEL_NT6X && driver_info->vram_bytes > LONG_MAX)
887 {
888 TRACE("Limiting amount of video memory to %#lx bytes for OS version older than Vista.\n", LONG_MAX);
889 driver_info->vram_bytes = LONG_MAX;
890 }
891
892 if (!(driver_info->sysmem_bytes = sysmem_bytes))
893 {
894 driver_info->sysmem_bytes = 64 * 1024 * 1024;
895 memory_status.dwLength = sizeof(memory_status);
896 if (GlobalMemoryStatusEx(&memory_status))
897 driver_info->sysmem_bytes = max(memory_status.ullTotalPhys / 2, driver_info->sysmem_bytes);
898 else
899 ERR("Failed to get global memory status.\n");
900 }
901
902 /* Try to obtain driver version information for the current Windows version. This fails in
903 * some cases:
904 * - the gpu is not available on the currently selected OS version:
905 * - Geforce GTX480 on Win98. When running applications in compatibility mode on Windows,
906 * version information for the current Windows version is returned instead of faked info.
907 * We do the same and assume the default Windows version to emulate is WinXP.
908 *
909 * - Videocard is a Riva TNT but winver is set to win7 (there are no drivers for this beast)
910 * For now return the XP driver info. Perhaps later on we should return VESA.
911 *
912 * - the gpu is not in our database (can happen when the user overrides the vendor_id / device_id)
913 * This could be an indication that our database is not up to date, so this should be fixed.
914 */
917 {
918 driver_info->name = version_info->driver_name;
919 driver_info->version_high = MAKEDWORD_VERSION(driver_os_version, driver_feature_level);
920 driver_info->version_low = MAKEDWORD_VERSION(version_info->subversion, version_info->build);
921
922 return true;
923 }
924
925 ERR("No driver version info found for device %04x:%04x, driver model %#x.\n",
926 driver_info->vendor, driver_info->device, driver_model);
927 return false;
928}
929
931 enum wined3d_feature_level feature_level)
932{
933 static const struct wined3d_fallback_card
934 {
935 enum wined3d_feature_level feature_level;
936 enum wined3d_pci_device device_id;
937 }
938 card_fallback_nvidia[] =
939 {
949 },
950 card_fallback_amd[] =
951 {
960 },
961 card_fallback_intel[] =
962 {
969 };
970
971 static const struct
972 {
974 const struct wined3d_fallback_card *cards;
975 }
976 fallbacks[] =
977 {
978 {HW_VENDOR_AMD, card_fallback_amd},
979 {HW_VENDOR_NVIDIA, card_fallback_nvidia},
980 {HW_VENDOR_VMWARE, card_fallback_amd},
981 {HW_VENDOR_INTEL, card_fallback_intel},
982 };
983
984 const struct wined3d_fallback_card *cards;
985 enum wined3d_pci_device device_id;
986 unsigned int i;
987
988 cards = NULL;
989 for (i = 0; i < ARRAY_SIZE(fallbacks); ++i)
990 {
991 if (*vendor == fallbacks[i].vendor)
992 cards = fallbacks[i].cards;
993 }
994 if (!cards)
995 {
997 cards = card_fallback_nvidia;
998 }
999
1000 device_id = cards->device_id;
1001 for (i = 0; cards[i].feature_level; ++i)
1002 {
1003 if (feature_level >= cards[i].feature_level)
1004 device_id = cards[i].device_id;
1005 }
1006 return device_id;
1007}
1008
1009struct wined3d_adapter * CDECL wined3d_get_adapter(const struct wined3d *wined3d, unsigned int idx)
1010{
1011 TRACE("wined3d %p, idx %u.\n", wined3d, idx);
1012
1013 if (idx >= wined3d->adapter_count)
1014 return NULL;
1015
1016 return wined3d->adapters[idx];
1017}
1018
1020{
1021 TRACE("wined3d %p, reporting %u adapters.\n",
1023
1024 return wined3d->adapter_count;
1025}
1026
1028 unsigned int idx)
1029{
1030 TRACE("adapter %p, idx %u.\n", adapter, idx);
1031
1032 if (idx >= adapter->output_count)
1033 return NULL;
1034
1035 return &adapter->outputs[idx];
1036}
1037
1039{
1040 TRACE("adapter %p, reporting %Iu outputs.\n", adapter, adapter->output_count);
1041
1042 return adapter->output_count;
1043}
1044
1046 unsigned int node_idx, enum wined3d_memory_segment_group group,
1048{
1049 static unsigned int once;
1050 D3DKMT_QUERYVIDEOMEMORYINFO query_memory_info;
1051 struct wined3d_adapter_identifier adapter_id;
1053 HRESULT hr;
1054
1055 TRACE("adapter %p, node_idx %u, group %d, info %p.\n", adapter, node_idx, group, info);
1056
1058 {
1059 WARN("Invalid memory segment group %#x.\n", group);
1060 return E_INVALIDARG;
1061 }
1062
1063 query_memory_info.hProcess = NULL;
1064 query_memory_info.hAdapter = adapter->kmt_adapter;
1065 query_memory_info.PhysicalAdapterIndex = node_idx;
1067 status = D3DKMTQueryVideoMemoryInfo(&query_memory_info);
1068 if (status == STATUS_SUCCESS)
1069 {
1070 info->budget = query_memory_info.Budget;
1071 info->current_usage = query_memory_info.CurrentUsage;
1072 info->current_reservation = query_memory_info.CurrentReservation;
1073 info->available_reservation = query_memory_info.AvailableForReservation;
1074 return WINED3D_OK;
1075 }
1076
1077 /* D3DKMTQueryVideoMemoryInfo() failed, fallback to fake memory info */
1078 if (!once++)
1079 FIXME("Returning fake video memory info.\n");
1080
1081 if (node_idx)
1082 FIXME("Ignoring node index %u.\n", node_idx);
1083
1084 adapter_id.driver_size = 0;
1085 adapter_id.description_size = 0;
1086 if (FAILED(hr = wined3d_adapter_get_identifier(adapter, 0, &adapter_id)))
1087 return hr;
1088
1089 switch (group)
1090 {
1092 info->budget = adapter_id.video_memory;
1093 info->current_usage = adapter->vram_bytes_used;
1094 info->available_reservation = adapter_id.video_memory / 2;
1095 info->current_reservation = 0;
1096 break;
1098 memset(info, 0, sizeof(*info));
1099 break;
1100 }
1101 return WINED3D_OK;
1102}
1103
1105{
1108 HRESULT hr;
1109
1110 SetThreadDescription(GetCurrentThread(), L"wined3d_budget_change_notification");
1111
1112 while (TRUE)
1113 {
1117 {
1120 if (SUCCEEDED(hr) && info.budget != notification->last_local_budget)
1121 {
1122 notification->last_local_budget = info.budget;
1123 SetEvent(notification->event);
1124 continue;
1125 }
1126
1129 if (SUCCEEDED(hr) && info.budget != notification->last_non_local_budget)
1130 {
1131 notification->last_non_local_budget = info.budget;
1132 SetEvent(notification->event);
1133 }
1134 }
1136
1138 break;
1139 }
1140
1141 return TRUE;
1142}
1143
1146{
1147 static DWORD cookie_counter;
1148 static BOOL wrapped;
1150 BOOL found = FALSE;
1151
1152 new_notification = calloc(1, sizeof(*new_notification));
1153 if (!new_notification)
1154 return E_OUTOFMEMORY;
1155
1157 new_notification->adapter = adapter;
1158 new_notification->event = event;
1159 new_notification->cookie = cookie_counter++;
1160 if (cookie_counter < new_notification->cookie)
1161 wrapped = TRUE;
1162 if (wrapped)
1163 {
1164 while (TRUE)
1165 {
1168 {
1169 if (notification->cookie == new_notification->cookie)
1170 {
1171 found = TRUE;
1172 break;
1173 }
1174 }
1175
1176 if (!found)
1177 break;
1178
1179 new_notification->cookie = cookie_counter++;
1180 }
1181 }
1182
1183 *cookie = new_notification->cookie;
1185
1187 {
1191 }
1193 return WINED3D_OK;
1194}
1195
1197{
1199 HANDLE thread, thread_stop_event;
1200
1204 {
1205 if (notification->cookie == cookie)
1206 {
1207 list_remove(&notification->entry);
1209 break;
1210 }
1211 }
1212
1214 {
1216 return WINED3D_OK;
1217 }
1218
1220 thread_stop_event = notification_thread_stop_event;
1224 SetEvent(thread_stop_event);
1227 CloseHandle(thread_stop_event);
1228 return WINED3D_OK;
1229}
1230
1232{
1233 FIXME("wined3d %p, init_function %p stub!\n", wined3d, init_function);
1234
1235 return WINED3D_OK;
1236}
1237
1239{
1242
1243 monitor_info.cbSize = sizeof(monitor_info);
1245 !lstrcmpiW(desc->device_name, monitor_info.szDevice))
1246 {
1247 desc->monitor = monitor;
1248 desc->desktop_rect = monitor_info.rcMonitor;
1249 desc->attached_to_desktop = TRUE;
1250 return FALSE;
1251 }
1252
1253 return TRUE;
1254}
1255
1257 struct wined3d_output_desc *desc)
1258{
1259 TRACE("output %p, desc %p.\n", output, desc);
1260
1261 memset(desc, 0, sizeof(*desc));
1262 desc->ordinal = output->ordinal;
1263 lstrcpyW(desc->device_name, output->device_name);
1265 return WINED3D_OK;
1266}
1267
1268/* FIXME: GetAdapterModeCount and EnumAdapterModes currently only returns modes
1269 of the same bpp but different resolutions */
1270
1271static void wined3d_output_update_modes(struct wined3d_output *output, bool cached)
1272{
1273 struct wined3d_display_mode *wined3d_mode;
1274 DEVMODEW mode = {.dmSize = sizeof(mode)};
1275 unsigned int i;
1276
1277 if (output->modes_valid && cached)
1278 return;
1279
1280 output->mode_count = 0;
1281
1282 for (i = 0; EnumDisplaySettingsExW(output->device_name, i, &mode, 0); ++i)
1283 {
1284 if (!wined3d_array_reserve((void **)&output->modes, &output->modes_size,
1285 output->mode_count + 1, sizeof(*output->modes)))
1286 return;
1287
1288 wined3d_mode = &output->modes[output->mode_count++];
1289 wined3d_mode->width = mode.dmPelsWidth;
1290 wined3d_mode->height = mode.dmPelsHeight;
1291 wined3d_mode->format_id = pixelformat_for_depth(mode.dmBitsPerPel);
1292
1293 if (mode.dmFields & DM_DISPLAYFREQUENCY)
1294 wined3d_mode->refresh_rate = mode.dmDisplayFrequency;
1295 else
1296 wined3d_mode->refresh_rate = DEFAULT_REFRESH_RATE;
1297
1298 if (mode.dmFields & DM_DISPLAYFLAGS)
1299 {
1300 if (mode.dmDisplayFlags & DM_INTERLACED)
1302 else
1304 }
1305 else
1306 {
1308 }
1309 }
1310
1311 output->modes_valid = true;
1312}
1313
1316{
1318 && mode->scanline_ordering != WINED3D_SCANLINE_ORDERING_UNKNOWN
1319 && scanline_ordering != mode->scanline_ordering)
1320 return false;
1321
1322 if (format->id == WINED3DFMT_UNKNOWN)
1323 {
1324 /* This is for d3d8, do not enumerate P8 here. */
1325 if (mode->format_id != WINED3DFMT_B5G6R5_UNORM && mode->format_id != WINED3DFMT_B8G8R8X8_UNORM)
1326 return false;
1327 }
1328 else
1329 {
1330 const struct wined3d_format *mode_format = wined3d_get_format(adapter,
1331 mode->format_id, WINED3D_BIND_RENDER_TARGET);
1332
1333 if (format->byte_count != mode_format->byte_count)
1334 return false;
1335 }
1336
1337 return true;
1338}
1339
1340/* Note: dx9 supplies a format. Calls from d3d8 supply WINED3DFMT_UNKNOWN */
1342 enum wined3d_format_id format_id, enum wined3d_scanline_ordering scanline_ordering, bool cached)
1343{
1344 const struct wined3d_adapter *adapter;
1345 const struct wined3d_format *format;
1346 unsigned int count = 0;
1347 SIZE_T i;
1348
1349 TRACE("output %p, format %s, scanline_ordering %#x.\n",
1350 output, debug_d3dformat(format_id), scanline_ordering);
1351
1352 adapter = output->adapter;
1354
1355 wined3d_output_update_modes(output, cached);
1356
1357 for (i = 0; i < output->mode_count; ++i)
1358 {
1359 if (mode_matches_filter(adapter, &output->modes[i], format, scanline_ordering))
1360 ++count;
1361 }
1362
1363 TRACE("Returning %u matching modes (out of %Iu total).\n", count, output->mode_count);
1364
1365 return count;
1366}
1367
1368/* Note: dx9 supplies a format. Calls from d3d8 supply WINED3DFMT_UNKNOWN */
1370 enum wined3d_format_id format_id, enum wined3d_scanline_ordering scanline_ordering,
1371 unsigned int mode_idx, struct wined3d_display_mode *mode, bool cached)
1372{
1373 const struct wined3d_adapter *adapter;
1374 const struct wined3d_format *format;
1375 SIZE_T i, match_idx = 0;
1376
1377 TRACE("output %p, format %s, scanline_ordering %#x, mode_idx %u, mode %p.\n",
1378 output, debug_d3dformat(format_id), scanline_ordering, mode_idx, mode);
1379
1380 if (!mode)
1382
1383 adapter = output->adapter;
1385
1386 wined3d_output_update_modes(output, cached);
1387
1388 for (i = 0; i < output->mode_count; ++i)
1389 {
1390 const struct wined3d_display_mode *wined3d_mode = &output->modes[i];
1391
1392 if (mode_matches_filter(adapter, wined3d_mode, format, scanline_ordering) && match_idx++ == mode_idx)
1393 {
1394 *mode = *wined3d_mode;
1397
1398 TRACE("%ux%u@%u %u bpp, %s %#x.\n", mode->width, mode->height, mode->refresh_rate,
1400 debug_d3dformat(mode->format_id), mode->scanline_ordering);
1401 return WINED3D_OK;
1402 }
1403 }
1404
1405 WARN("Invalid mode_idx %u.\n", mode_idx);
1407}
1408
1410 struct wined3d_display_mode *mode)
1411{
1412 unsigned int i, j, mode_count, matching_mode_count, closest;
1413 struct wined3d_display_mode **matching_modes;
1414 struct wined3d_display_mode *modes;
1415 HRESULT hr;
1416
1417 TRACE("output %p, mode %p.\n", output, mode);
1418
1419 if (!(mode_count = wined3d_output_get_mode_count(output, mode->format_id,
1421 {
1422 WARN("Output has 0 matching modes.\n");
1423 return E_FAIL;
1424 }
1425
1426 if (!(modes = calloc(mode_count, sizeof(*modes))))
1427 return E_OUTOFMEMORY;
1428 if (!(matching_modes = calloc(mode_count, sizeof(*matching_modes))))
1429 {
1430 free(modes);
1431 return E_OUTOFMEMORY;
1432 }
1433
1434 for (i = 0; i < mode_count; ++i)
1435 {
1436 if (FAILED(hr = wined3d_output_get_mode(output, mode->format_id,
1437 WINED3D_SCANLINE_ORDERING_UNKNOWN, i, &modes[i], true)))
1438 {
1439 free(matching_modes);
1440 free(modes);
1441 return hr;
1442 }
1443 matching_modes[i] = &modes[i];
1444 }
1445
1446 matching_mode_count = mode_count;
1447
1448 if (mode->scanline_ordering != WINED3D_SCANLINE_ORDERING_UNKNOWN)
1449 {
1450 for (i = 0, j = 0; i < matching_mode_count; ++i)
1451 {
1452 if (matching_modes[i]->scanline_ordering == mode->scanline_ordering)
1453 matching_modes[j++] = matching_modes[i];
1454 }
1455 if (j > 0)
1456 matching_mode_count = j;
1457 }
1458
1459 if (mode->refresh_rate)
1460 {
1461 for (i = 0, j = 0; i < matching_mode_count; ++i)
1462 {
1463 if (matching_modes[i]->refresh_rate == mode->refresh_rate)
1464 matching_modes[j++] = matching_modes[i];
1465 }
1466 if (j > 0)
1467 matching_mode_count = j;
1468 }
1469
1470 if (!mode->width || !mode->height)
1471 {
1472 struct wined3d_display_mode current_mode;
1473 if (FAILED(hr = wined3d_output_get_display_mode(output, &current_mode, NULL)))
1474 {
1475 free(matching_modes);
1476 free(modes);
1477 return hr;
1478 }
1479 mode->width = current_mode.width;
1480 mode->height = current_mode.height;
1481 }
1482
1483 closest = ~0u;
1484 for (i = 0, j = 0; i < matching_mode_count; ++i)
1485 {
1486 unsigned int d = abs((int)(mode->width - matching_modes[i]->width))
1487 + abs((int)(mode->height - matching_modes[i]->height));
1488
1489 if (closest > d)
1490 {
1491 closest = d;
1492 j = i;
1493 }
1494 }
1495
1496 *mode = *matching_modes[j];
1497
1498 free(matching_modes);
1499 free(modes);
1500
1501 TRACE("Returning %ux%u@%u %s %#x.\n", mode->width, mode->height,
1502 mode->refresh_rate, debug_d3dformat(mode->format_id),
1503 mode->scanline_ordering);
1504
1505 return WINED3D_OK;
1506}
1507
1509{
1510 TRACE("output %p.\n", output);
1511
1512 return output->adapter;
1513}
1514
1516 struct wined3d_display_mode *mode, enum wined3d_display_rotation *rotation)
1517{
1518 DEVMODEW m;
1519
1520 TRACE("output %p, display_mode %p, rotation %p.\n", output, mode, rotation);
1521
1522 if (!mode)
1524
1525 memset(&m, 0, sizeof(m));
1526 m.dmSize = sizeof(m);
1527
1529 mode->width = m.dmPelsWidth;
1530 mode->height = m.dmPelsHeight;
1531 mode->refresh_rate = DEFAULT_REFRESH_RATE;
1532 if (m.dmFields & DM_DISPLAYFREQUENCY)
1533 mode->refresh_rate = m.dmDisplayFrequency;
1534 mode->format_id = pixelformat_for_depth(m.dmBitsPerPel);
1535
1536 /* Lie about the format. X11 can't change the color depth, and some apps
1537 * are pretty angry if they SetDisplayMode from 24 to 16 bpp and find out
1538 * that GetDisplayMode still returns 24 bpp. This should probably be
1539 * handled in winex11 instead. */
1540 if (output->screen_format && output->screen_format != mode->format_id)
1541 {
1542 WARN("Overriding format %s with stored format %s.\n",
1543 debug_d3dformat(mode->format_id),
1545 mode->format_id = output->screen_format;
1546 }
1547
1548 if (!(m.dmFields & DM_DISPLAYFLAGS))
1549 mode->scanline_ordering = WINED3D_SCANLINE_ORDERING_UNKNOWN;
1550 else if (m.dmDisplayFlags & DM_INTERLACED)
1551 mode->scanline_ordering = WINED3D_SCANLINE_ORDERING_INTERLACED;
1552 else
1553 mode->scanline_ordering = WINED3D_SCANLINE_ORDERING_PROGRESSIVE;
1554
1555 if (rotation)
1556 {
1557 switch (m.dmDisplayOrientation)
1558 {
1559 case DMDO_DEFAULT:
1560 *rotation = WINED3D_DISPLAY_ROTATION_0;
1561 break;
1562 case DMDO_90:
1563 *rotation = WINED3D_DISPLAY_ROTATION_90;
1564 break;
1565 case DMDO_180:
1566 *rotation = WINED3D_DISPLAY_ROTATION_180;
1567 break;
1568 case DMDO_270:
1569 *rotation = WINED3D_DISPLAY_ROTATION_270;
1570 break;
1571 default:
1572 FIXME("Unhandled display rotation %#lx.\n", m.dmDisplayOrientation);
1574 break;
1575 }
1576 }
1577
1578 TRACE("Returning %ux%u@%u %s %#x.\n", mode->width, mode->height,
1579 mode->refresh_rate, debug_d3dformat(mode->format_id),
1580 mode->scanline_ordering);
1581 return WINED3D_OK;
1582}
1583
1584static BOOL equal_display_mode(const DEVMODEW *mode1, const DEVMODEW *mode2)
1585{
1586 if (mode1->dmFields & mode2->dmFields & DM_PELSWIDTH
1587 && mode1->dmPelsWidth != mode2->dmPelsWidth)
1588 return FALSE;
1589
1590 if (mode1->dmFields & mode2->dmFields & DM_PELSHEIGHT
1591 && mode1->dmPelsHeight != mode2->dmPelsHeight)
1592 return FALSE;
1593
1594 if (mode1->dmFields & mode2->dmFields & DM_BITSPERPEL
1595 && mode1->dmBitsPerPel != mode2->dmBitsPerPel)
1596 return FALSE;
1597
1598 if (mode1->dmFields & mode2->dmFields & DM_DISPLAYFLAGS
1599 && mode1->dmDisplayFlags != mode2->dmDisplayFlags)
1600 return FALSE;
1601
1602 if (mode1->dmFields & mode2->dmFields & DM_DISPLAYFREQUENCY
1603 && mode1->dmDisplayFrequency != mode2->dmDisplayFrequency)
1604 return FALSE;
1605
1606 if (mode1->dmFields & mode2->dmFields & DM_DISPLAYORIENTATION
1607 && mode1->dmDisplayOrientation != mode2->dmDisplayOrientation)
1608 return FALSE;
1609
1610 if (mode1->dmFields & mode2->dmFields & DM_POSITION
1611 && (mode1->dmPosition.x != mode2->dmPosition.x
1612 || mode1->dmPosition.y != mode2->dmPosition.y))
1613 return FALSE;
1614
1615 return TRUE;
1616}
1617
1619{
1620 unsigned int adapter_idx, output_idx = 0;
1621 DEVMODEW current_mode, registry_mode;
1622 struct wined3d_adapter *adapter;
1623 DISPLAY_DEVICEW display_device;
1624 struct wined3d_output *output;
1625 BOOL do_mode_change = FALSE;
1626 LONG ret;
1627
1628 TRACE("wined3d %p.\n", wined3d);
1629
1630 memset(&current_mode, 0, sizeof(current_mode));
1631 memset(&registry_mode, 0, sizeof(registry_mode));
1632 current_mode.dmSize = sizeof(current_mode);
1633 registry_mode.dmSize = sizeof(registry_mode);
1634 display_device.cb = sizeof(display_device);
1635 while (EnumDisplayDevicesW(NULL, output_idx++, &display_device, 0))
1636 {
1637 if (!EnumDisplaySettingsExW(display_device.DeviceName, ENUM_CURRENT_SETTINGS, &current_mode, 0))
1638 {
1639 ERR("Failed to read the current display mode for %s.\n",
1640 wine_dbgstr_w(display_device.DeviceName));
1642 }
1643
1644 if (!EnumDisplaySettingsExW(display_device.DeviceName, ENUM_REGISTRY_SETTINGS, &registry_mode, 0))
1645 {
1646 ERR("Failed to read the registry display mode for %s.\n",
1647 wine_dbgstr_w(display_device.DeviceName));
1649 }
1650
1651 if (!equal_display_mode(&current_mode, &registry_mode))
1652 {
1653 do_mode_change = TRUE;
1654 break;
1655 }
1656 }
1657
1658 if (do_mode_change)
1659 {
1662 {
1663 ERR("Failed to restore all outputs to their registry display settings, error %ld.\n", ret);
1665 }
1666 }
1667 else
1668 {
1669 TRACE("Skipping redundant mode setting call.\n");
1670 }
1671
1672 for (adapter_idx = 0; adapter_idx < wined3d->adapter_count; ++adapter_idx)
1673 {
1674 adapter = wined3d->adapters[adapter_idx];
1675 for (output_idx = 0; output_idx < adapter->output_count; ++output_idx)
1676 {
1677 output = &adapter->outputs[output_idx];
1678
1679 if (!EnumDisplaySettingsExW(output->device_name, ENUM_CURRENT_SETTINGS, &current_mode, 0))
1680 {
1681 ERR("Failed to read the current display mode for %s.\n",
1682 wine_dbgstr_w(output->device_name));
1684 }
1685
1686 output->screen_format = pixelformat_for_depth(current_mode.dmBitsPerPel);
1687 }
1688 }
1689
1690 return WINED3D_OK;
1691}
1692
1694 const struct wined3d_display_mode *mode)
1695{
1696 enum wined3d_format_id new_format_id;
1697 const struct wined3d_format *format;
1698 DEVMODEW new_mode, current_mode;
1699 LONG ret;
1700
1701 TRACE("output %p, mode %p.\n", output, mode);
1702 TRACE("mode %ux%u@%u %s %#x.\n", mode->width, mode->height, mode->refresh_rate,
1703 debug_d3dformat(mode->format_id), mode->scanline_ordering);
1704
1705 memset(&new_mode, 0, sizeof(new_mode));
1706 new_mode.dmSize = sizeof(new_mode);
1707 memset(&current_mode, 0, sizeof(current_mode));
1708 current_mode.dmSize = sizeof(current_mode);
1709
1711
1713 new_mode.dmBitsPerPel = format->byte_count * CHAR_BIT;
1714 new_mode.dmPelsWidth = mode->width;
1715 new_mode.dmPelsHeight = mode->height;
1716 new_mode.dmDisplayFrequency = mode->refresh_rate;
1717 if (mode->refresh_rate)
1718 new_mode.dmFields |= DM_DISPLAYFREQUENCY;
1719 if (mode->scanline_ordering != WINED3D_SCANLINE_ORDERING_UNKNOWN)
1720 {
1721 new_mode.dmFields |= DM_DISPLAYFLAGS;
1722 if (mode->scanline_ordering == WINED3D_SCANLINE_ORDERING_INTERLACED)
1723 new_mode.dmDisplayFlags |= DM_INTERLACED;
1724 }
1725 new_format_id = mode->format_id;
1726
1727 /* Only change the mode if necessary. */
1728 if (!EnumDisplaySettingsW(output->device_name, ENUM_CURRENT_SETTINGS, &current_mode))
1729 {
1730 ERR("Failed to get current display mode.\n");
1731 }
1732 else if (equal_display_mode(&current_mode, &new_mode))
1733 {
1734 TRACE("Skipping redundant mode setting call.\n");
1735 output->screen_format = new_format_id;
1736 return WINED3D_OK;
1737 }
1738
1741 {
1742 if (new_mode.dmFields & DM_DISPLAYFREQUENCY)
1743 {
1744 WARN("ChangeDisplaySettingsExW failed, trying without the refresh rate.\n");
1745 new_mode.dmFields &= ~DM_DISPLAYFREQUENCY;
1746 new_mode.dmDisplayFrequency = 0;
1748 }
1751 }
1752
1753 /* Store the new values. */
1754 output->screen_format = new_format_id;
1755
1756 return WINED3D_OK;
1757}
1758
1760{
1761 HDC dc;
1762
1763 TRACE("output %p, ramp %p.\n", output, ramp);
1764
1765 dc = CreateDCW(output->device_name, NULL, NULL, NULL);
1766 SetDeviceGammaRamp(dc, (void *)ramp);
1767 DeleteDC(dc);
1768
1769 return WINED3D_OK;
1770}
1771
1773{
1774 HDC dc;
1775
1776 TRACE("output %p, ramp %p.\n", output, ramp);
1777
1778 dc = CreateDCW(output->device_name, NULL, NULL, NULL);
1780 DeleteDC(dc);
1781
1782 return WINED3D_OK;
1783}
1784
1786 uint32_t flags, struct wined3d_adapter_identifier *identifier)
1787{
1788 TRACE("adapter %p, flags %#x, identifier %p.\n", adapter, flags, identifier);
1789
1791
1792 wined3d_copy_name(identifier->driver, adapter->driver_info.name, identifier->driver_size);
1793 wined3d_copy_name(identifier->description, adapter->driver_info.description, identifier->description_size);
1794
1795 identifier->driver_version.u.HighPart = adapter->driver_info.version_high;
1796 identifier->driver_version.u.LowPart = adapter->driver_info.version_low;
1797 identifier->vendor_id = adapter->driver_info.vendor;
1798 identifier->device_id = adapter->driver_info.device;
1799 identifier->subsystem_id = 0;
1800 identifier->revision = 0;
1802 identifier->driver_uuid = adapter->driver_uuid;
1803 identifier->device_uuid = adapter->device_uuid;
1804 identifier->whql_level = (flags & WINED3DENUM_WHQL_LEVEL) ? 1 : 0;
1805 identifier->adapter_luid = adapter->luid;
1806 identifier->video_memory = min(~(SIZE_T)0, adapter->driver_info.vram_bytes);
1807 identifier->shared_system_memory = min(~(SIZE_T)0, adapter->driver_info.sysmem_bytes);
1808
1810
1811 return WINED3D_OK;
1812}
1813
1815 struct wined3d_raster_status *raster_status)
1816{
1817 LONGLONG freq_per_frame, freq_per_line;
1818 LARGE_INTEGER counter, freq_per_sec;
1820 static UINT once;
1821
1822 if (!once++)
1823 FIXME("output %p, raster_status %p semi-stub!\n", output, raster_status);
1824 else
1825 WARN("output %p, raster_status %p semi-stub!\n", output, raster_status);
1826
1827 /* Obtaining the raster status is a widely implemented but optional
1828 * feature. When this method returns OK StarCraft 2 expects the
1829 * raster_status->InVBlank value to actually change over time.
1830 * And Endless Alice Crysis doesn't care even if this method fails.
1831 * Thus this method returns OK and fakes raster_status by
1832 * QueryPerformanceCounter. */
1833
1838 if (mode.refresh_rate == DEFAULT_REFRESH_RATE)
1839 mode.refresh_rate = 60;
1840
1841 freq_per_frame = freq_per_sec.QuadPart / mode.refresh_rate;
1842 /* Assume 20 scan lines in the vertical blank. */
1843 freq_per_line = freq_per_frame / (mode.height + 20);
1844 raster_status->scan_line = (counter.QuadPart % freq_per_frame) / freq_per_line;
1845 if (raster_status->scan_line < mode.height)
1846 raster_status->in_vblank = FALSE;
1847 else
1848 {
1849 raster_status->scan_line = 0;
1850 raster_status->in_vblank = TRUE;
1851 }
1852
1853 TRACE("Returning fake value, in_vblank %u, scan_line %u.\n",
1854 raster_status->in_vblank, raster_status->scan_line);
1855
1856 return WINED3D_OK;
1857}
1858
1860 enum wined3d_device_type device_type, enum wined3d_format_id adapter_format_id,
1861 enum wined3d_format_id render_target_format_id, enum wined3d_format_id depth_stencil_format_id)
1862{
1863 const struct wined3d_format *rt_format;
1864 const struct wined3d_format *ds_format;
1865
1866 TRACE("adapter %p, device_type %s, adapter_format %s, render_target_format %s, "
1867 "depth_stencil_format %s.\n",
1869 debug_d3dformat(render_target_format_id), debug_d3dformat(depth_stencil_format_id));
1870
1871 rt_format = wined3d_get_format(adapter, render_target_format_id, WINED3D_BIND_RENDER_TARGET);
1872 ds_format = wined3d_get_format(adapter, depth_stencil_format_id, WINED3D_BIND_DEPTH_STENCIL);
1873
1875 {
1876 WARN("Format %s is not render target format.\n", debug_d3dformat(rt_format->id));
1878 }
1880 {
1881 WARN("Format %s is not depth/stencil format.\n", debug_d3dformat(ds_format->id));
1883 }
1884
1885 if (adapter->adapter_ops->adapter_check_format(adapter, NULL, rt_format, ds_format))
1886 {
1887 TRACE("Formats match.\n");
1888 return WINED3D_OK;
1889 }
1890
1891 TRACE("Unsupported format pair: %s and %s.\n",
1892 debug_d3dformat(render_target_format_id),
1893 debug_d3dformat(depth_stencil_format_id));
1894
1896}
1897
1899 enum wined3d_device_type device_type, enum wined3d_format_id surface_format_id, BOOL windowed,
1900 enum wined3d_multisample_type multisample_type, unsigned int *quality_levels)
1901{
1902 const struct wined3d_format *format;
1904
1905 TRACE("adapter %p, device_type %s, surface_format %s, "
1906 "windowed %#x, multisample_type %#x, quality_levels %p.\n",
1908 windowed, multisample_type, quality_levels);
1909
1910 if (surface_format_id == WINED3DFMT_UNKNOWN)
1912 if (multisample_type < WINED3D_MULTISAMPLE_NONE)
1914 if (multisample_type > WINED3D_MULTISAMPLE_16_SAMPLES)
1915 {
1916 FIXME("multisample_type %u not handled yet.\n", multisample_type);
1918 }
1919
1920 format = wined3d_get_format(adapter, surface_format_id, 0);
1921
1922 if (multisample_type && !(format->multisample_types & 1u << (multisample_type - 1)))
1924
1925 if (SUCCEEDED(hr) || (multisample_type == WINED3D_MULTISAMPLE_NON_MASKABLE && format->multisample_types))
1926 {
1927 if (quality_levels)
1928 {
1929 if (multisample_type == WINED3D_MULTISAMPLE_NON_MASKABLE)
1930 *quality_levels = wined3d_popcount(format->multisample_types);
1931 else
1932 *quality_levels = 1;
1933 }
1934 return WINED3D_OK;
1935 }
1936
1937 TRACE("Returning not supported.\n");
1938 return hr;
1939}
1940
1942 const struct wined3d_format *adapter_format, const struct wined3d_format *ds_format,
1943 enum wined3d_gl_resource_type gl_type)
1944{
1945 if (!ds_format->depth_size && !ds_format->stencil_size)
1946 return FALSE;
1947
1948 return adapter->adapter_ops->adapter_check_format(adapter, adapter_format, NULL, ds_format);
1949}
1950
1952{
1955 return TRUE;
1956
1959 return TRUE;
1960
1961 return FALSE;
1962}
1963
1964/* OpenGL supports mipmapping on all formats. Wrapping is unsupported, but we
1965 * have to report mipmapping so we cannot reject WRAPANDMIP. Tests show that
1966 * Windows reports WRAPANDMIP on unfilterable surfaces as well, apparently to
1967 * show that wrapping is supported. The lack of filtering will sort out the
1968 * mipmapping capability anyway.
1969 *
1970 * For now lets report this on all formats, but in the future we may want to
1971 * restrict it to some should applications need that. */
1974 enum wined3d_format_id adapter_format_id, uint32_t usage, unsigned int bind_flags,
1975 enum wined3d_resource_type resource_type, enum wined3d_format_id check_format_id)
1976{
1977 const struct wined3d_format *adapter_format, *format;
1978 enum wined3d_gl_resource_type gl_type, gl_type_end;
1979 unsigned int format_caps = 0, format_attrs = 0;
1980 BOOL mipmap_gen_supported = TRUE;
1981 unsigned int allowed_bind_flags;
1982 uint32_t allowed_usage;
1983
1984 TRACE("wined3d %p, adapter %p, device_type %s, adapter_format %s, usage %s, "
1985 "bind_flags %s, resource_type %s, check_format %s.\n",
1988 debug_d3dresourcetype(resource_type), debug_d3dformat(check_format_id));
1989
1990 adapter_format = wined3d_get_format(adapter, adapter_format_id, WINED3D_BIND_RENDER_TARGET);
1991 format = wined3d_get_format(adapter, check_format_id, bind_flags);
1992
1993 switch (resource_type)
1994 {
1995 case WINED3D_RTYPE_NONE:
1996 allowed_usage = 0;
1997 allowed_bind_flags = WINED3D_BIND_RENDER_TARGET
2001 gl_type_end = WINED3D_GL_RES_TYPE_TEX_3D;
2002 break;
2003
2005 allowed_usage = WINED3DUSAGE_DYNAMIC
2014 allowed_bind_flags = WINED3D_BIND_SHADER_RESOURCE
2016 gl_type = gl_type_end = WINED3D_GL_RES_TYPE_TEX_1D;
2017 break;
2018
2021 if (bind_flags & WINED3D_BIND_RENDER_TARGET)
2022 allowed_usage |= WINED3DUSAGE_QUERY_SRGBWRITE;
2023 allowed_bind_flags = WINED3D_BIND_RENDER_TARGET
2026 gl_type = gl_type_end = WINED3D_GL_RES_TYPE_TEX_2D;
2027 if (!(bind_flags & WINED3D_BIND_SHADER_RESOURCE))
2028 {
2030 {
2031 TRACE("%s is not supported for plain surfaces.\n", debug_d3dformat(format->id));
2033 }
2034 break;
2035 }
2036 allowed_usage |= WINED3DUSAGE_DYNAMIC
2046 allowed_bind_flags |= WINED3D_BIND_SHADER_RESOURCE;
2048 {
2049 allowed_usage &= ~WINED3DUSAGE_QUERY_LEGACYBUMPMAP;
2050 allowed_bind_flags &= ~WINED3D_BIND_DEPTH_STENCIL;
2051 gl_type = gl_type_end = WINED3D_GL_RES_TYPE_TEX_CUBE;
2052 }
2053 break;
2054
2056 allowed_usage = WINED3DUSAGE_DYNAMIC
2064 allowed_bind_flags = WINED3D_BIND_SHADER_RESOURCE
2066 gl_type = gl_type_end = WINED3D_GL_RES_TYPE_TEX_3D;
2067 break;
2068
2071 {
2072 TRACE("Requested WINED3D_RTYPE_BUFFER, but format %s is typeless.\n", debug_d3dformat(check_format_id));
2074 }
2075
2076 allowed_usage = WINED3DUSAGE_DYNAMIC;
2077 allowed_bind_flags = WINED3D_BIND_SHADER_RESOURCE
2081 gl_type = gl_type_end = WINED3D_GL_RES_TYPE_BUFFER;
2082 break;
2083
2084 default:
2085 FIXME("Unhandled resource type %s.\n", debug_d3dresourcetype(resource_type));
2087 }
2088
2089 if ((usage & allowed_usage) != usage)
2090 {
2091 TRACE("Requested usage %#x, but resource type %s only allows %#x.\n",
2092 usage, debug_d3dresourcetype(resource_type), allowed_usage);
2094 }
2095
2096 if ((bind_flags & allowed_bind_flags) != bind_flags)
2097 {
2098 TRACE("Requested bind flags %s, but resource type %s only allows %s.\n",
2099 wined3d_debug_bind_flags(bind_flags), debug_d3dresourcetype(resource_type),
2100 wined3d_debug_bind_flags(allowed_bind_flags));
2102 }
2103
2104 if (bind_flags & WINED3D_BIND_SHADER_RESOURCE)
2105 format_caps |= WINED3D_FORMAT_CAP_TEXTURE;
2106 if (bind_flags & WINED3D_BIND_RENDER_TARGET)
2107 format_caps |= WINED3D_FORMAT_CAP_RENDERTARGET;
2108 if (bind_flags & WINED3D_BIND_DEPTH_STENCIL)
2109 format_caps |= WINED3D_FORMAT_CAP_DEPTH_STENCIL;
2110 if (bind_flags & WINED3D_BIND_UNORDERED_ACCESS)
2112 if (bind_flags & WINED3D_BIND_VERTEX_BUFFER)
2114 if (bind_flags & WINED3D_BIND_INDEX_BUFFER)
2115 format_caps |= WINED3D_FORMAT_CAP_INDEX_BUFFER;
2116
2118 format_caps |= WINED3D_FORMAT_CAP_FILTERING;
2122 format_caps |= WINED3D_FORMAT_CAP_SRGB_READ;
2124 format_caps |= WINED3D_FORMAT_CAP_SRGB_WRITE;
2126 format_caps |= WINED3D_FORMAT_CAP_VTF;
2128 format_attrs |= WINED3D_FORMAT_ATTR_BUMPMAP;
2129
2130 if ((format_caps & WINED3D_FORMAT_CAP_TEXTURE) && (wined3d->flags & WINED3D_NO3D))
2131 {
2132 TRACE("Requested texturing support, but wined3d was created with WINED3D_NO3D.\n");
2134 }
2135
2136 if ((format->attrs & format_attrs) != format_attrs)
2137 {
2138 TRACE("Requested format attributes %#x, but format %s only has %#x.\n",
2139 format_attrs, debug_d3dformat(check_format_id), format->attrs);
2141 }
2142
2143 for (; gl_type <= gl_type_end; ++gl_type)
2144 {
2145 unsigned int caps = format->caps[gl_type];
2146
2147 if (gl_type == WINED3D_GL_RES_TYPE_TEX_2D && !(bind_flags & WINED3D_BIND_SHADER_RESOURCE))
2149
2150 if ((bind_flags & WINED3D_BIND_RENDER_TARGET)
2151 && !adapter->adapter_ops->adapter_check_format(adapter, adapter_format, format, NULL))
2152 {
2153 TRACE("Requested WINED3D_BIND_RENDER_TARGET, but format %s is not supported for render targets.\n",
2154 debug_d3dformat(check_format_id));
2156 }
2157
2158 /* 3D depth / stencil textures are never supported. */
2159 if (bind_flags == WINED3D_BIND_DEPTH_STENCIL && gl_type == WINED3D_GL_RES_TYPE_TEX_3D)
2160 continue;
2161
2162 if ((bind_flags & WINED3D_BIND_DEPTH_STENCIL)
2163 && !wined3d_check_depth_stencil_format(adapter, adapter_format, format, gl_type))
2164 {
2165 TRACE("Requested WINED3D_BIND_DEPTH_STENCIL, but format %s is not supported for depth/stencil buffers.\n",
2166 debug_d3dformat(check_format_id));
2168 }
2169
2171 {
2172 TRACE("Requested WINED3D_BIND_UNORDERED_ACCESS, but format %s is typeless.\n",
2173 debug_d3dformat(check_format_id));
2175 }
2176
2177 if ((caps & format_caps) != format_caps)
2178 {
2179 TRACE("Requested format caps %#x, but format %s only has %#x.\n",
2180 format_caps, debug_d3dformat(check_format_id), caps);
2182 }
2183
2185 mipmap_gen_supported = FALSE;
2186 }
2187
2188 if ((usage & WINED3DUSAGE_QUERY_GENMIPMAP) && !mipmap_gen_supported)
2189 {
2190 TRACE("No WINED3DUSAGE_AUTOGENMIPMAP support, returning WINED3DOK_NOAUTOGEN.\n");
2191 return WINED3DOK_NOMIPGEN;
2192 }
2193
2194 return WINED3D_OK;
2195}
2196
2198 enum wined3d_format_id format_id, unsigned int width)
2199{
2200 unsigned int row_pitch, slice_pitch;
2201
2202 TRACE("adapter %p, format_id %s, width %u.\n", adapter, debug_d3dformat(format_id), width);
2203
2205 1, width, 1, &row_pitch, &slice_pitch);
2206
2207 return row_pitch;
2208}
2209
2211 enum wined3d_device_type device_type, enum wined3d_format_id src_format_id,
2212 enum wined3d_format_id dst_format_id)
2213{
2214 const struct wined3d_format *src_format = wined3d_get_format(output->adapter, src_format_id, 0);
2215 const struct wined3d_format *dst_format = wined3d_get_format(output->adapter, dst_format_id, 0);
2216
2217 TRACE("output %p, device_type %s, src_format %s, dst_format %s.\n",
2218 output, debug_d3ddevicetype(device_type), debug_d3dformat(src_format_id),
2219 debug_d3dformat(dst_format_id));
2220
2222 {
2223 TRACE("Source format does not support blitting.\n");
2225 }
2226
2228 {
2229 TRACE("Destination format does not support blitting.\n");
2231 }
2232
2233 /* Source cannot be depth/stencil (although it can be YUV or compressed,
2234 * and AMD also allows blitting from luminance formats). */
2235 if (src_format->depth_size || src_format->stencil_size)
2236 {
2237 TRACE("Source format is depth/stencil.\n");
2239 }
2240
2241 /* The destination format must be a simple RGB format (no luminance, YUV,
2242 * compression, etc.) All such formats have a nonzero red_size; the only
2243 * exceptions are X24G8 (not supported in d3d9) and A8 (which, it turns out,
2244 * no vendor reports support for converting to). */
2245 if (!dst_format->red_size)
2246 {
2247 TRACE("Destination format is not a simple RGB format.\n");
2249 }
2250
2251 return WINED3D_OK;
2252}
2253
2255 struct wined3d_output *output, enum wined3d_device_type device_type,
2256 enum wined3d_format_id display_format, enum wined3d_format_id backbuffer_format,
2257 BOOL windowed)
2258{
2259 BOOL present_conversion = wined3d->flags & WINED3D_PRESENT_CONVERSION;
2260
2261 TRACE("wined3d %p, output %p, device_type %s, display_format %s, backbuffer_format %s, windowed %#x.\n",
2262 wined3d, output, debug_d3ddevicetype(device_type), debug_d3dformat(display_format),
2263 debug_d3dformat(backbuffer_format), windowed);
2264
2265 /* The task of this function is to check whether a certain display / backbuffer format
2266 * combination is available on the given output. In fullscreen mode microsoft specified
2267 * that the display format shouldn't provide alpha and that ignoring alpha the backbuffer
2268 * and display format should match exactly.
2269 * In windowed mode format conversion can occur and this depends on the driver. */
2270
2271 /* There are only 4 display formats. */
2272 if (!(display_format == WINED3DFMT_B5G6R5_UNORM
2273 || display_format == WINED3DFMT_B5G5R5X1_UNORM
2274 || display_format == WINED3DFMT_B8G8R8X8_UNORM
2275 || display_format == WINED3DFMT_B10G10R10A2_UNORM))
2276 {
2277 TRACE("Format %s is not supported as display format.\n", debug_d3dformat(display_format));
2279 }
2280
2281 if (!windowed)
2282 {
2283 /* If the requested display format is not available, don't continue. */
2284 if (!wined3d_output_get_mode_count(output, display_format,
2286 {
2287 TRACE("No available modes for display format %s.\n", debug_d3dformat(display_format));
2289 }
2290
2291 present_conversion = FALSE;
2292 }
2293 else if (display_format == WINED3DFMT_B10G10R10A2_UNORM)
2294 {
2295 /* WINED3DFMT_B10G10R10A2_UNORM is only allowed in fullscreen mode. */
2296 TRACE("Unsupported format combination %s / %s in windowed mode.\n",
2297 debug_d3dformat(display_format), debug_d3dformat(backbuffer_format));
2299 }
2300
2301 if (present_conversion)
2302 {
2303 /* Use the display format as back buffer format if the latter is
2304 * WINED3DFMT_UNKNOWN. */
2305 if (backbuffer_format == WINED3DFMT_UNKNOWN)
2306 backbuffer_format = display_format;
2307
2308 if (FAILED(wined3d_check_device_format_conversion(output, device_type, backbuffer_format,
2309 display_format)))
2310 {
2311 TRACE("Format conversion from %s to %s not supported.\n",
2312 debug_d3dformat(backbuffer_format), debug_d3dformat(display_format));
2314 }
2315 }
2316 else
2317 {
2318 /* When format conversion from the back buffer format to the display
2319 * format is not allowed, only a limited number of combinations are
2320 * valid. */
2321
2322 if (display_format == WINED3DFMT_B5G6R5_UNORM && backbuffer_format != WINED3DFMT_B5G6R5_UNORM)
2323 {
2324 TRACE("Unsupported format combination %s / %s.\n",
2325 debug_d3dformat(display_format), debug_d3dformat(backbuffer_format));
2327 }
2328
2329 if (display_format == WINED3DFMT_B5G5R5X1_UNORM
2330 && !(backbuffer_format == WINED3DFMT_B5G5R5X1_UNORM || backbuffer_format == WINED3DFMT_B5G5R5A1_UNORM))
2331 {
2332 TRACE("Unsupported format combination %s / %s.\n",
2333 debug_d3dformat(display_format), debug_d3dformat(backbuffer_format));
2335 }
2336
2337 if (display_format == WINED3DFMT_B8G8R8X8_UNORM
2338 && !(backbuffer_format == WINED3DFMT_B8G8R8X8_UNORM || backbuffer_format == WINED3DFMT_B8G8R8A8_UNORM))
2339 {
2340 TRACE("Unsupported format combination %s / %s.\n",
2341 debug_d3dformat(display_format), debug_d3dformat(backbuffer_format));
2343 }
2344
2345 if (display_format == WINED3DFMT_B10G10R10A2_UNORM
2346 && backbuffer_format != WINED3DFMT_B10G10R10A2_UNORM)
2347 {
2348 TRACE("Unsupported format combination %s / %s.\n",
2349 debug_d3dformat(display_format), debug_d3dformat(backbuffer_format));
2351 }
2352 }
2353
2354 /* Validate that the back buffer format is usable for render targets. */
2357 backbuffer_format)))
2358 {
2359 TRACE("Format %s not allowed for render targets.\n", debug_d3dformat(backbuffer_format));
2361 }
2362
2363 return WINED3D_OK;
2364}
2365
2368{
2369 const struct wined3d_d3d_info *d3d_info;
2370 struct wined3d_vertex_caps vertex_caps;
2371 DWORD ckey_caps, blit_caps, fx_caps;
2373 struct shader_caps shader_caps;
2374
2375 TRACE("adapter %p, device_type %s, caps %p.\n",
2377
2378 d3d_info = &adapter->d3d_info;
2379
2381
2382 caps->Caps = 0;
2386
2390
2393
2408
2417 /* TODO:
2418 WINED3DPMISCCAPS_NULLREFERENCE
2419 WINED3DPMISCCAPS_FOGANDSPECULARALPHA
2420 WINED3DPMISCCAPS_FOGVERTEXCLAMPED */
2421
2434
2443
2444 /* WINED3DPBLENDCAPS_BOTHINVSRCALPHA and WINED3DPBLENDCAPS_BOTHSRCALPHA
2445 * are legacy settings for srcblend only. */
2459
2470
2479
2488
2496
2497 if (!d3d_info->unconditional_npot)
2499
2512
2513 caps->CubeTextureFilterCaps = 0;
2514 caps->VolumeTextureFilterCaps = 0;
2515
2519
2520 caps->VolumeTextureAddressCaps = 0;
2521
2527 /* WINED3DLINECAPS_ANTIALIAS is not supported on Windows, and dx and gl seem to have a different
2528 * idea how generating the smoothing alpha values works; the result is different
2529 */
2530
2531 caps->MaxTextureWidth = d3d_info->limits.texture_size;
2532 caps->MaxTextureHeight = d3d_info->limits.texture_size;
2533
2534 caps->MaxVolumeExtent = 0;
2535
2536 caps->MaxTextureRepeat = 32768;
2537 caps->MaxTextureAspectRatio = d3d_info->limits.texture_size;
2538 caps->MaxVertexW = 1e10f;
2539
2540 caps->GuardBandLeft = -32768.0f;
2541 caps->GuardBandTop = -32768.0f;
2542 caps->GuardBandRight = 32768.0f;
2543 caps->GuardBandBottom = 32768.0f;
2544
2545 caps->ExtentsAdjust = 0.0f;
2546
2553
2554 caps->MaxAnisotropy = 0;
2555 caps->MaxPointSize = d3d_info->limits.pointsize_max;
2556
2557 caps->MaxPrimitiveCount = 0x555555; /* Taken from an AMD Radeon HD 5700 (Evergreen) GPU. */
2558 caps->MaxVertexIndex = 0xffffff; /* Taken from an AMD Radeon HD 5700 (Evergreen) GPU. */
2560 caps->MaxStreamStride = 1024;
2561
2562 /* d3d9.dll sets D3DDEVCAPS2_CAN_STRETCHRECT_FROM_TEXTURES here because StretchRects is implemented in d3d9 */
2566
2567 caps->NumSimultaneousRTs = d3d_info->limits.max_rt_count;
2568
2573 caps->VertexTextureFilterCaps = 0;
2574
2575 adapter->shader_backend->shader_get_caps(adapter, &shader_caps);
2576 adapter->fragment_pipe->get_caps(adapter, &fragment_caps);
2577 adapter->vertex_pipe->vp_get_caps(adapter, &vertex_caps);
2578
2579 /* Add shader misc caps. Only some of them belong to the shader parts of the pipeline */
2581
2584
2587
2591
2592 caps->MaxUserClipPlanes = vertex_caps.max_user_clip_planes;
2593 caps->MaxActiveLights = vertex_caps.max_active_lights;
2596 caps->VertexProcessingCaps = vertex_caps.vertex_processing_caps;
2597 caps->FVFCaps = vertex_caps.fvf_caps;
2598 caps->RasterCaps |= vertex_caps.raster_caps;
2599
2600 /* The following caps are shader specific, but they are things we cannot detect, or which
2601 * are the same among all shader models. So to avoid code duplication set the shader version
2602 * specific, but otherwise constant caps here
2603 */
2604 if (caps->VertexShaderVersion >= 3)
2605 {
2606 /* Where possible set the caps based on OpenGL extensions and if they
2607 * aren't set (in case of software rendering) use the VS 3.0 from
2608 * MSDN or else if there's OpenGL spec use a hardcoded value minimum
2609 * VS3.0 value. */
2611 /* VS 3.0 requires MAX_DYNAMICFLOWCONTROLDEPTH (24) */
2612 caps->VS20Caps.dynamic_flow_control_depth = WINED3DVS20_MAX_DYNAMICFLOWCONTROLDEPTH;
2613 caps->VS20Caps.temp_count = 32;
2614 /* level of nesting in loops / if-statements; VS 3.0 requires MAX (4) */
2615 caps->VS20Caps.static_flow_control_depth = WINED3DVS20_MAX_STATICFLOWCONTROLDEPTH;
2616
2617 caps->MaxVShaderInstructionsExecuted = 65535; /* VS 3.0 needs at least 65535, some cards even use 2^32-1 */
2620 }
2621 else if (caps->VertexShaderVersion == 2)
2622 {
2623 caps->VS20Caps.caps = 0;
2624 caps->VS20Caps.dynamic_flow_control_depth = WINED3DVS20_MIN_DYNAMICFLOWCONTROLDEPTH;
2625 caps->VS20Caps.temp_count = WINED3DVS20_MIN_NUMTEMPS;
2626 caps->VS20Caps.static_flow_control_depth = 1;
2627
2628 caps->MaxVShaderInstructionsExecuted = 65535;
2630 }
2631 else /* VS 1.x */
2632 {
2633 caps->VS20Caps.caps = 0;
2634 caps->VS20Caps.dynamic_flow_control_depth = 0;
2635 caps->VS20Caps.temp_count = 0;
2636 caps->VS20Caps.static_flow_control_depth = 0;
2637
2640 }
2641
2642 if (caps->PixelShaderVersion >= 3)
2643 {
2644 /* Where possible set the caps based on OpenGL extensions and if they
2645 * aren't set (in case of software rendering) use the PS 3.0 from
2646 * MSDN or else if there's OpenGL spec use a hardcoded value minimum
2647 * PS 3.0 value. */
2648
2649 /* Caps is more or less undocumented on MSDN but it appears to be
2650 * used for PS20Caps based on results from R9600/FX5900/Geforce6800
2651 * cards from Windows */
2657 /* PS 3.0 requires MAX_DYNAMICFLOWCONTROLDEPTH (24) */
2658 caps->PS20Caps.dynamic_flow_control_depth = WINED3DPS20_MAX_DYNAMICFLOWCONTROLDEPTH;
2659 caps->PS20Caps.temp_count = 32;
2660 /* PS 3.0 requires MAX_STATICFLOWCONTROLDEPTH (4) */
2661 caps->PS20Caps.static_flow_control_depth = WINED3DPS20_MAX_STATICFLOWCONTROLDEPTH;
2662 /* PS 3.0 requires MAX_NUMINSTRUCTIONSLOTS (512) */
2663 caps->PS20Caps.instruction_slot_count = WINED3DPS20_MAX_NUMINSTRUCTIONSLOTS;
2664
2665 caps->MaxPShaderInstructionsExecuted = 65535;
2667 }
2668 else if (caps->PixelShaderVersion == 2)
2669 {
2670 /* Below we assume PS2.0 specs, not extended 2.0a(GeforceFX)/2.0b(Radeon R3xx) ones */
2671 caps->PS20Caps.caps = 0;
2672 caps->PS20Caps.dynamic_flow_control_depth = 0; /* WINED3DVS20_MIN_DYNAMICFLOWCONTROLDEPTH = 0 */
2673 caps->PS20Caps.temp_count = WINED3DPS20_MIN_NUMTEMPS;
2674 caps->PS20Caps.static_flow_control_depth = WINED3DPS20_MIN_STATICFLOWCONTROLDEPTH; /* Minimum: 1 */
2675 /* Minimum number (64 ALU + 32 Texture), a GeforceFX uses 512 */
2676 caps->PS20Caps.instruction_slot_count = WINED3DPS20_MIN_NUMINSTRUCTIONSLOTS;
2677
2678 caps->MaxPShaderInstructionsExecuted = 512; /* Minimum value, a GeforceFX uses 1024 */
2680 }
2681 else /* PS 1.x */
2682 {
2683 caps->PS20Caps.caps = 0;
2684 caps->PS20Caps.dynamic_flow_control_depth = 0;
2685 caps->PS20Caps.temp_count = 0;
2686 caps->PS20Caps.static_flow_control_depth = 0;
2687 caps->PS20Caps.instruction_slot_count = 0;
2688
2691 }
2692
2693 if (caps->VertexShaderVersion >= 2)
2694 {
2695 /* OpenGL supports all the formats below, perhaps not always
2696 * without conversion, but it supports them.
2697 * Further GLSL doesn't seem to have an official unsigned type so
2698 * don't advertise it yet as I'm not sure how we handle it.
2699 * We might need to add some clamping in the shader engine to
2700 * support it.
2701 * TODO: WINED3DDTCAPS_USHORT2N, WINED3DDTCAPS_USHORT4N, WINED3DDTCAPS_UDEC3, WINED3DDTCAPS_DEC3N */
2706 }
2707 else
2708 {
2709 caps->DeclTypes = 0;
2710 }
2711
2712 /* Set DirectDraw helper Caps */
2713 ckey_caps = WINEDDCKEYCAPS_DESTBLT |
2715 fx_caps = WINEDDFXCAPS_BLTALPHA |
2727 blit_caps = WINEDDCAPS_BLT |
2736
2737 /* Fill the ddraw caps structure */
2738 caps->ddraw_caps.caps = WINEDDCAPS_GDI |
2740 blit_caps;
2741 caps->ddraw_caps.caps2 = WINEDDCAPS2_CERTIFIED |
2746 caps->ddraw_caps.color_key_caps = ckey_caps;
2747 caps->ddraw_caps.fx_caps = fx_caps;
2748 caps->ddraw_caps.svb_caps = blit_caps;
2749 caps->ddraw_caps.svb_color_key_caps = ckey_caps;
2750 caps->ddraw_caps.svb_fx_caps = fx_caps;
2751 caps->ddraw_caps.vsb_caps = blit_caps;
2752 caps->ddraw_caps.vsb_color_key_caps = ckey_caps;
2753 caps->ddraw_caps.vsb_fx_caps = fx_caps;
2754 caps->ddraw_caps.ssb_caps = blit_caps;
2755 caps->ddraw_caps.ssb_color_key_caps = ckey_caps;
2756 caps->ddraw_caps.ssb_fx_caps = fx_caps;
2757
2758 caps->ddraw_caps.dds_caps = WINEDDSCAPS_FLIP
2765
2768 caps->stencil_export = d3d_info->stencil_export;
2769
2770 caps->max_feature_level = d3d_info->feature_level;
2771
2772 adapter->adapter_ops->adapter_get_wined3d_caps(adapter, caps);
2773
2774 return WINED3D_OK;
2775}
2776
2778 enum wined3d_device_type device_type, HWND focus_window, uint32_t flags, BYTE surface_alignment,
2779 const enum wined3d_feature_level *feature_levels, unsigned int feature_level_count,
2780 struct wined3d_device_parent *device_parent, struct wined3d_device **device)
2781{
2782 struct wined3d_device *object;
2783 HRESULT hr;
2784
2785 TRACE("wined3d %p, adapter %p, device_type %#x, focus_window %p, flags %#x, "
2786 "surface_alignment %u, feature_levels %p, feature_level_count %u, device_parent %p, device %p.\n",
2788 feature_levels, feature_level_count, device_parent, device);
2789
2790 if (FAILED(hr = adapter->adapter_ops->adapter_create_device(wined3d, adapter,
2792 feature_levels, feature_level_count, device_parent, &object)))
2793 return hr;
2794
2795 TRACE("Created device %p.\n", object);
2796 *device = object;
2797
2798 device_parent->ops->wined3d_device_created(device_parent, *device);
2799
2800 return WINED3D_OK;
2801}
2802
2804{
2839 {0}, /* Terminate */
2840};
2841
2843{
2845 free(adapter);
2846}
2847
2849 enum wined3d_device_type device_type, HWND focus_window, unsigned int flags, BYTE surface_alignment,
2850 const enum wined3d_feature_level *levels, unsigned int level_count,
2851 struct wined3d_device_parent *device_parent, struct wined3d_device **device)
2852{
2853 /* No extensions in the state table, only extension 0, which is implicitly supported. */
2854 static const BOOL supported_extensions[] = {TRUE};
2855 struct wined3d_device_no3d *device_no3d;
2856 HRESULT hr;
2857
2858 if (!(device_no3d = calloc(1, sizeof(*device_no3d))))
2859 return E_OUTOFMEMORY;
2860
2861 if (FAILED(hr = wined3d_device_init(&device_no3d->d, wined3d, adapter->ordinal, device_type, focus_window,
2862 flags, surface_alignment, levels, level_count, supported_extensions, device_parent)))
2863 {
2864 WARN("Failed to initialize device, hr %#lx.\n", hr);
2865 free(device_no3d);
2866 return hr;
2867 }
2868
2869 *device = &device_no3d->d;
2870
2871 return WINED3D_OK;
2872}
2873
2875{
2877 free(device);
2878}
2879
2881 struct wined3d_texture *texture, unsigned int sub_resource_idx)
2882{
2883 TRACE("device %p, texture %p, sub_resource_idx %u.\n", device, texture, sub_resource_idx);
2884
2886
2887 if (!device->context_count)
2888 return NULL;
2889
2891}
2892
2894{
2895 TRACE("context %p.\n", context);
2896}
2897
2899{
2900}
2901
2903 const struct wined3d_format *adapter_format, const struct wined3d_format *rt_format,
2904 const struct wined3d_format *ds_format)
2905{
2906 return TRUE;
2907}
2908
2910{
2911 struct wined3d_context *context_no3d;
2912 HRESULT hr;
2913
2914 TRACE("device %p.\n", device);
2915
2916 context_no3d = &wined3d_device_no3d(device)->context_no3d;
2917 if (FAILED(hr = wined3d_context_no3d_init(context_no3d, device->swapchains[0])))
2918 {
2919 WARN("Failed to initialise context.\n");
2920 return hr;
2921 }
2922
2923 if (!device_context_add(device, context_no3d))
2924 {
2925 ERR("Failed to add the newly created context to the context list.\n");
2926 wined3d_context_cleanup(context_no3d);
2927 return E_FAIL;
2928 }
2929
2930 TRACE("Initialised context %p.\n", context_no3d);
2931
2932 if (!(device->blitter = wined3d_cpu_blitter_create()))
2933 {
2934 ERR("Failed to create CPU blitter.\n");
2935 device_context_remove(device, context_no3d);
2936 wined3d_context_cleanup(context_no3d);
2937 return E_FAIL;
2938 }
2939
2940 return WINED3D_OK;
2941}
2942
2944{
2945 struct wined3d_context *context_no3d;
2946
2947 TRACE("device %p.\n", device);
2948
2949 context_no3d = &wined3d_device_no3d(device)->context_no3d;
2950 device->blitter->ops->blitter_destroy(device->blitter, NULL);
2952
2953 device_context_remove(device, context_no3d);
2954 wined3d_context_cleanup(context_no3d);
2955}
2956
2958 const struct wined3d_bo_address *data, size_t size, uint32_t map_flags)
2959{
2960 if (data->buffer_object)
2961 {
2962 ERR("Unsupported buffer object %p.\n", data->buffer_object);
2963 return NULL;
2964 }
2965
2966 return data->addr;
2967}
2968
2970 const struct wined3d_bo_address *data, unsigned int range_count, const struct wined3d_range *ranges)
2971{
2972 if (data->buffer_object)
2973 ERR("Unsupported buffer object %p.\n", data->buffer_object);
2974}
2975
2977 const struct wined3d_bo_address *dst, const struct wined3d_bo_address *src,
2978 unsigned int range_count, const struct wined3d_range *ranges, uint32_t map_flags)
2979{
2980 unsigned int i;
2981
2982 if (dst->buffer_object)
2983 ERR("Unsupported dst buffer object %p.\n", dst->buffer_object);
2984 if (src->buffer_object)
2985 ERR("Unsupported src buffer object %p.\n", src->buffer_object);
2986 if (dst->buffer_object || src->buffer_object)
2987 return;
2988
2989 for (i = 0; i < range_count; ++i)
2990 memcpy(dst->addr + ranges[i].offset, src->addr + ranges[i].offset, ranges[i].size);
2991}
2992
2994 const struct wined3d_const_bo_address *data, size_t size)
2995{
2996}
2997
2999 unsigned int sub_resource_idx, struct wined3d_bo_address *addr)
3000{
3001 return false;
3002}
3003
3005{
3006}
3007
3009 const struct wined3d_swapchain_desc *desc, struct wined3d_swapchain_state_parent *state_parent,
3010 void *parent, const struct wined3d_parent_ops *parent_ops, struct wined3d_swapchain **swapchain)
3011{
3012 struct wined3d_swapchain *swapchain_no3d;
3013 HRESULT hr;
3014
3015 TRACE("device %p, desc %p, state_parent %p, parent %p, parent_ops %p, swapchain %p.\n",
3016 device, desc, state_parent, parent, parent_ops, swapchain);
3017
3018 if (!(swapchain_no3d = calloc(1, sizeof(*swapchain_no3d))))
3019 return E_OUTOFMEMORY;
3020
3021 if (FAILED(hr = wined3d_swapchain_no3d_init(swapchain_no3d, device, desc, state_parent, parent,
3022 parent_ops)))
3023 {
3024 WARN("Failed to initialise swapchain, hr %#lx.\n", hr);
3025 free(swapchain_no3d);
3026 return hr;
3027 }
3028
3029 TRACE("Created swapchain %p.\n", swapchain_no3d);
3030 *swapchain = swapchain_no3d;
3031
3032 return hr;
3033}
3034
3036{
3037 wined3d_swapchain_cleanup(swapchain);
3038 free(swapchain);
3039}
3040
3042 const struct wined3d_buffer_desc *desc, const struct wined3d_sub_resource_data *data,
3043 void *parent, const struct wined3d_parent_ops *parent_ops, struct wined3d_buffer **buffer)
3044{
3045 struct wined3d_buffer *buffer_no3d;
3046 HRESULT hr;
3047
3048 TRACE("device %p, desc %p, data %p, parent %p, parent_ops %p, buffer %p.\n",
3049 device, desc, data, parent, parent_ops, buffer);
3050
3051 if (!(buffer_no3d = calloc(1, sizeof(*buffer_no3d))))
3052 return E_OUTOFMEMORY;
3053
3054 if (FAILED(hr = wined3d_buffer_no3d_init(buffer_no3d, device, desc, data, parent, parent_ops)))
3055 {
3056 WARN("Failed to initialise buffer, hr %#lx.\n", hr);
3057 free(buffer_no3d);
3058 return hr;
3059 }
3060
3061 TRACE("Created buffer %p.\n", buffer_no3d);
3062 *buffer = buffer_no3d;
3063
3064 return hr;
3065}
3066
3068{
3069 struct wined3d_device *device = buffer->resource.device;
3070 unsigned int swapchain_count = device->swapchain_count;
3071
3072 TRACE("buffer %p.\n", buffer);
3073
3074 /* Take a reference to the device, in case releasing the buffer would
3075 * cause the device to be destroyed. However, swapchain resources don't
3076 * take a reference to the device, and we wouldn't want to increment the
3077 * refcount on a device that's in the process of being destroyed. */
3078 if (swapchain_count)
3082 if (swapchain_count)
3084}
3085
3087 const struct wined3d_resource_desc *desc, unsigned int layer_count, unsigned int level_count,
3088 uint32_t flags, void *parent, const struct wined3d_parent_ops *parent_ops, struct wined3d_texture **texture)
3089{
3090 struct wined3d_texture *texture_no3d;
3091 HRESULT hr;
3092
3093 TRACE("device %p, desc %p, layer_count %u, level_count %u, flags %#x, parent %p, parent_ops %p, texture %p.\n",
3095
3096 if (!(texture_no3d = wined3d_texture_allocate_object_memory(sizeof(*texture_no3d), level_count, layer_count)))
3097 return E_OUTOFMEMORY;
3098
3099 if (FAILED(hr = wined3d_texture_no3d_init(texture_no3d, device, desc,
3100 layer_count, level_count, flags, parent, parent_ops)))
3101 {
3102 WARN("Failed to initialise texture, hr %#lx.\n", hr);
3103 free(texture_no3d);
3104 return hr;
3105 }
3106
3107 TRACE("Created texture %p.\n", texture_no3d);
3108 *texture = texture_no3d;
3109
3110 return hr;
3111}
3112
3114{
3115 struct wined3d_device *device = texture->resource.device;
3116 unsigned int swapchain_count = device->swapchain_count;
3117
3118 TRACE("texture %p.\n", texture);
3119
3120 /* Take a reference to the device, in case releasing the texture would
3121 * cause the device to be destroyed. However, swapchain resources don't
3122 * take a reference to the device, and we wouldn't want to increment the
3123 * refcount on a device that's in the process of being destroyed. */
3124 if (swapchain_count)
3126
3128 texture->resource.parent_ops->wined3d_object_destroyed(texture->resource.parent);
3129
3132
3133 if (swapchain_count)
3135}
3136
3138 struct wined3d_resource *resource, void *parent, const struct wined3d_parent_ops *parent_ops,
3140{
3141 struct wined3d_rendertarget_view *view_no3d;
3142 HRESULT hr;
3143
3144 TRACE("desc %s, resource %p, parent %p, parent_ops %p, view %p.\n",
3146
3147 if (!(view_no3d = calloc(1, sizeof(*view_no3d))))
3148 return E_OUTOFMEMORY;
3149
3151 {
3152 WARN("Failed to initialise view, hr %#lx.\n", hr);
3153 free(view_no3d);
3154 return hr;
3155 }
3156
3157 TRACE("Created render target view %p.\n", view_no3d);
3158 *view = view_no3d;
3159
3160 return hr;
3161}
3162
3164{
3165 struct wined3d_device *device = view->resource->device;
3166 unsigned int swapchain_count = device->swapchain_count;
3167
3168 TRACE("view %p.\n", view);
3169
3170 /* Take a reference to the device, in case releasing the view's resource
3171 * would cause the device to be destroyed. However, swapchain resources
3172 * don't take a reference to the device, and we wouldn't want to increment
3173 * the refcount on a device that's in the process of being destroyed. */
3174 if (swapchain_count)
3178 if (swapchain_count)
3180}
3181
3183 struct wined3d_resource *resource, void *parent, const struct wined3d_parent_ops *parent_ops,
3185{
3186 TRACE("desc %s, resource %p, parent %p, parent_ops %p, view %p.\n",
3188
3189 return E_NOTIMPL;
3190}
3191
3193{
3194 TRACE("view %p.\n", view);
3195}
3196
3198 struct wined3d_resource *resource, void *parent, const struct wined3d_parent_ops *parent_ops,
3200{
3201 TRACE("desc %s, resource %p, parent %p, parent_ops %p, view %p.\n",
3203
3204 return E_NOTIMPL;
3205}
3206
3208{
3209 TRACE("view %p.\n", view);
3210}
3211
3213 void *parent, const struct wined3d_parent_ops *parent_ops, struct wined3d_sampler **sampler)
3214{
3215 TRACE("device %p, desc %p, parent %p, parent_ops %p, sampler %p.\n",
3216 device, desc, parent, parent_ops, sampler);
3217
3218 return E_NOTIMPL;
3219}
3220
3222{
3223 TRACE("sampler %p.\n", sampler);
3224}
3225
3227 void *parent, const struct wined3d_parent_ops *parent_ops, struct wined3d_query **query)
3228{
3229 TRACE("device %p, type %#x, parent %p, parent_ops %p, query %p.\n",
3230 device, type, parent, parent_ops, query);
3231
3233}
3234
3236{
3237 TRACE("query %p.\n", query);
3238}
3239
3241{
3242 TRACE("context %p.\n", context);
3243}
3244
3246 const struct wined3d_state *state, const struct wined3d_draw_parameters *parameters)
3247{
3248 ERR("device %p, state %p, parameters %p.\n", device, state, parameters);
3249}
3250
3252 const struct wined3d_state *state, const struct wined3d_dispatch_parameters *parameters)
3253{
3254 ERR("device %p, state %p, parameters %p.\n", device, state, parameters);
3255}
3256
3258 struct wined3d_unordered_access_view *view, const struct wined3d_uvec4 *clear_value, bool fp)
3259{
3260 ERR("context %p, view %p, clear_value %s, fp %#x.\n", context, view, debug_uvec4(clear_value), fp);
3261}
3262
3264{
3265 .adapter_destroy = adapter_no3d_destroy,
3266 .adapter_create_device = adapter_no3d_create_device,
3267 .adapter_destroy_device = adapter_no3d_destroy_device,
3268 .adapter_acquire_context = adapter_no3d_acquire_context,
3269 .adapter_release_context = adapter_no3d_release_context,
3270 .adapter_get_wined3d_caps = adapter_no3d_get_wined3d_caps,
3271 .adapter_check_format = adapter_no3d_check_format,
3272 .adapter_init_3d = adapter_no3d_init_3d,
3273 .adapter_uninit_3d = adapter_no3d_uninit_3d,
3274 .adapter_map_bo_address = adapter_no3d_map_bo_address,
3275 .adapter_unmap_bo_address = adapter_no3d_unmap_bo_address,
3276 .adapter_copy_bo_address = adapter_no3d_copy_bo_address,
3277 .adapter_flush_bo_address = adapter_no3d_flush_bo_address,
3278 .adapter_alloc_bo = adapter_no3d_alloc_bo,
3279 .adapter_destroy_bo = adapter_no3d_destroy_bo,
3280 .adapter_create_swapchain = adapter_no3d_create_swapchain,
3281 .adapter_destroy_swapchain = adapter_no3d_destroy_swapchain,
3282 .adapter_create_buffer = adapter_no3d_create_buffer,
3283 .adapter_destroy_buffer = adapter_no3d_destroy_buffer,
3284 .adapter_create_texture = adapter_no3d_create_texture,
3285 .adapter_destroy_texture = adapter_no3d_destroy_texture,
3286 .adapter_create_rendertarget_view = adapter_no3d_create_rendertarget_view,
3287 .adapter_destroy_rendertarget_view = adapter_no3d_destroy_rendertarget_view,
3288 .adapter_create_shader_resource_view = adapter_no3d_create_shader_resource_view,
3289 .adapter_destroy_shader_resource_view = adapter_no3d_destroy_shader_resource_view,
3290 .adapter_create_unordered_access_view = adapter_no3d_create_unordered_access_view,
3291 .adapter_destroy_unordered_access_view = adapter_no3d_destroy_unordered_access_view,
3292 .adapter_create_sampler = adapter_no3d_create_sampler,
3293 .adapter_destroy_sampler = adapter_no3d_destroy_sampler,
3294 .adapter_create_query = adapter_no3d_create_query,
3295 .adapter_destroy_query = adapter_no3d_destroy_query,
3296 .adapter_flush_context = adapter_no3d_flush_context,
3297 .adapter_draw_primitive = adapter_no3d_draw_primitive,
3298 .adapter_dispatch_compute = adapter_no3d_dispatch_compute,
3299 .adapter_clear_uav = adapter_no3d_clear_uav,
3300};
3301
3302static void wined3d_adapter_no3d_init_d3d_info(struct wined3d_adapter *adapter, unsigned int wined3d_creation_flags)
3303{
3304 struct wined3d_d3d_info *d3d_info = &adapter->d3d_info;
3305
3307 d3d_info->unconditional_npot = true;
3309}
3310
3311static struct wined3d_adapter *wined3d_adapter_no3d_create(unsigned int ordinal, unsigned int wined3d_creation_flags)
3312{
3313 struct wined3d_adapter *adapter;
3314 LUID primary_luid, *luid = NULL;
3315
3316 static const struct wined3d_gpu_description gpu_description =
3317 {
3318 HW_VENDOR_SOFTWARE, CARD_WINE, "WineD3D DirectDraw Emulation", DRIVER_WINE, 128,
3319 };
3320
3321 TRACE("ordinal %u, wined3d_creation_flags %#x.\n", ordinal, wined3d_creation_flags);
3322
3323 if (!(adapter = calloc(1, sizeof(*adapter))))
3324 return NULL;
3325
3326 if (ordinal == 0 && wined3d_get_primary_adapter_luid(&primary_luid))
3327 luid = &primary_luid;
3328
3330 {
3331 free(adapter);
3332 return NULL;
3333 }
3334
3336 {
3338 free(adapter);
3339 return NULL;
3340 }
3341
3342 if (!wined3d_driver_info_init(&adapter->driver_info, &gpu_description, WINED3D_FEATURE_LEVEL_NONE, 0, 0))
3343 {
3345 free(adapter);
3346 return NULL;
3347 }
3348 adapter->vram_bytes_used = 0;
3349 TRACE("Emulating 0x%s bytes of video ram.\n", wine_dbgstr_longlong(adapter->driver_info.vram_bytes));
3350
3351 adapter->vertex_pipe = &none_vertex_pipe;
3352 adapter->fragment_pipe = &none_fragment_pipe;
3353 adapter->misc_state_template = misc_state_template_no3d;
3354 adapter->shader_backend = &none_shader_backend;
3355
3356 wined3d_adapter_no3d_init_d3d_info(adapter, wined3d_creation_flags);
3357
3358 TRACE("Created adapter %p.\n", adapter);
3359
3360 return adapter;
3361}
3362
3364{
3365 HRESULT hr;
3366
3367 if (!wined3d_array_reserve((void **)&adapter->outputs, &adapter->outputs_size,
3368 adapter->output_count + 1, sizeof(*adapter->outputs)))
3369 return FALSE;
3370
3371 if (FAILED(hr = wined3d_output_init(&adapter->outputs[adapter->output_count],
3372 adapter->output_count, adapter, output_name)))
3373 {
3374 ERR("Failed to initialise output %s, hr %#lx.\n", wine_dbgstr_w(output_name), hr);
3375 return FALSE;
3376 }
3377
3378 ++adapter->output_count;
3379 TRACE("Initialised output %s.\n", wine_dbgstr_w(output_name));
3380 return TRUE;
3381}
3382
3383BOOL wined3d_adapter_init(struct wined3d_adapter *adapter, unsigned int ordinal, const LUID *luid,
3384 const struct wined3d_adapter_ops *adapter_ops)
3385{
3386 D3DKMT_OPENADAPTERFROMLUID open_adapter_desc;
3387 unsigned int output_idx = 0, primary_idx = 0;
3388 D3DKMT_CLOSEADAPTER close_adapter_desc;
3389 DISPLAY_DEVICEW display_device;
3390 BOOL ret = FALSE;
3391
3392 adapter->ordinal = ordinal;
3393 adapter->output_count = 0;
3394 adapter->outputs = NULL;
3395
3396 if (luid)
3397 {
3398 adapter->luid = *luid;
3399 }
3400 else
3401 {
3402 WARN("Allocating a random LUID.\n");
3403 if (!AllocateLocallyUniqueId(&adapter->luid))
3404 {
3405 ERR("Failed to allocate a LUID, error %#lx.\n", GetLastError());
3406 return FALSE;
3407 }
3408 }
3409 TRACE("adapter %p LUID %08lx:%08lx.\n", adapter, adapter->luid.HighPart, adapter->luid.LowPart);
3410
3411 open_adapter_desc.AdapterLuid = adapter->luid;
3412 if (D3DKMTOpenAdapterFromLuid(&open_adapter_desc))
3413 return FALSE;
3414 adapter->kmt_adapter = open_adapter_desc.hAdapter;
3415
3416 display_device.cb = sizeof(display_device);
3417 while (EnumDisplayDevicesW(NULL, output_idx++, &display_device, 0))
3418 {
3419 /* Detached outputs are not enumerated */
3420 if (!(display_device.StateFlags & DISPLAY_DEVICE_ATTACHED_TO_DESKTOP))
3421 continue;
3422
3423 if (display_device.StateFlags & DISPLAY_DEVICE_PRIMARY_DEVICE)
3424 primary_idx = adapter->output_count;
3425
3426 if (!wined3d_adapter_create_output(adapter, display_device.DeviceName))
3427 goto done;
3428 }
3429 TRACE("Initialised %Iu outputs for adapter %p.\n", adapter->output_count, adapter);
3430
3431 /* Make the primary output first */
3432 if (primary_idx)
3433 {
3434 struct wined3d_output tmp = adapter->outputs[0];
3435 adapter->outputs[0] = adapter->outputs[primary_idx];
3436 adapter->outputs[0].ordinal = 0;
3437 adapter->outputs[primary_idx] = tmp;
3438 adapter->outputs[primary_idx].ordinal = primary_idx;
3439 }
3440
3441 memset(&adapter->driver_uuid, 0, sizeof(adapter->driver_uuid));
3442 memset(&adapter->device_uuid, 0, sizeof(adapter->device_uuid));
3443
3444 adapter->formats = NULL;
3445 adapter->adapter_ops = adapter_ops;
3446 ret = TRUE;
3447done:
3448 if (!ret)
3449 {
3450 for (output_idx = 0; output_idx < adapter->output_count; ++output_idx)
3451 wined3d_output_cleanup(&adapter->outputs[output_idx]);
3452 free(adapter->outputs);
3453 close_adapter_desc.hAdapter = adapter->kmt_adapter;
3454 D3DKMTCloseAdapter(&close_adapter_desc);
3455 }
3456 return ret;
3457}
3458
3459static struct wined3d_adapter *wined3d_adapter_create(unsigned int ordinal, DWORD wined3d_creation_flags)
3460{
3461 if (wined3d_creation_flags & WINED3D_NO3D)
3462 return wined3d_adapter_no3d_create(ordinal, wined3d_creation_flags);
3463
3465 return wined3d_adapter_vk_create(ordinal, wined3d_creation_flags);
3466
3467 return wined3d_adapter_gl_create(ordinal, wined3d_creation_flags);
3468}
3469
3471
3473{
3475};
3476
3478{
3479 wined3d->ref = 1;
3480 wined3d->flags = flags;
3481
3482 TRACE("Initialising adapters.\n");
3483
3485 {
3486 WARN("Failed to create adapter.\n");
3487 return E_FAIL;
3488 }
3490
3491 return WINED3D_OK;
3492}
@ lparam
Definition: SystemMenu.c:31
HRESULT WINAPI DECLSPEC_HOTPATCH SetThreadDescription(_In_ HANDLE hThread, _In_ PCWSTR lpThreadDescription)
COMPILER_DEPENDENT_INT64 INT64
Definition: actypes.h:132
COMPILER_DEPENDENT_UINT64 UINT64
Definition: actypes.h:131
struct wined3d_adapter * wined3d_adapter_gl_create(unsigned int ordinal, unsigned int wined3d_creation_flags)
Definition: adapter_gl.c:5190
struct wined3d_adapter * wined3d_adapter_vk_create(unsigned int ordinal, unsigned int wined3d_creation_flags)
Definition: adapter_vk.c:2555
static int state
Definition: maze.c:121
#define InterlockedIncrement
Definition: armddk.h:53
#define InterlockedDecrement
Definition: armddk.h:52
#define WINE_DEFAULT_DEBUG_CHANNEL(t)
Definition: precomp.h:23
LONG NTSTATUS
Definition: precomp.h:26
#define ARRAY_SIZE(A)
Definition: main.h:20
static void list_remove(struct list_entry *entry)
Definition: list.h:90
static int list_empty(struct list_entry *head)
Definition: list.h:58
static void list_add_head(struct list_entry *head, struct list_entry *entry)
Definition: list.h:76
#define FIXME(fmt,...)
Definition: precomp.h:53
#define WARN(fmt,...)
Definition: precomp.h:61
#define ERR(fmt,...)
Definition: precomp.h:57
static HANDLE thread
Definition: service.c:33
#define STDMETHODCALLTYPE
Definition: bdasup.h:9
#define HW_VENDOR_NVIDIA
Definition: builtin.c:4465
#define HW_VENDOR_AMD
Definition: builtin.c:4464
#define HW_VENDOR_INTEL
Definition: builtin.c:4467
#define HW_VENDOR_VMWARE
Definition: builtin.c:4466
Definition: list.h:39
RECT rect
Definition: combotst.c:67
void wined3d_cs_destroy_object(struct wined3d_cs *cs, void(*callback)(void *object), void *object)
Definition: cs.c:2299
HDC dc
Definition: cylfrac.c:34
const WCHAR * vendor
Definition: db.cpp:873
#define E_OUTOFMEMORY
Definition: ddrawi.h:100
#define E_INVALIDARG
Definition: ddrawi.h:101
#define E_NOTIMPL
Definition: ddrawi.h:99
#define E_FAIL
Definition: ddrawi.h:102
#define free
Definition: debug_ros.c:5
HRESULT hr
Definition: delayimp.cpp:582
device_type
#define NULL
Definition: types.h:112
#define TRUE
Definition: types.h:120
#define FALSE
Definition: types.h:117
UINT32 uint32_t
Definition: types.h:75
static LONG cookie_counter
Definition: systemclock.c:28
HRESULT wined3d_buffer_no3d_init(struct wined3d_buffer *buffer_no3d, struct wined3d_device *device, const struct wined3d_buffer_desc *desc, const struct wined3d_sub_resource_data *data, void *parent, const struct wined3d_parent_ops *parent_ops)
Definition: buffer.c:1040
void wined3d_buffer_cleanup(struct wined3d_buffer *buffer)
Definition: buffer.c:453
void wined3d_context_cleanup(struct wined3d_context *context)
Definition: context.c:48
HRESULT wined3d_context_no3d_init(struct wined3d_context *context_no3d, struct wined3d_swapchain *swapchain)
Definition: context.c:122
ULONG CDECL wined3d_device_decref(struct wined3d_device *device)
Definition: device.c:251
HRESULT wined3d_device_init(struct wined3d_device *device, struct wined3d *wined3d, unsigned int adapter_idx, enum wined3d_device_type device_type, HWND focus_window, unsigned int flags, BYTE surface_alignment, const enum wined3d_feature_level *levels, unsigned int level_count, const BOOL *supported_extensions, struct wined3d_device_parent *device_parent)
Definition: device.c:5479
BOOL device_context_add(struct wined3d_device *device, struct wined3d_context *context)
Definition: device.c:84
void wined3d_device_cleanup(struct wined3d_device *device)
Definition: device.c:205
void device_context_remove(struct wined3d_device *device, struct wined3d_context *context)
Definition: device.c:118
ULONG CDECL wined3d_device_incref(struct wined3d_device *device)
Definition: device.c:161
const struct wined3d_shader_backend_ops none_shader_backend
Definition: shader.c:2060
struct wined3d_blitter * wined3d_cpu_blitter_create(void)
Definition: surface.c:1300
void wined3d_texture_cleanup(struct wined3d_texture *texture)
Definition: texture.c:1593
void wined3d_texture_sub_resources_destroyed(struct wined3d_texture *texture)
Definition: texture.c:1111
HRESULT wined3d_texture_no3d_init(struct wined3d_texture *texture_no3d, struct wined3d_device *device, const struct wined3d_resource_desc *desc, unsigned int layer_count, unsigned int level_count, uint32_t flags, void *parent, const struct wined3d_parent_ops *parent_ops)
Definition: texture.c:4570
const char * debug_d3dusage(uint32_t usage)
Definition: utils.c:4895
BOOL wined3d_get_primary_adapter_luid(LUID *luid)
Definition: utils.c:5761
const char * wined3d_debug_bind_flags(uint32_t bind_flags)
Definition: utils.c:4845
const char * debug_d3ddevicetype(enum wined3d_device_type device_type)
Definition: utils.c:4781
BOOL wined3d_adapter_no3d_init_format_info(struct wined3d_adapter *adapter)
Definition: utils.c:4135
const char * debug_d3dformat(enum wined3d_format_id format_id)
Definition: utils.c:4605
unsigned int idx
Definition: utils.c:40
const char * debug_uvec4(const struct wined3d_uvec4 *v)
Definition: utils.c:4577
const char * debug_d3dresourcetype(enum wined3d_resource_type resource_type)
Definition: utils.c:4992
const struct wined3d_format * wined3d_get_format(const struct wined3d_adapter *adapter, enum wined3d_format_id format_id, unsigned int bind_flags)
Definition: utils.c:4428
BOOL wined3d_array_reserve(void **elements, SIZE_T *capacity, SIZE_T count, SIZE_T size)
Definition: utils.c:6740
void wined3d_format_calculate_pitch(const struct wined3d_format *format, unsigned int alignment, unsigned int width, unsigned int height, unsigned int *row_pitch, unsigned int *slice_pitch)
Definition: utils.c:4489
const char * wined3d_debug_view_desc(const struct wined3d_view_desc *d, const struct wined3d_resource *resource)
Definition: utils.c:4867
enum wined3d_format_id pixelformat_for_depth(DWORD depth)
Definition: utils.c:6067
HRESULT wined3d_rendertarget_view_no3d_init(struct wined3d_rendertarget_view *view_no3d, const struct wined3d_view_desc *desc, struct wined3d_resource *resource, void *parent, const struct wined3d_parent_ops *parent_ops)
Definition: view.c:649
void wined3d_rendertarget_view_cleanup(struct wined3d_rendertarget_view *view)
Definition: view.c:374
BOOL WINAPI AllocateLocallyUniqueId(PLUID Luid)
Definition: security.c:1218
#define CHAR_BIT
Definition: cabinet.h:45
#define CDECL
Definition: compat.h:29
#define CloseHandle
Definition: compat.h:739
static __inline const char * wine_dbgstr_longlong(ULONGLONG ll)
Definition: compat.h:49
#define WINE_DECLARE_DEBUG_CHANNEL(x)
Definition: compat.h:45
#define CALLBACK
Definition: compat.h:35
#define lstrcpyW
Definition: compat.h:749
BOOL WINAPI QueryPerformanceFrequency(OUT PLARGE_INTEGER lpFrequency)
Definition: perfcnt.c:45
BOOL WINAPI QueryPerformanceCounter(OUT PLARGE_INTEGER lpPerformanceCount)
Definition: perfcnt.c:23
HANDLE WINAPI DECLSPEC_HOTPATCH CreateThread(IN LPSECURITY_ATTRIBUTES lpThreadAttributes, IN DWORD dwStackSize, IN LPTHREAD_START_ROUTINE lpStartAddress, IN LPVOID lpParameter, IN DWORD dwCreationFlags, OUT LPDWORD lpThreadId)
Definition: thread.c:137
BOOL WINAPI GetVersionExW(IN LPOSVERSIONINFOW lpVersionInformation)
Definition: version.c:37
int WINAPI lstrcmpiW(LPCWSTR str1, LPCWSTR str2)
Definition: locale.c:4171
#define LONG_MAX
Definition: limits.h:30
_ACRTIMP size_t __cdecl strlen(const char *)
Definition: string.c:1597
return ret
Definition: mutex.c:147
#define L(x)
Definition: resources.c:13
r parent
Definition: btrfs.c:3010
static const WCHAR device_name[]
Definition: btrfs.c:60
#define INFINITE
Definition: serial.h:102
#define abs(i)
Definition: fconv.c:206
void state_nop(struct wined3d_context *context, const struct wined3d_state *state, DWORD state_id)
Definition: ffp_gl.c:42
const struct wined3d_vertex_pipe_ops none_vertex_pipe
Definition: ffp_gl.c:1489
const struct wined3d_fragment_pipe_ops none_fragment_pipe
Definition: ffp_gl.c:1514
unsigned short WORD
Definition: ntddk_ex.h:93
unsigned int BOOL
Definition: ntddk_ex.h:94
unsigned long DWORD
Definition: ntddk_ex.h:95
return adapter
#define GL_NEAREST_MIPMAP_NEAREST
Definition: gl.h:667
GLuint GLuint GLsizei count
Definition: gl.h:1545
#define GL_LINEAR
Definition: gl.h:421
GLuint GLuint GLsizei GLenum type
Definition: gl.h:1545
#define GL_NEAREST_MIPMAP_LINEAR
Definition: gl.h:668
unsigned int GLenum
Definition: gl.h:150
#define GL_LINEAR_MIPMAP_LINEAR
Definition: gl.h:670
#define GL_NEAREST
Definition: gl.h:678
#define GL_LINEAR_MIPMAP_NEAREST
Definition: gl.h:669
GLint GLenum GLsizei GLsizei GLsizei GLint GLsizei const GLvoid * data
Definition: gl.h:1950
GLint GLint GLsizei width
Definition: gl.h:1546
GLenum GLuint texture
Definition: glext.h:6295
GLenum src
Definition: glext.h:6340
GLuint buffer
Definition: glext.h:5915
GLsizeiptr size
Definition: glext.h:5919
GLuint sampler
Definition: glext.h:7283
GLenum mode
Definition: glext.h:6217
GLenum GLenum dst
Definition: glext.h:6340
GLbitfield flags
Definition: glext.h:7161
GLboolean GLuint group
Definition: glext.h:11120
GLenum const GLvoid * addr
Definition: glext.h:9621
GLsizei levels
Definition: glext.h:7884
GLenum GLsizei len
Definition: glext.h:6722
GLsizeiptr const GLvoid GLenum usage
Definition: glext.h:5919
const GLfloat * m
Definition: glext.h:10848
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
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
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 GLint GLint j
Definition: glfuncs.h:250
unsigned int UINT
Definition: sysinfo.c:13
BOOL NTAPI GlobalMemoryStatusEx(LPMEMORYSTATUSEX lpBuffer)
Definition: heapmem.c:1272
static D3D_DRIVER_TYPE HMODULE UINT const D3D_FEATURE_LEVEL * feature_levels
Definition: hlsl_d3d11.c:28
#define InterlockedExchangeAddSizeT(a, b)
Definition: interlocked.h:211
#define S_OK
Definition: intsafe.h:52
#define SUCCEEDED(hr)
Definition: intsafe.h:50
#define FAILED(hr)
Definition: intsafe.h:51
uint32_t entry
Definition: isohybrid.c:63
#define d
Definition: ke_i.h:81
#define wine_dbgstr_w
Definition: kernel32.h:34
if(dx< 0)
Definition: linetemp.h:194
LONG_PTR LPARAM
Definition: minwindef.h:175
#define memcpy(s1, s2, n)
Definition: mkisofs.h:878
HDC hdc
Definition: main.c:9
static HDC
Definition: imagelist.c:88
D3D11_SHADER_VARIABLE_DESC desc
Definition: reflection.c:1683
static const char * dst_format
Definition: dib.c:1339
static const BYTE ramp[17]
Definition: dib.c:2957
static UINT format_id
Definition: clipboard.c:1455
static BYTE parameters[]
Definition: asn.c:558
#define min(a, b)
Definition: monoChain.cc:55
HANDLE stop_event
Definition: nfs41_daemon.c:55
#define STATUS_GRAPHICS_VIDPN_SOURCE_IN_USE
Definition: ntstatus.h:2094
#define STATUS_PROCEDURE_NOT_FOUND
Definition: ntstatus.h:452
short WCHAR
Definition: pedump.c:58
long LONG
Definition: pedump.c:60
#define DISP_CHANGE_SUCCESSFUL
Definition: winuser.h:190
#define CDS_FULLSCREEN
Definition: winuser.h:183
#define ENUM_REGISTRY_SETTINGS
Definition: winuser.h:180
BOOL WINAPI EnumDisplayMonitors(_In_opt_ HDC, _In_opt_ LPCRECT, _In_ MONITORENUMPROC, _In_ LPARAM)
#define ENUM_CURRENT_SETTINGS
Definition: winuser.h:179
BOOL WINAPI GetMonitorInfoW(_In_ HMONITOR, _Inout_ LPMONITORINFO)
int ssize_t
Definition: rosdhcp.h:52
#define calloc
Definition: rosglue.h:14
#define ERR_(ch,...)
Definition: debug.h:156
#define LIST_FOR_EACH_ENTRY(elem, list, type, field)
Definition: list.h:236
#define memset(x, y, z)
Definition: compat.h:39
#define STATUS_SUCCESS
Definition: shellext.h:65
#define TRACE(s)
Definition: solgame.cpp:4
Definition: dcommon.idl:28
D3DKMT_HANDLE hAdapter
Definition: d3dkmthk.h:156
D3DKMT_HANDLE hDevice
Definition: d3dkmthk.h:100
D3DKMT_HANDLE hAdapter
Definition: d3dkmthk.h:96
D3DKMT_HANDLE hDevice
Definition: d3dkmthk.h:84
D3DDDI_VIDEO_PRESENT_SOURCE_ID VidPnSourceId
Definition: d3dkmthk.h:129
D3DKMT_HANDLE hAdapter
Definition: d3dkmthk.h:135
D3DKMT_MEMORY_SEGMENT_GROUP MemorySegmentGroup
Definition: d3dkmthk.h:709
const D3DKMT_VIDPNSOURCEOWNER_TYPE * pType
Definition: d3dkmthk.h:141
const D3DDDI_VIDEO_PRESENT_SOURCE_ID * pVidPnSourceId
Definition: d3dkmthk.h:142
WCHAR DeviceName[32]
Definition: wingdi.h:3264
DWORD StateFlags
Definition: wingdi.h:3266
ULONG dwMinorVersion
Definition: rtltypes.h:248
ULONG dwOSVersionInfoSize
Definition: rtltypes.h:246
ULONG dwMajorVersion
Definition: rtltypes.h:247
LONG y
Definition: windef.h:130
LONG x
Definition: windef.h:129
DWORD dmBitsPerPel
Definition: wingdi.h:2093
POINTL dmPosition
Definition: wingdi.h:2081
DWORD dmFields
Definition: wingdi.h:2068
DWORD dmDisplayOrientation
Definition: wingdi.h:2082
DWORD dmPelsWidth
Definition: wingdi.h:2094
DWORD dmDisplayFlags
Definition: wingdi.h:2097
DWORD dmPelsHeight
Definition: wingdi.h:2095
DWORD dmDisplayFrequency
Definition: wingdi.h:2100
WORD dmSize
Definition: wingdi.h:2066
Definition: http.c:7252
Definition: cookie.c:34
Definition: devices.h:37
const char * driver_name
Definition: directx.c:273
enum wined3d_display_driver driver
Definition: directx.c:271
enum wined3d_driver_model driver_model
Definition: directx.c:272
Definition: filter.c:185
unsigned int max_blend_stages
unsigned int PrimitiveMiscCaps
unsigned int max_textures
unsigned int TextureOpCaps
unsigned int vs_version
unsigned int vs_uniform_count
unsigned int ps_version
Definition: ps.c:97
DWORD build
Definition: version.c:68
const struct wined3d_adapter * adapter
Definition: directx.c:45
unsigned int description_size
Definition: wined3d.h:1746
unsigned int driver_size
Definition: wined3d.h:1744
LARGE_INTEGER driver_version
Definition: wined3d.h:1747
unsigned int ordinal
DWORD MaxPShaderInstructionsExecuted
Definition: wined3d.h:1995
BOOL viewport_array_index_any_shader
Definition: wined3d.h:2002
DWORD MaxVertexBlendMatrices
Definition: wined3d.h:1967
DWORD MaxVertexShader30InstructionSlots
Definition: wined3d.h:1996
DWORD MaxTextureBlendStages
Definition: wined3d.h:1961
struct wined3d_vertex_shader_caps VS20Caps
Definition: wined3d.h:1991
DWORD StretchRectFilterCaps
Definition: wined3d.h:1990
BOOL stencil_export
Definition: wined3d.h:2003
DWORD VolumeTextureAddressCaps
Definition: wined3d.h:1940
float GuardBandTop
Definition: wined3d.h:1952
float PixelShader1xMaxValue
Definition: wined3d.h:1981
DWORD FVFCaps
Definition: wined3d.h:1959
DWORD PrimitiveMiscCaps
Definition: wined3d.h:1928
DWORD MaxVertexBlendMatrixIndex
Definition: wined3d.h:1968
DWORD VertexProcessingCaps
Definition: wined3d.h:1964
DWORD TextureAddressCaps
Definition: wined3d.h:1939
DWORD TextureCaps
Definition: wined3d.h:1935
DWORD ShadeCaps
Definition: wined3d.h:1934
DWORD TextureOpCaps
Definition: wined3d.h:1960
DWORD MaxTextureRepeat
Definition: wined3d.h:1946
DWORD MaxAnisotropy
Definition: wined3d.h:1948
DWORD MaxPixelShader30InstructionSlots
Definition: wined3d.h:1997
DWORD MaxVolumeExtent
Definition: wined3d.h:1945
float ExtentsAdjust
Definition: wined3d.h:1956
float MaxNpatchTessellationLevel
Definition: wined3d.h:1986
float GuardBandLeft
Definition: wined3d.h:1951
DWORD VolumeTextureFilterCaps
Definition: wined3d.h:1938
DWORD DevCaps
Definition: wined3d.h:1927
DWORD ZCmpCaps
Definition: wined3d.h:1930
DWORD MaxTextureHeight
Definition: wined3d.h:1944
DWORD CursorCaps
Definition: wined3d.h:1926
DWORD Caps
Definition: wined3d.h:1922
DWORD Caps3
Definition: wined3d.h:1924
DWORD MaxStreams
Definition: wined3d.h:1974
DWORD NumSimultaneousRTs
Definition: wined3d.h:1989
DWORD AlphaCmpCaps
Definition: wined3d.h:1933
DWORD DestBlendCaps
Definition: wined3d.h:1932
enum wined3d_feature_level max_feature_level
Definition: wined3d.h:2005
DWORD RasterCaps
Definition: wined3d.h:1929
DWORD DevCaps2
Definition: wined3d.h:1984
struct wined3d_pixel_shader_caps PS20Caps
Definition: wined3d.h:1992
float MaxVertexW
Definition: wined3d.h:1949
float MaxPointSize
Definition: wined3d.h:1970
DWORD Caps2
Definition: wined3d.h:1923
DWORD MaxPrimitiveCount
Definition: wined3d.h:1972
DWORD VertexShaderVersion
Definition: wined3d.h:1977
enum wined3d_device_type DeviceType
Definition: wined3d.h:1920
DWORD MaxTextureWidth
Definition: wined3d.h:1943
DWORD LineCaps
Definition: wined3d.h:1941
DWORD MaxUserClipPlanes
Definition: wined3d.h:1966
DWORD VertexTextureFilterCaps
Definition: wined3d.h:1993
DWORD PixelShaderVersion
Definition: wined3d.h:1980
float GuardBandBottom
Definition: wined3d.h:1954
float GuardBandRight
Definition: wined3d.h:1953
DWORD MaxVertexIndex
Definition: wined3d.h:1973
DWORD CubeTextureFilterCaps
Definition: wined3d.h:1937
DWORD MaxTextureAspectRatio
Definition: wined3d.h:1947
DWORD MaxStreamStride
Definition: wined3d.h:1975
DWORD MaxSimultaneousTextures
Definition: wined3d.h:1962
DWORD MaxActiveLights
Definition: wined3d.h:1965
DWORD StencilCaps
Definition: wined3d.h:1957
DWORD SrcBlendCaps
Definition: wined3d.h:1931
DWORD DeclTypes
Definition: wined3d.h:1988
DWORD TextureFilterCaps
Definition: wined3d.h:1936
struct wined3d_ddraw_caps ddraw_caps
Definition: wined3d.h:1999
DWORD MaxVertexShaderConst
Definition: wined3d.h:1978
BOOL shader_double_precision
Definition: wined3d.h:2001
DWORD MaxVShaderInstructionsExecuted
Definition: wined3d.h:1994
struct wined3d_swapchain * swapchain
unsigned int sub_resource_idx
uint32_t viewport_array_index_any_shader
enum wined3d_feature_level feature_level
struct wined3d_d3d_limits limits
uint32_t shader_double_precision
uint32_t wined3d_creation_flags
uint32_t unconditional_npot
struct wined3d_context context_no3d
struct wined3d_device d
struct wined3d_device_parent * device_parent
unsigned char surface_alignment
enum wined3d_format_id format_id
Definition: wined3d.h:1614
enum wined3d_scanline_ordering scanline_ordering
Definition: wined3d.h:1615
unsigned int version_high
enum wined3d_pci_vendor vendor
enum wined3d_pci_device device
unsigned int version_low
char description[WINED3D_MAX_DEVICE_IDENTIFIER_LENGTH]
unsigned int caps[WINED3D_GL_RES_TYPE_COUNT]
enum wined3d_format_id id
enum wined3d_pci_vendor vendor
enum wined3d_pci_device device
enum wined3d_display_driver driver
HMONITOR monitor
Definition: wined3d.h:2155
D3DDDI_VIDEO_PRESENT_SOURCE_ID vidpn_source_id
struct wined3d_adapter * adapter
struct wined3d_display_mode * modes
WCHAR device_name[CCHDEVICENAME]
unsigned int ordinal
D3DKMT_HANDLE kmt_device
enum wined3d_format_id screen_format
unsigned int size
unsigned int offset
const struct wined3d_parent_ops * parent_ops
unsigned short pci_vendor_id
enum wined3d_renderer renderer
unsigned short pci_device_id
const struct wined3d_parent_ops * parent_ops
unsigned int level_count
unsigned int adapter_count
unsigned int flags
struct wined3d_adapter * adapters[1]
#define max(a, b)
Definition: svc.c:63
DWORD WINAPI WaitForSingleObject(IN HANDLE hHandle, IN DWORD dwMilliseconds)
Definition: synch.c:82
HANDLE WINAPI DECLSPEC_HOTPATCH CreateEventW(IN LPSECURITY_ATTRIBUTES lpEventAttributes OPTIONAL, IN BOOL bManualReset, IN BOOL bInitialState, IN LPCWSTR lpName OPTIONAL)
Definition: synch.c:587
BOOL WINAPI DECLSPEC_HOTPATCH SetEvent(IN HANDLE hEvent)
Definition: synch.c:669
#define LIST_INIT(head)
Definition: queue.h:197
int64_t LONGLONG
Definition: typedefs.h:68
ULONG_PTR SIZE_T
Definition: typedefs.h:80
uint32_t ULONG
Definition: typedefs.h:59
#define STATUS_INVALID_PARAMETER
Definition: udferr_usr.h:135
LONGLONG QuadPart
Definition: typedefs.h:114
struct _LARGE_INTEGER::@2741 u
static char * output_name
Definition: widl.c:141
static WORD const char * driver
Definition: odbccp32.c:56
LONG WINAPI ChangeDisplaySettingsExW(LPCWSTR lpszDeviceName, LPDEVMODEW lpDevMode, HWND hwnd, DWORD dwflags, LPVOID lParam)
Definition: display.c:585
BOOL WINAPI EnumDisplayDevicesW(LPCWSTR lpDevice, DWORD iDevNum, PDISPLAY_DEVICEW lpDisplayDevice, DWORD dwFlags)
Definition: display.c:78
BOOL WINAPI EnumDisplaySettingsW(LPCWSTR lpszDeviceName, DWORD iModeNum, LPDEVMODEW lpDevMode)
Definition: display.c:408
BOOL WINAPI EnumDisplaySettingsExW(LPCWSTR lpszDeviceName, DWORD iModeNum, LPDEVMODEW lpDevMode, DWORD dwFlags)
Definition: display.c:330
DWORD WINAPI GetLastError(void)
Definition: except.c:1042
HANDLE WINAPI GetCurrentThread(void)
Definition: proc.c:1195
#define WAIT_OBJECT_0
Definition: winbase.h:383
NTSTATUS WINAPI D3DKMTCreateDevice(D3DKMT_CREATEDEVICE *desc)
enum _D3DKMT_MEMORY_SEGMENT_GROUP D3DKMT_MEMORY_SEGMENT_GROUP
NTSTATUS WINAPI D3DKMTCloseAdapter(const D3DKMT_CLOSEADAPTER *desc)
NTSTATUS WINAPI D3DKMTOpenAdapterFromLuid(D3DKMT_OPENADAPTERFROMLUID *desc)
NTSTATUS WINAPI D3DKMTOpenAdapterFromGdiDisplayName(D3DKMT_OPENADAPTERFROMGDIDISPLAYNAME *desc)
NTSTATUS WINAPI D3DKMTDestroyDevice(const D3DKMT_DESTROYDEVICE *desc)
NTSTATUS WINAPI D3DKMTQueryVideoMemoryInfo(D3DKMT_QUERYVIDEOMEMORYINFO *desc)
enum _D3DKMT_VIDPNSOURCEOWNER_TYPE D3DKMT_VIDPNSOURCEOWNER_TYPE
@ D3DKMT_VIDPNSOURCEOWNER_EXCLUSIVE
Definition: d3dkmthk.h:29
@ D3DKMT_VIDPNSOURCEOWNER_SHARED
Definition: d3dkmthk.h:28
NTSTATUS WINAPI D3DKMTSetVidPnSourceOwner(const D3DKMT_SETVIDPNSOURCEOWNER *desc)
static HRESULT wined3d_output_init(struct wined3d_output *output, unsigned int ordinal, struct wined3d_adapter *adapter, const WCHAR *device_name)
Definition: directx.c:128
wined3d_driver_model
Definition: directx.c:35
@ DRIVER_MODEL_NT6X
Definition: directx.c:40
@ DRIVER_MODEL_NT5X
Definition: directx.c:39
@ DRIVER_MODEL_GENERIC
Definition: directx.c:36
@ DRIVER_MODEL_WIN9X
Definition: directx.c:37
@ DRIVER_MODEL_NT40
Definition: directx.c:38
static const struct driver_version_information driver_version_table[]
Definition: directx.c:279
unsigned int CDECL wined3d_adapter_get_output_count(const struct wined3d_adapter *adapter)
Definition: directx.c:1038
ULONG CDECL wined3d_decref(struct wined3d *wined3d)
Definition: directx.c:198
static void adapter_no3d_destroy_swapchain(struct wined3d_swapchain *swapchain)
Definition: directx.c:3035
static const struct wined3d_adapter_ops wined3d_adapter_no3d_ops
Definition: directx.c:3263
const struct wined3d_gpu_description * wined3d_get_gpu_description(enum wined3d_pci_vendor vendor, enum wined3d_pci_device device)
Definition: directx.c:688
static void adapter_no3d_destroy_device(struct wined3d_device *device)
Definition: directx.c:2874
static HRESULT adapter_no3d_create_texture(struct wined3d_device *device, const struct wined3d_resource_desc *desc, unsigned int layer_count, unsigned int level_count, uint32_t flags, void *parent, const struct wined3d_parent_ops *parent_ops, struct wined3d_texture **texture)
Definition: directx.c:3086
HRESULT wined3d_output_get_gamma_ramp(struct wined3d_output *output, struct wined3d_gamma_ramp *ramp)
Definition: directx.c:1772
static const struct driver_version_information * get_driver_version_info(enum wined3d_display_driver driver, enum wined3d_driver_model driver_model)
Definition: directx.c:666
static const struct wined3d_gpu_description gpu_description_table[]
Definition: directx.c:335
UINT CDECL wined3d_get_adapter_count(const struct wined3d *wined3d)
Definition: directx.c:1019
static HRESULT adapter_no3d_create_query(struct wined3d_device *device, enum wined3d_query_type type, void *parent, const struct wined3d_parent_ops *parent_ops, struct wined3d_query **query)
Definition: directx.c:3226
void wined3d_adapter_cleanup(struct wined3d_adapter *adapter)
Definition: directx.c:176
static struct wined3d_adapter * wined3d_adapter_create(unsigned int ordinal, DWORD wined3d_creation_flags)
Definition: directx.c:3459
HRESULT CDECL wined3d_output_set_display_mode(struct wined3d_output *output, const struct wined3d_display_mode *mode)
Definition: directx.c:1693
#define DEFAULT_REFRESH_RATE
Definition: directx.c:32
static BOOL adapter_no3d_check_format(const struct wined3d_adapter *adapter, const struct wined3d_format *adapter_format, const struct wined3d_format *rt_format, const struct wined3d_format *ds_format)
Definition: directx.c:2902
static bool mode_matches_filter(const struct wined3d_adapter *adapter, const struct wined3d_display_mode *mode, const struct wined3d_format *format, enum wined3d_scanline_ordering scanline_ordering)
Definition: directx.c:1314
HRESULT CDECL wined3d_adapter_get_video_memory_info(const struct wined3d_adapter *adapter, unsigned int node_idx, enum wined3d_memory_segment_group group, struct wined3d_video_memory_info *info)
Definition: directx.c:1045
static BOOL wined3d_adapter_create_output(struct wined3d_adapter *adapter, const WCHAR *output_name)
Definition: directx.c:3363
static void adapter_no3d_flush_bo_address(struct wined3d_context *context, const struct wined3d_const_bo_address *data, size_t size)
Definition: directx.c:2993
static void wined3d_adapter_no3d_init_d3d_info(struct wined3d_adapter *adapter, unsigned int wined3d_creation_flags)
Definition: directx.c:3302
static const struct wined3d_state_entry_template misc_state_template_no3d[]
Definition: directx.c:2803
static HRESULT adapter_no3d_create_shader_resource_view(const struct wined3d_view_desc *desc, struct wined3d_resource *resource, void *parent, const struct wined3d_parent_ops *parent_ops, struct wined3d_shader_resource_view **view)
Definition: directx.c:3182
HRESULT CDECL wined3d_restore_display_modes(struct wined3d *wined3d)
Definition: directx.c:1618
struct wined3d_adapter *CDECL wined3d_output_get_adapter(const struct wined3d_output *output)
Definition: directx.c:1508
HRESULT CDECL wined3d_adapter_register_budget_change_notification(const struct wined3d_adapter *adapter, HANDLE event, DWORD *cookie)
Definition: directx.c:1144
static void adapter_no3d_uninit_3d(struct wined3d_device *device)
Definition: directx.c:2943
HRESULT CDECL wined3d_output_get_desc(const struct wined3d_output *output, struct wined3d_output_desc *desc)
Definition: directx.c:1256
static HRESULT adapter_no3d_create_buffer(struct wined3d_device *device, const struct wined3d_buffer_desc *desc, const struct wined3d_sub_resource_data *data, void *parent, const struct wined3d_parent_ops *parent_ops, struct wined3d_buffer **buffer)
Definition: directx.c:3041
static void * adapter_no3d_map_bo_address(struct wined3d_context *context, const struct wined3d_bo_address *data, size_t size, uint32_t map_flags)
Definition: directx.c:2957
static HRESULT adapter_no3d_create_unordered_access_view(const struct wined3d_view_desc *desc, struct wined3d_resource *resource, void *parent, const struct wined3d_parent_ops *parent_ops, struct wined3d_unordered_access_view **view)
Definition: directx.c:3197
static void adapter_no3d_destroy_shader_resource_view(struct wined3d_shader_resource_view *view)
Definition: directx.c:3192
static void adapter_no3d_destroy_buffer(struct wined3d_buffer *buffer)
Definition: directx.c:3067
ULONG CDECL wined3d_incref(struct wined3d *wined3d)
Definition: directx.c:189
static BOOL wined3d_check_depth_stencil_format(const struct wined3d_adapter *adapter, const struct wined3d_format *adapter_format, const struct wined3d_format *ds_format, enum wined3d_gl_resource_type gl_type)
Definition: directx.c:1941
ssize_t adapter_adjust_mapped_memory(struct wined3d_adapter *adapter, ssize_t size)
Definition: directx.c:167
HRESULT CDECL wined3d_check_device_format(const struct wined3d *wined3d, const struct wined3d_adapter *adapter, enum wined3d_device_type device_type, enum wined3d_format_id adapter_format_id, uint32_t usage, unsigned int bind_flags, enum wined3d_resource_type resource_type, enum wined3d_format_id check_format_id)
Definition: directx.c:1972
static void wined3d_output_cleanup(const struct wined3d_output *output)
Definition: directx.c:118
HRESULT CDECL wined3d_get_device_caps(const struct wined3d_adapter *adapter, enum wined3d_device_type device_type, struct wined3d_caps *caps)
Definition: directx.c:2366
unsigned int CDECL wined3d_output_get_mode_count(struct wined3d_output *output, enum wined3d_format_id format_id, enum wined3d_scanline_ordering scanline_ordering, bool cached)
Definition: directx.c:1341
HRESULT CDECL wined3d_check_device_format_conversion(const struct wined3d_output *output, enum wined3d_device_type device_type, enum wined3d_format_id src_format_id, enum wined3d_format_id dst_format_id)
Definition: directx.c:2210
static BOOL CALLBACK enum_monitor_proc(HMONITOR monitor, HDC hdc, RECT *rect, LPARAM lparam)
Definition: directx.c:1238
HRESULT CDECL wined3d_adapter_unregister_budget_change_notification(DWORD cookie)
Definition: directx.c:1196
static DWORD CALLBACK notification_thread_func(void *stop_event)
Definition: directx.c:1104
static void STDMETHODCALLTYPE wined3d_null_wined3d_object_destroyed(void *parent)
Definition: directx.c:3470
static struct list adapter_budget_change_notifications
Definition: directx.c:53
static void adapter_no3d_destroy_rendertarget_view(struct wined3d_rendertarget_view *view)
Definition: directx.c:3163
static void adapter_no3d_destroy_texture(struct wined3d_texture *texture)
Definition: directx.c:3113
static HRESULT adapter_no3d_create_swapchain(struct wined3d_device *device, const struct wined3d_swapchain_desc *desc, struct wined3d_swapchain_state_parent *state_parent, void *parent, const struct wined3d_parent_ops *parent_ops, struct wined3d_swapchain **swapchain)
Definition: directx.c:3008
static void wined3d_output_update_modes(struct wined3d_output *output, bool cached)
Definition: directx.c:1271
static void adapter_no3d_dispatch_compute(struct wined3d_device *device, const struct wined3d_state *state, const struct wined3d_dispatch_parameters *parameters)
Definition: directx.c:3251
HRESULT CDECL wined3d_register_software_device(struct wined3d *wined3d, void *init_function)
Definition: directx.c:1231
static void wined3d_copy_name(char *dst, const char *src, unsigned int dst_size)
Definition: directx.c:728
HRESULT CDECL wined3d_check_device_multisample_type(const struct wined3d_adapter *adapter, enum wined3d_device_type device_type, enum wined3d_format_id surface_format_id, BOOL windowed, enum wined3d_multisample_type multisample_type, unsigned int *quality_levels)
Definition: directx.c:1898
const struct min_lookup minMipLookup[]
Definition: directx.c:63
static HRESULT adapter_no3d_init_3d(struct wined3d_device *device)
Definition: directx.c:2909
HRESULT CDECL wined3d_output_set_gamma_ramp(struct wined3d_output *output, const struct wined3d_gamma_ramp *ramp)
Definition: directx.c:1759
void CDECL wined3d_output_release_ownership(const struct wined3d_output *output)
Definition: directx.c:77
HRESULT CDECL wined3d_device_create(struct wined3d *wined3d, struct wined3d_adapter *adapter, enum wined3d_device_type device_type, HWND focus_window, uint32_t flags, BYTE surface_alignment, const enum wined3d_feature_level *feature_levels, unsigned int feature_level_count, struct wined3d_device_parent *device_parent, struct wined3d_device **device)
Definition: directx.c:2777
static void adapter_no3d_destroy(struct wined3d_adapter *adapter)
Definition: directx.c:2842
static void adapter_no3d_clear_uav(struct wined3d_context *context, struct wined3d_unordered_access_view *view, const struct wined3d_uvec4 *clear_value, bool fp)
Definition: directx.c:3257
static void adapter_no3d_flush_context(struct wined3d_context *context)
Definition: directx.c:3240
HRESULT CDECL wined3d_adapter_get_identifier(const struct wined3d_adapter *adapter, uint32_t flags, struct wined3d_adapter_identifier *identifier)
Definition: directx.c:1785
static void adapter_no3d_destroy_sampler(struct wined3d_sampler *sampler)
Definition: directx.c:3221
static void adapter_no3d_copy_bo_address(struct wined3d_context *context, const struct wined3d_bo_address *dst, const struct wined3d_bo_address *src, unsigned int range_count, const struct wined3d_range *ranges, uint32_t map_flags)
Definition: directx.c:2976
HRESULT CDECL wined3d_output_get_mode(struct wined3d_output *output, enum wined3d_format_id format_id, enum wined3d_scanline_ordering scanline_ordering, unsigned int mode_idx, struct wined3d_display_mode *mode, bool cached)
Definition: directx.c:1369
struct wined3d_adapter *CDECL wined3d_get_adapter(const struct wined3d *wined3d, unsigned int idx)
Definition: directx.c:1009
static void adapter_no3d_destroy_query(struct wined3d_query *query)
Definition: directx.c:3235
static HANDLE notification_thread_stop_event
Definition: directx.c:54
unsigned int CDECL wined3d_calculate_format_pitch(const struct wined3d_adapter *adapter, enum wined3d_format_id format_id, unsigned int width)
Definition: directx.c:2197
struct wined3d_output *CDECL wined3d_adapter_get_output(const struct wined3d_adapter *adapter, unsigned int idx)
Definition: directx.c:1027
static HRESULT adapter_no3d_create_rendertarget_view(const struct wined3d_view_desc *desc, struct wined3d_resource *resource, void *parent, const struct wined3d_parent_ops *parent_ops, struct wined3d_rendertarget_view **view)
Definition: directx.c:3137
static HRESULT adapter_no3d_create_sampler(struct wined3d_device *device, const struct wined3d_sampler_desc *desc, void *parent, const struct wined3d_parent_ops *parent_ops, struct wined3d_sampler **sampler)
Definition: directx.c:3212
static void adapter_no3d_get_wined3d_caps(const struct wined3d_adapter *adapter, struct wined3d_caps *caps)
Definition: directx.c:2898
HRESULT CDECL wined3d_output_take_ownership(const struct wined3d_output *output, BOOL exclusive)
Definition: directx.c:87
static void adapter_no3d_destroy_bo(struct wined3d_context *context, struct wined3d_bo *bo)
Definition: directx.c:3004
static const GUID IID_D3DDEVICE_D3DUID
Definition: directx.c:57
BOOL wined3d_adapter_init(struct wined3d_adapter *adapter, unsigned int ordinal, const LUID *luid, const struct wined3d_adapter_ops *adapter_ops)
Definition: directx.c:3383
bool wined3d_driver_info_init(struct wined3d_driver_info *driver_info, const struct wined3d_gpu_description *gpu_desc, enum wined3d_feature_level feature_level, UINT64 vram_bytes, UINT64 sysmem_bytes)
Definition: directx.c:740
static BOOL wined3d_check_surface_format(const struct wined3d_format *format)
Definition: directx.c:1951
static void adapter_no3d_destroy_unordered_access_view(struct wined3d_unordered_access_view *view)
Definition: directx.c:3207
const struct wined3d_parent_ops wined3d_null_parent_ops
Definition: directx.c:3472
static struct wined3d_context * adapter_no3d_acquire_context(struct wined3d_device *device, struct wined3d_texture *texture, unsigned int sub_resource_idx)
Definition: directx.c:2880
HRESULT CDECL wined3d_check_depth_stencil_match(const struct wined3d_adapter *adapter, enum wined3d_device_type device_type, enum wined3d_format_id adapter_format_id, enum wined3d_format_id render_target_format_id, enum wined3d_format_id depth_stencil_format_id)
Definition: directx.c:1859
static void adapter_no3d_draw_primitive(struct wined3d_device *device, const struct wined3d_state *state, const struct wined3d_draw_parameters *parameters)
Definition: directx.c:3245
static bool adapter_no3d_alloc_bo(struct wined3d_device *device, struct wined3d_resource *resource, unsigned int sub_resource_idx, struct wined3d_bo_address *addr)
Definition: directx.c:2998
const struct wined3d_gpu_description * wined3d_get_user_override_gpu_description(enum wined3d_pci_vendor vendor, enum wined3d_pci_device device)
Definition: directx.c:702
static HRESULT adapter_no3d_create_device(struct wined3d *wined3d, const struct wined3d_adapter *adapter, enum wined3d_device_type device_type, HWND focus_window, unsigned int flags, BYTE surface_alignment, const enum wined3d_feature_level *levels, unsigned int level_count, struct wined3d_device_parent *device_parent, struct wined3d_device **device)
Definition: directx.c:2848
UINT64 adapter_adjust_memory(struct wined3d_adapter *adapter, INT64 amount)
Definition: directx.c:158
HRESULT CDECL wined3d_output_find_closest_matching_mode(struct wined3d_output *output, struct wined3d_display_mode *mode)
Definition: directx.c:1409
static struct wined3d_adapter * wined3d_adapter_no3d_create(unsigned int ordinal, unsigned int wined3d_creation_flags)
Definition: directx.c:3311
static void adapter_no3d_unmap_bo_address(struct wined3d_context *context, const struct wined3d_bo_address *data, unsigned int range_count, const struct wined3d_range *ranges)
Definition: directx.c:2969
HRESULT CDECL wined3d_output_get_display_mode(const struct wined3d_output *output, struct wined3d_display_mode *mode, enum wined3d_display_rotation *rotation)
Definition: directx.c:1515
static BOOL equal_display_mode(const DEVMODEW *mode1, const DEVMODEW *mode2)
Definition: directx.c:1584
HRESULT CDECL wined3d_check_device_type(const struct wined3d *wined3d, struct wined3d_output *output, enum wined3d_device_type device_type, enum wined3d_format_id display_format, enum wined3d_format_id backbuffer_format, BOOL windowed)
Definition: directx.c:2254
const GLenum magLookup[]
Definition: directx.c:71
HRESULT wined3d_init(struct wined3d *wined3d, uint32_t flags)
Definition: directx.c:3477
HRESULT CDECL wined3d_output_get_raster_status(const struct wined3d_output *output, struct wined3d_raster_status *raster_status)
Definition: directx.c:1814
enum wined3d_pci_device wined3d_gpu_from_feature_level(enum wined3d_pci_vendor *vendor, enum wined3d_feature_level feature_level)
Definition: directx.c:930
static void adapter_no3d_release_context(struct wined3d_context *context)
Definition: directx.c:2893
static HANDLE notification_thread
Definition: directx.c:54
HRESULT wined3d_swapchain_no3d_init(struct wined3d_swapchain *swapchain_no3d, struct wined3d_device *device, const struct wined3d_swapchain_desc *desc, struct wined3d_swapchain_state_parent *state_parent, void *parent, const struct wined3d_parent_ops *parent_ops)
Definition: swapchain.c:1685
void wined3d_swapchain_cleanup(struct wined3d_swapchain *swapchain)
Definition: swapchain.c:30
#define WINED3DPS20_MAX_DYNAMICFLOWCONTROLDEPTH
Definition: wined3d.h:1122
#define WINED3DSTENCILCAPS_ZERO
Definition: wined3d.h:1145
#define WINED3DPMISCCAPS_MASKZ
Definition: wined3d.h:1102
#define WINED3DPMISCCAPS_CULLCW
Definition: wined3d.h:1105
#define WINED3DPSHADECAPS_FOGGOURAUD
Definition: wined3d.h:1244
#define WINED3DSTENCILCAPS_KEEP
Definition: wined3d.h:1144
#define WINEDDCAPS_BLTSTRETCH
Definition: wined3d.h:1509
#define WINED3DPTADDRESSCAPS_WRAP
Definition: wined3d.h:1137
#define WINED3DVS20_MIN_NUMTEMPS
Definition: wined3d.h:1184
#define WINED3DPRASTERCAPS_FOGVERTEX
Definition: wined3d.h:1206
#define WINEDDSCAPS_PRIMARYSURFACE
Definition: wined3d.h:1429
#define WINED3DPTEXTURECAPS_NONPOW2CONDITIONAL
Definition: wined3d.h:1255
#define WINED3DVS20_MAX_DYNAMICFLOWCONTROLDEPTH
Definition: wined3d.h:1181
#define WINED3DUSAGE_QUERY_LEGACYBUMPMAP
Definition: wined3d.h:942
#define WINED3DPBLENDCAPS_INVSRCALPHA
Definition: wined3d.h:1083
#define WINED3D_NO3D
Definition: wined3d.h:1323
#define WINED3DPRASTERCAPS_FOGTABLE
Definition: wined3d.h:1207
#define WINEDDCAPS_COLORKEY
Definition: wined3d.h:1522
wined3d_multisample_type
Definition: wined3d.h:572
@ WINED3D_MULTISAMPLE_NON_MASKABLE
Definition: wined3d.h:574
@ WINED3D_MULTISAMPLE_16_SAMPLES
Definition: wined3d.h:589
@ WINED3D_MULTISAMPLE_NONE
Definition: wined3d.h:573
#define WINED3DPS20_MIN_NUMTEMPS
Definition: wined3d.h:1125
#define WINED3DPCMPCAPS_LESSEQUAL
Definition: wined3d.h:1096
#define WINED3DPBLENDCAPS_INVDESTCOLOR
Definition: wined3d.h:1087
#define WINED3DDEVCAPS_TEXTURESYSTEMMEMORY
Definition: wined3d.h:1305
#define WINED3DDEVCAPS_TEXTUREVIDEOMEMORY
Definition: wined3d.h:1306
#define WINED3DDEVCAPS_DRAWPRIMITIVES2
Definition: wined3d.h:1310
#define WINED3DPCMPCAPS_NEVER
Definition: wined3d.h:1093
#define WINED3DENUM_WHQL_LEVEL
Definition: wined3d.h:872
#define WINED3DCAPS2_DYNAMICTEXTURES
Definition: wined3d.h:1196
#define WINED3DPRASTERCAPS_WFOG
Definition: wined3d.h:1217
@ WINED3D_RS_DITHERENABLE
Definition: wined3d.h:309
@ WINED3D_RS_ZFUNC
Definition: wined3d.h:306
@ WINED3D_RS_MULTISAMPLEANTIALIAS
Definition: wined3d.h:369
@ WINED3D_RS_LINEPATTERN
Definition: wined3d.h:296
#define WINED3DDEVCAPS_PUREDEVICE
Definition: wined3d.h:1316
#define WINED3DPSHADECAPS_COLORFLATRGB
Definition: wined3d.h:1226
#define WINED3DPMISCCAPS_MRTPOSTPIXELSHADERBLENDING
Definition: wined3d.h:1118
#define WINEDDCKEYCAPS_DESTBLT
Definition: wined3d.h:1451
#define WINED3D_OK
Definition: wined3d.h:33
#define WINEDDSCAPS_ZBUFFER
Definition: wined3d.h:1437
#define WINED3DPTFILTERCAPS_LINEARMIPNEAREST
Definition: wined3d.h:1271
#define WINED3DVS20CAPS_PREDICATION
Definition: wined3d.h:1188
#define WINEDDFXCAPS_BLTROTATION90
Definition: wined3d.h:1478
#define WINED3DPS20_MAX_NUMINSTRUCTIONSLOTS
Definition: wined3d.h:1128
#define WINED3DPS20_MAX_STATICFLOWCONTROLDEPTH
Definition: wined3d.h:1126
#define WINED3DPTFILTERCAPS_MAGFLINEAR
Definition: wined3d.h:1279
#define WINED3DPTADDRESSCAPS_INDEPENDENTUV
Definition: wined3d.h:1141
#define WINED3DPTFILTERCAPS_MIPNEAREST
Definition: wined3d.h:1269
#define WINED3DUSAGE_LEGACY_CUBEMAP
Definition: wined3d.h:934
#define WINED3D_BIND_VERTEX_BUFFER
Definition: wined3d.h:909
#define WINED3DLINECAPS_BLEND
Definition: wined3d.h:1070
#define WINED3DCAPS2_CANRENDERWINDOWED
Definition: wined3d.h:1192
#define WINED3DPBLENDCAPS_ZERO
Definition: wined3d.h:1078
#define WINED3DCAPS3_ALPHA_FULLSCREEN_FLIP_OR_DISCARD
Definition: wined3d.h:1039
#define WINED3DPTADDRESSCAPS_CLAMP
Definition: wined3d.h:1139
wined3d_resource_type
Definition: wined3d.h:716
@ WINED3D_RTYPE_TEXTURE_2D
Definition: wined3d.h:720
@ WINED3D_RTYPE_TEXTURE_1D
Definition: wined3d.h:719
@ WINED3D_RTYPE_NONE
Definition: wined3d.h:717
@ WINED3D_RTYPE_BUFFER
Definition: wined3d.h:718
@ WINED3D_RTYPE_TEXTURE_3D
Definition: wined3d.h:721
#define WINEDDFXCAPS_BLTSTRETCHX
Definition: wined3d.h:1483
#define WINED3DPBLENDCAPS_SRCALPHASAT
Definition: wined3d.h:1088
#define WINEDDFXCAPS_BLTSHRINKYN
Definition: wined3d.h:1482
#define WINED3DDEVCAPS_TLVERTEXSYSTEMMEMORY
Definition: wined3d.h:1303
#define WINED3DCAPS2_FULLSCREENGAMMA
Definition: wined3d.h:1191
wined3d_memory_segment_group
Definition: wined3d.h:861
@ WINED3D_MEMORY_SEGMENT_GROUP_NON_LOCAL
Definition: wined3d.h:863
@ WINED3D_MEMORY_SEGMENT_GROUP_LOCAL
Definition: wined3d.h:862
#define WINED3DPSHADECAPS_ALPHAGOURAUDBLEND
Definition: wined3d.h:1239
#define WINED3DSTENCILCAPS_REPLACE
Definition: wined3d.h:1146
#define WINEDDSCAPS_OFFSCREENPLAIN
Definition: wined3d.h:1426
#define WINED3DSTENCILCAPS_INCRSAT
Definition: wined3d.h:1147
#define WINED3DPRASTERCAPS_ZTEST
Definition: wined3d.h:1203
#define WINED3DPTFILTERCAPS_MIPFLINEAR
Definition: wined3d.h:1277
#define WINED3DPTEXTURECAPS_ALPHA
Definition: wined3d.h:1249
#define WINED3DPMISCCAPS_CULLNONE
Definition: wined3d.h:1104
#define WINED3D_BIND_UNORDERED_ACCESS
Definition: wined3d.h:916
#define WINED3DERR_NOTAVAILABLE
Definition: wined3d.h:42
#define WINED3DPS20CAPS_PREDICATION
Definition: wined3d.h:1133
#define WINED3DPTEXTURECAPS_POW2
Definition: wined3d.h:1248
#define WINED3DDEVCAPS_DRAWPRIMTLVERTEX
Definition: wined3d.h:1307
#define WINED3DUSAGE_QUERY_SRGBREAD
Definition: wined3d.h:945
#define WINED3DPS20_MIN_STATICFLOWCONTROLDEPTH
Definition: wined3d.h:1127
#define WINEDDFXCAPS_BLTSTRETCHYN
Definition: wined3d.h:1486
#define WINEDDCAPS_GDI
Definition: wined3d.h:1510
#define WINED3DLINECAPS_ZTEST
Definition: wined3d.h:1069
#define WINED3DPTEXTURECAPS_BORDER
Definition: wined3d.h:1251
#define WINED3DPMISCCAPS_CULLCCW
Definition: wined3d.h:1106
#define WINED3DDTCAPS_SHORT4N
Definition: wined3d.h:1056
#define WINED3DVS20_MIN_DYNAMICFLOWCONTROLDEPTH
Definition: wined3d.h:1182
#define WINEDDSCAPS_PALETTE
Definition: wined3d.h:1428
#define WINEDDCAPS_BLTDEPTHFILL
Definition: wined3d.h:1528
#define WINEDDCAPS_CANCLIP
Definition: wined3d.h:1529
#define WINED3DLINECAPS_FOG
Definition: wined3d.h:1072
#define WINED3DPSHADECAPS_SPECULARFLATRGB
Definition: wined3d.h:1232
wined3d_query_type
Definition: wined3d.h:725
#define WINED3DUSAGE_QUERY_FILTER
Definition: wined3d.h:943
#define WINED3DPRASTERCAPS_ZFOG
Definition: wined3d.h:1218
#define WINED3DSTENCILCAPS_DECRSAT
Definition: wined3d.h:1148
#define WINEDDCAPS_COLORKEYHWASSIST
Definition: wined3d.h:1524
#define WINED3DPBLENDCAPS_SRCCOLOR
Definition: wined3d.h:1080
#define WINED3DDEVCAPS_FLOATTLVERTEX
Definition: wined3d.h:1297
#define WINEDDCAPS_BLTCOLORFILL
Definition: wined3d.h:1526
#define WINED3DPRASTERCAPS_SUBPIXEL
Definition: wined3d.h:1204
#define WINED3DDEVCAPS_EXECUTESYSTEMMEMORY
Definition: wined3d.h:1301
#define WINED3DPTEXTURECAPS_TRANSPARENCY
Definition: wined3d.h:1250
#define WINED3D_BIND_SHADER_RESOURCE
Definition: wined3d.h:912
#define WINED3DPRASTERCAPS_STIPPLE
Definition: wined3d.h:1208
#define WINED3DPS20CAPS_ARBITRARYSWIZZLE
Definition: wined3d.h:1131
#define WINED3DPCMPCAPS_LESS
Definition: wined3d.h:1094
#define WINED3DPSHADECAPS_SPECULARGOURAUDRGB
Definition: wined3d.h:1234
#define WINED3DPSHADECAPS_COLORGOURAUDRGB
Definition: wined3d.h:1228
#define WINED3DPTFILTERCAPS_LINEARMIPLINEAR
Definition: wined3d.h:1272
#define WINED3DUSAGE_QUERY_WRAPANDMIP
Definition: wined3d.h:948
wined3d_format_id
Definition: wined3d.h:126
@ WINED3DFMT_B8G8R8A8_UNORM
Definition: wined3d.h:244
@ WINED3DFMT_B8G8R8X8_UNORM
Definition: wined3d.h:245
@ WINED3DFMT_B5G5R5X1_UNORM
Definition: wined3d.h:129
@ WINED3DFMT_B10G10R10A2_UNORM
Definition: wined3d.h:135
@ WINED3DFMT_UNKNOWN
Definition: wined3d.h:127
@ WINED3DFMT_B5G5R5A1_UNORM
Definition: wined3d.h:243
@ WINED3DFMT_B5G6R5_UNORM
Definition: wined3d.h:242
#define WINEDDSCAPS_TEXTURE
Definition: wined3d.h:1432
#define WINEDDCAPS2_CERTIFIED
Definition: wined3d.h:1533
#define WINED3D_MAX_STREAMS
Definition: wined3d.h:1596
#define WINED3DPTEXTURECAPS_MIPMAP
Definition: wined3d.h:1260
#define WINED3DUSAGE_QUERY_POSTPIXELSHADER_BLENDING
Definition: wined3d.h:944
@ WINED3D_RENDERER_VULKAN
Definition: wined3d.h:59
#define WINED3DPBLENDCAPS_DESTCOLOR
Definition: wined3d.h:1086
#define WINEDDCAPS2_NOPAGELOCKREQUIRED
Definition: wined3d.h:1544
#define WINED3DDEVCAPS_HWRASTERIZATION
Definition: wined3d.h:1315
#define WINEDDFXCAPS_BLTSHRINKXN
Definition: wined3d.h:1480
#define WINED3DPRASTERCAPS_PAT
Definition: wined3d.h:1202
#define WINEDDFXCAPS_BLTMIRRORUPDOWN
Definition: wined3d.h:1476
#define WINEDDFXCAPS_BLTSTRETCHXN
Definition: wined3d.h:1484
#define WINED3DPSHADECAPS_ALPHAFLATBLEND
Definition: wined3d.h:1237
#define WINED3D_BIND_DEPTH_STENCIL
Definition: wined3d.h:915
#define WINED3DPBLENDCAPS_ONE
Definition: wined3d.h:1079
#define WINED3DCAPS3_COPY_TO_VIDMEM
Definition: wined3d.h:1041
#define WINED3D_PRESENT_CONVERSION
Definition: wined3d.h:1324
#define WINED3DPTFILTERCAPS_NEAREST
Definition: wined3d.h:1267
#define WINEDDCAPS_PALETTE
Definition: wined3d.h:1515
#define WINED3DPRASTERCAPS_DEPTHBIAS
Definition: wined3d.h:1222
#define WINEDDCAPS_CANBLTSYSMEM
Definition: wined3d.h:1531
#define WINEDDSCAPS_FLIP
Definition: wined3d.h:1424
#define WINED3DPTFILTERCAPS_MAGFPOINT
Definition: wined3d.h:1278
#define WINEDDCAPS_CANCLIPSTRETCHED
Definition: wined3d.h:1530
#define WINED3DMIN30SHADERINSTRUCTIONS
Definition: wined3d.h:1076
#define WINED3DDEVCAPS_CANRENDERAFTERFLIP
Definition: wined3d.h:1308
#define WINED3DPRASTERCAPS_SLOPESCALEDEPTHBIAS
Definition: wined3d.h:1221
#define WINED3DPTFILTERCAPS_LINEAR
Definition: wined3d.h:1268
#define WINED3DPS20CAPS_GRADIENTINSTRUCTIONS
Definition: wined3d.h:1132
#define WINED3DPRASTERCAPS_DITHER
Definition: wined3d.h:1199
wined3d_scanline_ordering
Definition: wined3d.h:824
@ WINED3D_SCANLINE_ORDERING_UNKNOWN
Definition: wined3d.h:825
@ WINED3D_SCANLINE_ORDERING_INTERLACED
Definition: wined3d.h:827
@ WINED3D_SCANLINE_ORDERING_PROGRESSIVE
Definition: wined3d.h:826
#define WINED3DPTEXTURECAPS_PERSPECTIVE
Definition: wined3d.h:1247
wined3d_feature_level
Definition: wined3d.h:98
@ WINED3D_FEATURE_LEVEL_11
Definition: wined3d.h:109
@ WINED3D_FEATURE_LEVEL_10_1
Definition: wined3d.h:108
@ WINED3D_FEATURE_LEVEL_8
Definition: wined3d.h:103
@ WINED3D_FEATURE_LEVEL_7
Definition: wined3d.h:102
@ WINED3D_FEATURE_LEVEL_6
Definition: wined3d.h:101
@ WINED3D_FEATURE_LEVEL_9_3
Definition: wined3d.h:106
@ WINED3D_FEATURE_LEVEL_10
Definition: wined3d.h:107
@ WINED3D_FEATURE_LEVEL_NONE
Definition: wined3d.h:99
@ WINED3D_FEATURE_LEVEL_11_1
Definition: wined3d.h:110
@ WINED3D_FEATURE_LEVEL_5
Definition: wined3d.h:100
@ WINED3D_FEATURE_LEVEL_9_1
Definition: wined3d.h:104
@ WINED3D_FEATURE_LEVEL_9_2
Definition: wined3d.h:105
#define WINED3DCURSORCAPS_COLOR
Definition: wined3d.h:1294
@ WINED3D_SHADER_TYPE_HULL
Definition: wined3d.h:844
@ WINED3D_SHADER_TYPE_PIXEL
Definition: wined3d.h:841
@ WINED3D_SHADER_TYPE_GEOMETRY
Definition: wined3d.h:843
@ WINED3D_SHADER_TYPE_DOMAIN
Definition: wined3d.h:845
@ WINED3D_SHADER_TYPE_COMPUTE
Definition: wined3d.h:848
@ WINED3D_SHADER_TYPE_VERTEX
Definition: wined3d.h:842
#define WINEDDFXCAPS_BLTSHRINKX
Definition: wined3d.h:1479
#define WINED3DDTCAPS_UBYTE4N
Definition: wined3d.h:1054
#define WINED3DPBLENDCAPS_BOTHINVSRCALPHA
Definition: wined3d.h:1090
#define WINED3DPS20CAPS_NOTEXINSTRUCTIONLIMIT
Definition: wined3d.h:1135
#define WINED3DCURSORCAPS_LOWRES
Definition: wined3d.h:1295
#define WINED3DPS20_MIN_NUMINSTRUCTIONSLOTS
Definition: wined3d.h:1129
#define WINED3DSTENCILCAPS_INVERT
Definition: wined3d.h:1149
#define WINED3DPTFILTERCAPS_MIPLINEAR
Definition: wined3d.h:1270
#define WINEDDCAPS2_CANRENDERWINDOWED
Definition: wined3d.h:1550
#define WINED3DPMISCCAPS_CLIPPLANESCALEDPOINTS
Definition: wined3d.h:1108
#define WINED3DPTEXTURECAPS_PROJECTED
Definition: wined3d.h:1256
#define WINED3D_BIND_RENDER_TARGET
Definition: wined3d.h:914
#define WINED3DPCMPCAPS_GREATEREQUAL
Definition: wined3d.h:1099
#define WINED3DDTCAPS_SHORT2N
Definition: wined3d.h:1055
wined3d_display_rotation
Definition: wined3d.h:831
@ WINED3D_DISPLAY_ROTATION_270
Definition: wined3d.h:836
@ WINED3D_DISPLAY_ROTATION_0
Definition: wined3d.h:833
@ WINED3D_DISPLAY_ROTATION_180
Definition: wined3d.h:835
@ WINED3D_DISPLAY_ROTATION_UNSPECIFIED
Definition: wined3d.h:832
@ WINED3D_DISPLAY_ROTATION_90
Definition: wined3d.h:834
#define WINED3DPTFILTERCAPS_MINFPOINT
Definition: wined3d.h:1273
#define WINED3DUSAGE_QUERY_VERTEXTEXTURE
Definition: wined3d.h:947
#define WINED3DPBLENDCAPS_INVSRCCOLOR
Definition: wined3d.h:1081
#define WINED3DUSAGE_QUERY_GENMIPMAP
Definition: wined3d.h:941
#define WINEDDCAPS2_PRIMARYGAMMA
Definition: wined3d.h:1549
#define WINED3DPCMPCAPS_EQUAL
Definition: wined3d.h:1095
#define WINED3DPMISCCAPS_COLORWRITEENABLE
Definition: wined3d.h:1107
#define WINEDDFXCAPS_BLTSHRINKY
Definition: wined3d.h:1481
#define WINED3DPCMPCAPS_NOTEQUAL
Definition: wined3d.h:1098
#define WINED3DUSAGE_DYNAMIC
Definition: wined3d.h:924
#define WINED3DLINECAPS_TEXTURE
Definition: wined3d.h:1068
#define WINED3DPBLENDCAPS_SRCALPHA
Definition: wined3d.h:1082
#define WINED3DDEVCAPS2_STREAMOFFSET
Definition: wined3d.h:1045
#define WINED3DDEVCAPS_DRAWPRIMITIVES2EX
Definition: wined3d.h:1312
#define WINED3DERR_INVALIDCALL
Definition: wined3d.h:44
#define WINEDDFXCAPS_BLTSTRETCHY
Definition: wined3d.h:1485
#define WINED3DUSAGE_QUERY_SRGBWRITE
Definition: wined3d.h:946
#define WINED3DPBLENDCAPS_DESTALPHA
Definition: wined3d.h:1084
#define WINED3DPRASTERCAPS_SCISSORTEST
Definition: wined3d.h:1220
#define WINED3DPTFILTERCAPS_MIPFPOINT
Definition: wined3d.h:1276
#define WINED3DCAPS3_COPY_TO_SYSTEMMEM
Definition: wined3d.h:1042
#define WINED3DPS20CAPS_NODEPENDENTREADLIMIT
Definition: wined3d.h:1134
#define WINED3DPCMPCAPS_GREATER
Definition: wined3d.h:1097
wined3d_device_type
Definition: wined3d.h:90
@ WINED3D_DEVICE_TYPE_HAL
Definition: wined3d.h:91
@ WINED3D_DEVICE_TYPE_REF
Definition: wined3d.h:92
#define WINEDDCKEYCAPS_SRCBLT
Definition: wined3d.h:1460
#define WINEDDFXCAPS_BLTALPHA
Definition: wined3d.h:1471
#define WINED3DPBLENDCAPS_INVDESTALPHA
Definition: wined3d.h:1085
#define WINEDDCAPS2_WIDESURFACES
Definition: wined3d.h:1545
#define WINED3DPTFILTERCAPS_MINFLINEAR
Definition: wined3d.h:1274
#define WINED3DPTEXTURECAPS_ALPHAPALETTE
Definition: wined3d.h:1254
#define WINED3DPBLENDCAPS_BOTHSRCALPHA
Definition: wined3d.h:1089
#define WINED3D_BIND_INDEX_BUFFER
Definition: wined3d.h:910
#define WINEDDSCAPS_MIPMAP
Definition: wined3d.h:1442
#define WINED3DOK_NOMIPGEN
Definition: wined3d.h:37
#define WINEDDCAPS_BLT
Definition: wined3d.h:1506
#define WINED3DDEVCAPS_EXECUTEVIDEOMEMORY
Definition: wined3d.h:1302
#define WINEDDFXCAPS_BLTMIRRORLEFTRIGHT
Definition: wined3d.h:1475
#define WINED3DPMISCCAPS_CLIPTLVERTS
Definition: wined3d.h:1109
#define WINED3DDTCAPS_UBYTE4
Definition: wined3d.h:1053
#define WINED3DUSAGE_SOFTWAREPROCESSING
Definition: wined3d.h:919
#define WINED3DVS20_MAX_STATICFLOWCONTROLDEPTH
Definition: wined3d.h:1185
#define WINED3DDEVCAPS_TLVERTEXVIDEOMEMORY
Definition: wined3d.h:1304
#define WINED3DDEVCAPS_HWTRANSFORMANDLIGHT
Definition: wined3d.h:1313
#define WINED3DLINECAPS_ALPHACMP
Definition: wined3d.h:1071
#define WINED3DPSHADECAPS_FOGFLAT
Definition: wined3d.h:1243
#define WINED3DPCMPCAPS_ALWAYS
Definition: wined3d.h:1100
#define WINED3DDEVCAPS2_VERTEXELEMENTSCANSHARESTREAMOFFSET
Definition: wined3d.h:1051
void WINAPI wined3d_mutex_unlock(void)
Definition: wined3d_main.c:544
void WINAPI wined3d_mutex_lock(void)
Definition: wined3d_main.c:539
#define WINED3D_FORMAT_CAP_VERTEX_ATTRIBUTE
#define STATE_BASEVERTEXINDEX
static BOOL wined3d_format_is_typeless(const struct wined3d_format *format)
#define STATE_DEPTH_STENCIL
#define WINED3D_FORMAT_CAP_UNORDERED_ACCESS
#define STATE_STENCIL_REF
#define STATE_CONSTANT_BUFFER(a)
static void * wined3d_texture_allocate_object_memory(SIZE_T s, SIZE_T level_count, SIZE_T layer_count)
#define PCI_VENDOR_NONE
#define STATE_GRAPHICS_SHADER_RESOURCE_BINDING
#define MAKEDWORD_VERSION(maj, min)
static void wined3d_cs_finish(struct wined3d_cs *cs, enum wined3d_cs_queue_id queue_id)
#define STATE_STREAM_OUTPUT
wined3d_pci_vendor
@ HW_VENDOR_REDHAT
@ HW_VENDOR_SOFTWARE
#define PCI_DEVICE_NONE
#define WINED3D_FORMAT_CAP_TEXTURE
#define STATE_DEPTH_BOUNDS
#define WINED3D_FORMAT_ATTR_EXTENSION
#define WINED3D_FORMAT_CAP_INDEX_BUFFER
#define STATE_SHADER(a)
#define STATE_BLEND_FACTOR
#define WINED3D_FORMAT_CAP_SRGB_WRITE
#define WINED3D_FORMAT_CAP_FILTERING
#define STATE_SAMPLE_MASK
#define STATE_SCISSORRECT
#define STATE_STREAMSRC
#define STATE_COMPUTE_SHADER_RESOURCE_BINDING
wined3d_gl_resource_type
@ WINED3D_GL_RES_TYPE_TEX_3D
@ WINED3D_GL_RES_TYPE_TEX_CUBE
@ WINED3D_GL_RES_TYPE_BUFFER
@ WINED3D_GL_RES_TYPE_TEX_2D
@ WINED3D_GL_RES_TYPE_RB
@ WINED3D_GL_RES_TYPE_TEX_1D
wined3d_display_driver
@ DRIVER_NVIDIA_GEFORCE6
@ DRIVER_NVIDIA_GEFORCE2MX
@ DRIVER_INTEL_GMA950
@ DRIVER_AMD_R600
@ DRIVER_INTEL_HD4000
@ DRIVER_AMD_RAGE_128PRO
@ DRIVER_INTEL_GMA900
@ DRIVER_NVIDIA_TNT
@ DRIVER_VMWARE
@ DRIVER_INTEL_GMA3000
@ DRIVER_NVIDIA_GEFORCEFX
@ DRIVER_NVIDIA_KEPLER
@ DRIVER_NVIDIA_GEFORCE8
@ DRIVER_REDHAT_VIRGL
@ DRIVER_INTEL_GMA800
@ DRIVER_WINE
@ DRIVER_AMD_RX
@ DRIVER_NVIDIA_FERMI
@ DRIVER_AMD_R100
@ DRIVER_AMD_R300
#define WINED3D_FORMAT_CAP_POSTPIXELSHADER_BLENDING
#define STATE_COMPUTE_UNORDERED_ACCESS_VIEW_BINDING
#define WINED3D_FORMAT_CAP_DEPTH_STENCIL
#define STATE_RASTERIZER
#define WINED3D_FORMAT_CAP_VTF
static void wined3d_from_cs(const struct wined3d_cs *cs)
#define WINED3D_FORMAT_CAP_RENDERTARGET
#define STATE_INDEXBUFFER
#define WINED3D_FORMAT_CAP_BLIT
#define STATE_VDECL
#define STATE_VIEWPORT
#define WINED3D_FORMAT_CAP_SRGB_READ
@ WINED3D_CS_QUEUE_DEFAULT
#define STATE_FRAMEBUFFER
#define STATE_RENDER(a)
#define STATE_BLEND
wined3d_pci_device
@ CARD_NVIDIA_GEFORCE_GTX780
@ CARD_INTEL_I5100_4
@ CARD_INTEL_I5100_3
@ CARD_NVIDIA_GEFORCE_GTX950M
@ CARD_INTEL_946GZ
@ CARD_NVIDIA_GEFORCE_RTX4060
@ CARD_NVIDIA_GEFORCE_GTX1060_3GB
@ CARD_NVIDIA_GEFORCE_GT325M
@ CARD_NVIDIA_GEFORCE_GTXTITANZ
@ CARD_INTEL_HD5500
@ CARD_AMD_RADEON_HD4800
@ CARD_NVIDIA_GEFORCE_GTX775M
@ CARD_NVIDIA_GEFORCE_GTX570
@ CARD_NVIDIA_GEFORCE_GTXTITAN
@ CARD_NVIDIA_GEFORCE_RTX3080_10GB_LHR
@ CARD_NVIDIA_GEFORCE_GTX560TI
@ CARD_NVIDIA_GEFORCE_GTX1080TI
@ CARD_INTEL_855GM
@ CARD_NVIDIA_GEFORCE_GTS250
@ CARD_AMD_RADEON_HD6400
@ CARD_AMD_RADEON_HD4700
@ CARD_INTEL_IP5200_2
@ CARD_NVIDIA_GEFORCE_6800
@ CARD_AMD_RADEON_HD5700
@ CARD_NVIDIA_GEFORCE_GT610
@ CARD_NVIDIA_GEFORCE_GT420
@ CARD_NVIDIA_GEFORCEFX_5600
@ CARD_AMD_RADEON_R9_M370X
@ CARD_INTEL_945G
@ CARD_INTEL_HWD
@ CARD_NVIDIA_GEFORCE_GTX1080
@ CARD_INTEL_945GME
@ CARD_AMD_RADEON_RX_460
@ CARD_NVIDIA_GEFORCE_9600GT
@ CARD_NVIDIA_GEFORCE_GT640M
@ CARD_AMD_RADEON_HD7800
@ CARD_NVIDIA_GEFORCE_GTX1650SUPER
@ CARD_AMD_RADEON_RX_VEGA_20
@ CARD_INTEL_HD615
@ CARD_NVIDIA_GEFORCE_GT1030
@ CARD_NVIDIA_GEFORCE_940M
@ CARD_INTEL_915G
@ CARD_NVIDIA_GEFORCE_320M
@ CARD_AMD_RADEON_R9_290X
@ CARD_INTEL_G41
@ CARD_NVIDIA_GEFORCE_GT650M
@ CARD_NVIDIA_GEFORCE_GTX460
@ CARD_AMD_RADEON_RX_NAVI_21
@ CARD_INTEL_IP555
@ CARD_NVIDIA_GEFORCE_830M
@ CARD_AMD_RADEON_RX_VEGA_10
@ CARD_AMD_RADEON_HD2900
@ CARD_NVIDIA_RIVA_128
@ CARD_INTEL_I555
@ CARD_NVIDIA_GEFORCE_7300
@ CARD_NVIDIA_GEFORCEFX_5200
@ CARD_NVIDIA_GEFORCE_GTX1650
@ CARD_NVIDIA_GEFORCE_GT330
@ CARD_NVIDIA_GEFORCE_7600
@ CARD_INTEL_IPP6300
@ CARD_NVIDIA_GEFORCE_GT320M
@ CARD_INTEL_PNVG
@ CARD_WINE
@ CARD_NVIDIA_GEFORCE_820M
@ CARD_NVIDIA_GEFORCE_GTX280
@ CARD_NVIDIA_GEFORCE_6600GT
@ CARD_NVIDIA_GEFORCE_GT425M
@ CARD_NVIDIA_GEFORCE_GTX275
@ CARD_AMD_RADEON_XPRESS_200M
@ CARD_NVIDIA_GEFORCE_GT440
@ CARD_NVIDIA_GEFORCE_7400
@ CARD_AMD_RADEON_HD5600
@ CARD_NVIDIA_GEFORCE_GTX560
@ CARD_INTEL_IVBD
@ CARD_NVIDIA_GEFORCE_GTX650TI
@ CARD_INTEL_SNBS
@ CARD_NVIDIA_GEFORCE_845M
@ CARD_AMD_RADEON_HD5400
@ CARD_NVIDIA_GEFORCE_RTX3080_10GB
@ CARD_NVIDIA_GEFORCE_840M
@ CARD_INTEL_915GM
@ CARD_AMD_RADEON_X1600
@ CARD_INTEL_945GM
@ CARD_NVIDIA_GEFORCE_8800GTX
@ CARD_NVIDIA_GEFORCE_9700MGT
@ CARD_INTEL_965Q
@ CARD_INTEL_965G
@ CARD_NVIDIA_GEFORCE_GT730
@ CARD_INTEL_PNVM
@ CARD_NVIDIA_GEFORCE_GTX580
@ CARD_NVIDIA_GEFORCE_GTX1060
@ CARD_INTEL_IVBM
@ CARD_NVIDIA_GEFORCE_GTX1070
@ CARD_NVIDIA_GEFORCE_GTX950
@ CARD_INTEL_HD5000_2
@ CARD_NVIDIA_GEFORCE_RTX3090
@ CARD_NVIDIA_GEFORCE_RTX3060TI_GA104_LHR
@ CARD_INTEL_UHD630_1
@ CARD_NVIDIA_GEFORCE_GTX690
@ CARD_NVIDIA_GEFORCE_GTX780TI
@ CARD_NVIDIA_GEFORCE_RTX3050
@ CARD_AMD_RADEON_RX_VEGA_12
@ CARD_NVIDIA_GEFORCE_RTX3060TI_GA104
@ CARD_NVIDIA_GEFORCE_GTX770
@ CARD_NVIDIA_GEFORCE_RTX3090TI
@ CARD_NVIDIA_GEFORCE_GTX760
@ CARD_NVIDIA_GEFORCE_GTX880M
@ CARD_NVIDIA_GEFORCE4_TI4200
@ CARD_INTEL_UHD617
@ CARD_AMD_RADEON_HD4200M
@ CARD_INTEL_HD6000
@ CARD_INTEL_UHD620
@ CARD_NVIDIA_GEFORCE_GT430
@ CARD_NVIDIA_RIVA_TNT
@ CARD_NVIDIA_GEFORCE_GTX750TI
@ CARD_INTEL_I5100_2
@ CARD_INTEL_I540
@ CARD_NVIDIA_GEFORCE_8300GS
@ CARD_NVIDIA_GEFORCE_RTX4090
@ CARD_NVIDIA_GEFORCE_GTX465
@ CARD_INTEL_E7221G
@ CARD_INTEL_965GME
@ CARD_INTEL_IP580_2
@ CARD_AMD_RADEON_HD2600
@ CARD_INTEL_IP6200
@ CARD_NVIDIA_GEFORCE_RTX4070TI
@ CARD_NVIDIA_GEFORCE_GT240
@ CARD_NVIDIA_TITANX_PASCAL
@ CARD_AMD_RAPHAEL
@ CARD_AMD_RADEON_R9_M380
@ CARD_AMD_RADEON_HD6550D
@ CARD_AMD_RADEON_HD4600
@ CARD_INTEL_HD520_1
@ CARD_NVIDIA_GEFORCE_GT520
@ CARD_AMD_RADEON_RAVEN
@ CARD_INTEL_G33
@ CARD_NVIDIA_GEFORCE_RTX2080
@ CARD_AMD_RADEON_PRO_V620_VF
@ CARD_INTEL_HD5600
@ CARD_NVIDIA_GEFORCE_GTX675MX_1
@ CARD_NVIDIA_GEFORCE_GT730M
@ CARD_AMD_RADEON_RX_NAVI_14
@ CARD_NVIDIA_GEFORCE_8800GTS
@ CARD_NVIDIA_GEFORCE_RTX4070TISUPER
@ CARD_NVIDIA_GEFORCE_GT640
@ CARD_AMD_RADEON_HD6800
@ CARD_AMD_RADEON_HD3200
@ CARD_NVIDIA_GEFORCE_8400GS
@ CARD_INTEL_IP5200_6
@ CARD_NVIDIA_GEFORCE_RTX3070TI
@ CARD_AMD_RAGE_128PRO
@ CARD_NVIDIA_GEFORCE_8200
@ CARD_VMWARE_SVGA3D
@ CARD_AMD_RADEON_HD6600M
@ CARD_AMD_RADEON_HD7900
@ CARD_INTEL_845G
@ CARD_INTEL_HD510_2
@ CARD_NVIDIA_GEFORCE_RTX3080TI
@ CARD_NVIDIA_GEFORCE_GTX1660TI
@ CARD_NVIDIA_GEFORCE_RTX3070_MOBILE
@ CARD_AMD_RADEON_HD3850
@ CARD_AMD_RADEON_HD6600
@ CARD_INTEL_I5100_1
@ CARD_INTEL_ILKD
@ CARD_NVIDIA_GEFORCE_GTX480
@ CARD_INTEL_HD515
@ CARD_NVIDIA_GEFORCE_RTX4070SUPER
@ CARD_NVIDIA_GEFORCE_GT720
@ CARD_NVIDIA_GEFORCE_GTX550
@ CARD_NVIDIA_GEFORCE_9400M
@ CARD_NVIDIA_GEFORCE_GTX960
@ CARD_NVIDIA_GEFORCE_GT755M
@ CARD_REDHAT_VIRGL
@ CARD_AMD_RADEON_9500
@ CARD_NVIDIA_GEFORCE_GTX680
@ CARD_INTEL_Q45
@ CARD_AMD_RADEON_HD8670
@ CARD_NVIDIA_GEFORCE2
@ CARD_AMD_RADEON_HD7870
@ CARD_NVIDIA_GEFORCE_8600MGT
@ CARD_INTEL_Q33
@ CARD_NVIDIA_GEFORCE_GTX650
@ CARD_NVIDIA_GEFORCE_GT555M
@ CARD_NVIDIA_GEFORCE_GTS350M
@ CARD_NVIDIA_GEFORCE_RTX3080_12GB
@ CARD_AMD_RADEON_HD7660D
@ CARD_NVIDIA_GEFORCE_GTX870M
@ CARD_NVIDIA_GEFORCE_9400GT
@ CARD_NVIDIA_GEFORCE_GTX850M
@ CARD_NVIDIA_GEFORCE_RTX3060
@ CARD_NVIDIA_GEFORCE_7800GT
@ CARD_INTEL_Q35
@ CARD_AMD_RADEON_R9_M395X
@ CARD_NVIDIA_GEFORCE
@ CARD_NVIDIA_GEFORCE_RTX3060TI_GA103
@ CARD_NVIDIA_GEFORCE_GTX670
@ CARD_AMD_RADEON_R9_290
@ CARD_NVIDIA_GEFORCE_GTX765M
@ CARD_AMD_RADEON_HD5900
@ CARD_NVIDIA_TITANV
@ CARD_NVIDIA_GEFORCE_RTX4080SUPER
@ CARD_NVIDIA_GEFORCE_GTX1080M
@ CARD_INTEL_G45
@ CARD_AMD_RADEON_R9_FURY
@ CARD_INTEL_IVBS
@ CARD_NVIDIA_GEFORCE_RTX4060TI16G
@ CARD_INTEL_865G
@ CARD_INTEL_IP5200_5
@ CARD_NVIDIA_GEFORCE_RTX4070
@ CARD_NVIDIA_GEFORCE_RTX3060_LHR
@ CARD_NVIDIA_GEFORCE_210
@ CARD_INTEL_IPP580_1
@ CARD_NVIDIA_GEFORCE_GTX660M
@ CARD_INTEL_HD510_3
@ CARD_NVIDIA_GEFORCE_GTX460M
@ CARD_AMD_RADEON_HD6700
@ CARD_NVIDIA_GEFORCE_9800GT
@ CARD_INTEL_IGD
@ CARD_INTEL_965GM
@ CARD_AMD_RADEON_X700
@ CARD_AMD_RADEON_7200
@ CARD_AMD_RADEON_HD6900
@ CARD_INTEL_I6100
@ CARD_NVIDIA_GEFORCE_6200
@ CARD_INTEL_I550
@ CARD_INTEL_IP580_1
@ CARD_INTEL_SNBD
@ CARD_AMD_RADEON_R7
@ CARD_AMD_RADEON_8500
@ CARD_INTEL_IP5200_1
@ CARD_NVIDIA_GEFORCE_9300
@ CARD_NVIDIA_GEFORCE_GT525M
@ CARD_NVIDIA_GEFORCE_GTX760TI
@ CARD_NVIDIA_AMPERE_A10
@ CARD_INTEL_GM45
@ CARD_NVIDIA_GEFORCE_GTX1060M
@ CARD_INTEL_UHD630_2
@ CARD_NVIDIA_GEFORCE_GTX260
@ CARD_NVIDIA_GEFORCE_GTX980
@ CARD_NVIDIA_GEFORCE_8600GT
@ CARD_NVIDIA_GEFORCE_GTX970M
@ CARD_NVIDIA_GEFORCE_GTX560M
@ CARD_NVIDIA_GEFORCE_GTX1070M
@ CARD_NVIDIA_GEFORCE_315M
@ CARD_NVIDIA_GEFORCE_RTX2070
@ CARD_NVIDIA_GEFORCE_GT630
@ CARD_NVIDIA_GEFORCE_GT220
@ CARD_AMD_RADEON_HD7700
@ CARD_NVIDIA_GEFORCE_GTX750
@ CARD_INTEL_HDP530
@ CARD_NVIDIA_RIVA_TNT2
@ CARD_NVIDIA_GEFORCE_GTX770M
@ CARD_NVIDIA_GEFORCE_GTXTITANX
@ CARD_NVIDIA_GEFORCE_GTX1660SUPER
@ CARD_AMD_RADEON_RX_NAVI_10
@ CARD_NVIDIA_GEFORCE_GTX675MX_2
@ CARD_AMD_RADEON_HD5800
@ CARD_AMD_RADEON_PRO_V620
@ CARD_INTEL_HD530_2
@ CARD_NVIDIA_GEFORCEFX_5800
@ CARD_AMD_RADEON_HD2350
@ CARD_AMD_RADEON_R9_285
@ CARD_NVIDIA_GEFORCE_GTX1050
@ CARD_AMD_RADEON_HD8600M
@ CARD_NVIDIA_GEFORCE3
@ CARD_INTEL_HD630_2
@ CARD_NVIDIA_GEFORCE_RTX4060TI8G
@ CARD_INTEL_HD520_2
@ CARD_NVIDIA_GEFORCE_GTXTITANB
@ CARD_INTEL_HD630_1
@ CARD_NVIDIA_GEFORCE4_MX
@ CARD_NVIDIA_TESLA_T4
@ CARD_NVIDIA_GEFORCE_GTX780M
@ CARD_NVIDIA_GEFORCE_GTX960M
@ CARD_AMD_RADEON_R3
@ CARD_NVIDIA_GEFORCE_GTX1050TI
@ CARD_NVIDIA_GEFORCE_GTX970
@ CARD_AMD_RADEON_HD6300
@ CARD_NVIDIA_GEFORCE_GT630M
@ CARD_INTEL_SNBM
@ CARD_NVIDIA_GEFORCE_GT740M
@ CARD_AMD_RADEON_HD8770
@ CARD_INTEL_HD510_1
@ CARD_INTEL_830M
@ CARD_NVIDIA_GEFORCE_GT540M
@ CARD_NVIDIA_GEFORCE_GTX660
@ CARD_NVIDIA_GEFORCE_RTX4080
@ CARD_AMD_RADEON_HD6490M
@ CARD_INTEL_IPP580_2
@ CARD_INTEL_IP5200_4
@ CARD_AMD_RADEON_RX_480
@ CARD_NVIDIA_GEFORCE_RTX3070
@ CARD_INTEL_HD530_1
@ CARD_INTEL_IP5200_3
@ CARD_INTEL_HD5300
@ CARD_INTEL_HD620
@ CARD_NVIDIA_GEFORCE2_MX
@ CARD_INTEL_ILKM
@ CARD_NVIDIA_GEFORCE_RTX2060
@ CARD_NVIDIA_GEFORCE_GTX470
@ CARD_NVIDIA_GEFORCE_RTX2080TI
@ CARD_NVIDIA_GEFORCE_8500GT
@ CARD_NVIDIA_GEFORCE_GTX980TI
@ CARD_NVIDIA_GEFORCE_410M
@ CARD_AMD_VANGOGH
@ CARD_NVIDIA_GEFORCE_GTS450
@ CARD_NVIDIA_GEFORCE_GT750M
@ CARD_AMD_RADEON_HD6480G
@ CARD_NVIDIA_GEFORCE_RTX3070_LHR
@ CARD_NVIDIA_GEFORCE_GTX660TI
@ CARD_INTEL_HWM
@ CARD_NVIDIA_GEFORCE_9500GT
@ CARD_NVIDIA_GEFORCE_GTX670MX
@ CARD_NVIDIA_GEFORCE_GTX860M
@ CARD_AMD_RADEON_HD4350
@ CARD_INTEL_B43
@ CARD_NVIDIA_GEFORCE_9200
@ CARD_INTEL_HD5000_1
@ CARD_AMD_RADEON_HD6410D
#define STATE_GRAPHICS_UNORDERED_ACCESS_VIEW_BINDING
#define WINED3D_FORMAT_CAP_GEN_MIPMAP
static unsigned int wined3d_popcount(unsigned int x)
#define WINED3D_FORMAT_ATTR_BUMPMAP
#define E_NOINTERFACE
Definition: winerror.h:3479
#define DXGI_ERROR_NOT_CURRENTLY_AVAILABLE
Definition: winerror.h:7140
#define DM_DISPLAYFREQUENCY
Definition: wingdi.h:1272
#define DMDO_DEFAULT
Definition: wingdi.h:1217
#define DM_INTERLACED
Definition: wingdi.h:1228
#define DM_PELSWIDTH
Definition: wingdi.h:1269
#define DM_POSITION
Definition: wingdi.h:1255
#define DMDO_180
Definition: wingdi.h:1219
#define DM_BITSPERPEL
Definition: wingdi.h:1268
#define DMDO_270
Definition: wingdi.h:1220
#define DISPLAY_DEVICE_PRIMARY_DEVICE
Definition: wingdi.h:1398
#define DM_DISPLAYORIENTATION
Definition: wingdi.h:1257
#define DISPLAY_DEVICE_ATTACHED_TO_DESKTOP
Definition: wingdi.h:1396
BOOL WINAPI GetDeviceGammaRamp(_In_ HDC hdc, _Out_writes_bytes_(3 *256 *2) LPVOID lpRamp)
BOOL WINAPI SetDeviceGammaRamp(_In_ HDC hdc, _In_reads_bytes_(3 *256 *2) LPVOID lpRamp)
#define DM_PELSHEIGHT
Definition: wingdi.h:1270
#define DMDO_90
Definition: wingdi.h:1218
BOOL WINAPI DeleteDC(_In_ HDC)
#define DM_DISPLAYFLAGS
Definition: wingdi.h:1271
HDC WINAPI CreateDCW(_In_opt_ LPCWSTR pszDriver, _In_opt_ LPCWSTR pszDevice, _In_opt_ LPCWSTR psz, _In_opt_ const DEVMODEW *pdmInit)
unsigned char BYTE
Definition: xxhash.c:193