From 7b381144697b5895d51a049c0c2677133a06b6a3 Mon Sep 17 00:00:00 2001 From: Michael Fabian 'Xaymar' Dirks Date: Sat, 7 Nov 2020 09:00:12 +0100 Subject: [PATCH] nvidia/cuda: Log extra information when built for Debug --- source/nvidia/cuda/nvidia-cuda-context.cpp | 22 ++++++++++++++++++- source/nvidia/cuda/nvidia-cuda-context.hpp | 6 ++--- source/nvidia/cuda/nvidia-cuda-gs-texture.cpp | 19 ++++++++++++++++ source/nvidia/cuda/nvidia-cuda-memory.cpp | 19 ++++++++++++++++ source/nvidia/cuda/nvidia-cuda-stream.cpp | 19 ++++++++++++++++ 5 files changed, 80 insertions(+), 5 deletions(-) diff --git a/source/nvidia/cuda/nvidia-cuda-context.cpp b/source/nvidia/cuda/nvidia-cuda-context.cpp index 2cb250c3..250c4ae1 100644 --- a/source/nvidia/cuda/nvidia-cuda-context.cpp +++ b/source/nvidia/cuda/nvidia-cuda-context.cpp @@ -19,6 +19,21 @@ #include "nvidia-cuda-context.hpp" #include +#include "util/util-logging.hpp" + +#ifdef _DEBUG +#define ST_PREFIX "<%s> " +#define D_LOG_ERROR(x, ...) P_LOG_ERROR(ST_PREFIX##x, __FUNCTION_SIG__, __VA_ARGS__) +#define D_LOG_WARNING(x, ...) P_LOG_WARN(ST_PREFIX##x, __FUNCTION_SIG__, __VA_ARGS__) +#define D_LOG_INFO(x, ...) P_LOG_INFO(ST_PREFIX##x, __FUNCTION_SIG__, __VA_ARGS__) +#define D_LOG_DEBUG(x, ...) P_LOG_DEBUG(ST_PREFIX##x, __FUNCTION_SIG__, __VA_ARGS__) +#else +#define ST_PREFIX " " +#define D_LOG_ERROR(...) P_LOG_ERROR(ST_PREFIX __VA_ARGS__) +#define D_LOG_WARNING(...) P_LOG_WARN(ST_PREFIX __VA_ARGS__) +#define D_LOG_INFO(...) P_LOG_INFO(ST_PREFIX __VA_ARGS__) +#define D_LOG_DEBUG(...) P_LOG_DEBUG(ST_PREFIX __VA_ARGS__) +#endif #ifdef WIN32 #ifdef _MSC_VER @@ -31,9 +46,14 @@ #endif #endif -nvidia::cuda::context::context() : _cuda(::nvidia::cuda::cuda::get()), _ctx(), _has_device(false), _device() {} +nvidia::cuda::context::context() : _cuda(::nvidia::cuda::cuda::get()), _ctx(), _has_device(false), _device() +{ + D_LOG_DEBUG("Initializating... (Addr: 0x%" PRIuPTR ")", this); +} nvidia::cuda::context::~context() { + D_LOG_DEBUG("Finalizing... (Addr: 0x%" PRIuPTR ")", this); + if (_has_device) { _cuda->cuDevicePrimaryCtxRelease(_device); } diff --git a/source/nvidia/cuda/nvidia-cuda-context.hpp b/source/nvidia/cuda/nvidia-cuda-context.hpp index de9b42db..d43c8674 100644 --- a/source/nvidia/cuda/nvidia-cuda-context.hpp +++ b/source/nvidia/cuda/nvidia-cuda-context.hpp @@ -25,10 +25,8 @@ namespace nvidia::cuda { class context { std::shared_ptr<::nvidia::cuda::cuda> _cuda; ::nvidia::cuda::context_t _ctx; - - // Primary Device Context - bool _has_device; - ::nvidia::cuda::device_t _device; + bool _has_device; + ::nvidia::cuda::device_t _device; private: context(); diff --git a/source/nvidia/cuda/nvidia-cuda-gs-texture.cpp b/source/nvidia/cuda/nvidia-cuda-gs-texture.cpp index 19e51c22..7b953ecb 100644 --- a/source/nvidia/cuda/nvidia-cuda-gs-texture.cpp +++ b/source/nvidia/cuda/nvidia-cuda-gs-texture.cpp @@ -19,10 +19,27 @@ #include "nvidia-cuda-gs-texture.hpp" #include "obs/gs/gs-helper.hpp" +#include "util/util-logging.hpp" + +#ifdef _DEBUG +#define ST_PREFIX "<%s> " +#define D_LOG_ERROR(x, ...) P_LOG_ERROR(ST_PREFIX##x, __FUNCTION_SIG__, __VA_ARGS__) +#define D_LOG_WARNING(x, ...) P_LOG_WARN(ST_PREFIX##x, __FUNCTION_SIG__, __VA_ARGS__) +#define D_LOG_INFO(x, ...) P_LOG_INFO(ST_PREFIX##x, __FUNCTION_SIG__, __VA_ARGS__) +#define D_LOG_DEBUG(x, ...) P_LOG_DEBUG(ST_PREFIX##x, __FUNCTION_SIG__, __VA_ARGS__) +#else +#define ST_PREFIX " " +#define D_LOG_ERROR(...) P_LOG_ERROR(ST_PREFIX __VA_ARGS__) +#define D_LOG_WARNING(...) P_LOG_WARN(ST_PREFIX __VA_ARGS__) +#define D_LOG_INFO(...) P_LOG_INFO(ST_PREFIX __VA_ARGS__) +#define D_LOG_DEBUG(...) P_LOG_DEBUG(ST_PREFIX __VA_ARGS__) +#endif nvidia::cuda::gstexture::gstexture(std::shared_ptr texture) : _cuda(::nvidia::cuda::cuda::get()), _texture(texture), _resource(), _is_mapped(false), _pointer() { + D_LOG_DEBUG("Initializating... (Addr: 0x%" PRIuPTR ")", this); + if (!texture) throw std::invalid_argument("texture"); @@ -63,6 +80,8 @@ nvidia::cuda::gstexture::gstexture(std::shared_ptr texture) nvidia::cuda::gstexture::~gstexture() { + D_LOG_DEBUG("Finalizing... (Addr: 0x%" PRIuPTR ")", this); + unmap(); _cuda->cuGraphicsUnregisterResource(_resource); } diff --git a/source/nvidia/cuda/nvidia-cuda-memory.cpp b/source/nvidia/cuda/nvidia-cuda-memory.cpp index dfe9f344..1727b53b 100644 --- a/source/nvidia/cuda/nvidia-cuda-memory.cpp +++ b/source/nvidia/cuda/nvidia-cuda-memory.cpp @@ -19,9 +19,26 @@ #include "nvidia-cuda-memory.hpp" #include +#include "util/util-logging.hpp" + +#ifdef _DEBUG +#define ST_PREFIX "<%s> " +#define D_LOG_ERROR(x, ...) P_LOG_ERROR(ST_PREFIX##x, __FUNCTION_SIG__, __VA_ARGS__) +#define D_LOG_WARNING(x, ...) P_LOG_WARN(ST_PREFIX##x, __FUNCTION_SIG__, __VA_ARGS__) +#define D_LOG_INFO(x, ...) P_LOG_INFO(ST_PREFIX##x, __FUNCTION_SIG__, __VA_ARGS__) +#define D_LOG_DEBUG(x, ...) P_LOG_DEBUG(ST_PREFIX##x, __FUNCTION_SIG__, __VA_ARGS__) +#else +#define ST_PREFIX " " +#define D_LOG_ERROR(...) P_LOG_ERROR(ST_PREFIX __VA_ARGS__) +#define D_LOG_WARNING(...) P_LOG_WARN(ST_PREFIX __VA_ARGS__) +#define D_LOG_INFO(...) P_LOG_INFO(ST_PREFIX __VA_ARGS__) +#define D_LOG_DEBUG(...) P_LOG_DEBUG(ST_PREFIX __VA_ARGS__) +#endif nvidia::cuda::memory::memory(size_t size) : _cuda(::nvidia::cuda::cuda::get()), _pointer(), _size(size) { + D_LOG_DEBUG("Initializating... (Addr: 0x%" PRIuPTR ")", this); + ::nvidia::cuda::result res = _cuda->cuMemAlloc(&_pointer, _size); switch (res) { case ::nvidia::cuda::result::SUCCESS: @@ -33,6 +50,8 @@ nvidia::cuda::memory::memory(size_t size) : _cuda(::nvidia::cuda::cuda::get()), nvidia::cuda::memory::~memory() { + D_LOG_DEBUG("Finalizing... (Addr: 0x%" PRIuPTR ")", this); + _cuda->cuMemFree(_pointer); } nvidia::cuda::device_ptr_t nvidia::cuda::memory::get() diff --git a/source/nvidia/cuda/nvidia-cuda-stream.cpp b/source/nvidia/cuda/nvidia-cuda-stream.cpp index b86f40c8..b2e58e85 100644 --- a/source/nvidia/cuda/nvidia-cuda-stream.cpp +++ b/source/nvidia/cuda/nvidia-cuda-stream.cpp @@ -19,9 +19,26 @@ #include "nvidia-cuda-stream.hpp" #include +#include "util/util-logging.hpp" + +#ifdef _DEBUG +#define ST_PREFIX "<%s> " +#define D_LOG_ERROR(x, ...) P_LOG_ERROR(ST_PREFIX##x, __FUNCTION_SIG__, __VA_ARGS__) +#define D_LOG_WARNING(x, ...) P_LOG_WARN(ST_PREFIX##x, __FUNCTION_SIG__, __VA_ARGS__) +#define D_LOG_INFO(x, ...) P_LOG_INFO(ST_PREFIX##x, __FUNCTION_SIG__, __VA_ARGS__) +#define D_LOG_DEBUG(x, ...) P_LOG_DEBUG(ST_PREFIX##x, __FUNCTION_SIG__, __VA_ARGS__) +#else +#define ST_PREFIX " " +#define D_LOG_ERROR(...) P_LOG_ERROR(ST_PREFIX __VA_ARGS__) +#define D_LOG_WARNING(...) P_LOG_WARN(ST_PREFIX __VA_ARGS__) +#define D_LOG_INFO(...) P_LOG_INFO(ST_PREFIX __VA_ARGS__) +#define D_LOG_DEBUG(...) P_LOG_DEBUG(ST_PREFIX __VA_ARGS__) +#endif nvidia::cuda::stream::stream(::nvidia::cuda::stream_flags flags, int32_t priority) : _cuda(::nvidia::cuda::cuda::get()) { + D_LOG_DEBUG("Initializating... (Addr: 0x%" PRIuPTR ")", this); + nvidia::cuda::result res; if (priority == 0) { res = _cuda->cuStreamCreate(&_stream, flags); @@ -38,6 +55,8 @@ nvidia::cuda::stream::stream(::nvidia::cuda::stream_flags flags, int32_t priorit nvidia::cuda::stream::~stream() { + D_LOG_DEBUG("Finalizing... (Addr: 0x%" PRIuPTR ")", this); + _cuda->cuStreamDestroy(_stream); }