[prev in list] [next in list] [prev in thread] [next in thread]
List: wine-devel
Subject: [v4 PATCH vkd3d 1/2] vkd3d-shader: Don't resize the buffer when there is enough free space.
From: Matteo Bruni <mbruni () codeweavers ! com>
Date: 2021-09-30 19:36:16
Message-ID: 20210930193617.615599-1-mbruni () codeweavers ! com
[Download RAW message or body]
Signed-off-by: Matteo Bruni <mbruni@codeweavers.com>
---
v2: Handle rc < 0 case, use vkd3d_array_reserve().
v3: Fully make use of vkd3d_array_reserve() (thanks Henri).
v4: Make buffer_size and content_size size_t.
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 e38261b4..baf25612 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 8b3e7624..fa56ba1d 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
--
2.26.3
[prev in list] [next in list] [prev in thread] [next in thread]
Configure |
About |
News |
Add a list |
Sponsored by KoreLogic