xref: /aosp_15_r20/external/mesa3d/src/gallium/frontends/d3d10umd/Debug.cpp (revision 6104692788411f58d303aa86923a9ff6ecaded22)
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