1*61046927SAndroid Build Coastguard Worker #include "Debug.h"
2*61046927SAndroid Build Coastguard Worker
3*61046927SAndroid Build Coastguard Worker #include <stdarg.h>
4*61046927SAndroid Build Coastguard Worker #include <stdio.h>
5*61046927SAndroid Build Coastguard Worker
6*61046927SAndroid Build Coastguard Worker
7*61046927SAndroid Build Coastguard Worker #if MESA_DEBUG
8*61046927SAndroid Build Coastguard Worker
9*61046927SAndroid Build Coastguard Worker unsigned st_debug = 0;
10*61046927SAndroid Build Coastguard Worker
11*61046927SAndroid Build Coastguard Worker static const
12*61046927SAndroid Build Coastguard Worker struct debug_named_value st_debug_flags[] = {
13*61046927SAndroid Build Coastguard Worker {"oldtexops", ST_DEBUG_OLD_TEX_OPS, "oldtexops"},
14*61046927SAndroid Build Coastguard Worker {"tgsi", ST_DEBUG_TGSI, "tgsi"},
15*61046927SAndroid Build Coastguard Worker DEBUG_NAMED_VALUE_END
16*61046927SAndroid Build Coastguard Worker };
17*61046927SAndroid Build Coastguard Worker void
st_debug_parse(void)18*61046927SAndroid Build Coastguard Worker st_debug_parse(void)
19*61046927SAndroid Build Coastguard Worker {
20*61046927SAndroid Build Coastguard Worker st_debug = debug_get_flags_option("ST_DEBUG", st_debug_flags, st_debug);
21*61046927SAndroid Build Coastguard Worker }
22*61046927SAndroid Build Coastguard Worker
23*61046927SAndroid Build Coastguard Worker #endif
24*61046927SAndroid Build Coastguard Worker
25*61046927SAndroid Build Coastguard Worker
26*61046927SAndroid Build Coastguard Worker void
DebugPrintf(const char * format,...)27*61046927SAndroid Build Coastguard Worker DebugPrintf(const char *format, ...)
28*61046927SAndroid Build Coastguard Worker {
29*61046927SAndroid Build Coastguard Worker char buf[4096];
30*61046927SAndroid Build Coastguard Worker
31*61046927SAndroid Build Coastguard Worker va_list ap;
32*61046927SAndroid Build Coastguard Worker va_start(ap, format);
33*61046927SAndroid Build Coastguard Worker vsnprintf(buf, sizeof buf, format, ap);
34*61046927SAndroid Build Coastguard Worker va_end(ap);
35*61046927SAndroid Build Coastguard Worker
36*61046927SAndroid Build Coastguard Worker OutputDebugStringA(buf);
37*61046927SAndroid Build Coastguard Worker }
38*61046927SAndroid Build Coastguard Worker
39*61046927SAndroid Build Coastguard Worker
40*61046927SAndroid Build Coastguard Worker /**
41*61046927SAndroid Build Coastguard Worker * Produce a human readable message from HRESULT.
42*61046927SAndroid Build Coastguard Worker *
43*61046927SAndroid Build Coastguard Worker * @sa http://msdn.microsoft.com/en-us/library/ms679351(VS.85).aspx
44*61046927SAndroid Build Coastguard Worker */
45*61046927SAndroid Build Coastguard Worker void
CheckHResult(HRESULT hr,const char * function,unsigned line)46*61046927SAndroid Build Coastguard Worker CheckHResult(HRESULT hr, const char *function, unsigned line)
47*61046927SAndroid Build Coastguard Worker {
48*61046927SAndroid Build Coastguard Worker if (FAILED(hr)) {
49*61046927SAndroid Build Coastguard Worker LPSTR lpMessageBuffer = NULL;
50*61046927SAndroid Build Coastguard Worker
51*61046927SAndroid Build Coastguard Worker FormatMessageA(FORMAT_MESSAGE_ALLOCATE_BUFFER |
52*61046927SAndroid Build Coastguard Worker FORMAT_MESSAGE_FROM_SYSTEM,
53*61046927SAndroid Build Coastguard Worker NULL,
54*61046927SAndroid Build Coastguard Worker hr,
55*61046927SAndroid Build Coastguard Worker MAKELANGID(LANG_NEUTRAL, SUBLANG_DEFAULT),
56*61046927SAndroid Build Coastguard Worker (LPSTR)&lpMessageBuffer,
57*61046927SAndroid Build Coastguard Worker 0,
58*61046927SAndroid Build Coastguard Worker NULL);
59*61046927SAndroid Build Coastguard Worker
60*61046927SAndroid Build Coastguard Worker DebugPrintf("%s: %u: 0x%08lX: %s", function, line, hr, lpMessageBuffer);
61*61046927SAndroid Build Coastguard Worker
62*61046927SAndroid Build Coastguard Worker LocalFree(lpMessageBuffer);
63*61046927SAndroid Build Coastguard Worker }
64*61046927SAndroid Build Coastguard Worker }
65*61046927SAndroid Build Coastguard Worker
66*61046927SAndroid Build Coastguard Worker
67*61046927SAndroid Build Coastguard Worker void
AssertFail(const char * expr,const char * file,unsigned line,const char * function)68*61046927SAndroid Build Coastguard Worker AssertFail(const char *expr,
69*61046927SAndroid Build Coastguard Worker const char *file,
70*61046927SAndroid Build Coastguard Worker unsigned line,
71*61046927SAndroid Build Coastguard Worker const char *function)
72*61046927SAndroid Build Coastguard Worker {
73*61046927SAndroid Build Coastguard Worker DebugPrintf("%s:%u:%s: Assertion `%s' failed.\n", file, line, function, expr);
74*61046927SAndroid Build Coastguard Worker #if defined(__GNUC__)
75*61046927SAndroid Build Coastguard Worker __asm("int3");
76*61046927SAndroid Build Coastguard Worker #elif defined(_MSC_VER)
77*61046927SAndroid Build Coastguard Worker __debugbreak();
78*61046927SAndroid Build Coastguard Worker #else
79*61046927SAndroid Build Coastguard Worker DebugBreak();
80*61046927SAndroid Build Coastguard Worker #endif
81*61046927SAndroid Build Coastguard Worker }
82