[PATCH] wined3d: No longer store a VkDescriptorBufferInfo in the wined3d_buffer_vk structure.

Zebediah Figura zfigura at codeweavers.com
Mon Jul 26 12:06:24 CDT 2021


Signed-off-by: Zebediah Figura <zfigura at codeweavers.com>
---
 dlls/wined3d/buffer.c          | 14 ++++----------
 dlls/wined3d/context_vk.c      | 28 ++++++++++++++--------------
 dlls/wined3d/wined3d_private.h |  4 ++--
 3 files changed, 20 insertions(+), 26 deletions(-)

diff --git a/dlls/wined3d/buffer.c b/dlls/wined3d/buffer.c
index 4c5e2054fe0..2dbff2310ad 100644
--- a/dlls/wined3d/buffer.c
+++ b/dlls/wined3d/buffer.c
@@ -1431,17 +1431,11 @@ static BOOL wined3d_buffer_vk_create_buffer_object(struct wined3d_buffer_vk *buf
     return TRUE;
 }
 
-const VkDescriptorBufferInfo *wined3d_buffer_vk_get_buffer_info(struct wined3d_buffer_vk *buffer_vk)
+void wined3d_buffer_vk_get_buffer_info(struct wined3d_buffer_vk *buffer_vk, VkDescriptorBufferInfo *buffer_info)
 {
-    if (buffer_vk->bo_user.valid)
-        return &buffer_vk->buffer_info;
-
-    buffer_vk->buffer_info.buffer = buffer_vk->bo.vk_buffer;
-    buffer_vk->buffer_info.offset = buffer_vk->bo.buffer_offset;
-    buffer_vk->buffer_info.range = buffer_vk->b.resource.size;
-    buffer_vk->bo_user.valid = true;
-
-    return &buffer_vk->buffer_info;
+    buffer_info->buffer = buffer_vk->bo.vk_buffer;
+    buffer_info->offset = buffer_vk->bo.buffer_offset;
+    buffer_info->range = buffer_vk->b.resource.size;
 }
 
 static BOOL wined3d_buffer_vk_prepare_location(struct wined3d_buffer *buffer,
diff --git a/dlls/wined3d/context_vk.c b/dlls/wined3d/context_vk.c
index 4b1bea38370..da6c1243ad7 100644
--- a/dlls/wined3d/context_vk.c
+++ b/dlls/wined3d/context_vk.c
@@ -2418,8 +2418,8 @@ static void wined3d_context_vk_bind_vertex_buffers(struct wined3d_context_vk *co
     VkDeviceSize offsets[ARRAY_SIZE(state->streams)] = {0};
     VkBuffer buffers[ARRAY_SIZE(state->streams)];
     const struct wined3d_stream_state *stream;
-    const VkDescriptorBufferInfo *buffer_info;
     struct wined3d_buffer_vk *buffer_vk;
+    VkDescriptorBufferInfo buffer_info;
     struct wined3d_buffer *buffer;
     unsigned int i, first, count;
 
@@ -2432,10 +2432,10 @@ static void wined3d_context_vk_bind_vertex_buffers(struct wined3d_context_vk *co
         if ((buffer = stream->buffer))
         {
             buffer_vk = wined3d_buffer_vk(buffer);
-            buffer_info = wined3d_buffer_vk_get_buffer_info(buffer_vk);
+            wined3d_buffer_vk_get_buffer_info(buffer_vk, &buffer_info);
             wined3d_context_vk_reference_bo(context_vk, &buffer_vk->bo);
-            buffers[count] = buffer_info->buffer;
-            offsets[count] = buffer_info->offset + stream->offset;
+            buffers[count] = buffer_info.buffer;
+            offsets[count] = buffer_info.offset + stream->offset;
             ++count;
             continue;
         }
@@ -2457,8 +2457,8 @@ static void wined3d_context_vk_bind_stream_output_buffers(struct wined3d_context
     VkDeviceSize sizes[ARRAY_SIZE(state->stream_output)];
     VkBuffer buffers[ARRAY_SIZE(state->stream_output)];
     const struct wined3d_stream_output *stream;
-    const VkDescriptorBufferInfo *buffer_info;
     struct wined3d_buffer_vk *buffer_vk;
+    VkDescriptorBufferInfo buffer_info;
     struct wined3d_buffer *buffer;
     unsigned int i, first, count;
 
@@ -2471,16 +2471,16 @@ static void wined3d_context_vk_bind_stream_output_buffers(struct wined3d_context
         if ((buffer = stream->buffer))
         {
             buffer_vk = wined3d_buffer_vk(buffer);
-            buffer_info = wined3d_buffer_vk_get_buffer_info(buffer_vk);
+            wined3d_buffer_vk_get_buffer_info(buffer_vk, &buffer_info);
             wined3d_context_vk_reference_bo(context_vk, &buffer_vk->bo);
-            buffers[count] = buffer_info->buffer;
+            buffers[count] = buffer_info.buffer;
             if ((offsets[count] = stream->offset) == ~0u)
             {
                 FIXME("Appending to stream output buffers not implemented.\n");
                 offsets[count] = 0;
             }
-            sizes[count] = buffer_info->range - offsets[count];
-            offsets[count] += buffer_info->offset;
+            sizes[count] = buffer_info.range - offsets[count];
+            offsets[count] += buffer_info.offset;
             ++count;
             continue;
         }
@@ -2664,7 +2664,7 @@ static bool wined3d_shader_descriptor_writes_vk_add_cbv_write(struct wined3d_sha
                 VK_DESCRIPTOR_TYPE_UNIFORM_BUFFER, &device_vk->null_resources_vk.buffer_info, NULL, NULL);
 
     buffer_vk = wined3d_buffer_vk(buffer);
-    *buffer_info = *wined3d_buffer_vk_get_buffer_info(buffer_vk);
+    wined3d_buffer_vk_get_buffer_info(buffer_vk, buffer_info);
     buffer_info->offset += cb_state->offset;
     buffer_info->range = min(cb_state->size, buffer_info->range);
     if (!wined3d_shader_descriptor_writes_vk_add_write(writes, vk_descriptor_set,
@@ -3309,7 +3309,7 @@ VkCommandBuffer wined3d_context_vk_apply_draw_state(struct wined3d_context_vk *c
 
     if (wined3d_context_is_graphics_state_dirty(&context_vk->c, STATE_INDEXBUFFER) && state->index_buffer)
     {
-        const VkDescriptorBufferInfo *buffer_info;
+        VkDescriptorBufferInfo buffer_info;
         VkIndexType idx_type;
 
         if (state->index_format == WINED3DFMT_R16_UINT)
@@ -3317,10 +3317,10 @@ VkCommandBuffer wined3d_context_vk_apply_draw_state(struct wined3d_context_vk *c
         else
             idx_type = VK_INDEX_TYPE_UINT32;
         buffer_vk = wined3d_buffer_vk(state->index_buffer);
-        buffer_info = wined3d_buffer_vk_get_buffer_info(buffer_vk);
+        wined3d_buffer_vk_get_buffer_info(buffer_vk, &buffer_info);
         wined3d_context_vk_reference_bo(context_vk, &buffer_vk->bo);
-        VK_CALL(vkCmdBindIndexBuffer(vk_command_buffer, buffer_info->buffer,
-                buffer_info->offset + state->index_offset, idx_type));
+        VK_CALL(vkCmdBindIndexBuffer(vk_command_buffer, buffer_info.buffer,
+                buffer_info.offset + state->index_offset, idx_type));
     }
 
     if (wined3d_context_is_graphics_state_dirty(&context_vk->c, STATE_CONSTANT_BUFFER(WINED3D_SHADER_TYPE_PIXEL))
diff --git a/dlls/wined3d/wined3d_private.h b/dlls/wined3d/wined3d_private.h
index a2048fc6ea6..ca85f811673 100644
--- a/dlls/wined3d/wined3d_private.h
+++ b/dlls/wined3d/wined3d_private.h
@@ -4971,7 +4971,6 @@ struct wined3d_buffer_vk
 
     struct wined3d_bo_vk bo;
     struct wined3d_bo_user bo_user;
-    VkDescriptorBufferInfo buffer_info;
     uint32_t bind_mask;
 };
 
@@ -4982,7 +4981,8 @@ static inline struct wined3d_buffer_vk *wined3d_buffer_vk(struct wined3d_buffer
 
 void wined3d_buffer_vk_barrier(struct wined3d_buffer_vk *buffer_vk,
         struct wined3d_context_vk *context_vk, uint32_t bind_mask) DECLSPEC_HIDDEN;
-const VkDescriptorBufferInfo *wined3d_buffer_vk_get_buffer_info(struct wined3d_buffer_vk *buffer_vk) DECLSPEC_HIDDEN;
+void wined3d_buffer_vk_get_buffer_info(struct wined3d_buffer_vk *buffer_vk,
+        VkDescriptorBufferInfo *buffer_info) DECLSPEC_HIDDEN;
 HRESULT wined3d_buffer_vk_init(struct wined3d_buffer_vk *buffer_vk, struct wined3d_device *device,
         const struct wined3d_buffer_desc *desc, const struct wined3d_sub_resource_data *data,
         void *parent, const struct wined3d_parent_ops *parent_ops) DECLSPEC_HIDDEN;
-- 
2.30.2




More information about the wine-devel mailing list