Henri Verbeet : wined3d: Reference the SRV bo in context_load_shader_resources().

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


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

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

wined3d: Reference the SRV bo in context_load_shader_resources().

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

---

 dlls/wined3d/context.c         | 37 --------------------------------
 dlls/wined3d/context_gl.c      | 48 ++++++++++++++++++++++++++++++++++++++++--
 dlls/wined3d/wined3d_private.h |  2 --
 3 files changed, 46 insertions(+), 41 deletions(-)

diff --git a/dlls/wined3d/context.c b/dlls/wined3d/context.c
index ddff9f1e014..118ac2aad8a 100644
--- a/dlls/wined3d/context.c
+++ b/dlls/wined3d/context.c
@@ -383,40 +383,3 @@ void context_preload_textures(struct wined3d_context *context, const struct wine
         }
     }
 }
-
-void context_load_shader_resources(struct wined3d_context *context,
-        const struct wined3d_state *state, unsigned int shader_mask)
-{
-    struct wined3d_shader_sampler_map_entry *entry;
-    struct wined3d_shader_resource_view *view;
-    struct wined3d_shader *shader;
-    unsigned int i, j;
-
-    for (i = 0; i < WINED3D_SHADER_TYPE_COUNT; ++i)
-    {
-        if (!(shader_mask & (1u << i)))
-            continue;
-
-        if (!(shader = state->shader[i]))
-            continue;
-
-        for (j = 0; j < WINED3D_MAX_CBS; ++j)
-        {
-            if (state->cb[i][j])
-                wined3d_buffer_load(state->cb[i][j], context, state);
-        }
-
-        for (j = 0; j < shader->reg_maps.sampler_map.count; ++j)
-        {
-            entry = &shader->reg_maps.sampler_map.entries[j];
-
-            if (!(view = state->shader_resource_view[i][entry->resource_idx]))
-                continue;
-
-            if (view->resource->type == WINED3D_RTYPE_BUFFER)
-                wined3d_buffer_load(buffer_from_resource(view->resource), context, state);
-            else
-                wined3d_texture_load(texture_from_resource(view->resource), context, FALSE);
-        }
-    }
-}
diff --git a/dlls/wined3d/context_gl.c b/dlls/wined3d/context_gl.c
index 9faff43f003..beb418ba960 100644
--- a/dlls/wined3d/context_gl.c
+++ b/dlls/wined3d/context_gl.c
@@ -3684,6 +3684,50 @@ static void wined3d_context_gl_bind_unordered_access_views(struct wined3d_contex
     checkGLcall("Bind unordered access views");
 }
 
+static void context_gl_load_shader_resources(struct wined3d_context_gl *context_gl,
+        const struct wined3d_state *state, unsigned int shader_mask)
+{
+    struct wined3d_shader_sampler_map_entry *entry;
+    struct wined3d_shader_resource_view *view;
+    struct wined3d_buffer_gl *buffer_gl;
+    struct wined3d_shader *shader;
+    unsigned int i, j;
+
+    for (i = 0; i < WINED3D_SHADER_TYPE_COUNT; ++i)
+    {
+        if (!(shader_mask & (1u << i)))
+            continue;
+
+        if (!(shader = state->shader[i]))
+            continue;
+
+        for (j = 0; j < WINED3D_MAX_CBS; ++j)
+        {
+            if (state->cb[i][j])
+                wined3d_buffer_load(state->cb[i][j], &context_gl->c, state);
+        }
+
+        for (j = 0; j < shader->reg_maps.sampler_map.count; ++j)
+        {
+            entry = &shader->reg_maps.sampler_map.entries[j];
+
+            if (!(view = state->shader_resource_view[i][entry->resource_idx]))
+                continue;
+
+            if (view->resource->type == WINED3D_RTYPE_BUFFER)
+            {
+                buffer_gl = wined3d_buffer_gl(buffer_from_resource(view->resource));
+                wined3d_buffer_load(&buffer_gl->b, &context_gl->c, state);
+                wined3d_context_gl_reference_bo(context_gl, &buffer_gl->bo);
+            }
+            else
+            {
+                wined3d_texture_load(texture_from_resource(view->resource), &context_gl->c, FALSE);
+            }
+        }
+    }
+}
+
 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)
 {
@@ -3768,7 +3812,7 @@ static BOOL context_apply_draw_state(struct wined3d_context *context,
      * updating a resource location. */
     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_gl_load_shader_resources(context_gl, state, ~(1u << WINED3D_SHADER_TYPE_COMPUTE));
     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);
@@ -3873,7 +3917,7 @@ static void wined3d_context_gl_apply_compute_state(struct wined3d_context_gl *co
     const struct wined3d_gl_info *gl_info = context_gl->gl_info;
     unsigned int state_id, i;
 
-    context_load_shader_resources(&context_gl->c, state, 1u << WINED3D_SHADER_TYPE_COMPUTE);
+    context_gl_load_shader_resources(context_gl, state, 1u << 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]);
 
diff --git a/dlls/wined3d/wined3d_private.h b/dlls/wined3d/wined3d_private.h
index 95abd2217a0..b756c80ad8a 100644
--- a/dlls/wined3d/wined3d_private.h
+++ b/dlls/wined3d/wined3d_private.h
@@ -2149,8 +2149,6 @@ struct wined3d_context
 
 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_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