From e46b69475b020cc91f6f93022b4e40e0b39abe4c Mon Sep 17 00:00:00 2001 From: Henri Verbeet Date: Tue, 28 Apr 2020 02:28:24 +0430 Subject: [PATCH] wined3d: Make the adapter responsible for compute dispatch. Signed-off-by: Henri Verbeet Signed-off-by: Alexandre Julliard --- dlls/wined3d/adapter_gl.c | 61 ++++++++++++++++--------------- dlls/wined3d/adapter_vk.c | 67 +++++++++++++++++++--------------- dlls/wined3d/cs.c | 2 +- dlls/wined3d/directx.c | 67 +++++++++++++++++++--------------- dlls/wined3d/wined3d_private.h | 2 + 5 files changed, 108 insertions(+), 91 deletions(-) diff --git a/dlls/wined3d/adapter_gl.c b/dlls/wined3d/adapter_gl.c index eaeb13b46cc..343dfff0eea 100644 --- a/dlls/wined3d/adapter_gl.c +++ b/dlls/wined3d/adapter_gl.c @@ -5072,36 +5072,37 @@ void adapter_gl_clear_uav(struct wined3d_context *context, static const struct wined3d_adapter_ops wined3d_adapter_gl_ops = { - adapter_gl_destroy, - adapter_gl_create_device, - adapter_gl_destroy_device, - adapter_gl_acquire_context, - adapter_gl_release_context, - adapter_gl_get_wined3d_caps, - adapter_gl_check_format, - adapter_gl_init_3d, - adapter_gl_uninit_3d, - adapter_gl_map_bo_address, - adapter_gl_unmap_bo_address, - adapter_gl_copy_bo_address, - adapter_gl_create_swapchain, - adapter_gl_destroy_swapchain, - adapter_gl_create_buffer, - adapter_gl_destroy_buffer, - adapter_gl_create_texture, - adapter_gl_destroy_texture, - adapter_gl_create_rendertarget_view, - adapter_gl_destroy_rendertarget_view, - adapter_gl_create_shader_resource_view, - adapter_gl_destroy_shader_resource_view, - adapter_gl_create_unordered_access_view, - adapter_gl_destroy_unordered_access_view, - adapter_gl_create_sampler, - adapter_gl_destroy_sampler, - adapter_gl_create_query, - adapter_gl_destroy_query, - adapter_gl_flush_context, - adapter_gl_clear_uav, + .adapter_destroy = adapter_gl_destroy, + .adapter_create_device = adapter_gl_create_device, + .adapter_destroy_device = adapter_gl_destroy_device, + .adapter_acquire_context = adapter_gl_acquire_context, + .adapter_release_context = adapter_gl_release_context, + .adapter_get_wined3d_caps = adapter_gl_get_wined3d_caps, + .adapter_check_format = adapter_gl_check_format, + .adapter_init_3d = adapter_gl_init_3d, + .adapter_uninit_3d = adapter_gl_uninit_3d, + .adapter_map_bo_address = adapter_gl_map_bo_address, + .adapter_unmap_bo_address = adapter_gl_unmap_bo_address, + .adapter_copy_bo_address = adapter_gl_copy_bo_address, + .adapter_create_swapchain = adapter_gl_create_swapchain, + .adapter_destroy_swapchain = adapter_gl_destroy_swapchain, + .adapter_create_buffer = adapter_gl_create_buffer, + .adapter_destroy_buffer = adapter_gl_destroy_buffer, + .adapter_create_texture = adapter_gl_create_texture, + .adapter_destroy_texture = adapter_gl_destroy_texture, + .adapter_create_rendertarget_view = adapter_gl_create_rendertarget_view, + .adapter_destroy_rendertarget_view = adapter_gl_destroy_rendertarget_view, + .adapter_create_shader_resource_view = adapter_gl_create_shader_resource_view, + .adapter_destroy_shader_resource_view = adapter_gl_destroy_shader_resource_view, + .adapter_create_unordered_access_view = adapter_gl_create_unordered_access_view, + .adapter_destroy_unordered_access_view = adapter_gl_destroy_unordered_access_view, + .adapter_create_sampler = adapter_gl_create_sampler, + .adapter_destroy_sampler = adapter_gl_destroy_sampler, + .adapter_create_query = adapter_gl_create_query, + .adapter_destroy_query = adapter_gl_destroy_query, + .adapter_flush_context = adapter_gl_flush_context, + .adapter_dispatch_compute = dispatch_compute, + .adapter_clear_uav = adapter_gl_clear_uav, }; static void wined3d_adapter_gl_init_d3d_info(struct wined3d_adapter_gl *adapter_gl, uint32_t wined3d_creation_flags) diff --git a/dlls/wined3d/adapter_vk.c b/dlls/wined3d/adapter_vk.c index 1641de78522..7c635620867 100644 --- a/dlls/wined3d/adapter_vk.c +++ b/dlls/wined3d/adapter_vk.c @@ -1414,6 +1414,12 @@ static void adapter_vk_flush_context(struct wined3d_context *context) TRACE("context %p.\n", context); } +static void adapter_vk_dispatch_compute(struct wined3d_device *device, + const struct wined3d_state *state, const struct wined3d_dispatch_parameters *parameters) +{ + FIXME("device %p, state %p, parameters %p.\n", device, state, parameters); +} + void adapter_vk_clear_uav(struct wined3d_context *context, struct wined3d_unordered_access_view *view, const struct wined3d_uvec4 *clear_value) { @@ -1422,36 +1428,37 @@ void adapter_vk_clear_uav(struct wined3d_context *context, static const struct wined3d_adapter_ops wined3d_adapter_vk_ops = { - adapter_vk_destroy, - adapter_vk_create_device, - adapter_vk_destroy_device, - adapter_vk_acquire_context, - adapter_vk_release_context, - adapter_vk_get_wined3d_caps, - adapter_vk_check_format, - adapter_vk_init_3d, - adapter_vk_uninit_3d, - adapter_vk_map_bo_address, - adapter_vk_unmap_bo_address, - adapter_vk_copy_bo_address, - adapter_vk_create_swapchain, - adapter_vk_destroy_swapchain, - adapter_vk_create_buffer, - adapter_vk_destroy_buffer, - adapter_vk_create_texture, - adapter_vk_destroy_texture, - adapter_vk_create_rendertarget_view, - adapter_vk_destroy_rendertarget_view, - adapter_vk_create_shader_resource_view, - adapter_vk_destroy_shader_resource_view, - adapter_vk_create_unordered_access_view, - adapter_vk_destroy_unordered_access_view, - adapter_vk_create_sampler, - adapter_vk_destroy_sampler, - adapter_vk_create_query, - adapter_vk_destroy_query, - adapter_vk_flush_context, - adapter_vk_clear_uav, + .adapter_destroy = adapter_vk_destroy, + .adapter_create_device = adapter_vk_create_device, + .adapter_destroy_device = adapter_vk_destroy_device, + .adapter_acquire_context = adapter_vk_acquire_context, + .adapter_release_context = adapter_vk_release_context, + .adapter_get_wined3d_caps = adapter_vk_get_wined3d_caps, + .adapter_check_format = adapter_vk_check_format, + .adapter_init_3d = adapter_vk_init_3d, + .adapter_uninit_3d = adapter_vk_uninit_3d, + .adapter_map_bo_address = adapter_vk_map_bo_address, + .adapter_unmap_bo_address = adapter_vk_unmap_bo_address, + .adapter_copy_bo_address = adapter_vk_copy_bo_address, + .adapter_create_swapchain = adapter_vk_create_swapchain, + .adapter_destroy_swapchain = adapter_vk_destroy_swapchain, + .adapter_create_buffer = adapter_vk_create_buffer, + .adapter_destroy_buffer = adapter_vk_destroy_buffer, + .adapter_create_texture = adapter_vk_create_texture, + .adapter_destroy_texture = adapter_vk_destroy_texture, + .adapter_create_rendertarget_view = adapter_vk_create_rendertarget_view, + .adapter_destroy_rendertarget_view = adapter_vk_destroy_rendertarget_view, + .adapter_create_shader_resource_view = adapter_vk_create_shader_resource_view, + .adapter_destroy_shader_resource_view = adapter_vk_destroy_shader_resource_view, + .adapter_create_unordered_access_view = adapter_vk_create_unordered_access_view, + .adapter_destroy_unordered_access_view = adapter_vk_destroy_unordered_access_view, + .adapter_create_sampler = adapter_vk_create_sampler, + .adapter_destroy_sampler = adapter_vk_destroy_sampler, + .adapter_create_query = adapter_vk_create_query, + .adapter_destroy_query = adapter_vk_destroy_query, + .adapter_flush_context = adapter_vk_flush_context, + .adapter_dispatch_compute = adapter_vk_dispatch_compute, + .adapter_clear_uav = adapter_vk_clear_uav, }; static unsigned int wined3d_get_wine_vk_version(void) diff --git a/dlls/wined3d/cs.c b/dlls/wined3d/cs.c index 899d5a712e4..930351d092c 100644 --- a/dlls/wined3d/cs.c +++ b/dlls/wined3d/cs.c @@ -785,7 +785,7 @@ static void wined3d_cs_exec_dispatch(struct wined3d_cs *cs, const void *data) const struct wined3d_cs_dispatch *op = data; struct wined3d_state *state = &cs->state; - dispatch_compute(cs->device, state, &op->parameters); + cs->device->adapter->adapter_ops->adapter_dispatch_compute(cs->device, state, &op->parameters); if (op->parameters.indirect) wined3d_resource_release(&op->parameters.u.indirect.buffer->resource); diff --git a/dlls/wined3d/directx.c b/dlls/wined3d/directx.c index c44d06f2b5b..40221ab7dee 100644 --- a/dlls/wined3d/directx.c +++ b/dlls/wined3d/directx.c @@ -2843,6 +2843,12 @@ static void adapter_no3d_flush_context(struct wined3d_context *context) TRACE("context %p.\n", context); } +static void adapter_no3d_dispatch_compute(struct wined3d_device *device, + const struct wined3d_state *state, const struct wined3d_dispatch_parameters *parameters) +{ + ERR("device %p, state %p, parameters %p.\n", device, state, parameters); +} + void adapter_no3d_clear_uav(struct wined3d_context *context, struct wined3d_unordered_access_view *view, const struct wined3d_uvec4 *clear_value) { @@ -2851,36 +2857,37 @@ void adapter_no3d_clear_uav(struct wined3d_context *context, static const struct wined3d_adapter_ops wined3d_adapter_no3d_ops = { - adapter_no3d_destroy, - adapter_no3d_create_device, - adapter_no3d_destroy_device, - adapter_no3d_acquire_context, - adapter_no3d_release_context, - adapter_no3d_get_wined3d_caps, - adapter_no3d_check_format, - adapter_no3d_init_3d, - adapter_no3d_uninit_3d, - adapter_no3d_map_bo_address, - adapter_no3d_unmap_bo_address, - adapter_no3d_copy_bo_address, - adapter_no3d_create_swapchain, - adapter_no3d_destroy_swapchain, - adapter_no3d_create_buffer, - adapter_no3d_destroy_buffer, - adapter_no3d_create_texture, - adapter_no3d_destroy_texture, - adapter_no3d_create_rendertarget_view, - adapter_no3d_destroy_rendertarget_view, - adapter_no3d_create_shader_resource_view, - adapter_no3d_destroy_shader_resource_view, - adapter_no3d_create_unordered_access_view, - adapter_no3d_destroy_unordered_access_view, - adapter_no3d_create_sampler, - adapter_no3d_destroy_sampler, - adapter_no3d_create_query, - adapter_no3d_destroy_query, - adapter_no3d_flush_context, - adapter_no3d_clear_uav, + .adapter_destroy = adapter_no3d_destroy, + .adapter_create_device = adapter_no3d_create_device, + .adapter_destroy_device = adapter_no3d_destroy_device, + .adapter_acquire_context = adapter_no3d_acquire_context, + .adapter_release_context = adapter_no3d_release_context, + .adapter_get_wined3d_caps = adapter_no3d_get_wined3d_caps, + .adapter_check_format = adapter_no3d_check_format, + .adapter_init_3d = adapter_no3d_init_3d, + .adapter_uninit_3d = adapter_no3d_uninit_3d, + .adapter_map_bo_address = adapter_no3d_map_bo_address, + .adapter_unmap_bo_address = adapter_no3d_unmap_bo_address, + .adapter_copy_bo_address = adapter_no3d_copy_bo_address, + .adapter_create_swapchain = adapter_no3d_create_swapchain, + .adapter_destroy_swapchain = adapter_no3d_destroy_swapchain, + .adapter_create_buffer = adapter_no3d_create_buffer, + .adapter_destroy_buffer = adapter_no3d_destroy_buffer, + .adapter_create_texture = adapter_no3d_create_texture, + .adapter_destroy_texture = adapter_no3d_destroy_texture, + .adapter_create_rendertarget_view = adapter_no3d_create_rendertarget_view, + .adapter_destroy_rendertarget_view = adapter_no3d_destroy_rendertarget_view, + .adapter_create_shader_resource_view = adapter_no3d_create_shader_resource_view, + .adapter_destroy_shader_resource_view = adapter_no3d_destroy_shader_resource_view, + .adapter_create_unordered_access_view = adapter_no3d_create_unordered_access_view, + .adapter_destroy_unordered_access_view = adapter_no3d_destroy_unordered_access_view, + .adapter_create_sampler = adapter_no3d_create_sampler, + .adapter_destroy_sampler = adapter_no3d_destroy_sampler, + .adapter_create_query = adapter_no3d_create_query, + .adapter_destroy_query = adapter_no3d_destroy_query, + .adapter_flush_context = adapter_no3d_flush_context, + .adapter_dispatch_compute = adapter_no3d_dispatch_compute, + .adapter_clear_uav = adapter_no3d_clear_uav, }; static void wined3d_adapter_no3d_init_d3d_info(struct wined3d_adapter *adapter, unsigned int wined3d_creation_flags) diff --git a/dlls/wined3d/wined3d_private.h b/dlls/wined3d/wined3d_private.h index db86d746b5f..a5d22600013 100644 --- a/dlls/wined3d/wined3d_private.h +++ b/dlls/wined3d/wined3d_private.h @@ -3031,6 +3031,8 @@ struct wined3d_adapter_ops void *parent, const struct wined3d_parent_ops *parent_ops, struct wined3d_query **query); void (*adapter_destroy_query)(struct wined3d_query *query); void (*adapter_flush_context)(struct wined3d_context *context); + void (*adapter_dispatch_compute)(struct wined3d_device *device, const struct wined3d_state *state, + const struct wined3d_dispatch_parameters *parameters); void (*adapter_clear_uav)(struct wined3d_context *context, struct wined3d_unordered_access_view *view, const struct wined3d_uvec4 *clear_value); };