This repository has been archived on 2023-10-09. You can view files and clone it. You cannot open issues or pull requests or push a commit.
Files
blender-archive/intern/cycles/util/debug.h
Brecht Van Lommel 5cbfdaccd0 Cleanup: minor changes to DebugFlags
Use C++11, remove unused running_inside_blender and move viewport_static_bvh
to BlenderSync.
2022-08-11 17:03:10 +02:00

156 lines
3.3 KiB
C++

/* SPDX-License-Identifier: Apache-2.0
* Copyright 2011-2022 Blender Foundation */
#ifndef __UTIL_DEBUG_H__
#define __UTIL_DEBUG_H__
#include <cassert>
#include <iostream>
#include "bvh/params.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 = true;
bool avx = true;
bool sse41 = true;
bool sse3 = true;
bool sse2 = true;
/* Check functions to see whether instructions up to the given one
* are allowed for use.
*/
bool has_avx2()
{
return has_avx() && avx2;
}
bool has_avx()
{
return has_sse41() && avx;
}
bool has_sse41()
{
return has_sse3() && sse41;
}
bool has_sse3()
{
return has_sse2() && sse3;
}
bool has_sse2()
{
return sse2;
}
/* Requested BVH layout.
*
* By default the fastest will be used. For debugging the BVH used by other
* CPUs and GPUs can be selected here instead.
*/
BVHLayout bvh_layout = BVH_LAYOUT_AUTO;
};
/* Descriptor of CUDA feature-set to be used. */
struct CUDA {
CUDA();
/* Reset flags to their defaults. */
void reset();
/* Whether adaptive feature based runtime compile is enabled or not.
* Requires the CUDA Toolkit and only works on Linux at the moment. */
bool adaptive_compile = false;
};
/* Descriptor of HIP feature-set to be used. */
struct HIP {
HIP();
/* Reset flags to their defaults. */
void reset();
/* Whether adaptive feature based runtime compile is enabled or not. */
bool adaptive_compile = false;
};
/* Descriptor of OptiX feature-set to be used. */
struct OptiX {
OptiX();
/* Reset flags to their defaults. */
void reset();
/* Load OptiX module with debug capabilities. Will lower logging verbosity level, enable
* validations, and lower optimization level. */
bool use_debug = false;
};
/* Descriptor of Metal feature-set to be used. */
struct Metal {
Metal();
/* Reset flags to their defaults. */
void reset();
/* Whether adaptive feature based runtime compile is enabled or not. */
bool adaptive_compile = false;
};
/* 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 CUDA flags. */
CUDA cuda;
/* Requested OptiX flags. */
OptiX optix;
/* Requested HIP flags. */
HIP hip;
/* Requested Metal flags. */
Metal metal;
private:
DebugFlags();
public:
explicit DebugFlags(DebugFlags const & /*other*/) = delete;
void operator=(DebugFlags const & /*other*/) = delete;
};
typedef DebugFlags &DebugFlagsRef;
typedef const DebugFlags &DebugFlagsConstRef;
inline DebugFlags &DebugFlags()
{
return DebugFlags::get();
}
CCL_NAMESPACE_END
#endif /* __UTIL_DEBUG_H__ */