vkd3d-shader: Allow writing log output via a custom callback.

When using PE vkd3d through Wine, debug output may be swallowed by writing to
Win32 stderr. Avoid this by providing a way to hook up vkd3d log output to Wine
output.

Signed-off-by: Zebediah Figura <zfigura@codeweavers.com>
Signed-off-by: Giovanni Mascellani <gmascellani@codeweavers.com>
Signed-off-by: Henri Verbeet <hverbeet@codeweavers.com>
Signed-off-by: Alexandre Julliard <julliard@winehq.org>
This commit is contained in:
Zebediah Figura
2022-06-01 19:01:00 -05:00
committed by Alexandre Julliard
parent 6ff6cb4ed2
commit 174172887b
6 changed files with 52 additions and 2 deletions

View File

@@ -68,6 +68,25 @@ enum vkd3d_dbg_level vkd3d_dbg_get_level(void)
return level;
}
static PFN_vkd3d_log log_callback;
static void vkd3d_dbg_voutput(const char *fmt, va_list args)
{
if (log_callback)
log_callback(fmt, args);
else
vfprintf(stderr, fmt, args);
}
static void vkd3d_dbg_output(const char *fmt, ...)
{
va_list args;
va_start(args, fmt);
vkd3d_dbg_voutput(fmt, args);
va_end(args);
}
void vkd3d_dbg_printf(enum vkd3d_dbg_level level, const char *function, const char *fmt, ...)
{
va_list args;
@@ -77,12 +96,17 @@ void vkd3d_dbg_printf(enum vkd3d_dbg_level level, const char *function, const ch
assert(level < ARRAY_SIZE(debug_level_names));
fprintf(stderr, "%s:%s: ", debug_level_names[level], function);
vkd3d_dbg_output("%s:%s ", debug_level_names[level], function);
va_start(args, fmt);
vfprintf(stderr, fmt, args);
vkd3d_dbg_voutput(fmt, args);
va_end(args);
}
void vkd3d_dbg_set_log_callback(PFN_vkd3d_log callback)
{
log_callback = callback;
}
static char *get_buffer(void)
{
static char buffers[VKD3D_DEBUG_BUFFER_COUNT][VKD3D_DEBUG_BUFFER_SIZE];