Reviewed-by: Bruce Cherniak <bruce.chern...@intel.com> > On Nov 22, 2016, at 8:03 PM, Rowley, Timothy O <timothy.o.row...@intel.com> > wrote: > > --- > .../drivers/swr/rasterizer/common/swr_assert.cpp | 96 ++++++++++++++++++---- > .../drivers/swr/rasterizer/common/swr_assert.h | 14 ++++ > 2 files changed, 95 insertions(+), 15 deletions(-) > > diff --git a/src/gallium/drivers/swr/rasterizer/common/swr_assert.cpp > b/src/gallium/drivers/swr/rasterizer/common/swr_assert.cpp > index 7250101..98a5a52 100644 > --- a/src/gallium/drivers/swr/rasterizer/common/swr_assert.cpp > +++ b/src/gallium/drivers/swr/rasterizer/common/swr_assert.cpp > @@ -25,6 +25,8 @@ > #include <stdarg.h> > #include <stdio.h> > #include <assert.h> > +#include <algorithm> > +#include <mutex> > > #if SWR_ENABLE_ASSERTS || SWR_ENABLE_REL_ASSERTS > > @@ -111,30 +113,24 @@ void ResetTextColor(FILE* stream) > #endif > } > > -bool SwrAssert( > - bool chkDebugger, > - bool& enabled, > - const char* pExpression, > +static std::mutex g_stderrMutex; > + > +void SwrTrace( > const char* pFileName, > uint32_t lineNum, > - const char* pFunction, > - const char* pFmtString /* = nullptr */, > + const char* function, > + const char* pFmtString, > ...) > { > - SetTextColor(stderr, TEXT_CYAN, TEXT_NORMAL); > + std::lock_guard<std::mutex> l(g_stderrMutex); > > - fprintf(stderr, "%s(%d): ", pFileName, lineNum); > - > - SetTextColor(stderr, TEXT_RED, TEXT_INTENSITY); > - > - fprintf(stderr, "ASSERT: %s\n", pExpression); > + SetTextColor(stderr, TEXT_CYAN, TEXT_NORMAL); > > - SetTextColor(stderr, TEXT_CYAN, TEXT_INTENSITY); > - fprintf(stderr, "\t%s\n", pFunction); > + fprintf(stderr, "%s(%d): TRACE in %s:\n", pFileName, lineNum, function); > > if (pFmtString) > { > - SetTextColor(stderr, TEXT_YELLOW, TEXT_INTENSITY); > + SetTextColor(stderr, TEXT_PURPLE, TEXT_INTENSITY); > fprintf(stderr, "\t"); > va_list args; > va_start(args, pFmtString); > @@ -149,6 +145,76 @@ bool SwrAssert( > static const int MAX_MESSAGE_LEN = 2048; > char msgBuf[MAX_MESSAGE_LEN]; > > + sprintf_s(msgBuf, "%s(%d): TRACE in %s\n", pFileName, lineNum, function); > + msgBuf[MAX_MESSAGE_LEN - 2] = '\n'; > + msgBuf[MAX_MESSAGE_LEN - 1] = 0; > + OutputDebugStringA(msgBuf); > + > + int offset = 0; > + > + if (pFmtString) > + { > + va_list args; > + va_start(args, pFmtString); > + offset = _vsnprintf_s( > + msgBuf, > + sizeof(msgBuf), > + sizeof(msgBuf), > + pFmtString, > + args); > + va_end(args); > + > + if (offset < 0) { return; } > + > + OutputDebugStringA("\t"); > + OutputDebugStringA(msgBuf); > + OutputDebugStringA("\n"); > + } > +#endif // _WIN32 > +} > + > +bool SwrAssert( > + bool chkDebugger, > + bool& enabled, > + const char* pExpression, > + const char* pFileName, > + uint32_t lineNum, > + const char* pFunction, > + const char* pFmtString /* = nullptr */, > + ...) > +{ > + { > + std::lock_guard<std::mutex> l(g_stderrMutex); > + > + SetTextColor(stderr, TEXT_CYAN, TEXT_NORMAL); > + > + fprintf(stderr, "%s(%d): ", pFileName, lineNum); > + > + SetTextColor(stderr, TEXT_RED, TEXT_INTENSITY); > + > + fprintf(stderr, "ASSERT: %s\n", pExpression); > + > + SetTextColor(stderr, TEXT_CYAN, TEXT_INTENSITY); > + fprintf(stderr, "\t%s\n", pFunction); > + > + if (pFmtString) > + { > + SetTextColor(stderr, TEXT_YELLOW, TEXT_INTENSITY); > + fprintf(stderr, "\t"); > + va_list args; > + va_start(args, pFmtString); > + vfprintf(stderr, pFmtString, args); > + va_end(args); > + fprintf(stderr, "\n"); > + } > + ResetTextColor(stderr); > + fflush(stderr); > + } > + > +#if defined(_WIN32) > + static const int MAX_MESSAGE_LEN = 2048; > + char msgBuf[MAX_MESSAGE_LEN]; > + > sprintf_s(msgBuf, "%s(%d): ASSERT: %s\n", pFileName, lineNum, > pExpression); > msgBuf[MAX_MESSAGE_LEN - 2] = '\n'; > msgBuf[MAX_MESSAGE_LEN - 1] = 0; > diff --git a/src/gallium/drivers/swr/rasterizer/common/swr_assert.h > b/src/gallium/drivers/swr/rasterizer/common/swr_assert.h > index 04d7681..bd68336 100644 > --- a/src/gallium/drivers/swr/rasterizer/common/swr_assert.h > +++ b/src/gallium/drivers/swr/rasterizer/common/swr_assert.h > @@ -104,6 +104,13 @@ bool SwrAssert( > const char* pFmtString = nullptr, > ...); > > +void SwrTrace( > + const char* pFileName, > + uint32_t lineNum, > + const char* function, > + const char* pFmtString, > + ...); > + > #define _SWR_ASSERT(chkDebugger, e, ...) {\ > bool expFailed = !(e);\ > if (expFailed) {\ > @@ -113,9 +120,13 @@ bool SwrAssert( > }\ > } > > +#define _SWR_TRACE(_fmtstr, ...) \ > + SwrTrace(__FILE__, __LINE__, __FUNCTION__, _fmtstr, ##__VA_ARGS__); > + > #if SWR_ENABLE_ASSERTS > #define SWR_ASSERT(e, ...) _SWR_ASSERT(true, e, ##__VA_ARGS__) > #define SWR_ASSUME_ASSERT(e, ...) SWR_ASSERT(e, ##__VA_ARGS__) > +#define SWR_TRACE(_fmtstr, ...) _SWR_TRACE(_fmtstr, ##__VA_ARGS__) > > #if defined(assert) > #undef assert > @@ -127,6 +138,7 @@ bool SwrAssert( > #if SWR_ENABLE_REL_ASSERTS > #define SWR_REL_ASSERT(e, ...) _SWR_ASSERT(false, e, ##__VA_ARGS__) > #define SWR_REL_ASSUME_ASSERT(e, ...) SWR_REL_ASSERT(e, ##__VA_ARGS__) > +#define SWR_REL_TRACE(_fmtstr, ...) _SWR_TRACE(_fmtstr, ##__VA_ARGS__) > #endif > > #endif // C++ > @@ -136,11 +148,13 @@ bool SwrAssert( > #if !SWR_ENABLE_ASSERTS > #define SWR_ASSERT(e, ...) (void)(0) > #define SWR_ASSUME_ASSERT(e, ...) SWR_ASSUME(e, ##__VA_ARGS__) > +#define SWR_TRACE(_fmtstr, ...) (void)(0) > #endif > > #if !SWR_ENABLE_REL_ASSERTS > #define SWR_REL_ASSERT(e, ...) (void)(0) > #define SWR_REL_ASSUME_ASSERT(e, ...) SWR_ASSUME(e, ##__VA_ARGS__) > +#define SWR_REL_TRACE(_fmtstr, ...) (void)(0) > #endif > > #define SWR_NOT_IMPL SWR_ASSERT(0, "%s not implemented", __FUNCTION__) > -- > 2.7.4 >
_______________________________________________ mesa-dev mailing list mesa-dev@lists.freedesktop.org https://lists.freedesktop.org/mailman/listinfo/mesa-dev