Matteo Bruni : vkd3d-shader: Don't resize the buffer when there is enough free space.

Alexandre Julliard julliard at winehq.org
Fri Oct 1 18:00:41 CDT 2021


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

Author: Matteo Bruni <mbruni at codeweavers.com>
Date:   Thu Sep 30 21:36:16 2021 +0200

vkd3d-shader: Don't resize the buffer when there is enough free space.

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

---

 libs/vkd3d-shader/vkd3d_shader_main.c    | 10 ++--------
 libs/vkd3d-shader/vkd3d_shader_private.h |  3 +--
 2 files changed, 3 insertions(+), 10 deletions(-)

diff --git a/libs/vkd3d-shader/vkd3d_shader_main.c b/libs/vkd3d-shader/vkd3d_shader_main.c
index e38261b..baf2561 100644
--- a/libs/vkd3d-shader/vkd3d_shader_main.c
+++ b/libs/vkd3d-shader/vkd3d_shader_main.c
@@ -41,20 +41,14 @@ static void vkd3d_string_buffer_clear(struct vkd3d_string_buffer *buffer)
 
 static bool vkd3d_string_buffer_resize(struct vkd3d_string_buffer *buffer, int rc)
 {
-    unsigned int new_buffer_size = buffer->buffer_size * 2;
-    char *new_buffer;
+    unsigned int new_buffer_size = rc >= 0 ? buffer->content_size + rc + 1 : max(buffer->buffer_size * 2, 32);
 
-    new_buffer_size = max(new_buffer_size, 32);
-    while (rc > 0 && (unsigned int)rc >= new_buffer_size - buffer->content_size)
-        new_buffer_size *= 2;
-    if (!(new_buffer = vkd3d_realloc(buffer->buffer, new_buffer_size)))
+    if (!vkd3d_array_reserve((void **)&buffer->buffer, &buffer->buffer_size, new_buffer_size, 1))
     {
         ERR("Failed to grow buffer.\n");
         buffer->buffer[buffer->content_size] = '\0';
         return false;
     }
-    buffer->buffer = new_buffer;
-    buffer->buffer_size = new_buffer_size;
     return true;
 }
 
diff --git a/libs/vkd3d-shader/vkd3d_shader_private.h b/libs/vkd3d-shader/vkd3d_shader_private.h
index 8b3e762..fa56ba1 100644
--- a/libs/vkd3d-shader/vkd3d_shader_private.h
+++ b/libs/vkd3d-shader/vkd3d_shader_private.h
@@ -912,8 +912,7 @@ void shader_sm4_reset(struct vkd3d_shader_parser *parser);
 struct vkd3d_string_buffer
 {
     char *buffer;
-    unsigned int buffer_size;
-    unsigned int content_size;
+    size_t buffer_size, content_size;
 };
 
 struct vkd3d_string_buffer_cache




More information about the wine-cvs mailing list