ReactOS 0.4.17-dev-934-g091855f
d3d12_main.c
Go to the documentation of this file.
1/*
2 * Copyright 2018 Józef Kucia for CodeWeavers
3 *
4 * This library is free software; you can redistribute it and/or
5 * modify it under the terms of the GNU Lesser General Public
6 * License as published by the Free Software Foundation; either
7 * version 2.1 of the License, or (at your option) any later version.
8 *
9 * This library is distributed in the hope that it will be useful,
10 * but WITHOUT ANY WARRANTY; without even the implied warranty of
11 * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
12 * Lesser General Public License for more details.
13 *
14 * You should have received a copy of the GNU Lesser General Public
15 * License along with this library; if not, write to the Free Software
16 * Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301, USA
17 *
18 */
19
20#define COBJMACROS
21#define VKD3D_NO_VULKAN_H
22#define VKD3D_NO_WIN32_TYPES
23
24#include "windef.h"
25#include "dxgi1_6.h"
26#include "d3d12.h"
27#include "wine/vulkan.h"
28
29#include <vkd3d.h>
30
31#include "initguid.h"
32#include "wine/wined3d.h"
33#include "wine/winedxgi.h"
34#include "wine/debug.h"
35
38
40
41/* FIXME: We should unload vulkan-1.dll. */
43{
44 vulkan_module = LoadLibraryA("vulkan-1.dll");
45 return TRUE;
46}
47
49{
51
53
54 if (vulkan_module)
55 return (void *)GetProcAddress(vulkan_module, "vkGetInstanceProcAddr");
56
57 return NULL;
58}
59
61{
62 TRACE("iid %s, debug %p.\n", debugstr_guid(iid), debug);
63
64 WARN("Returning DXGI_ERROR_SDK_COMPONENT_MISSING.\n");
66}
67
69 const IID *iids, void *configurations, UINT *configurations_sizes)
70{
71 FIXME("feature_count %u, iids %p, configurations %p, configurations_sizes %p stub!\n",
72 feature_count, iids, configurations, configurations_sizes);
73
74 return E_NOINTERFACE;
75}
76
78{
79 return SetEvent(event) ? S_OK : E_FAIL;
80}
81
83{
86 HRESULT hr;
87
88 if (!adapter)
89 {
90 if (FAILED(hr = CreateDXGIFactory2(0, &IID_IDXGIFactory4, (void **)&factory)))
91 {
92 WARN("Failed to create DXGI factory, hr %#lx.\n", hr);
93 goto done;
94 }
95
96 if (FAILED(hr = IDXGIFactory4_EnumAdapters(factory, 0, &dxgi_adapter)))
97 {
98 WARN("Failed to enumerate primary adapter, hr %#lx.\n", hr);
99 goto done;
100 }
101
103 }
104
105 if (FAILED(hr = IUnknown_QueryInterface(adapter, &IID_IWineDXGIAdapter, (void **)wine_adapter)))
106 WARN("Invalid adapter %p, hr %#lx.\n", adapter, hr);
107
108done:
109 if (dxgi_adapter)
110 IDXGIAdapter_Release(dxgi_adapter);
111 if (factory)
112 IDXGIFactory4_Release(factory);
113
114 return hr;
115}
116
117static BOOL check_vk_instance_extension(VkInstance vk_instance,
118 PFN_vkGetInstanceProcAddr pfn_vkGetInstanceProcAddr, const char *name)
119{
120 PFN_vkEnumerateInstanceExtensionProperties pfn_vkEnumerateInstanceExtensionProperties;
121 VkExtensionProperties *properties;
122 BOOL ret = FALSE;
123 unsigned int i;
125
126 pfn_vkEnumerateInstanceExtensionProperties
127 = (void *)pfn_vkGetInstanceProcAddr(vk_instance, "vkEnumerateInstanceExtensionProperties");
128
129 if (pfn_vkEnumerateInstanceExtensionProperties(NULL, &count, NULL) < 0)
130 return FALSE;
131
132 if (!(properties = calloc(count, sizeof(*properties))))
133 return FALSE;
134
135 if (pfn_vkEnumerateInstanceExtensionProperties(NULL, &count, properties) >= 0)
136 {
137 for (i = 0; i < count; ++i)
138 {
139 if (!strcmp(properties[i].extensionName, name))
140 {
141 ret = TRUE;
142 break;
143 }
144 }
145 }
146
147 free(properties);
148 return ret;
149}
150
152 PFN_vkGetInstanceProcAddr pfn_vkGetInstanceProcAddr, const struct wine_dxgi_adapter_info *adapter_info)
153{
154 PFN_vkGetPhysicalDeviceProperties2 pfn_vkGetPhysicalDeviceProperties2 = NULL;
155 PFN_vkGetPhysicalDeviceProperties pfn_vkGetPhysicalDeviceProperties;
156 PFN_vkEnumeratePhysicalDevices pfn_vkEnumeratePhysicalDevices;
157 VkPhysicalDevice vk_physical_device = VK_NULL_HANDLE;
158 VkPhysicalDeviceIDProperties id_properties;
159 VkPhysicalDeviceProperties2 properties2;
161 VkPhysicalDevice *vk_physical_devices;
162 VkInstance vk_instance;
163 unsigned int i;
165 VkResult vr;
166
168
169 pfn_vkEnumeratePhysicalDevices = (void *)pfn_vkGetInstanceProcAddr(vk_instance, "vkEnumeratePhysicalDevices");
170
171 pfn_vkGetPhysicalDeviceProperties = (void *)pfn_vkGetInstanceProcAddr(vk_instance, "vkGetPhysicalDeviceProperties");
173 pfn_vkGetPhysicalDeviceProperties2 = (void *)pfn_vkGetInstanceProcAddr(vk_instance, "vkGetPhysicalDeviceProperties2KHR");
174
175 if ((vr = pfn_vkEnumeratePhysicalDevices(vk_instance, &count, NULL)) < 0)
176 {
177 WARN("Failed to get device count, vr %d.\n", vr);
178 return VK_NULL_HANDLE;
179 }
180 if (!count)
181 {
182 WARN("No physical device available.\n");
183 return VK_NULL_HANDLE;
184 }
185
186 if (!(vk_physical_devices = calloc(count, sizeof(*vk_physical_devices))))
187 return VK_NULL_HANDLE;
188
189 if ((vr = pfn_vkEnumeratePhysicalDevices(vk_instance, &count, vk_physical_devices)) < 0)
190 goto done;
191
192 if (!IsEqualGUID(&adapter_info->driver_uuid, &GUID_NULL) && pfn_vkGetPhysicalDeviceProperties2
193 && check_vk_instance_extension(vk_instance, pfn_vkGetInstanceProcAddr,
195 {
196 TRACE("Matching adapters by UUIDs.\n");
197
198 for (i = 0; i < count; ++i)
199 {
200 memset(&id_properties, 0, sizeof(id_properties));
202
204 properties2.pNext = &id_properties;
205
206 pfn_vkGetPhysicalDeviceProperties2(vk_physical_devices[i], &properties2);
207
208 if (!memcmp(id_properties.driverUUID, &adapter_info->driver_uuid, VK_UUID_SIZE)
209 && !memcmp(id_properties.deviceUUID, &adapter_info->device_uuid, VK_UUID_SIZE))
210 {
211 vk_physical_device = vk_physical_devices[i];
212 break;
213 }
214 }
215 }
216
217 if (!vk_physical_device)
218 {
219 WARN("Matching adapters by PCI IDs.\n");
220
221 for (i = 0; i < count; ++i)
222 {
223 pfn_vkGetPhysicalDeviceProperties(vk_physical_devices[i], &properties);
224
225 if (properties.vendorID == adapter_info->vendor_id && properties.deviceID == adapter_info->device_id)
226 {
227 vk_physical_device = vk_physical_devices[i];
228 break;
229 }
230 }
231 }
232
233 if (!vk_physical_device)
234 FIXME("Could not find Vulkan physical device for DXGI adapter.\n");
235
236done:
237 free(vk_physical_devices);
238 return vk_physical_device;
239}
240
242 REFIID iid, void **device)
243{
244 struct vkd3d_optional_instance_extensions_info optional_extensions_info;
245 struct vkd3d_instance_create_info instance_create_info;
247 struct vkd3d_device_create_info device_create_info;
248 struct wine_dxgi_adapter_info adapter_info;
249 struct vkd3d_instance *instance;
250 IWineDXGIAdapter *wine_adapter;
251 HRESULT hr;
252
253 static const char * const instance_extensions[] =
254 {
257 };
258 static const char * const optional_instance_extensions[] =
259 {
262 };
263 static const char * const device_extensions[] =
264 {
266 };
267 static const struct vkd3d_application_info application_info =
268 {
270 .api_version = VKD3D_API_VERSION_1_2,
271 };
272
273 TRACE("adapter %p, minimum_feature_level %#x, iid %s, device %p.\n",
274 adapter, minimum_feature_level, debugstr_guid(iid), device);
275
276 if (!(pfn_vkGetInstanceProcAddr = load_vulkan()))
277 {
278 ERR_(winediag)("Failed to load Vulkan library.\n");
279 return E_FAIL;
280 }
281
282 if (FAILED(hr = d3d12_get_adapter(&wine_adapter, adapter)))
283 return hr;
284
285 if (FAILED(hr = IWineDXGIAdapter_get_adapter_info(wine_adapter, &adapter_info)))
286 {
287 WARN("Failed to get adapter info, hr %#lx.\n", hr);
288 goto done;
289 }
290
292 optional_extensions_info.next = &application_info;
293 optional_extensions_info.extensions = optional_instance_extensions;
294 optional_extensions_info.extension_count = ARRAY_SIZE(optional_instance_extensions);
295
296 instance_create_info.type = VKD3D_STRUCTURE_TYPE_INSTANCE_CREATE_INFO;
297 instance_create_info.next = &optional_extensions_info;
298 instance_create_info.pfn_signal_event = d3d12_signal_event;
299 instance_create_info.pfn_create_thread = NULL;
300 instance_create_info.pfn_join_thread = NULL;
301 instance_create_info.wchar_size = sizeof(WCHAR);
302 instance_create_info.pfn_vkGetInstanceProcAddr = pfn_vkGetInstanceProcAddr;
303 instance_create_info.instance_extensions = instance_extensions;
304 instance_create_info.instance_extension_count = ARRAY_SIZE(instance_extensions);
305
306 if (FAILED(hr = vkd3d_create_instance(&instance_create_info, &instance)))
307 {
308 WARN("Failed to create vkd3d instance, hr %#lx.\n", hr);
309 goto done;
310 }
311
313 device_create_info.next = NULL;
314 device_create_info.minimum_feature_level = minimum_feature_level;
315 device_create_info.instance = instance;
316 device_create_info.instance_create_info = NULL;
317 device_create_info.vk_physical_device = d3d12_get_vk_physical_device(instance, pfn_vkGetInstanceProcAddr, &adapter_info);
318 device_create_info.device_extensions = device_extensions;
319 device_create_info.device_extension_count = ARRAY_SIZE(device_extensions);
320 device_create_info.parent = (IUnknown *)wine_adapter;
321 device_create_info.adapter_luid = adapter_info.luid;
322
323 hr = vkd3d_create_device(&device_create_info, iid, device);
324
326
327done:
328 IWineDXGIAdapter_Release(wine_adapter);
329 return hr;
330}
331
333 REFIID iid, void **deserializer)
334{
335 TRACE("data %p, data_size %Iu, iid %s, deserializer %p.\n",
336 data, data_size, debugstr_guid(iid), deserializer);
337
338 return vkd3d_create_root_signature_deserializer(data, data_size, iid, deserializer);
339}
340
342 REFIID iid, void **deserializer)
343{
344 TRACE("data %p, data_size %Iu, iid %s, deserializer %p.\n",
345 data, data_size, debugstr_guid(iid), deserializer);
346
347 return vkd3d_create_versioned_root_signature_deserializer(data, data_size, iid, deserializer);
348}
349
352{
353 TRACE("root_signature_desc %p, version %#x, blob %p, error_blob %p.\n",
354 root_signature_desc, version, blob, error_blob);
355
356 return vkd3d_serialize_root_signature(root_signature_desc, version, blob, error_blob);
357}
358
360 ID3DBlob **blob, ID3DBlob **error_blob)
361{
362 TRACE("desc %p, blob %p, error_blob %p.\n", desc, blob, error_blob);
363
365}
#define WINE_DEFAULT_DEBUG_CHANNEL(t)
Definition: precomp.h:23
#define ARRAY_SIZE(A)
Definition: main.h:20
#define FIXME(fmt,...)
Definition: precomp.h:53
#define WARN(fmt,...)
Definition: precomp.h:61
D3D_ROOT_SIGNATURE_VERSION
Definition: d3d12.idl:1403
static PFN_vkGetInstanceProcAddr load_vulkan(void)
Definition: d3d12_main.c:48
HRESULT WINAPI D3D12SerializeRootSignature(const D3D12_ROOT_SIGNATURE_DESC *root_signature_desc, D3D_ROOT_SIGNATURE_VERSION version, ID3DBlob **blob, ID3DBlob **error_blob)
Definition: d3d12_main.c:350
static BOOL WINAPI load_vulkan_dll_once(INIT_ONCE *once, void *param, void **context)
Definition: d3d12_main.c:42
static HMODULE vulkan_module
Definition: d3d12_main.c:39
static HRESULT d3d12_signal_event(HANDLE event)
Definition: d3d12_main.c:77
HRESULT WINAPI D3D12CreateRootSignatureDeserializer(const void *data, SIZE_T data_size, REFIID iid, void **deserializer)
Definition: d3d12_main.c:332
static BOOL check_vk_instance_extension(VkInstance vk_instance, PFN_vkGetInstanceProcAddr pfn_vkGetInstanceProcAddr, const char *name)
Definition: d3d12_main.c:117
static VkPhysicalDevice d3d12_get_vk_physical_device(struct vkd3d_instance *instance, PFN_vkGetInstanceProcAddr pfn_vkGetInstanceProcAddr, const struct wine_dxgi_adapter_info *adapter_info)
Definition: d3d12_main.c:151
HRESULT WINAPI D3D12CreateVersionedRootSignatureDeserializer(const void *data, SIZE_T data_size, REFIID iid, void **deserializer)
Definition: d3d12_main.c:341
HRESULT WINAPI D3D12EnableExperimentalFeatures(UINT feature_count, const IID *iids, void *configurations, UINT *configurations_sizes)
Definition: d3d12_main.c:68
HRESULT WINAPI D3D12GetDebugInterface(REFIID iid, void **debug)
Definition: d3d12_main.c:60
static HRESULT d3d12_get_adapter(IWineDXGIAdapter **wine_adapter, IUnknown *adapter)
Definition: d3d12_main.c:82
HRESULT WINAPI D3D12CreateDevice(IUnknown *adapter, D3D_FEATURE_LEVEL minimum_feature_level, REFIID iid, void **device)
Definition: d3d12_main.c:241
HRESULT WINAPI D3D12SerializeVersionedRootSignature(const D3D12_VERSIONED_ROOT_SIGNATURE_DESC *desc, ID3DBlob **blob, ID3DBlob **error_blob)
Definition: d3d12_main.c:359
D3D_FEATURE_LEVEL
Definition: d3dcommon.idl:102
#define E_FAIL
Definition: ddrawi.h:102
#define free
Definition: debug_ros.c:5
HRESULT hr
Definition: delayimp.cpp:582
#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 HINSTANCE instance
Definition: main.c:35
#define GetProcAddress(x, y)
Definition: compat.h:753
#define WINE_DECLARE_DEBUG_CHANNEL(x)
Definition: compat.h:45
static const WCHAR version[]
Definition: asmname.c:66
HINSTANCE WINAPI DECLSPEC_HOTPATCH LoadLibraryA(LPCSTR lpLibFileName)
Definition: loader.c:111
BOOL WINAPI InitOnceExecuteOnce(_Inout_ PINIT_ONCE InitOnce, _In_ __callback PINIT_ONCE_FN InitFn, _Inout_opt_ PVOID Parameter, _Outptr_opt_result_maybenull_ LPVOID *Context)
Definition: InitOnce.c:12
_ACRTIMP int __cdecl memcmp(const void *, const void *, size_t)
Definition: string.c:2807
_ACRTIMP int __cdecl strcmp(const char *, const char *)
Definition: string.c:3324
return ret
Definition: mutex.c:147
HRESULT WINAPI CreateDXGIFactory2(UINT flags, REFIID iid, void **factory)
Definition: dxgi_main.c:56
unsigned int BOOL
Definition: ntddk_ex.h:94
return adapter
GLuint GLuint GLsizei count
Definition: gl.h:1545
GLint GLenum GLsizei GLsizei GLsizei GLint GLsizei const GLvoid * data
Definition: gl.h:1950
GLfloat param
Definition: glext.h:5796
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
unsigned int UINT
Definition: sysinfo.c:13
#define S_OK
Definition: intsafe.h:52
#define FAILED(hr)
Definition: intsafe.h:51
#define debugstr_guid
Definition: kernel32.h:35
#define debug(msg)
Definition: key_call.c:71
#define GUID_NULL
Definition: ks.h:106
D3D11_SHADER_VARIABLE_DESC desc
Definition: reflection.c:1683
short WCHAR
Definition: pedump.c:58
#define IsEqualGUID(rguid1, rguid2)
Definition: guiddef.h:147
#define REFIID
Definition: guiddef.h:118
#define calloc
Definition: rosglue.h:14
#define ERR_(ch,...)
Definition: debug.h:156
#define memset(x, y, z)
Definition: compat.h:39
static const struct vkd3d_optional_extension_info optional_instance_extensions[]
Definition: device.c:65
#define TRACE(s)
Definition: solgame.cpp:4
uint8_t driverUUID[VK_UUID_SIZE]
Definition: vulkan.h:10863
VkStructureType sType
Definition: vulkan.h:10860
uint8_t deviceUUID[VK_UUID_SIZE]
Definition: vulkan.h:10862
VkStructureType sType
Definition: vulkan.h:16583
Definition: image.c:229
Definition: http.c:7252
Definition: devices.h:37
Definition: filter.c:185
Definition: main.c:439
Definition: name.c:39
enum vkd3d_structure_type type
Definition: vkd3d.h:190
struct vkd3d_instance * instance
Definition: vkd3d.h:261
const struct vkd3d_instance_create_info * instance_create_info
Definition: vkd3d.h:266
IUnknown * parent
Definition: vkd3d.h:288
uint32_t device_extension_count
Definition: vkd3d.h:282
D3D_FEATURE_LEVEL minimum_feature_level
Definition: vkd3d.h:255
const char *const * device_extensions
Definition: vkd3d.h:280
const void * next
Definition: vkd3d.h:251
enum vkd3d_structure_type type
Definition: vkd3d.h:249
VkPhysicalDevice vk_physical_device
Definition: vkd3d.h:274
const char *const * instance_extensions
Definition: vkd3d.h:152
uint32_t instance_extension_count
Definition: vkd3d.h:154
PFN_vkd3d_signal_event pfn_signal_event
Definition: vkd3d.h:126
PFN_vkGetInstanceProcAddr pfn_vkGetInstanceProcAddr
Definition: vkd3d.h:146
const void * next
Definition: vkd3d.h:123
enum vkd3d_structure_type type
Definition: vkd3d.h:121
PFN_vkd3d_join_thread pfn_join_thread
Definition: vkd3d.h:138
PFN_vkd3d_create_thread pfn_create_thread
Definition: vkd3d.h:132
enum vkd3d_structure_type type
Definition: vkd3d.h:167
const char *const * extensions
Definition: vkd3d.h:175
BOOL WINAPI DECLSPEC_HOTPATCH SetEvent(IN HANDLE hEvent)
Definition: synch.c:669
ULONG_PTR SIZE_T
Definition: typedefs.h:80
static INIT_ONCE init_once
Definition: vfwcapture.c:981
VKD3D_API VkInstance vkd3d_instance_get_vk_instance(struct vkd3d_instance *instance)
Definition: device.c:803
VKD3D_API HRESULT vkd3d_create_versioned_root_signature_deserializer(const void *data, SIZE_T data_size, REFIID iid, void **deserializer)
Definition: vkd3d_main.c:402
VKD3D_API HRESULT vkd3d_create_instance(const struct vkd3d_instance_create_info *create_info, struct vkd3d_instance **instance)
Definition: device.c:734
VKD3D_API HRESULT vkd3d_serialize_versioned_root_signature(const D3D12_VERSIONED_ROOT_SIGNATURE_DESC *desc, ID3DBlob **blob, ID3DBlob **error_blob)
Definition: vkd3d_main.c:473
VKD3D_API ULONG vkd3d_instance_decref(struct vkd3d_instance *instance)
Definition: device.c:791
@ VKD3D_STRUCTURE_TYPE_OPTIONAL_INSTANCE_EXTENSIONS_INFO
Definition: vkd3d.h:63
@ VKD3D_STRUCTURE_TYPE_INSTANCE_CREATE_INFO
Definition: vkd3d.h:53
@ VKD3D_STRUCTURE_TYPE_DEVICE_CREATE_INFO
Definition: vkd3d.h:55
@ VKD3D_STRUCTURE_TYPE_APPLICATION_INFO
Definition: vkd3d.h:74
VKD3D_API HRESULT vkd3d_create_device(const struct vkd3d_device_create_info *create_info, REFIID iid, void **device)
Definition: vkd3d_main.c:23
@ VKD3D_API_VERSION_1_2
Definition: vkd3d.h:89
VKD3D_API HRESULT vkd3d_create_root_signature_deserializer(const void *data, SIZE_T data_size, REFIID iid, void **deserializer)
Definition: vkd3d_main.c:218
VKD3D_API HRESULT vkd3d_serialize_root_signature(const D3D12_ROOT_SIGNATURE_DESC *desc, D3D_ROOT_SIGNATURE_VERSION version, ID3DBlob **blob, ID3DBlob **error_blob)
Definition: vkd3d_main.c:426
#define VK_KHR_EXTERNAL_MEMORY_CAPABILITIES_EXTENSION_NAME
Definition: vulkan.h:164
PFN_vkVoidFunction(VKAPI_PTR * PFN_vkGetInstanceProcAddr)(VkInstance, const char *)
Definition: vulkan.h:18143
#define VK_KHR_SURFACE_EXTENSION_NAME
Definition: vulkan.h:72
void(VKAPI_PTR * PFN_vkGetPhysicalDeviceProperties2)(VkPhysicalDevice, VkPhysicalDeviceProperties2 *)
Definition: vulkan.h:18180
#define VK_UUID_SIZE
Definition: vulkan.h:43
VkResult(VKAPI_PTR * PFN_vkEnumeratePhysicalDevices)(VkInstance, uint32_t *, VkPhysicalDevice *)
Definition: vulkan.h:18067
#define VK_KHR_GET_PHYSICAL_DEVICE_PROPERTIES_2_EXTENSION_NAME
Definition: vulkan.h:138
#define VK_KHR_WIN32_SURFACE_EXTENSION_NAME
Definition: vulkan.h:76
VkResult(VKAPI_PTR * PFN_vkEnumerateInstanceExtensionProperties)(const char *, uint32_t *, VkExtensionProperties *)
Definition: vulkan.h:18061
VkResult
Definition: vulkan.h:4639
#define VK_NULL_HANDLE
Definition: vulkan.h:861
#define VK_KHR_SWAPCHAIN_EXTENSION_NAME
Definition: vulkan.h:74
void(VKAPI_PTR * PFN_vkGetPhysicalDeviceProperties)(VkPhysicalDevice, VkPhysicalDeviceProperties *)
Definition: vulkan.h:18179
@ VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_PROPERTIES_2
Definition: vulkan.h:5109
@ VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_ID_PROPERTIES
Definition: vulkan.h:5144
RTL_RUN_ONCE INIT_ONCE
Definition: winbase.h:3654
#define INIT_ONCE_STATIC_INIT
Definition: winbase.h:591
#define WINAPI
Definition: msvc.h:6
#define DXGI_ERROR_SDK_COMPONENT_MISSING
Definition: winerror.h:7151
#define E_NOINTERFACE
Definition: winerror.h:3479