[PATCH 2/5] wined3d: Make the adapter responsible for compute dispatch.

Henri Verbeet hverbeet at codeweavers.com
Mon Apr 27 16:58:24 CDT 2020


Signed-off-by: Henri Verbeet <hverbeet at codeweavers.com>
---
 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);
 };
-- 
2.20.1




More information about the wine-devel mailing list