Zebediah Figura : vkd3d-shader: Don't allocate an initial buffer in vkd3d_string_buffer_init().

Alexandre Julliard julliard at winehq.org
Fri Oct 9 16:01:54 CDT 2020


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

Author: Zebediah Figura <zfigura at codeweavers.com>
Date:   Fri Oct  9 01:14:03 2020 -0500

vkd3d-shader: Don't allocate an initial buffer in vkd3d_string_buffer_init().

Signed-off-by: Zebediah Figura <zfigura at codeweavers.com>
Signed-off-by: Henri Verbeet <hverbeet at codeweavers.com>
Signed-off-by: Alexandre Julliard <julliard at winehq.org>

---

 libs/vkd3d-shader/dxbc.c                 |  6 ++----
 libs/vkd3d-shader/trace.c                |  6 +-----
 libs/vkd3d-shader/vkd3d_shader_main.c    | 35 ++++++++++----------------------
 libs/vkd3d-shader/vkd3d_shader_private.h |  4 ++--
 4 files changed, 16 insertions(+), 35 deletions(-)

diff --git a/libs/vkd3d-shader/dxbc.c b/libs/vkd3d-shader/dxbc.c
index 3ddca1e..9977d1a 100644
--- a/libs/vkd3d-shader/dxbc.c
+++ b/libs/vkd3d-shader/dxbc.c
@@ -2781,8 +2781,7 @@ int vkd3d_shader_parse_root_signature(const struct vkd3d_shader_code *dxbc,
     memset(root_signature, 0, sizeof(*root_signature));
     if (messages)
         *messages = NULL;
-    if (!vkd3d_shader_message_context_init(&message_context, VKD3D_SHADER_LOG_INFO, NULL))
-        return VKD3D_ERROR;
+    vkd3d_shader_message_context_init(&message_context, VKD3D_SHADER_LOG_INFO, NULL);
 
     ret = parse_dxbc(dxbc->code, dxbc->size, &message_context, rts0_handler, root_signature);
     vkd3d_shader_message_context_trace_messages(&message_context);
@@ -3346,8 +3345,7 @@ int vkd3d_shader_serialize_root_signature(const struct vkd3d_shader_versioned_ro
         *messages = NULL;
 
     memset(&context, 0, sizeof(context));
-    if (!vkd3d_shader_message_context_init(&context.message_context, VKD3D_SHADER_LOG_INFO, NULL))
-        return VKD3D_ERROR;
+    vkd3d_shader_message_context_init(&context.message_context, VKD3D_SHADER_LOG_INFO, NULL);
 
     if (root_signature->version != VKD3D_SHADER_ROOT_SIGNATURE_VERSION_1_0
             && root_signature->version != VKD3D_SHADER_ROOT_SIGNATURE_VERSION_1_1)
diff --git a/libs/vkd3d-shader/trace.c b/libs/vkd3d-shader/trace.c
index a510f3a..9b49ca1 100644
--- a/libs/vkd3d-shader/trace.c
+++ b/libs/vkd3d-shader/trace.c
@@ -1579,11 +1579,7 @@ enum vkd3d_result vkd3d_dxbc_binary_to_text(void *data, struct vkd3d_shader_code
     enum vkd3d_result result = VKD3D_OK;
     void *code;
 
-    if (!vkd3d_string_buffer_init(&buffer))
-    {
-        ERR("Failed to initialize string buffer.\n");
-        return VKD3D_ERROR;
-    }
+    vkd3d_string_buffer_init(&buffer);
 
     shader_sm4_read_header(data, &ptr, &shader_version);
     shader_addline(&buffer, "%s_%u_%u\n",
diff --git a/libs/vkd3d-shader/vkd3d_shader_main.c b/libs/vkd3d-shader/vkd3d_shader_main.c
index 8d33859..7c3885e 100644
--- a/libs/vkd3d-shader/vkd3d_shader_main.c
+++ b/libs/vkd3d-shader/vkd3d_shader_main.c
@@ -23,23 +23,9 @@
 
 VKD3D_DEBUG_ENV_NAME("VKD3D_SHADER_DEBUG");
 
-static void vkd3d_string_buffer_clear(struct vkd3d_string_buffer *buffer)
+void vkd3d_string_buffer_init(struct vkd3d_string_buffer *buffer)
 {
-    buffer->buffer[0] = '\0';
-    buffer->content_size = 0;
-}
-
-bool vkd3d_string_buffer_init(struct vkd3d_string_buffer *buffer)
-{
-    buffer->buffer_size = 32;
-    if (!(buffer->buffer = vkd3d_malloc(buffer->buffer_size)))
-    {
-        ERR("Failed to allocate shader buffer memory.\n");
-        return false;
-    }
-
-    vkd3d_string_buffer_clear(buffer);
-    return true;
+    memset(buffer, 0, sizeof(*buffer));
 }
 
 void vkd3d_string_buffer_cleanup(struct vkd3d_string_buffer *buffer)
@@ -52,6 +38,7 @@ static bool vkd3d_string_buffer_resize(struct vkd3d_string_buffer *buffer, int r
     unsigned int new_buffer_size = buffer->buffer_size * 2;
     char *new_buffer;
 
+    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)))
@@ -71,6 +58,9 @@ int vkd3d_string_buffer_vprintf(struct vkd3d_string_buffer *buffer, const char *
     va_list a;
     int rc;
 
+    if (!buffer->content_size && !vkd3d_string_buffer_resize(buffer, 32))
+        return -1;
+
     for (;;)
     {
         rem = buffer->buffer_size - buffer->content_size;
@@ -118,7 +108,7 @@ static void vkd3d_string_buffer_trace_(const struct vkd3d_string_buffer *buffer,
     }
 }
 
-bool vkd3d_shader_message_context_init(struct vkd3d_shader_message_context *context,
+void vkd3d_shader_message_context_init(struct vkd3d_shader_message_context *context,
         enum vkd3d_shader_log_level log_level, const char *source_name)
 {
     context->log_level = log_level;
@@ -126,7 +116,7 @@ bool vkd3d_shader_message_context_init(struct vkd3d_shader_message_context *cont
     context->line = 0;
     context->column = 0;
 
-    return vkd3d_string_buffer_init(&context->messages);
+    vkd3d_string_buffer_init(&context->messages);
 }
 
 void vkd3d_shader_message_context_cleanup(struct vkd3d_shader_message_context *context)
@@ -845,8 +835,7 @@ int vkd3d_shader_scan(const struct vkd3d_shader_compile_info *compile_info, char
     if ((ret = vkd3d_shader_validate_compile_info(compile_info)) < 0)
         return ret;
 
-    if (!vkd3d_shader_message_context_init(&message_context, compile_info->log_level, compile_info->source_name))
-        return VKD3D_ERROR_OUT_OF_MEMORY;
+    vkd3d_shader_message_context_init(&message_context, compile_info->log_level, compile_info->source_name);
 
     ret = scan_dxbc(compile_info, &message_context);
 
@@ -947,8 +936,7 @@ int vkd3d_shader_compile(const struct vkd3d_shader_compile_info *compile_info,
     if ((ret = vkd3d_shader_validate_compile_info(compile_info)) < 0)
         return ret;
 
-    if (!vkd3d_shader_message_context_init(&message_context, compile_info->log_level, compile_info->source_name))
-        return VKD3D_ERROR;
+    vkd3d_shader_message_context_init(&message_context, compile_info->log_level, compile_info->source_name);
 
     switch (compile_info->source_type)
     {
@@ -1050,8 +1038,7 @@ int vkd3d_shader_parse_input_signature(const struct vkd3d_shader_code *dxbc,
 
     if (messages)
         *messages = NULL;
-    if (!vkd3d_shader_message_context_init(&message_context, VKD3D_SHADER_LOG_INFO, NULL))
-        return VKD3D_ERROR;
+    vkd3d_shader_message_context_init(&message_context, VKD3D_SHADER_LOG_INFO, NULL);
 
     ret = shader_parse_input_signature(dxbc->code, dxbc->size, &message_context, signature);
     vkd3d_shader_message_context_trace_messages(&message_context);
diff --git a/libs/vkd3d-shader/vkd3d_shader_private.h b/libs/vkd3d-shader/vkd3d_shader_private.h
index 98b5fbc..5ae5724 100644
--- a/libs/vkd3d-shader/vkd3d_shader_private.h
+++ b/libs/vkd3d-shader/vkd3d_shader_private.h
@@ -836,7 +836,7 @@ struct vkd3d_string_buffer
 
 enum vkd3d_result vkd3d_dxbc_binary_to_text(void *data, struct vkd3d_shader_code *out) DECLSPEC_HIDDEN;
 void vkd3d_string_buffer_cleanup(struct vkd3d_string_buffer *buffer) DECLSPEC_HIDDEN;
-bool vkd3d_string_buffer_init(struct vkd3d_string_buffer *buffer) DECLSPEC_HIDDEN;
+void vkd3d_string_buffer_init(struct vkd3d_string_buffer *buffer) DECLSPEC_HIDDEN;
 int vkd3d_string_buffer_vprintf(struct vkd3d_string_buffer *buffer, const char *format, va_list args) DECLSPEC_HIDDEN;
 
 struct vkd3d_shader_message_context
@@ -850,7 +850,7 @@ struct vkd3d_shader_message_context
 void vkd3d_shader_message_context_cleanup(struct vkd3d_shader_message_context *context) DECLSPEC_HIDDEN;
 bool vkd3d_shader_message_context_copy_messages(struct vkd3d_shader_message_context *context,
         char **out) DECLSPEC_HIDDEN;
-bool vkd3d_shader_message_context_init(struct vkd3d_shader_message_context *context,
+void vkd3d_shader_message_context_init(struct vkd3d_shader_message_context *context,
         enum vkd3d_shader_log_level log_level, const char *source_name) DECLSPEC_HIDDEN;
 void vkd3d_shader_message_context_trace_messages_(const struct vkd3d_shader_message_context *context,
         const char *function) DECLSPEC_HIDDEN;




More information about the wine-cvs mailing list