vkd3d-shader: Dump compilation messages as well.

This commit is contained in:
Henri Verbeet
2025-12-09 20:33:50 +01:00
parent 3e4e34adca
commit 459fd672a8
Notes: Henri Verbeet 2025-12-11 19:10:36 +01:00
Approved-by: Henri Verbeet (@hverbeet)
Merge-Request: https://gitlab.winehq.org/wine/vkd3d/-/merge_requests/1863

View File

@@ -563,8 +563,9 @@ struct shader_dump_data
enum shader_dump_type
{
SHADER_DUMP_TYPE_SOURCE,
SHADER_DUMP_TYPE_LOG,
SHADER_DUMP_TYPE_PREPROC,
SHADER_DUMP_TYPE_SOURCE,
SHADER_DUMP_TYPE_TARGET,
};
@@ -594,10 +595,12 @@ static void vkd3d_shader_dump_shader(const struct shader_dump_data *dump_data,
if (dump_data->profile)
pos += snprintf(filename + pos, ARRAY_SIZE(filename) - pos, "-%s", dump_data->profile);
if (type == SHADER_DUMP_TYPE_SOURCE)
pos += snprintf(filename + pos, ARRAY_SIZE(filename) - pos, "-source.%s", dump_data->source_suffix);
if (type == SHADER_DUMP_TYPE_LOG)
pos += snprintf(filename + pos, ARRAY_SIZE(filename) - pos, ".log");
else if (type == SHADER_DUMP_TYPE_PREPROC)
pos += snprintf(filename + pos, ARRAY_SIZE(filename) - pos, "-preproc.%s", dump_data->source_suffix);
else if (type == SHADER_DUMP_TYPE_SOURCE)
pos += snprintf(filename + pos, ARRAY_SIZE(filename) - pos, "-source.%s", dump_data->source_suffix);
else
pos += snprintf(filename + pos, ARRAY_SIZE(filename) - pos, "-target.%s", dump_data->target_suffix);
@@ -615,6 +618,17 @@ static void vkd3d_shader_dump_shader(const struct shader_dump_data *dump_data,
}
}
static void vkd3d_shader_dump_messages(const struct shader_dump_data *dump_data,
const struct vkd3d_shader_message_context *message_context)
{
const struct vkd3d_string_buffer *messages = &message_context->messages;
if (!messages->content_size)
return;
vkd3d_shader_dump_shader(dump_data, messages->buffer, messages->content_size, SHADER_DUMP_TYPE_LOG);
}
static const char *shader_get_source_type_suffix(enum vkd3d_shader_source_type type)
{
switch (type)
@@ -1770,6 +1784,7 @@ int vkd3d_shader_scan(const struct vkd3d_shader_compile_info *compile_info, char
vsir_program_cleanup(&program);
}
vkd3d_shader_dump_messages(&dump_data, &message_context);
vkd3d_shader_message_context_trace_messages(&message_context);
vkd3d_shader_string_from_message_context(messages, &message_context);
vkd3d_shader_message_context_cleanup(&message_context);
@@ -1917,6 +1932,7 @@ int vkd3d_shader_compile(const struct vkd3d_shader_compile_info *compile_info,
if (ret >= 0)
vkd3d_shader_dump_shader(&dump_data, out->code, out->size, SHADER_DUMP_TYPE_TARGET);
vkd3d_shader_dump_messages(&dump_data, &message_context);
vkd3d_shader_message_context_trace_messages(&message_context);
vkd3d_shader_string_from_message_context(messages, &message_context);
vkd3d_shader_message_context_cleanup(&message_context);
@@ -2240,6 +2256,7 @@ int vkd3d_shader_preprocess(const struct vkd3d_shader_compile_info *compile_info
if ((ret = preproc_lexer_parse(compile_info, out, &message_context)) >= 0)
vkd3d_shader_dump_shader(&dump_data, out->code, out->size, SHADER_DUMP_TYPE_PREPROC);
vkd3d_shader_dump_messages(&dump_data, &message_context);
vkd3d_shader_message_context_trace_messages(&message_context);
vkd3d_shader_string_from_message_context(messages, &message_context);
vkd3d_shader_message_context_cleanup(&message_context);