Henri Verbeet : wined3d: Reference the UAV bo in context_load_unordered_access_resources().

Alexandre Julliard julliard at winehq.org
Wed Dec 2 15:21:07 CST 2020


Module: wine
Branch: master
Commit: a0abc66566d682f736ae89fce1a979940a8353a4
URL:    https://source.winehq.org/git/wine.git/?a=commit;h=a0abc66566d682f736ae89fce1a979940a8353a4

Author: Henri Verbeet <hverbeet at codeweavers.com>
Date:   Wed Dec  2 20:17:57 2020 +0330

wined3d: Reference the UAV bo in context_load_unordered_access_resources().

Signed-off-by: Henri Verbeet <hverbeet at codeweavers.com>
Signed-off-by: Alexandre Julliard <julliard at winehq.org>

---

 dlls/wined3d/context.c         | 35 -----------------------------------
 dlls/wined3d/context_gl.c      | 40 ++++++++++++++++++++++++++++++++++++++--
 dlls/wined3d/wined3d_private.h |  2 --
 3 files changed, 38 insertions(+), 39 deletions(-)

diff --git a/dlls/wined3d/context.c b/dlls/wined3d/context.c
index 2dd4780b8ad..ddff9f1e014 100644
--- a/dlls/wined3d/context.c
+++ b/dlls/wined3d/context.c
@@ -420,38 +420,3 @@ void context_load_shader_resources(struct wined3d_context *context,
         }
     }
 }
-
-void context_load_unordered_access_resources(struct wined3d_context *context,
-        const struct wined3d_shader *shader, struct wined3d_unordered_access_view * const *views)
-{
-    struct wined3d_unordered_access_view *view;
-    struct wined3d_texture *texture;
-    struct wined3d_buffer *buffer;
-    unsigned int i;
-
-    context->uses_uavs = 0;
-
-    if (!shader)
-        return;
-
-    for (i = 0; i < MAX_UNORDERED_ACCESS_VIEWS; ++i)
-    {
-        if (!(view = views[i]))
-            continue;
-
-        if (view->resource->type == WINED3D_RTYPE_BUFFER)
-        {
-            buffer = buffer_from_resource(view->resource);
-            wined3d_buffer_load_location(buffer, context, WINED3D_LOCATION_BUFFER);
-            wined3d_unordered_access_view_invalidate_location(view, ~WINED3D_LOCATION_BUFFER);
-        }
-        else
-        {
-            texture = texture_from_resource(view->resource);
-            wined3d_texture_load(texture, context, FALSE);
-            wined3d_unordered_access_view_invalidate_location(view, ~WINED3D_LOCATION_TEXTURE_RGB);
-        }
-
-        context->uses_uavs = 1;
-    }
-}
diff --git a/dlls/wined3d/context_gl.c b/dlls/wined3d/context_gl.c
index 13e4fa69ea7..9faff43f003 100644
--- a/dlls/wined3d/context_gl.c
+++ b/dlls/wined3d/context_gl.c
@@ -3684,6 +3684,42 @@ static void wined3d_context_gl_bind_unordered_access_views(struct wined3d_contex
     checkGLcall("Bind unordered access views");
 }
 
+static void context_gl_load_unordered_access_resources(struct wined3d_context_gl *context_gl,
+        const struct wined3d_shader *shader, struct wined3d_unordered_access_view * const *views)
+{
+    struct wined3d_unordered_access_view *view;
+    struct wined3d_buffer_gl *buffer_gl;
+    struct wined3d_texture *texture;
+    unsigned int i;
+
+    context_gl->c.uses_uavs = 0;
+
+    if (!shader)
+        return;
+
+    for (i = 0; i < MAX_UNORDERED_ACCESS_VIEWS; ++i)
+    {
+        if (!(view = views[i]))
+            continue;
+
+        if (view->resource->type == WINED3D_RTYPE_BUFFER)
+        {
+            buffer_gl = wined3d_buffer_gl(buffer_from_resource(view->resource));
+            wined3d_buffer_load_location(&buffer_gl->b, &context_gl->c, WINED3D_LOCATION_BUFFER);
+            wined3d_unordered_access_view_invalidate_location(view, ~WINED3D_LOCATION_BUFFER);
+            wined3d_context_gl_reference_bo(context_gl, &buffer_gl->bo);
+        }
+        else
+        {
+            texture = texture_from_resource(view->resource);
+            wined3d_texture_load(texture, &context_gl->c, FALSE);
+            wined3d_unordered_access_view_invalidate_location(view, ~WINED3D_LOCATION_TEXTURE_RGB);
+        }
+
+        context_gl->c.uses_uavs = 1;
+    }
+}
+
 static void context_gl_load_stream_output_buffers(struct wined3d_context_gl *context_gl,
         const struct wined3d_state *state)
 {
@@ -3733,7 +3769,7 @@ static BOOL context_apply_draw_state(struct wined3d_context *context,
     wined3d_context_gl_update_tex_unit_map(context_gl, state);
     context_preload_textures(context, state);
     context_load_shader_resources(context, state, ~(1u << WINED3D_SHADER_TYPE_COMPUTE));
-    context_load_unordered_access_resources(context, state->shader[WINED3D_SHADER_TYPE_PIXEL],
+    context_gl_load_unordered_access_resources(context_gl, state->shader[WINED3D_SHADER_TYPE_PIXEL],
             state->unordered_access_view[WINED3D_PIPELINE_GRAPHICS]);
     context_gl_load_stream_output_buffers(context_gl, state);
     /* TODO: Right now the dependency on the vertex shader is necessary
@@ -3838,7 +3874,7 @@ static void wined3d_context_gl_apply_compute_state(struct wined3d_context_gl *co
     unsigned int state_id, i;
 
     context_load_shader_resources(&context_gl->c, state, 1u << WINED3D_SHADER_TYPE_COMPUTE);
-    context_load_unordered_access_resources(&context_gl->c, state->shader[WINED3D_SHADER_TYPE_COMPUTE],
+    context_gl_load_unordered_access_resources(context_gl, state->shader[WINED3D_SHADER_TYPE_COMPUTE],
             state->unordered_access_view[WINED3D_PIPELINE_COMPUTE]);
 
     for (i = 0, state_id = STATE_COMPUTE_OFFSET; i < ARRAY_SIZE(context_gl->c.dirty_compute_states); ++i)
diff --git a/dlls/wined3d/wined3d_private.h b/dlls/wined3d/wined3d_private.h
index f2dedf45a68..95abd2217a0 100644
--- a/dlls/wined3d/wined3d_private.h
+++ b/dlls/wined3d/wined3d_private.h
@@ -2151,8 +2151,6 @@ void wined3d_context_cleanup(struct wined3d_context *context) DECLSPEC_HIDDEN;
 void wined3d_context_init(struct wined3d_context *context, struct wined3d_swapchain *swapchain) DECLSPEC_HIDDEN;
 void context_load_shader_resources(struct wined3d_context *context,
         const struct wined3d_state *state, unsigned int shader_mask) DECLSPEC_HIDDEN;
-void context_load_unordered_access_resources(struct wined3d_context *context,
-        const struct wined3d_shader *shader, struct wined3d_unordered_access_view * const *views) DECLSPEC_HIDDEN;
 void context_preload_textures(struct wined3d_context *context, const struct wined3d_state *state) DECLSPEC_HIDDEN;
 void context_update_stream_info(struct wined3d_context *context, const struct wined3d_state *state) DECLSPEC_HIDDEN;
 




More information about the wine-cvs mailing list