ReactOS 0.4.17-dev-934-g091855f
vkd3d_debug.h
Go to the documentation of this file.
1/*
2 * Copyright 2016 Józef Kucia for CodeWeavers
3 *
4 * This library is free software; you can redistribute it and/or
5 * modify it under the terms of the GNU Lesser General Public
6 * License as published by the Free Software Foundation; either
7 * version 2.1 of the License, or (at your option) any later version.
8 *
9 * This library is distributed in the hope that it will be useful,
10 * but WITHOUT ANY WARRANTY; without even the implied warranty of
11 * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
12 * Lesser General Public License for more details.
13 *
14 * You should have received a copy of the GNU Lesser General Public
15 * License along with this library; if not, write to the Free Software
16 * Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301, USA
17 */
18
19#ifndef __VKD3D_DEBUG_H
20#define __VKD3D_DEBUG_H
21
22#include "vkd3d_common.h"
23
24#include <stdarg.h>
25#include <stdbool.h>
26#include <stdint.h>
27
28#ifdef VKD3D_NO_TRACE_MESSAGES
29#define TRACE(args...) do { } while (0)
30#define TRACE_ON() (false)
31#endif
32
33#ifdef VKD3D_NO_DEBUG_MESSAGES
34#define WARN(args...) do { } while (0)
35#define FIXME(args...) do { } while (0)
36#endif
37
39{
45};
46
48
49void vkd3d_dbg_printf(enum vkd3d_dbg_level level, const char *function, const char *fmt, ...) VKD3D_PRINTF_FUNC(3, 4);
51
54const char *debugstr_a(const char *str);
55const char *debugstr_an(const char *str, size_t n);
56const char *debugstr_w(const WCHAR *wstr, size_t wchar_size);
57
58#define VKD3D_DBG_LOG(level) \
59 do { \
60 const enum vkd3d_dbg_level vkd3d_dbg_level = VKD3D_DBG_LEVEL_##level; \
61 VKD3D_DBG_PRINTF
62
63#define VKD3D_DBG_LOG_ONCE(first_time_level, level) \
64 do { \
65 static bool vkd3d_dbg_next_time; \
66 const enum vkd3d_dbg_level vkd3d_dbg_level = vkd3d_dbg_next_time \
67 ? VKD3D_DBG_LEVEL_##level : VKD3D_DBG_LEVEL_##first_time_level; \
68 vkd3d_dbg_next_time = true; \
69 VKD3D_DBG_PRINTF
70
71#define VKD3D_DBG_PRINTF(...) \
72 vkd3d_dbg_printf(vkd3d_dbg_level, __FUNCTION__, __VA_ARGS__); } while (0)
73
74#ifndef TRACE
75#define TRACE VKD3D_DBG_LOG(TRACE)
76#endif
77
78#ifndef WARN
79#define WARN VKD3D_DBG_LOG(WARN)
80#endif
81
82#ifndef FIXME
83#define FIXME VKD3D_DBG_LOG(FIXME)
84#endif
85
86#define ERR VKD3D_DBG_LOG(ERR)
87
88#ifndef TRACE_ON
89#define TRACE_ON() (vkd3d_dbg_get_level() == VKD3D_DBG_LEVEL_TRACE)
90#endif
91
92#ifndef WARN_ON
93#define WARN_ON() (vkd3d_dbg_get_level() >= VKD3D_DBG_LEVEL_WARN)
94#endif
95
96#define FIXME_ONCE VKD3D_DBG_LOG_ONCE(FIXME, WARN)
97
98#define VKD3D_DEBUG_ENV_NAME(name) const char *const vkd3d_dbg_env_name = name
99
100static inline const char *debugstr_guid(const GUID *guid)
101{
102 if (!guid)
103 return "(null)";
104
105 return vkd3d_dbg_sprintf("{%08lx-%04x-%04x-%02x%02x-%02x%02x%02x%02x%02x%02x}",
106 (unsigned long)guid->Data1, guid->Data2, guid->Data3, guid->Data4[0],
107 guid->Data4[1], guid->Data4[2], guid->Data4[3], guid->Data4[4],
108 guid->Data4[5], guid->Data4[6], guid->Data4[7]);
109}
110
111static inline const char *debugstr_hresult(HRESULT hr)
112{
113 switch (hr)
114 {
115#define TO_STR(u) case u: return #u;
116 TO_STR(S_OK)
128#undef TO_STR
129 default:
130 return vkd3d_dbg_sprintf("%#x", (int)hr);
131 }
132}
133
134unsigned int vkd3d_env_var_as_uint(const char *name, unsigned int default_value);
135
137{
138 const char *name;
140};
141
142bool vkd3d_debug_list_has_member(const char *string, const char *member);
143uint64_t vkd3d_parse_debug_options(const char *string,
144 const struct vkd3d_debug_option *options, unsigned int option_count);
145void vkd3d_set_thread_name(const char *name);
146
147#endif /* __VKD3D_DEBUG_H */
#define E_OUTOFMEMORY
Definition: ddrawi.h:100
#define E_INVALIDARG
Definition: ddrawi.h:101
#define E_NOTIMPL
Definition: ddrawi.h:99
#define E_FAIL
Definition: ddrawi.h:102
HRESULT hr
Definition: delayimp.cpp:582
UINT64 uint64_t
Definition: types.h:77
GUID guid
Definition: version.c:147
char * va_list
Definition: vadefs.h:50
GLint level
Definition: gl.h:1546
GLdouble n
Definition: glext.h:7729
#define S_OK
Definition: intsafe.h:52
#define debugstr_guid
Definition: kernel32.h:35
#define debugstr_a
Definition: kernel32.h:31
#define debugstr_w
Definition: kernel32.h:32
static IPrintDialogCallback callback
Definition: printdlg.c:325
short WCHAR
Definition: pedump.c:58
const WCHAR * str
Definition: match.c:390
Definition: dsound.c:943
Definition: name.c:39
const char * name
Definition: vkd3d_common.h:271
vkd3d_dbg_level
Definition: vkd3d_common.h:143
#define VKD3D_PRINTF_FUNC(fmt, args)
Definition: vkd3d_common.h:114
static const char * debugstr_hresult(HRESULT hr)
Definition: vkd3d_debug.h:111
void vkd3d_dbg_printf(enum vkd3d_dbg_level level, const char *function, const char *fmt,...) VKD3D_PRINTF_FUNC(3
const char * vkd3d_dbg_sprintf(const char *fmt,...) VKD3D_PRINTF_FUNC(1
@ VKD3D_DBG_LEVEL_WARN
Definition: vkd3d_debug.h:43
@ VKD3D_DBG_LEVEL_NONE
Definition: vkd3d_debug.h:40
@ VKD3D_DBG_LEVEL_TRACE
Definition: vkd3d_debug.h:44
@ VKD3D_DBG_LEVEL_ERR
Definition: vkd3d_debug.h:41
@ VKD3D_DBG_LEVEL_FIXME
Definition: vkd3d_debug.h:42
void void vkd3d_dbg_set_log_callback(PFN_vkd3d_log callback)
Definition: debug.c:119
enum vkd3d_dbg_level vkd3d_dbg_get_level(void)
Definition: debug.c:55
void vkd3d_set_thread_name(const char *name)
Definition: debug.c:405
uint64_t vkd3d_parse_debug_options(const char *string, const struct vkd3d_debug_option *options, unsigned int option_count)
Definition: debug.c:370
const char * debugstr_an(const char *str, size_t n)
Definition: debug.c:173
bool vkd3d_debug_list_has_member(const char *string, const char *member)
Definition: debug.c:348
const char const char * vkd3d_dbg_vsprintf(const char *fmt, va_list args)
Definition: debug.c:134
#define TO_STR(u)
unsigned int vkd3d_env_var_as_uint(const char *name, unsigned int default_value)
Definition: debug.c:326
void(* PFN_vkd3d_log)(const char *format, va_list args)
Definition: vkd3d_types.h:66
#define S_FALSE
Definition: winerror.h:3451
#define DXGI_ERROR_NOT_FOUND
Definition: winerror.h:7122
#define DXGI_ERROR_UNSUPPORTED
Definition: winerror.h:7125
#define E_NOINTERFACE
Definition: winerror.h:3479
#define DXGI_ERROR_MORE_DATA
Definition: winerror.h:7123
#define E_POINTER
Definition: winerror.h:3480
#define E_ABORT
Definition: winerror.h:3481
#define const
Definition: zconf.h:233