[PATCH 1/6] wined3d: Move the "buffer_offset" field to struct wined3d_bo.

Zebediah Figura zfigura at codeweavers.com
Fri Nov 19 17:23:44 CST 2021


Signed-off-by: Zebediah Figura <zfigura at codeweavers.com>
---
 dlls/wined3d/adapter_vk.c      | 14 +++++++-------
 dlls/wined3d/buffer.c          |  4 ++--
 dlls/wined3d/context_gl.c      |  8 ++++----
 dlls/wined3d/context_vk.c      | 10 +++++-----
 dlls/wined3d/device.c          |  6 +++---
 dlls/wined3d/state.c           |  4 ++--
 dlls/wined3d/texture.c         |  8 ++++----
 dlls/wined3d/view.c            |  8 ++++----
 dlls/wined3d/wined3d_private.h |  3 +--
 9 files changed, 32 insertions(+), 33 deletions(-)

diff --git a/dlls/wined3d/adapter_vk.c b/dlls/wined3d/adapter_vk.c
index e6f5bf108c7..f9a31265cd3 100644
--- a/dlls/wined3d/adapter_vk.c
+++ b/dlls/wined3d/adapter_vk.c
@@ -1011,7 +1011,7 @@ static void *adapter_vk_map_bo_address(struct wined3d_context *context,
             vk_barrier.srcQueueFamilyIndex = VK_QUEUE_FAMILY_IGNORED;
             vk_barrier.dstQueueFamilyIndex = VK_QUEUE_FAMILY_IGNORED;
             vk_barrier.buffer = bo->vk_buffer;
-            vk_barrier.offset = bo->buffer_offset + (uintptr_t)data->addr;
+            vk_barrier.offset = bo->b.buffer_offset + (uintptr_t)data->addr;
             vk_barrier.size = size;
             VK_CALL(vkCmdPipelineBarrier(vk_command_buffer, VK_PIPELINE_STAGE_ALL_COMMANDS_BIT,
                     VK_PIPELINE_STAGE_HOST_BIT, 0, 0, NULL, 1, &vk_barrier, 0, NULL));
@@ -1113,8 +1113,8 @@ void adapter_vk_copy_bo_address(struct wined3d_context *context,
         src_access_mask = vk_access_mask_from_buffer_usage(src_bo->usage);
         dst_access_mask = vk_access_mask_from_buffer_usage(dst_bo->usage);
 
-        region.srcOffset = src_bo->buffer_offset + (uintptr_t)src->addr;
-        region.dstOffset = dst_bo->buffer_offset + (uintptr_t)dst->addr;
+        region.srcOffset = src_bo->b.buffer_offset + (uintptr_t)src->addr;
+        region.dstOffset = dst_bo->b.buffer_offset + (uintptr_t)dst->addr;
         region.size = size;
 
         vk_barrier[0].sType = VK_STRUCTURE_TYPE_BUFFER_MEMORY_BARRIER;
@@ -1781,7 +1781,7 @@ static void adapter_vk_draw_primitive(struct wined3d_device *device,
             for (i = 0; i < ARRAY_SIZE(context_vk->vk_so_counters); ++i)
             {
                 context_vk->vk_so_counters[i] = bo->vk_buffer;
-                context_vk->vk_so_offsets[i] = bo->buffer_offset + i * sizeof(uint32_t) * 2;
+                context_vk->vk_so_offsets[i] = bo->b.buffer_offset + i * sizeof(uint32_t) * 2;
             }
         }
 
@@ -1805,13 +1805,13 @@ static void adapter_vk_draw_primitive(struct wined3d_device *device,
         {
             stride = sizeof(VkDrawIndexedIndirectCommand);
             VK_CALL(vkCmdDrawIndexedIndirect(vk_command_buffer, bo->vk_buffer,
-                    bo->buffer_offset + parameters->u.indirect.offset, size / stride, stride));
+                    bo->b.buffer_offset + parameters->u.indirect.offset, size / stride, stride));
         }
         else
         {
             stride = sizeof(VkDrawIndirectCommand);
             VK_CALL(vkCmdDrawIndirect(vk_command_buffer, bo->vk_buffer,
-                    bo->buffer_offset + parameters->u.indirect.offset, size / stride, stride));
+                    bo->b.buffer_offset + parameters->u.indirect.offset, size / stride, stride));
         }
     }
     else
