Book a Demo!
CoCalc Logo Icon
StoreFeaturesDocsShareSupportNewsAboutPoliciesSign UpSign In
wine-mirror
GitHub Repository: wine-mirror/wine
Path: blob/master/libs/vkd3d/include/private/vkd3d_debug.h
4393 views
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
38
enum vkd3d_dbg_level
39
{
40
VKD3D_DBG_LEVEL_NONE,
41
VKD3D_DBG_LEVEL_ERR,
42
VKD3D_DBG_LEVEL_FIXME,
43
VKD3D_DBG_LEVEL_WARN,
44
VKD3D_DBG_LEVEL_TRACE,
45
};
46
47
enum vkd3d_dbg_level vkd3d_dbg_get_level(void);
48
49
void vkd3d_dbg_printf(enum vkd3d_dbg_level level, const char *function, const char *fmt, ...) VKD3D_PRINTF_FUNC(3, 4);
50
void vkd3d_dbg_set_log_callback(PFN_vkd3d_log callback);
51
52
const char *vkd3d_dbg_sprintf(const char *fmt, ...) VKD3D_PRINTF_FUNC(1, 2);
53
const char *vkd3d_dbg_vsprintf(const char *fmt, va_list args);
54
const char *debugstr_a(const char *str);
55
const char *debugstr_an(const char *str, size_t n);
56
const 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
100
static 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
111
static 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)
117
TO_STR(S_FALSE)
118
TO_STR(E_NOTIMPL)
119
TO_STR(E_NOINTERFACE)
120
TO_STR(E_POINTER)
121
TO_STR(E_ABORT)
122
TO_STR(E_FAIL)
123
TO_STR(E_OUTOFMEMORY)
124
TO_STR(E_INVALIDARG)
125
TO_STR(DXGI_ERROR_NOT_FOUND)
126
TO_STR(DXGI_ERROR_MORE_DATA)
127
TO_STR(DXGI_ERROR_UNSUPPORTED)
128
#undef TO_STR
129
default:
130
return vkd3d_dbg_sprintf("%#x", (int)hr);
131
}
132
}
133
134
unsigned int vkd3d_env_var_as_uint(const char *name, unsigned int default_value);
135
136
struct vkd3d_debug_option
137
{
138
const char *name;
139
uint64_t flag;
140
};
141
142
bool vkd3d_debug_list_has_member(const char *string, const char *member);
143
uint64_t vkd3d_parse_debug_options(const char *string,
144
const struct vkd3d_debug_option *options, unsigned int option_count);
145
void vkd3d_set_thread_name(const char *name);
146
147
#endif /* __VKD3D_DEBUG_H */
148
149