mirror of
https://gitlab.winehq.org/wine/vkd3d.git
synced 2025-09-12 18:50:22 -07:00
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:
committed by
Alexandre Julliard
parent
6ff6cb4ed2
commit
174172887b
@@ -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];
|
||||
|
Reference in New Issue
Block a user