[PATCH v2 1/3] wined3d: Make the "buffer_object" field of struct wined3d_bo_address a wined3d_bo pointer.

Zebediah Figura zfigura at codeweavers.com
Mon Nov 15 16:30:17 CST 2021


Signed-off-by: Zebediah Figura <zfigura at codeweavers.com>
---
 dlls/wined3d/adapter_vk.c      | 16 +++++++++-------
 dlls/wined3d/buffer.c          |  8 ++++----
 dlls/wined3d/context_gl.c      | 13 +++++++------
 dlls/wined3d/cs.c              |  2 +-
 dlls/wined3d/directx.c         |  8 ++++----
 dlls/wined3d/surface.c         |  4 ++--
 dlls/wined3d/texture.c         | 22 +++++++++++-----------
 dlls/wined3d/view.c            |  6 +++---
 dlls/wined3d/wined3d_private.h |  7 ++++---
 9 files changed, 45 insertions(+), 41 deletions(-)

diff --git a/dlls/wined3d/adapter_vk.c b/dlls/wined3d/adapter_vk.c
index e83f0a012d6..12811fd1482 100644
--- a/dlls/wined3d/adapter_vk.c
+++ b/dlls/wined3d/adapter_vk.c
@@ -960,8 +960,9 @@ static void *adapter_vk_map_bo_address(struct wined3d_context *context,
     VkMappedMemoryRange range;
     void *map_ptr;
 
-    if (!(bo = (struct wined3d_bo_vk *)data->buffer_object))
+    if (!data->buffer_object)
         return data->addr;
+    bo = wined3d_bo_vk(data->buffer_object);
 
     vk_info = context_vk->vk_info;
     device_vk = wined3d_device_vk(context->device);
@@ -1065,8 +1066,9 @@ static void adapter_vk_unmap_bo_address(struct wined3d_context *context,
     struct wined3d_bo_vk *bo;
     unsigned int i;
 
-    if (!(bo = (struct wined3d_bo_vk *)data->buffer_object))
+    if (!data->buffer_object)
         return;
+    bo = wined3d_bo_vk(data->buffer_object);
 
     if (!bo->b.coherent)
     {
@@ -1092,8 +1094,8 @@ void adapter_vk_copy_bo_address(struct wined3d_context *context,
     void *dst_ptr, *src_ptr;
     VkBufferCopy region;
 
-    src_bo = (struct wined3d_bo_vk *)src->buffer_object;
-    dst_bo = (struct wined3d_bo_vk *)dst->buffer_object;
+    src_bo = src->buffer_object ? wined3d_bo_vk(src->buffer_object) : NULL;
+    dst_bo = dst->buffer_object ? wined3d_bo_vk(dst->buffer_object) : NULL;
 
     if (dst_bo && !dst->addr && size == dst_bo->size)
         map_flags |= WINED3D_MAP_DISCARD;
@@ -1164,7 +1166,7 @@ void adapter_vk_copy_bo_address(struct wined3d_context *context,
             return;
         }
 
-        staging.buffer_object = (uintptr_t)&staging_bo;
+        staging.buffer_object = &staging_bo.b;
         staging.addr = NULL;
         adapter_vk_copy_bo_address(context, &staging, src, size);
         adapter_vk_copy_bo_address(context, dst, &staging, size);
@@ -1184,7 +1186,7 @@ void adapter_vk_copy_bo_address(struct wined3d_context *context,
             return;
         }
 
-        staging.buffer_object = (uintptr_t)&staging_bo;
+        staging.buffer_object = &staging_bo.b;
         staging.addr = NULL;
         adapter_vk_copy_bo_address(context, &staging, src, size);
         adapter_vk_copy_bo_address(context, dst, &staging, size);
@@ -1251,7 +1253,7 @@ static bool adapter_vk_alloc_bo(struct wined3d_device *device, struct wined3d_re
                 ERR("Failed to map bo.\n");
         }
 
-        addr->buffer_object = (uintptr_t)bo_vk;
+        addr->buffer_object = &bo_vk->b;
         addr->addr = NULL;
         return true;
     }
diff --git a/dlls/wined3d/buffer.c b/dlls/wined3d/buffer.c
index d5840a488b5..b07f1510b74 100644
--- a/dlls/wined3d/buffer.c
+++ b/dlls/wined3d/buffer.c
@@ -665,7 +665,7 @@ DWORD wined3d_buffer_get_memory(struct wined3d_buffer *buffer, struct wined3d_co
     }
     if (locations & WINED3D_LOCATION_BUFFER)
     {
-        data->buffer_object = (uintptr_t)buffer->buffer_object;
+        data->buffer_object = buffer->buffer_object;
         data->addr = NULL;
         return WINED3D_LOCATION_BUFFER;
     }
@@ -977,7 +977,7 @@ static HRESULT buffer_resource_sub_resource_map(struct wined3d_resource *resourc
 
             if (count == 1)
             {
-                addr.buffer_object = (uintptr_t)buffer->buffer_object;
+                addr.buffer_object = buffer->buffer_object;
                 addr.addr = 0;
                 buffer->map_ptr = wined3d_context_map_bo_address(context, &addr, resource->size, flags);
                 /* We are accessing buffer->resource.client from the CS thread,
@@ -1057,7 +1057,7 @@ static HRESULT buffer_resource_sub_resource_unmap(struct wined3d_resource *resou
 
     context = context_acquire(device, NULL, 0);
 
-    addr.buffer_object = (uintptr_t)buffer->buffer_object;
+    addr.buffer_object = buffer->buffer_object;
     addr.addr = 0;
     wined3d_context_unmap_bo_address(context, &addr, range_count, buffer->maps);
 
@@ -1587,7 +1587,7 @@ static void wined3d_buffer_vk_upload_ranges(struct wined3d_buffer *buffer, struc
     if (!range_count)
         return;
 
-    dst.buffer_object = (uintptr_t)buffer->buffer_object;
+    dst.buffer_object = buffer->buffer_object;
     dst.addr = NULL;
 
     flags = WINED3D_MAP_WRITE;
diff --git a/dlls/wined3d/context_gl.c b/dlls/wined3d/context_gl.c
index 210d8e0b925..e91bff9328b 100644
--- a/dlls/wined3d/context_gl.c
+++ b/dlls/wined3d/context_gl.c
@@ -2729,13 +2729,13 @@ map:
 void *wined3d_context_gl_map_bo_address(struct wined3d_context_gl *context_gl,
         const struct wined3d_bo_address *data, size_t size, uint32_t flags)
 {
-    struct wined3d_bo_gl *bo;
+    struct wined3d_bo *bo;
     void *map_ptr;
 
-    if (!(bo = (struct wined3d_bo_gl *)data->buffer_object))
+    if (!(bo = data->buffer_object))
         return data->addr;
 
-    if (!(map_ptr = wined3d_bo_gl_map(bo, context_gl, (uintptr_t)data->addr, size, flags)))
+    if (!(map_ptr = wined3d_bo_gl_map(wined3d_bo_gl(bo), context_gl, (uintptr_t)data->addr, size, flags)))
         ERR("Failed to map bo.\n");
 
     return map_ptr;
@@ -2782,8 +2782,9 @@ void wined3d_context_gl_unmap_bo_address(struct wined3d_context_gl *context_gl,
     const struct wined3d_gl_info *gl_info;
     struct wined3d_bo_gl *bo;
 
-    if (!(bo = (struct wined3d_bo_gl *)data->buffer_object))
+    if (!data->buffer_object)
         return;
+    bo = wined3d_bo_gl(data->buffer_object);
 
     flush_bo_ranges(context_gl, wined3d_const_bo_address(data), range_count, ranges);
 
@@ -2816,8 +2817,8 @@ void wined3d_context_gl_copy_bo_address(struct wined3d_context_gl *context_gl,
     BYTE *dst_ptr, *src_ptr;
 
     gl_info = context_gl->gl_info;
-    src_bo = (struct wined3d_bo_gl *)src->buffer_object;
-    dst_bo = (struct wined3d_bo_gl *)dst->buffer_object;
+    src_bo = src->buffer_object ? wined3d_bo_gl(src->buffer_object) : NULL;
+    dst_bo = dst->buffer_object ? wined3d_bo_gl(dst->buffer_object) : NULL;
 
     if (dst_bo && src_bo)
     {
diff --git a/dlls/wined3d/cs.c b/dlls/wined3d/cs.c
index 262123b5d90..1a6ca2b8c7a 100644
--- a/dlls/wined3d/cs.c
+++ b/dlls/wined3d/cs.c
@@ -3130,7 +3130,7 @@ static bool wined3d_cs_map_upload_bo(struct wined3d_device_context *context, str
                 return false;
         }
 
-        bo = (const struct wined3d_bo *)client->addr.buffer_object;
+        bo = client->addr.buffer_object;
         map_ptr = bo ? bo->map_ptr : NULL;
         map_ptr += (uintptr_t)client->addr.addr;
 
diff --git a/dlls/wined3d/directx.c b/dlls/wined3d/directx.c
index 06387452b89..40567cf1a2c 100644
--- a/dlls/wined3d/directx.c
+++ b/dlls/wined3d/directx.c
@@ -2774,7 +2774,7 @@ static void *adapter_no3d_map_bo_address(struct wined3d_context *context,
 {
     if (data->buffer_object)
     {
-        ERR("Unsupported buffer object %#lx.\n", data->buffer_object);
+        ERR("Unsupported buffer object %p.\n", data->buffer_object);
         return NULL;
     }
 
@@ -2785,16 +2785,16 @@ static void adapter_no3d_unmap_bo_address(struct wined3d_context *context,
         const struct wined3d_bo_address *data, unsigned int range_count, const struct wined3d_range *ranges)
 {
     if (data->buffer_object)
-        ERR("Unsupported buffer object %#lx.\n", data->buffer_object);
+        ERR("Unsupported buffer object %p.\n", data->buffer_object);
 }
 
 static void adapter_no3d_copy_bo_address(struct wined3d_context *context,
         const struct wined3d_bo_address *dst, const struct wined3d_bo_address *src, size_t size)
 {
     if (dst->buffer_object)
-        ERR("Unsupported dst buffer object %#lx.\n", dst->buffer_object);
+        ERR("Unsupported dst buffer object %p.\n", dst->buffer_object);
     if (src->buffer_object)
-        ERR("Unsupported src buffer object %#lx.\n", src->buffer_object);
+        ERR("Unsupported src buffer object %p.\n", src->buffer_object);
     if (dst->buffer_object || src->buffer_object)
         return;
     memcpy(dst->addr, src->addr, size);
diff --git a/dlls/wined3d/surface.c b/dlls/wined3d/surface.c
index 8a4ca4f5781..79dc0bd06b6 100644
--- a/dlls/wined3d/surface.c
+++ b/dlls/wined3d/surface.c
@@ -469,7 +469,7 @@ void texture2d_read_from_framebuffer(struct wined3d_texture *texture, unsigned i
 
     if (data.buffer_object)
     {
-        GL_EXTCALL(glBindBuffer(GL_PIXEL_PACK_BUFFER, ((struct wined3d_bo_gl *)data.buffer_object)->id));
+        GL_EXTCALL(glBindBuffer(GL_PIXEL_PACK_BUFFER, wined3d_bo_gl(data.buffer_object)->id));
         checkGLcall("glBindBuffer");
     }
 
@@ -527,7 +527,7 @@ error:
     if (data.buffer_object)
     {
         GL_EXTCALL(glBindBuffer(GL_PIXEL_PACK_BUFFER, 0));
-        wined3d_context_gl_reference_bo(context_gl, (struct wined3d_bo_gl *)data.buffer_object);
+        wined3d_context_gl_reference_bo(context_gl, wined3d_bo_gl(data.buffer_object));
         checkGLcall("glBindBuffer");
     }
 
diff --git a/dlls/wined3d/texture.c b/dlls/wined3d/texture.c
index df42f2d766b..370eaaf08e5 100644
--- a/dlls/wined3d/texture.c
+++ b/dlls/wined3d/texture.c
@@ -830,7 +830,7 @@ void wined3d_texture_get_memory(struct wined3d_texture *texture, unsigned int su
     if (locations & WINED3D_LOCATION_BUFFER)
     {
         data->addr = NULL;
-        data->buffer_object = (uintptr_t)&sub_resource->bo;
+        data->buffer_object = &sub_resource->bo.b;
         return;
     }
 
@@ -2476,7 +2476,7 @@ static void wined3d_texture_gl_upload_data(struct wined3d_context *context,
             return;
     }
 
-    bo.buffer_object = src_bo_addr->buffer_object;
+    bo.buffer_object = (struct wined3d_bo *)src_bo_addr->buffer_object;
     bo.addr = (BYTE *)src_bo_addr->addr + src_box->front * src_slice_pitch;
     if (dst_texture->resource.format_flags & WINED3DFMT_FLAG_BLOCKS)
     {
@@ -2555,7 +2555,7 @@ static void wined3d_texture_gl_upload_data(struct wined3d_context *context,
     {
         if (bo.buffer_object)
         {
-            GL_EXTCALL(glBindBuffer(GL_PIXEL_UNPACK_BUFFER, ((struct wined3d_bo_gl *)bo.buffer_object)->id));
+            GL_EXTCALL(glBindBuffer(GL_PIXEL_UNPACK_BUFFER, wined3d_bo_gl(bo.buffer_object)->id));
             checkGLcall("glBindBuffer");
         }
 
@@ -2565,7 +2565,7 @@ static void wined3d_texture_gl_upload_data(struct wined3d_context *context,
         if (bo.buffer_object)
         {
             GL_EXTCALL(glBindBuffer(GL_PIXEL_UNPACK_BUFFER, 0));
-            wined3d_context_gl_reference_bo(context_gl, (struct wined3d_bo_gl *)bo.buffer_object);
+            wined3d_context_gl_reference_bo(context_gl, wined3d_bo_gl(bo.buffer_object));
             checkGLcall("glBindBuffer");
         }
     }
@@ -2585,7 +2585,7 @@ static void wined3d_texture_gl_upload_data(struct wined3d_context *context,
 static void wined3d_texture_gl_download_data_slow_path(struct wined3d_texture_gl *texture_gl,
         unsigned int sub_resource_idx, struct wined3d_context_gl *context_gl, const struct wined3d_bo_address *data)
 {
-    struct wined3d_bo_gl *bo = (struct wined3d_bo_gl *)data->buffer_object;
+    struct wined3d_bo_gl *bo = wined3d_bo_gl(data->buffer_object);
     const struct wined3d_gl_info *gl_info = context_gl->gl_info;
     struct wined3d_texture_sub_resource *sub_resource;
     unsigned int dst_row_pitch, dst_slice_pitch;
@@ -2824,7 +2824,7 @@ static void wined3d_texture_gl_download_data(struct wined3d_context *context,
     unsigned int src_level, src_width, src_height, src_depth;
     unsigned int src_row_pitch, src_slice_pitch;
     const struct wined3d_format_gl *format_gl;
-    struct wined3d_bo_gl *dst_bo;
+    struct wined3d_bo *dst_bo;
     BOOL srgb = FALSE;
     GLenum target;
 
@@ -2899,9 +2899,9 @@ static void wined3d_texture_gl_download_data(struct wined3d_context *context,
         return;
     }
 
-    if ((dst_bo = (struct wined3d_bo_gl *)dst_bo_addr->buffer_object))
+    if ((dst_bo = dst_bo_addr->buffer_object))
     {
-        GL_EXTCALL(glBindBuffer(GL_PIXEL_PACK_BUFFER, dst_bo->id));
+        GL_EXTCALL(glBindBuffer(GL_PIXEL_PACK_BUFFER, wined3d_bo_gl(dst_bo)->id));
         checkGLcall("glBindBuffer");
     }
 
@@ -2925,7 +2925,7 @@ static void wined3d_texture_gl_download_data(struct wined3d_context *context,
     if (dst_bo)
     {
         GL_EXTCALL(glBindBuffer(GL_PIXEL_PACK_BUFFER, 0));
-        wined3d_context_gl_reference_bo(context_gl, dst_bo);
+        wined3d_context_gl_reference_bo(context_gl, wined3d_bo_gl(dst_bo));
         checkGLcall("glBindBuffer");
     }
 }
@@ -4729,7 +4729,7 @@ static void wined3d_texture_vk_upload_data(struct wined3d_context *context,
             return;
         }
 
-        staging_bo_addr.buffer_object = (uintptr_t)&staging_bo;
+        staging_bo_addr.buffer_object = &staging_bo.b;
         staging_bo_addr.addr = NULL;
         if (!(map_ptr = wined3d_context_map_bo_address(context, &staging_bo_addr,
                 sub_resource->size, WINED3D_MAP_DISCARD | WINED3D_MAP_WRITE)))
@@ -4992,7 +4992,7 @@ static void wined3d_texture_vk_download_data(struct wined3d_context *context,
         wined3d_context_vk_submit_command_buffer(context_vk, 0, NULL, NULL, 0, NULL);
         wined3d_context_vk_wait_command_buffer(context_vk, src_texture_vk->image.command_buffer_id);
 
-        staging_bo_addr.buffer_object = (uintptr_t)&staging_bo;
+        staging_bo_addr.buffer_object = &staging_bo.b;
         staging_bo_addr.addr = NULL;
         if (!(map_ptr = wined3d_context_map_bo_address(context, &staging_bo_addr,
                 sub_resource->size, WINED3D_MAP_READ)))
diff --git a/dlls/wined3d/view.c b/dlls/wined3d/view.c
index cbcfed4a21e..0d8001f5cbe 100644
--- a/dlls/wined3d/view.c
+++ b/dlls/wined3d/view.c
@@ -1616,7 +1616,7 @@ void wined3d_unordered_access_view_set_counter(struct wined3d_unordered_access_v
     src.buffer_object = 0;
     src.addr = (void *)&value;
 
-    dst.buffer_object = view->counter_bo;
+    dst.buffer_object = (struct wined3d_bo *)view->counter_bo;
     dst.addr = NULL;
 
     wined3d_context_copy_bo_address(context, &dst, &src, sizeof(uint32_t));
@@ -2092,9 +2092,9 @@ void wined3d_unordered_access_view_vk_clear(struct wined3d_unordered_access_view
         goto out;
     }
 
-    cb_source_address.buffer_object = 0;
+    cb_source_address.buffer_object = NULL;
     cb_source_address.addr = (BYTE *)&constants;
-    cb_destination_address.buffer_object = (UINT_PTR)&constants_bo;
+    cb_destination_address.buffer_object = &constants_bo.b;
     cb_destination_address.addr = 0;
 
     adapter_vk_copy_bo_address(&context_vk->c, &cb_destination_address, &cb_source_address, sizeof(constants));
diff --git a/dlls/wined3d/wined3d_private.h b/dlls/wined3d/wined3d_private.h
index dc5bfb28328..1eaf480dcd4 100644
--- a/dlls/wined3d/wined3d_private.h
+++ b/dlls/wined3d/wined3d_private.h
@@ -1619,9 +1619,9 @@ static inline struct wined3d_bo_gl *wined3d_bo_gl(struct wined3d_bo *bo)
     return CONTAINING_RECORD(bo, struct wined3d_bo_gl, b);
 }
 
-static inline GLuint wined3d_bo_gl_id(uintptr_t bo)
+static inline GLuint wined3d_bo_gl_id(struct wined3d_bo *bo)
 {
-    return bo ? ((struct wined3d_bo_gl *)bo)->id : 0;
+    return bo ? wined3d_bo_gl(bo)->id : 0;
 }
 
 struct wined3d_bo_user
@@ -1679,7 +1679,7 @@ void wined3d_bo_slab_vk_unmap(struct wined3d_bo_slab_vk *slab_vk,
 
 struct wined3d_bo_address
 {
-    UINT_PTR buffer_object;
+    struct wined3d_bo *buffer_object;
     BYTE *addr;
 };
 
@@ -4409,6 +4409,7 @@ struct wined3d_texture
         DWORD locations;
         union
         {
+            struct wined3d_bo b;
             struct wined3d_bo_gl gl;
             struct wined3d_bo_vk vk;
         } bo;
-- 
2.33.0




More information about the wine-devel mailing list