diff options
Diffstat (limited to 'intern/cycles/util/util_debug.h')
-rw-r--r-- | intern/cycles/util/util_debug.h | 120 |
1 files changed, 118 insertions, 2 deletions
diff --git a/intern/cycles/util/util_debug.h b/intern/cycles/util/util_debug.h index 6b61a49fcc3..6ec5188049d 100644 --- a/intern/cycles/util/util_debug.h +++ b/intern/cycles/util/util_debug.h @@ -17,7 +17,123 @@ #ifndef __UTIL_DEBUG_H__ #define __UTIL_DEBUG_H__ -#include <assert.h> +#include <cassert> +#include <iostream> -#endif /* __UTIL_DEBUG_H__ */ +CCL_NAMESPACE_BEGIN + +/* Global storage for all sort of flags used to fine-tune behavior of particular + * areas for the development purposes, without officially exposing settings to + * the interface. + */ +class DebugFlags { +public: + /* Descriptor of CPU feature-set to be used. */ + struct CPU { + CPU(); + + /* Reset flags to their defaults. */ + void reset(); + + /* Flags describing which instructions sets are allowed for use. */ + bool avx2; + bool avx; + bool sse41; + bool sse3; + bool sse2; + + /* Whether QBVH usage is allowed or not. */ + bool qbvh; + }; + + /* Descriptor of OpenCL feature-set to be used. */ + struct OpenCL { + OpenCL(); + + /* Reset flags to their defaults. */ + void reset(); + + /* Available device types. + * Only gives a hint which devices to let user to choose from, does not + * try to use any sort of optimal device or so. + */ + enum DeviceType { + /* None of OpenCL devices will be used. */ + DEVICE_NONE, + /* All OpenCL devices will be used. */ + DEVICE_ALL, + /* Default system OpenCL device will be used. */ + DEVICE_DEFAULT, + /* Host processor will be used. */ + DEVICE_CPU, + /* GPU devices will be used. */ + DEVICE_GPU, + /* Dedicated OpenCL accelerator device will be used. */ + DEVICE_ACCELERATOR, + }; + + /* Available kernel types. */ + enum KernelType { + /* Do automated guess which kernel to use, based on the officially + * supported GPUs and such. + */ + KERNEL_DEFAULT, + /* Force mega kernel to be used. */ + KERNEL_MEGA, + /* Force split kernel to be used. */ + KERNEL_SPLIT, + }; + + /* Requested device type. */ + DeviceType device_type; + + /* Requested kernel type. */ + KernelType kernel_type; + /* Use debug version of the kernel. */ + bool debug; + }; + + /* Get instance of debug flags registry. */ + static DebugFlags& get() + { + static DebugFlags instance; + return instance; + } + + /* Reset flags to their defaults. */ + void reset(); + + /* Requested CPU flags. */ + CPU cpu; + + /* Requested OpenCL flags. */ + OpenCL opencl; + +private: + DebugFlags(); + +#if (__cplusplus > 199711L) +public: + DebugFlags(DebugFlags const& /*other*/) = delete; + void operator=(DebugFlags const& /*other*/) = delete; +#else +private: + DebugFlags(DebugFlags const& /*other*/); + void operator=(DebugFlags const& /*other*/); +#endif +}; + +typedef DebugFlags& DebugFlagsRef; +typedef const DebugFlags& DebugFlagsConstRef; + +inline DebugFlags& DebugFlags() { + return DebugFlags::get(); +} + +std::ostream& operator <<(std::ostream &os, + DebugFlagsConstRef debug_flags); + +CCL_NAMESPACE_END + +#endif /* __UTIL_DEBUG_H__ */ |