[Mesa-dev] [PATCH] swr: [rasterizer common] add SwrTrace() and macros
Cherniak, Bruce
bruce.cherniak at intel.com
Wed Nov 30 00:57:14 UTC 2016
Reviewed-by: Bruce Cherniak <bruce.cherniak at intel.com>
> On Nov 22, 2016, at 8:03 PM, Rowley, Timothy O <timothy.o.rowley at 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
>
More information about the mesa-dev
mailing list