vkd3d-shader: Allocate memory for a string buffer at init time.

Signed-off-by: Matteo Bruni <mbruni@codeweavers.com>
Signed-off-by: Henri Verbeet <hverbeet@codeweavers.com>
Signed-off-by: Alexandre Julliard <julliard@winehq.org>
This commit is contained in:
Matteo Bruni 2021-09-30 21:36:17 +02:00 committed by Alexandre Julliard
parent c3f8531477
commit 49eba71844

View File

@ -25,7 +25,11 @@ VKD3D_DEBUG_ENV_NAME("VKD3D_SHADER_DEBUG");
void vkd3d_string_buffer_init(struct vkd3d_string_buffer *buffer) void vkd3d_string_buffer_init(struct vkd3d_string_buffer *buffer)
{ {
memset(buffer, 0, sizeof(*buffer)); buffer->buffer_size = 16;
buffer->content_size = 0;
buffer->buffer = vkd3d_malloc(buffer->buffer_size);
assert(buffer->buffer);
memset(buffer->buffer, 0, buffer->buffer_size);
} }
void vkd3d_string_buffer_cleanup(struct vkd3d_string_buffer *buffer) void vkd3d_string_buffer_cleanup(struct vkd3d_string_buffer *buffer)
@ -41,7 +45,7 @@ static void vkd3d_string_buffer_clear(struct vkd3d_string_buffer *buffer)
static bool vkd3d_string_buffer_resize(struct vkd3d_string_buffer *buffer, int rc) static bool vkd3d_string_buffer_resize(struct vkd3d_string_buffer *buffer, int rc)
{ {
unsigned int new_buffer_size = rc >= 0 ? buffer->content_size + rc + 1 : max(buffer->buffer_size * 2, 32); unsigned int new_buffer_size = rc >= 0 ? buffer->content_size + rc + 1 : buffer->buffer_size * 2;
if (!vkd3d_array_reserve((void **)&buffer->buffer, &buffer->buffer_size, new_buffer_size, 1)) if (!vkd3d_array_reserve((void **)&buffer->buffer, &buffer->buffer_size, new_buffer_size, 1))
{ {
@ -58,9 +62,6 @@ int vkd3d_string_buffer_vprintf(struct vkd3d_string_buffer *buffer, const char *
va_list a; va_list a;
int rc; int rc;
if (!buffer->content_size && !vkd3d_string_buffer_resize(buffer, 32))
return -1;
for (;;) for (;;)
{ {
rem = buffer->buffer_size - buffer->content_size; rem = buffer->buffer_size - buffer->content_size;
@ -144,11 +145,6 @@ struct vkd3d_string_buffer *vkd3d_string_buffer_get(struct vkd3d_string_buffer_c
if (!(buffer = vkd3d_malloc(sizeof(*buffer)))) if (!(buffer = vkd3d_malloc(sizeof(*buffer))))
return NULL; return NULL;
vkd3d_string_buffer_init(buffer); vkd3d_string_buffer_init(buffer);
if (!vkd3d_string_buffer_resize(buffer, 1))
{
vkd3d_free(buffer);
return NULL;
}
} }
else else
{ {