Henri Verbeet : wined3d: Implement wined3d_unordered_access_view_copy_counter() on top of wined3d_context_copy_bo_address().

Alexandre Julliard julliard at winehq.org
Tue Apr 21 15:59:49 CDT 2020


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

Author: Henri Verbeet <hverbeet at codeweavers.com>
Date:   Tue Apr 21 22:55:12 2020 +0430

wined3d: Implement wined3d_unordered_access_view_copy_counter() on top of wined3d_context_copy_bo_address().

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

---

 dlls/wined3d/view.c            | 10 +++++-----
 dlls/wined3d/wined3d_private.h |  1 +
 2 files changed, 6 insertions(+), 5 deletions(-)

diff --git a/dlls/wined3d/view.c b/dlls/wined3d/view.c
index cb0f2e2e25..a004ec9e0b 100644
--- a/dlls/wined3d/view.c
+++ b/dlls/wined3d/view.c
@@ -1059,21 +1059,20 @@ void wined3d_unordered_access_view_set_counter(struct wined3d_unordered_access_v
 void wined3d_unordered_access_view_copy_counter(struct wined3d_unordered_access_view *view,
         struct wined3d_buffer *buffer, unsigned int offset, struct wined3d_context *context)
 {
-    struct wined3d_unordered_access_view_gl *view_gl = wined3d_unordered_access_view_gl(view);
-    struct wined3d_context_gl *context_gl = wined3d_context_gl(context);
     struct wined3d_bo_address dst, src;
     DWORD dst_location;
 
-    if (!view_gl->counter_bo.id)
+    if (!view->counter_bo)
         return;
 
     dst_location = wined3d_buffer_get_memory(buffer, &dst, buffer->locations);
     dst.addr += offset;
 
-    src.buffer_object = (uintptr_t)&view_gl->counter_bo;
+    src.buffer_object = view->counter_bo;
     src.addr = NULL;
 
-    wined3d_context_gl_copy_bo_address(context_gl, &dst, &src, sizeof(GLuint));
+    wined3d_context_copy_bo_address(context, &dst, buffer->resource.bind_flags,
+            &src, WINED3D_BIND_UNORDERED_ACCESS, sizeof(uint32_t));
 
     wined3d_buffer_invalidate_location(buffer, ~dst_location);
 }
@@ -1105,6 +1104,7 @@ static void wined3d_unordered_access_view_gl_cs_init(void *object)
             GL_EXTCALL(glBindBuffer(bo->binding, bo->id));
             GL_EXTCALL(glBufferData(bo->binding, sizeof(initial_value), &initial_value, GL_STATIC_DRAW));
             checkGLcall("create atomic counter buffer");
+            view_gl->v.counter_bo = (uintptr_t)bo;
         }
         context_release(context);
     }
diff --git a/dlls/wined3d/wined3d_private.h b/dlls/wined3d/wined3d_private.h
index 8698620968..5f0b1eee7f 100644
--- a/dlls/wined3d/wined3d_private.h
+++ b/dlls/wined3d/wined3d_private.h
@@ -4582,6 +4582,7 @@ struct wined3d_unordered_access_view
     const struct wined3d_format *format;
 
     struct wined3d_view_desc desc;
+    uintptr_t counter_bo;
 };
 
 void wined3d_unordered_access_view_cleanup(struct wined3d_unordered_access_view *view) DECLSPEC_HIDDEN;




More information about the wine-cvs mailing list