Module: wine Branch: master Commit: 7379451a06d4c968077a5fcc62f8344fc8eb7499 URL: https://source.winehq.org/git/wine.git/?a=commit;h=7379451a06d4c968077a5fcc6...
Author: Henri Verbeet hverbeet@codeweavers.com Date: Mon May 18 20:40:46 2020 +0430
wined3d: Add a supported extensions array to the wined3d_vk_info structure.
Signed-off-by: Henri Verbeet hverbeet@codeweavers.com Signed-off-by: Alexandre Julliard julliard@winehq.org
---
dlls/wined3d/adapter_gl.c | 4 ++-- dlls/wined3d/adapter_vk.c | 7 +++++-- dlls/wined3d/device.c | 4 ++-- dlls/wined3d/directx.c | 4 ++-- dlls/wined3d/wined3d_private.h | 2 +- dlls/wined3d/wined3d_vk.h | 7 +++++++ 6 files changed, 19 insertions(+), 9 deletions(-)
diff --git a/dlls/wined3d/adapter_gl.c b/dlls/wined3d/adapter_gl.c index 48a135ce07..4e953207e4 100644 --- a/dlls/wined3d/adapter_gl.c +++ b/dlls/wined3d/adapter_gl.c @@ -4313,8 +4313,8 @@ static HRESULT adapter_gl_create_device(struct wined3d *wined3d, const struct wi if (!(device_gl = heap_alloc_zero(sizeof(*device_gl)))) return E_OUTOFMEMORY;
- if (FAILED(hr = wined3d_device_init(&device_gl->d, wined3d, adapter->ordinal, device_type, - focus_window, flags, surface_alignment, levels, level_count, device_parent))) + if (FAILED(hr = wined3d_device_init(&device_gl->d, wined3d, adapter->ordinal, device_type, focus_window, + flags, surface_alignment, levels, level_count, adapter->gl_info.supported, device_parent))) { WARN("Failed to initialize device, hr %#x.\n", hr); heap_free(device_gl); diff --git a/dlls/wined3d/adapter_vk.c b/dlls/wined3d/adapter_vk.c index cf82d00e40..dc229f3465 100644 --- a/dlls/wined3d/adapter_vk.c +++ b/dlls/wined3d/adapter_vk.c @@ -477,8 +477,8 @@ static HRESULT adapter_vk_create_device(struct wined3d *wined3d, const struct wi goto fail; }
- if (FAILED(hr = wined3d_device_init(&device_vk->d, wined3d, adapter->ordinal, device_type, - focus_window, flags, surface_alignment, levels, level_count, device_parent))) + if (FAILED(hr = wined3d_device_init(&device_vk->d, wined3d, adapter->ordinal, device_type, focus_window, + flags, surface_alignment, levels, level_count, vk_info->supported, device_parent))) { WARN("Failed to initialize device, hr %#x.\n", hr); wined3d_allocator_cleanup(&device_vk->allocator); @@ -1745,6 +1745,9 @@ static BOOL wined3d_init_vulkan(struct wined3d_vk_info *vk_info) if (!enable_vulkan_instance_extensions(&instance_info.enabledExtensionCount, enabled_instance_extensions, vk_info)) goto fail;
+ memset(vk_info->supported, 0, sizeof(vk_info->supported)); + vk_info->supported[WINED3D_VK_EXT_NONE] = TRUE; + if ((vr = VK_CALL(vkCreateInstance(&instance_info, NULL, &instance))) < 0) { WARN("Failed to create Vulkan instance, vr %s.\n", wined3d_debug_vkresult(vr)); diff --git a/dlls/wined3d/device.c b/dlls/wined3d/device.c index 7f9b7254bd..618a9bcbe2 100644 --- a/dlls/wined3d/device.c +++ b/dlls/wined3d/device.c @@ -5676,7 +5676,7 @@ static BOOL wined3d_select_feature_level(const struct wined3d_adapter *adapter, 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, - struct wined3d_device_parent *device_parent) + const BOOL *supported_extensions, struct wined3d_device_parent *device_parent) { struct wined3d_adapter *adapter = wined3d->adapters[adapter_idx]; const struct wined3d_fragment_pipe_ops *fragment_pipeline; @@ -5716,7 +5716,7 @@ HRESULT wined3d_device_init(struct wined3d_device *device, struct wined3d *wined
if (vertex_pipeline->vp_states && fragment_pipeline->states && FAILED(hr = compile_state_table(device->state_table, device->multistate_funcs, - &adapter->d3d_info, adapter->gl_info.supported, vertex_pipeline, + &adapter->d3d_info, supported_extensions, vertex_pipeline, fragment_pipeline, adapter->misc_state_template))) { ERR("Failed to compile state table, hr %#x.\n", hr); diff --git a/dlls/wined3d/directx.c b/dlls/wined3d/directx.c index b6a9b502d8..0b945919b9 100644 --- a/dlls/wined3d/directx.c +++ b/dlls/wined3d/directx.c @@ -2483,8 +2483,8 @@ static HRESULT adapter_no3d_create_device(struct wined3d *wined3d, const struct if (!(device_no3d = heap_alloc_zero(sizeof(*device_no3d)))) return E_OUTOFMEMORY;
- if (FAILED(hr = wined3d_device_init(&device_no3d->d, wined3d, adapter->ordinal, device_type, - focus_window, flags, surface_alignment, levels, level_count, device_parent))) + if (FAILED(hr = wined3d_device_init(&device_no3d->d, wined3d, adapter->ordinal, device_type, focus_window, + flags, surface_alignment, levels, level_count, adapter->gl_info.supported, device_parent))) { WARN("Failed to initialize device, hr %#x.\n", hr); heap_free(device_no3d); diff --git a/dlls/wined3d/wined3d_private.h b/dlls/wined3d/wined3d_private.h index dda26aacd0..82ea7239c6 100644 --- a/dlls/wined3d/wined3d_private.h +++ b/dlls/wined3d/wined3d_private.h @@ -3572,7 +3572,7 @@ void wined3d_device_destroy_default_samplers(struct wined3d_device *device, 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, - struct wined3d_device_parent *device_parent) DECLSPEC_HIDDEN; + const BOOL *supported_extensions, struct wined3d_device_parent *device_parent) DECLSPEC_HIDDEN; LRESULT device_process_message(struct wined3d_device *device, HWND window, BOOL unicode, UINT message, WPARAM wparam, LPARAM lparam, WNDPROC proc) DECLSPEC_HIDDEN; void device_resource_add(struct wined3d_device *device, struct wined3d_resource *resource) DECLSPEC_HIDDEN; diff --git a/dlls/wined3d/wined3d_vk.h b/dlls/wined3d/wined3d_vk.h index 13e07ab3db..0c0c1e16cd 100644 --- a/dlls/wined3d/wined3d_vk.h +++ b/dlls/wined3d/wined3d_vk.h @@ -181,6 +181,12 @@ struct vulkan_ops PFN_vkGetInstanceProcAddr vkGetInstanceProcAddr; };
+enum wined3d_vk_extension +{ + WINED3D_VK_EXT_NONE, + WINED3D_VK_EXT_COUNT, +}; + struct wined3d_vk_info { struct vulkan_ops vk_ops; @@ -188,6 +194,7 @@ struct wined3d_vk_info VkInstance instance; unsigned int api_version;
+ BOOL supported[WINED3D_VK_EXT_COUNT]; #ifdef USE_WIN32_VULKAN HMODULE vulkan_lib; #endif