• Home
  • Line#
  • Scopes#
  • Navigate#
  • Raw
  • Download
1 /*
2  * Mesa 3-D graphics library
3  *
4  * Copyright (C) 2012-2013 LunarG, Inc.
5  *
6  * Permission is hereby granted, free of charge, to any person obtaining a
7  * copy of this software and associated documentation files (the "Software"),
8  * to deal in the Software without restriction, including without limitation
9  * the rights to use, copy, modify, merge, publish, distribute, sublicense,
10  * and/or sell copies of the Software, and to permit persons to whom the
11  * Software is furnished to do so, subject to the following conditions:
12  *
13  * The above copyright notice and this permission notice shall be included
14  * in all copies or substantial portions of the Software.
15  *
16  * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
17  * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
18  * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT.  IN NO EVENT SHALL
19  * THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
20  * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING
21  * FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER
22  * DEALINGS IN THE SOFTWARE.
23  *
24  * Authors:
25  *    Chia-I Wu <olv@lunarg.com>
26  */
27 
28 #ifndef ILO_DEBUG_H
29 #define ILO_DEBUG_H
30 
31 #include "util/u_debug.h"
32 
33 #include "ilo_core.h"
34 
35 /* enable debug flags affecting hot pathes only with debug builds */
36 #ifdef DEBUG
37 #define ILO_DEBUG_HOT 1
38 #else
39 #define ILO_DEBUG_HOT 0
40 #endif
41 
42 enum ilo_debug {
43    ILO_DEBUG_BATCH     = 1 << 0,
44    ILO_DEBUG_VS        = 1 << 1,
45    ILO_DEBUG_GS        = 1 << 2,
46    ILO_DEBUG_FS        = 1 << 3,
47    ILO_DEBUG_CS        = 1 << 4,
48    ILO_DEBUG_DRAW      = ILO_DEBUG_HOT << 5,
49    ILO_DEBUG_SUBMIT    = 1 << 6,
50    ILO_DEBUG_HANG      = 1 << 7,
51 
52    /* flags that affect the behaviors of the driver */
53    ILO_DEBUG_NOHW      = 1 << 20,
54    ILO_DEBUG_NOCACHE   = 1 << 21,
55    ILO_DEBUG_NOHIZ     = 1 << 22,
56 };
57 
58 extern int ilo_debug;
59 
60 void
61 ilo_debug_init(const char *name);
62 
63 /**
64  * Print a message, for dumping or debugging.
65  */
66 static inline void _util_printf_format(1, 2)
ilo_printf(const char * format,...)67 ilo_printf(const char *format, ...)
68 {
69    va_list ap;
70 
71    va_start(ap, format);
72    _debug_vprintf(format, ap);
73    va_end(ap);
74 }
75 
76 /**
77  * Print a critical error.
78  */
79 static inline void _util_printf_format(1, 2)
ilo_err(const char * format,...)80 ilo_err(const char *format, ...)
81 {
82    va_list ap;
83 
84    va_start(ap, format);
85    _debug_vprintf(format, ap);
86    va_end(ap);
87 }
88 
89 /**
90  * Print a warning, silenced for release builds.
91  */
92 static inline void _util_printf_format(1, 2)
ilo_warn(const char * format,...)93 ilo_warn(const char *format, ...)
94 {
95 #ifdef DEBUG
96    va_list ap;
97 
98    va_start(ap, format);
99    _debug_vprintf(format, ap);
100    va_end(ap);
101 #else
102 #endif
103 }
104 
105 static inline bool
ilo_is_zeroed(const void * ptr,size_t size)106 ilo_is_zeroed(const void *ptr, size_t size)
107 {
108 #ifdef DEBUG
109    size_t i;
110 
111    for (i = 0; i < size; i++) {
112       if (*((const char *) ptr) != 0)
113          return false;
114    }
115 
116    return true;
117 #else
118    return true;
119 #endif
120 }
121 
122 #endif /* ILO_DEBUG_H */
123