diff --git a/libs/vkd3d-shader/vkd3d_shader_main.c b/libs/vkd3d-shader/vkd3d_shader_main.c index 44459a635..a8a84ad3f 100644 --- a/libs/vkd3d-shader/vkd3d_shader_main.c +++ b/libs/vkd3d-shader/vkd3d_shader_main.c @@ -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);