@@ -1871,7 +1871,7 @@ static void adapter_vk_dispatch_compute(struct wined3d_device *device,
 
         wined3d_context_vk_reference_bo(context_vk, bo);
         VK_CALL(vkCmdDispatchIndirect(vk_command_buffer, bo->vk_buffer,
-                bo->buffer_offset + parameters->u.indirect.offset));
+                bo->b.buffer_offset + parameters->u.indirect.offset));
     }
     else
     {
diff --git a/dlls/wined3d/buffer.c b/dlls/wined3d/buffer.c
index 315ea05260e..d3aeb2e76f4 100644
--- a/dlls/wined3d/buffer.c
+++ b/dlls/wined3d/buffer.c
@@ -1521,7 +1521,7 @@ const VkDescriptorBufferInfo *wined3d_buffer_vk_get_buffer_info(struct wined3d_b
         return &buffer_vk->buffer_info;
 
     buffer_vk->buffer_info.buffer = bo->vk_buffer;
-    buffer_vk->buffer_info.offset = bo->buffer_offset;
+    buffer_vk->buffer_info.offset = bo->b.buffer_offset;
     buffer_vk->buffer_info.range = buffer_vk->b.resource.size;
     buffer_vk->b.bo_user.valid = true;
 
@@ -1702,7 +1702,7 @@ void wined3d_buffer_vk_barrier(struct wined3d_buffer_vk *buffer_vk,
         vk_barrier.srcQueueFamilyIndex = VK_QUEUE_FAMILY_IGNORED;
         vk_barrier.dstQueueFamilyIndex = VK_QUEUE_FAMILY_IGNORED;
         vk_barrier.buffer = bo->vk_buffer;
-        vk_barrier.offset = bo->buffer_offset;
+        vk_barrier.offset = bo->b.buffer_offset;
         vk_barrier.size = buffer_vk->b.resource.size;
         VK_CALL(vkCmdPipelineBarrier(wined3d_context_vk_get_command_buffer(context_vk),
                 vk_pipeline_stage_mask_from_bind_flags(src_bind_mask),
diff --git a/dlls/wined3d/context_gl.c b/dlls/wined3d/context_gl.c
index 2751a4a2182..69eb13f3027 100644
--- a/dlls/wined3d/context_gl.c
+++ b/dlls/wined3d/context_gl.c
@@ -2922,7 +2922,7 @@ bool wined3d_context_gl_create_bo(struct wined3d_context_gl *context_gl, GLsizei
     list_init(&bo->b.users);
     bo->command_fence_id = 0;
     bo->b.memory_offset = 0;
-    bo->buffer_offset = 0;
+    bo->b.buffer_offset = 0;
     bo->b.map_ptr = NULL;
 
     return true;
@@ -3789,7 +3789,7 @@ static void wined3d_context_gl_bind_unordered_access_views(struct wined3d_contex
 
         if (view_gl->counter_bo.id)
             GL_EXTCALL(glBindBufferRange(GL_ATOMIC_COUNTER_BUFFER, i, view_gl->counter_bo.id,
-                    view_gl->counter_bo.buffer_offset, view_gl->counter_bo.size));
+                    view_gl->counter_bo.b.buffer_offset, view_gl->counter_bo.size));
     }
     checkGLcall("Bind unordered access views");
 }
@@ -4915,7 +4915,7 @@ void draw_primitive(struct wined3d_device *device, const struct wined3d_state *s
         if (!bo || !stream_info->all_vbo)
             idx_data = index_buffer->resource.heap_memory;
         else
-            idx_data = (void *)wined3d_bo_gl(bo)->buffer_offset;
+            idx_data = (void *)bo->buffer_offset;
         idx_data = (const BYTE *)idx_data + state->index_offset;
 
         if (state->index_format == WINED3DFMT_R16_UINT)
@@ -5077,7 +5077,7 @@ static const void *get_vertex_attrib_pointer(const struct wined3d_stream_info_el
     const uint8_t *offset = element->data.addr + state->load_base_vertex_index * element->stride;
 
     if (element->data.buffer_object)
-        offset += wined3d_bo_gl(element->data.buffer_object)->buffer_offset;
+        offset += element->data.buffer_object->buffer_offset;
     return offset;
 }
 
diff --git a/dlls/wined3d/context_vk.c b/dlls/wined3d/context_vk.c
index ec3554ddc30..56b2da53060 100644
--- a/dlls/wined3d/context_vk.c
+++ b/dlls/wined3d/context_vk.c
@@ -456,8 +456,8 @@ static bool wined3d_context_vk_create_slab_bo(struct wined3d_context_vk *context
     *bo = slab->bo;
     bo->memory = NULL;
     bo->slab = slab;
-    bo->buffer_offset = idx * object_size;
-    bo->b.memory_offset = slab->bo.b.memory_offset + bo->buffer_offset;
+    bo->b.buffer_offset = idx * object_size;
+    bo->b.memory_offset = slab->bo.b.memory_offset + bo->b.buffer_offset;
     bo->size = size;
     list_init(&bo->b.users);
     bo->command_buffer_id = 0;
@@ -465,7 +465,7 @@ static bool wined3d_context_vk_create_slab_bo(struct wined3d_context_vk *context
 
     TRACE("Using buffer 0x%s, memory 0x%s, offset 0x%s for bo %p.\n",
             wine_dbgstr_longlong(bo->vk_buffer), wine_dbgstr_longlong(bo->vk_memory),
-            wine_dbgstr_longlong(bo->buffer_offset), bo);
+            wine_dbgstr_longlong(bo->b.buffer_offset), bo);
 
     return true;
 }
@@ -534,7 +534,7 @@ BOOL wined3d_context_vk_create_bo(struct wined3d_context_vk *context_vk, VkDevic
     }
 
     bo->b.map_ptr = NULL;
-    bo->buffer_offset = 0;
+    bo->b.buffer_offset = 0;
     bo->size = size;
     bo->usage = usage;
     bo->memory_type = adapter_vk->memory_properties.memoryTypes[memory_type_idx].propertyFlags;
@@ -961,7 +961,7 @@ void wined3d_context_vk_destroy_bo(struct wined3d_context_vk *context_vk, const
         if (bo->b.map_ptr)
             wined3d_bo_slab_vk_unmap(slab_vk, context_vk);
         object_size = slab_vk->bo.size / 32;
-        idx = bo->buffer_offset / object_size;
+        idx = bo->b.buffer_offset / object_size;
         wined3d_context_vk_destroy_bo_slab_slice(context_vk, slab_vk, idx, bo->command_buffer_id);
         return;
     }
diff --git a/dlls/wined3d/device.c b/dlls/wined3d/device.c
index c5de58c29c9..7fb8a7ec3a6 100644
--- a/dlls/wined3d/device.c
+++ b/dlls/wined3d/device.c
@@ -657,9 +657,9 @@ bool wined3d_device_vk_create_null_resources(struct wined3d_device_vk *device_vk
     memory_type = VK_MEMORY_PROPERTY_DEVICE_LOCAL_BIT;
     if (!wined3d_context_vk_create_bo(context_vk, 16, usage, memory_type, &r->bo))
         return false;
-    VK_CALL(vkCmdFillBuffer(vk_command_buffer, r->bo.vk_buffer, r->bo.buffer_offset, r->bo.size, 0x00000000u));
+    VK_CALL(vkCmdFillBuffer(vk_command_buffer, r->bo.vk_buffer, r->bo.b.buffer_offset, r->bo.size, 0x00000000u));
     r->buffer_info.buffer = r->bo.vk_buffer;
-    r->buffer_info.offset = r->bo.buffer_offset;
+    r->buffer_info.offset = r->bo.b.buffer_offset;
     r->buffer_info.range = r->bo.size;
 
     if (!wined3d_null_image_vk_init(&r->image_1d, context_vk, vk_command_buffer, VK_IMAGE_TYPE_1D, 1, 1))
@@ -735,7 +735,7 @@ bool wined3d_device_vk_create_null_views(struct wined3d_device_vk *device_vk, st
     buffer_create_info.flags = 0;
     buffer_create_info.buffer = r->bo.vk_buffer;
     buffer_create_info.format = VK_FORMAT_R32_UINT;
-    buffer_create_info.offset = r->bo.buffer_offset;
+    buffer_create_info.offset = r->bo.b.buffer_offset;
     buffer_create_info.range = r->bo.size;
 
     if ((vr = VK_CALL(vkCreateBufferView(device_vk->vk_device,
diff --git a/dlls/wined3d/state.c b/dlls/wined3d/state.c
index e0dba8701bc..c76e0c2b604 100644
--- a/dlls/wined3d/state.c
+++ b/dlls/wined3d/state.c
@@ -4600,7 +4600,7 @@ static void state_cb(struct wined3d_context *context, const struct wined3d_state
         buffer = buffer_state->buffer;
         bo_gl = wined3d_bo_gl(buffer->buffer_object);
         GL_EXTCALL(glBindBufferRange(GL_UNIFORM_BUFFER, base + i,
-                bo_gl->id, bo_gl->buffer_offset + buffer_state->offset, buffer_state->size));
+                bo_gl->id, bo_gl->b.buffer_offset + buffer_state->offset, buffer_state->size));
         buffer->bo_user.valid = true;
     }
     checkGLcall("bind constant buffers");
@@ -4677,7 +4677,7 @@ static void state_so(struct wined3d_context *context, const struct wined3d_state
         }
         size = buffer->resource.size - offset;
         GL_EXTCALL(glBindBufferRange(GL_TRANSFORM_FEEDBACK_BUFFER, i,
-                bo_gl->id, bo_gl->buffer_offset + offset, size));
+                bo_gl->id, bo_gl->b.buffer_offset + offset, size));
         buffer->bo_user.valid = true;
     }
     checkGLcall("bind transform feedback buffers");
diff --git a/dlls/wined3d/texture.c b/dlls/wined3d/texture.c
index 7e2da350f5a..87ae569b549 100644
--- a/dlls/wined3d/texture.c
+++ b/dlls/wined3d/texture.c
@@ -4764,7 +4764,7 @@ static void wined3d_texture_vk_upload_data(struct wined3d_context *context,
         vk_barrier.srcQueueFamilyIndex = VK_QUEUE_FAMILY_IGNORED;
         vk_barrier.dstQueueFamilyIndex = VK_QUEUE_FAMILY_IGNORED;
         vk_barrier.buffer = src_bo->vk_buffer;
-        vk_barrier.offset = src_bo->buffer_offset + (size_t)src_bo_addr->addr;
+        vk_barrier.offset = src_bo->b.buffer_offset + (size_t)src_bo_addr->addr;
         vk_barrier.size = sub_resource->size;
 
         src_offset += (size_t)src_bo_addr->addr;
@@ -4788,7 +4788,7 @@ static void wined3d_texture_vk_upload_data(struct wined3d_context *context,
             dst_texture_vk->layout, VK_IMAGE_LAYOUT_TRANSFER_DST_OPTIMAL,
             dst_texture_vk->image.vk_image, &vk_range);
 
-    region.bufferOffset = src_bo->buffer_offset + src_offset;
+    region.bufferOffset = src_bo->b.buffer_offset + src_offset;
     region.bufferRowLength = (src_row_pitch / src_format->block_byte_count) * src_format->block_width;
     if (src_row_pitch)
         region.bufferImageHeight = (src_slice_pitch / src_row_pitch) * src_format->block_height;
@@ -4941,7 +4941,7 @@ static void wined3d_texture_vk_download_data(struct wined3d_context *context,
         vk_barrier.srcQueueFamilyIndex = VK_QUEUE_FAMILY_IGNORED;
         vk_barrier.dstQueueFamilyIndex = VK_QUEUE_FAMILY_IGNORED;
         vk_barrier.buffer = dst_bo->vk_buffer;
-        vk_barrier.offset = dst_bo->buffer_offset + (size_t)dst_bo_addr->addr;
+        vk_barrier.offset = dst_bo->b.buffer_offset + (size_t)dst_bo_addr->addr;
         vk_barrier.size = sub_resource->size;
 
         bo_stage_flags = vk_pipeline_stage_mask_from_buffer_usage(dst_bo->usage);
@@ -4964,7 +4964,7 @@ static void wined3d_texture_vk_download_data(struct wined3d_context *context,
             src_texture_vk->layout, VK_IMAGE_LAYOUT_TRANSFER_SRC_OPTIMAL,
             src_texture_vk->image.vk_image, &vk_range);
 
-    region.bufferOffset = dst_bo->buffer_offset + dst_offset;
+    region.bufferOffset = dst_bo->b.buffer_offset + dst_offset;
     region.bufferRowLength = 0;
     region.bufferImageHeight = 0;
     region.imageSubresource.aspectMask = vk_range.aspectMask;
diff --git a/dlls/wined3d/view.c b/dlls/wined3d/view.c
index b902812aded..b981602f1a2 100644
--- a/dlls/wined3d/view.c
+++ b/dlls/wined3d/view.c
@@ -685,7 +685,7 @@ static VkBufferView wined3d_view_vk_create_vk_buffer_view(struct wined3d_context
     create_info.flags = 0;
     create_info.buffer = bo->vk_buffer;
     create_info.format = view_format_vk->vk_format;
-    create_info.offset = bo->buffer_offset + offset;
+    create_info.offset = bo->b.buffer_offset + offset;
     create_info.range = size;
 
     device_vk = wined3d_device_vk(buffer_vk->b.resource.device);
@@ -2101,7 +2101,7 @@ void wined3d_unordered_access_view_vk_clear(struct wined3d_unordered_access_view
 
     buffer_info.buffer = constants_bo.vk_buffer;
     buffer_info.range = constants_bo.size;
-    buffer_info.offset = constants_bo.buffer_offset;
+    buffer_info.offset = constants_bo.b.buffer_offset;
 
     vk_info = context_vk->vk_info;
 
@@ -2234,7 +2234,7 @@ static void wined3d_unordered_access_view_vk_cs_init(void *object)
 
             wined3d_context_vk_end_current_render_pass(context_vk);
             VK_CALL(vkCmdFillBuffer(wined3d_context_vk_get_command_buffer(context_vk),
-                    uav_vk->counter_bo.vk_buffer, uav_vk->counter_bo.buffer_offset, sizeof(uint32_t), 0));
+                    uav_vk->counter_bo.vk_buffer, uav_vk->counter_bo.b.buffer_offset, sizeof(uint32_t), 0));
             wined3d_context_vk_reference_bo(context_vk, &uav_vk->counter_bo);
 
             create_info.sType = VK_STRUCTURE_TYPE_BUFFER_VIEW_CREATE_INFO;
@@ -2242,7 +2242,7 @@ static void wined3d_unordered_access_view_vk_cs_init(void *object)
             create_info.flags = 0;
             create_info.buffer = uav_vk->counter_bo.vk_buffer;
             create_info.format = VK_FORMAT_R32_UINT;
-            create_info.offset = uav_vk->counter_bo.buffer_offset;
+            create_info.offset = uav_vk->counter_bo.b.buffer_offset;
             create_info.range = sizeof(uint32_t);
             if ((vr = VK_CALL(vkCreateBufferView(device_vk->vk_device,
                     &create_info, NULL, &uav_vk->vk_counter_view))) < 0)
diff --git a/dlls/wined3d/wined3d_private.h b/dlls/wined3d/wined3d_private.h
index 79b02c2448d..2fce585c6b1 100644
--- a/dlls/wined3d/wined3d_private.h
+++ b/dlls/wined3d/wined3d_private.h
@@ -1597,6 +1597,7 @@ struct wined3d_bo
 {
     struct list users;
     void *map_ptr;
+    size_t buffer_offset;
     size_t memory_offset;
     bool coherent;
 };
@@ -1606,7 +1607,6 @@ struct wined3d_bo_gl
     struct wined3d_bo b;
 
     GLuint id;
-    GLsizeiptr buffer_offset;
     GLsizeiptr size;
     GLenum binding;
     GLenum usage;
@@ -1641,7 +1641,6 @@ struct wined3d_bo_vk
 
     VkDeviceMemory vk_memory;
 
-    VkDeviceSize buffer_offset;
     VkDeviceSize size;
     VkBufferUsageFlags usage;
     VkMemoryPropertyFlags memory_type;
-- 
2.33.0




More information about the wine-devel mailing list