Module: vkd3d Branch: master Commit: 5fb9bcdd148ed728d90a420f209cdfcc03af24ac URL: https://source.winehq.org/git/vkd3d.git/?a=commit;h=5fb9bcdd148ed728d90a420f...
Author: Zebediah Figura zfigura@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@codeweavers.com Signed-off-by: Henri Verbeet hverbeet@codeweavers.com Signed-off-by: Alexandre Julliard julliard@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;