xref: /aosp_15_r20/external/virglrenderer/src/vrend_debug.h (revision bbecb9d118dfdb95f99bd754f8fa9be01f189df3)
1*bbecb9d1SAndroid Build Coastguard Worker /**************************************************************************
2*bbecb9d1SAndroid Build Coastguard Worker  *
3*bbecb9d1SAndroid Build Coastguard Worker  * Copyright (C) 2018 Collabora Ltd
4*bbecb9d1SAndroid Build Coastguard Worker  *
5*bbecb9d1SAndroid Build Coastguard Worker  * Permission is hereby granted, free of charge, to any person obtaining a
6*bbecb9d1SAndroid Build Coastguard Worker  * copy of this software and associated documentation files (the "Software"),
7*bbecb9d1SAndroid Build Coastguard Worker  * to deal in the Software without restriction, including without limitation
8*bbecb9d1SAndroid Build Coastguard Worker  * the rights to use, copy, modify, merge, publish, distribute, sublicense,
9*bbecb9d1SAndroid Build Coastguard Worker  * and/or sell copies of the Software, and to permit persons to whom the
10*bbecb9d1SAndroid Build Coastguard Worker  * Software is furnished to do so, subject to the following conditions:
11*bbecb9d1SAndroid Build Coastguard Worker  *
12*bbecb9d1SAndroid Build Coastguard Worker  * The above copyright notice and this permission notice shall be included
13*bbecb9d1SAndroid Build Coastguard Worker  * in all copies or substantial portions of the Software.
14*bbecb9d1SAndroid Build Coastguard Worker  *
15*bbecb9d1SAndroid Build Coastguard Worker  * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS
16*bbecb9d1SAndroid Build Coastguard Worker  * OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
17*bbecb9d1SAndroid Build Coastguard Worker  * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT.  IN NO EVENT SHALL
18*bbecb9d1SAndroid Build Coastguard Worker  * THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR
19*bbecb9d1SAndroid Build Coastguard Worker  * OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE,
20*bbecb9d1SAndroid Build Coastguard Worker  * ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR
21*bbecb9d1SAndroid Build Coastguard Worker  * OTHER DEALINGS IN THE SOFTWARE.
22*bbecb9d1SAndroid Build Coastguard Worker  *
23*bbecb9d1SAndroid Build Coastguard Worker  **************************************************************************/
24*bbecb9d1SAndroid Build Coastguard Worker 
25*bbecb9d1SAndroid Build Coastguard Worker #ifndef vrend_debug_h
26*bbecb9d1SAndroid Build Coastguard Worker #define vrend_debug_h
27*bbecb9d1SAndroid Build Coastguard Worker 
28*bbecb9d1SAndroid Build Coastguard Worker #include "virgl_protocol.h"
29*bbecb9d1SAndroid Build Coastguard Worker #include "virgl_util.h"
30*bbecb9d1SAndroid Build Coastguard Worker #include <stdarg.h>
31*bbecb9d1SAndroid Build Coastguard Worker 
32*bbecb9d1SAndroid Build Coastguard Worker struct vrend_context;
33*bbecb9d1SAndroid Build Coastguard Worker void vrend_print_context_name(const struct vrend_context *ctx);
34*bbecb9d1SAndroid Build Coastguard Worker 
35*bbecb9d1SAndroid Build Coastguard Worker enum virgl_debug_flags {
36*bbecb9d1SAndroid Build Coastguard Worker    dbg_shader_tgsi = 1 << 0,
37*bbecb9d1SAndroid Build Coastguard Worker    dbg_shader_glsl = 1 << 1,
38*bbecb9d1SAndroid Build Coastguard Worker    dbg_shader_streamout = 1 << 2,
39*bbecb9d1SAndroid Build Coastguard Worker    dbg_shader = dbg_shader_tgsi | dbg_shader_glsl | dbg_shader_streamout,
40*bbecb9d1SAndroid Build Coastguard Worker    dbg_cmd = 1 << 3,
41*bbecb9d1SAndroid Build Coastguard Worker    dbg_object = 1 << 4,
42*bbecb9d1SAndroid Build Coastguard Worker    dbg_blit = 1 << 5,
43*bbecb9d1SAndroid Build Coastguard Worker    dbg_copy_resource = 1 << 6,
44*bbecb9d1SAndroid Build Coastguard Worker    dbg_features = 1 << 7,
45*bbecb9d1SAndroid Build Coastguard Worker    dbg_tex = 1 << 8,
46*bbecb9d1SAndroid Build Coastguard Worker    dbg_caller = 1 << 9,
47*bbecb9d1SAndroid Build Coastguard Worker    dbg_tweak =  1 << 10,
48*bbecb9d1SAndroid Build Coastguard Worker    dbg_query =  1 << 11,
49*bbecb9d1SAndroid Build Coastguard Worker    dbg_gles =  1 << 12,
50*bbecb9d1SAndroid Build Coastguard Worker    dbg_bgra = 1 << 13,
51*bbecb9d1SAndroid Build Coastguard Worker    dbg_all = (1 << 14) - 1,
52*bbecb9d1SAndroid Build Coastguard Worker    dbg_allow_guest_override = 1 << 16,
53*bbecb9d1SAndroid Build Coastguard Worker    dbg_feature_use = 1 << 17,
54*bbecb9d1SAndroid Build Coastguard Worker    dbg_khr = 1 << 18,
55*bbecb9d1SAndroid Build Coastguard Worker };
56*bbecb9d1SAndroid Build Coastguard Worker 
57*bbecb9d1SAndroid Build Coastguard Worker const char *vrend_get_comand_name(enum virgl_context_cmd cmd);
58*bbecb9d1SAndroid Build Coastguard Worker 
59*bbecb9d1SAndroid Build Coastguard Worker const char *vrend_get_object_type_name(enum virgl_object_type cmd);
60*bbecb9d1SAndroid Build Coastguard Worker 
61*bbecb9d1SAndroid Build Coastguard Worker 
62*bbecb9d1SAndroid Build Coastguard Worker void vrend_init_debug_flags(void);
63*bbecb9d1SAndroid Build Coastguard Worker 
64*bbecb9d1SAndroid Build Coastguard Worker int  vrend_debug_can_override(void);
65*bbecb9d1SAndroid Build Coastguard Worker 
66*bbecb9d1SAndroid Build Coastguard Worker int vrend_get_debug_flags(const char *flagstring);
67*bbecb9d1SAndroid Build Coastguard Worker 
68*bbecb9d1SAndroid Build Coastguard Worker void vrend_context_set_debug_flags(struct vrend_context *ctx, const char *flags);
69*bbecb9d1SAndroid Build Coastguard Worker 
70*bbecb9d1SAndroid Build Coastguard Worker unsigned vrend_debug(const struct vrend_context *ctx, enum virgl_debug_flags flag);
71*bbecb9d1SAndroid Build Coastguard Worker 
72*bbecb9d1SAndroid Build Coastguard Worker void vrend_debug_add_flag(enum virgl_debug_flags flag);
73*bbecb9d1SAndroid Build Coastguard Worker 
vrend_printf(const char * fmt,...)74*bbecb9d1SAndroid Build Coastguard Worker static inline void vrend_printf(const char *fmt, ...)
75*bbecb9d1SAndroid Build Coastguard Worker {
76*bbecb9d1SAndroid Build Coastguard Worker    va_list va;
77*bbecb9d1SAndroid Build Coastguard Worker    va_start(va, fmt);
78*bbecb9d1SAndroid Build Coastguard Worker    virgl_logv(fmt, va);
79*bbecb9d1SAndroid Build Coastguard Worker    va_end(va);
80*bbecb9d1SAndroid Build Coastguard Worker }
81*bbecb9d1SAndroid Build Coastguard Worker 
82*bbecb9d1SAndroid Build Coastguard Worker #ifdef NDEBUG
83*bbecb9d1SAndroid Build Coastguard Worker #define VREND_DEBUG_ENABLED (false)
84*bbecb9d1SAndroid Build Coastguard Worker #else
85*bbecb9d1SAndroid Build Coastguard Worker #define VREND_DEBUG_ENABLED (true)
86*bbecb9d1SAndroid Build Coastguard Worker #endif
87*bbecb9d1SAndroid Build Coastguard Worker 
88*bbecb9d1SAndroid Build Coastguard Worker #define VREND_DEBUG(flag, ctx,  ...) \
89*bbecb9d1SAndroid Build Coastguard Worker    if (VREND_DEBUG_ENABLED && vrend_debug(ctx, flag)) \
90*bbecb9d1SAndroid Build Coastguard Worker       do { \
91*bbecb9d1SAndroid Build Coastguard Worker             vrend_print_context_name(ctx); \
92*bbecb9d1SAndroid Build Coastguard Worker             vrend_printf(__VA_ARGS__); \
93*bbecb9d1SAndroid Build Coastguard Worker       } while (0)
94*bbecb9d1SAndroid Build Coastguard Worker 
95*bbecb9d1SAndroid Build Coastguard Worker #define VREND_DEBUG_EXT(flag, ctx, X) \
96*bbecb9d1SAndroid Build Coastguard Worker    if (VREND_DEBUG_ENABLED && vrend_debug(ctx, flag)) \
97*bbecb9d1SAndroid Build Coastguard Worker       do { \
98*bbecb9d1SAndroid Build Coastguard Worker             vrend_print_context_name(ctx); \
99*bbecb9d1SAndroid Build Coastguard Worker             X; \
100*bbecb9d1SAndroid Build Coastguard Worker       } while (0)
101*bbecb9d1SAndroid Build Coastguard Worker 
102*bbecb9d1SAndroid Build Coastguard Worker #define VREND_DEBUG_NOCTX(flag, ctx, ...) \
103*bbecb9d1SAndroid Build Coastguard Worker    if (VREND_DEBUG_ENABLED && vrend_debug(ctx, flag)) \
104*bbecb9d1SAndroid Build Coastguard Worker       do { \
105*bbecb9d1SAndroid Build Coastguard Worker             vrend_printf(__VA_ARGS__); \
106*bbecb9d1SAndroid Build Coastguard Worker       } while (0)
107*bbecb9d1SAndroid Build Coastguard Worker 
108*bbecb9d1SAndroid Build Coastguard Worker #endif
109