[PATCH vkd3d v2 3/3] vkd3d-shader: Don't allocate an initial buffer in vkd3d_string_buffer_init().
Zebediah Figura
zfigura at codeweavers.com
Fri Oct 9 01:14:03 CDT 2020
Signed-off-by: Zebediah Figura <zfigura at codeweavers.com>
---
v2: Improve patch subject.
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 3ddca1e9..9977d1a3 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 a510f3a2..9b49ca1d 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 8d33859c..7c3885e9 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 98b5fbc4..5ae5724a 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;
--
2.28.0
More information about the wine-devel
mailing list