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 enum shader_dump_type
{ {
SHADER_DUMP_TYPE_SOURCE, SHADER_DUMP_TYPE_LOG,
SHADER_DUMP_TYPE_PREPROC, SHADER_DUMP_TYPE_PREPROC,
SHADER_DUMP_TYPE_SOURCE,
SHADER_DUMP_TYPE_TARGET, 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) if (dump_data->profile)
pos += snprintf(filename + pos, ARRAY_SIZE(filename) - pos, "-%s", dump_data->profile); pos += snprintf(filename + pos, ARRAY_SIZE(filename) - pos, "-%s", dump_data->profile);
if (type == SHADER_DUMP_TYPE_SOURCE) if (type == SHADER_DUMP_TYPE_LOG)
pos += snprintf(filename + pos, ARRAY_SIZE(filename) - pos, "-source.%s", dump_data->source_suffix); pos += snprintf(filename + pos, ARRAY_SIZE(filename) - pos, ".log");
else if (type == SHADER_DUMP_TYPE_PREPROC) else if (type == SHADER_DUMP_TYPE_PREPROC)
pos += snprintf(filename + pos, ARRAY_SIZE(filename) - pos, "-preproc.%s", dump_data->source_suffix); 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 else
pos += snprintf(filename + pos, ARRAY_SIZE(filename) - pos, "-target.%s", dump_data->target_suffix); 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) static const char *shader_get_source_type_suffix(enum vkd3d_shader_source_type type)
{ {
switch (type) switch (type)
@@ -1770,6 +1784,7 @@ int vkd3d_shader_scan(const struct vkd3d_shader_compile_info *compile_info, char
vsir_program_cleanup(&program); vsir_program_cleanup(&program);
} }
vkd3d_shader_dump_messages(&dump_data, &message_context);
vkd3d_shader_message_context_trace_messages(&message_context); vkd3d_shader_message_context_trace_messages(&message_context);
vkd3d_shader_string_from_message_context(messages, &message_context); vkd3d_shader_string_from_message_context(messages, &message_context);
vkd3d_shader_message_context_cleanup(&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) if (ret >= 0)
vkd3d_shader_dump_shader(&dump_data, out->code, out->size, SHADER_DUMP_TYPE_TARGET); 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_message_context_trace_messages(&message_context);
vkd3d_shader_string_from_message_context(messages, &message_context); vkd3d_shader_string_from_message_context(messages, &message_context);
vkd3d_shader_message_context_cleanup(&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) 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_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_message_context_trace_messages(&message_context);
vkd3d_shader_string_from_message_context(messages, &message_context); vkd3d_shader_string_from_message_context(messages, &message_context);
vkd3d_shader_message_context_cleanup(&message_context); vkd3d_shader_message_context_cleanup(&message_context);