Cycles: Log requested device features
Useful to have this always logged because otherwise it's needed to remove cached kernels and check build flags to see which features are enabled.
This commit is contained in:
@@ -31,6 +31,29 @@
|
|||||||
|
|
||||||
CCL_NAMESPACE_BEGIN
|
CCL_NAMESPACE_BEGIN
|
||||||
|
|
||||||
|
/* Device Requested Features */
|
||||||
|
|
||||||
|
std::ostream& operator <<(std::ostream &os,
|
||||||
|
const DeviceRequestedFeatures& requested_features)
|
||||||
|
{
|
||||||
|
os << "Experimental features: "
|
||||||
|
<< (requested_features.experimental ? "On" : "Off") << std::endl;
|
||||||
|
os << "Max closure count: " << requested_features.max_closure << std::endl;
|
||||||
|
os << "Max nodes group: " << requested_features.max_nodes_group << std::endl;
|
||||||
|
/* TODO(sergey): Decode bitflag into list of names. */
|
||||||
|
os << "Nodes features: " << requested_features.nodes_features << std::endl;
|
||||||
|
/* TODO(sergey): Make it utility function to convert bool to string. */
|
||||||
|
os << "Use hair: "
|
||||||
|
<< (requested_features.use_hair ? "True" : "False") << std::endl;
|
||||||
|
os << "Use object motion: "
|
||||||
|
<< (requested_features.use_object_motion ? "True" : "False") << std::endl;
|
||||||
|
os << "Use camera motion: "
|
||||||
|
<< (requested_features.use_camera_motion ? "True" : "False") << std::endl;
|
||||||
|
os << "Use Baking: "
|
||||||
|
<< (requested_features.use_baking ? "True" : "False") << std::endl;
|
||||||
|
return os;
|
||||||
|
}
|
||||||
|
|
||||||
/* Device */
|
/* Device */
|
||||||
|
|
||||||
Device::~Device()
|
Device::~Device()
|
||||||
|
@@ -124,8 +124,12 @@ public:
|
|||||||
use_camera_motion == requested_features.use_camera_motion &&
|
use_camera_motion == requested_features.use_camera_motion &&
|
||||||
use_baking == requested_features.use_baking);
|
use_baking == requested_features.use_baking);
|
||||||
}
|
}
|
||||||
|
|
||||||
};
|
};
|
||||||
|
|
||||||
|
std::ostream& operator <<(std::ostream &os,
|
||||||
|
const DeviceRequestedFeatures& requested_features);
|
||||||
|
|
||||||
/* Device */
|
/* Device */
|
||||||
|
|
||||||
struct DeviceDrawParams {
|
struct DeviceDrawParams {
|
||||||
|
@@ -30,6 +30,7 @@
|
|||||||
|
|
||||||
#include "util_foreach.h"
|
#include "util_foreach.h"
|
||||||
#include "util_function.h"
|
#include "util_function.h"
|
||||||
|
#include "util_logging.h"
|
||||||
#include "util_math.h"
|
#include "util_math.h"
|
||||||
#include "util_opengl.h"
|
#include "util_opengl.h"
|
||||||
#include "util_task.h"
|
#include "util_task.h"
|
||||||
@@ -650,7 +651,9 @@ void Session::load_kernels()
|
|||||||
if(!kernels_loaded) {
|
if(!kernels_loaded) {
|
||||||
progress.set_status("Loading render kernels (may take a few minutes the first time)");
|
progress.set_status("Loading render kernels (may take a few minutes the first time)");
|
||||||
|
|
||||||
if(!device->load_kernels(get_requested_device_features())) {
|
DeviceRequestedFeatures requested_features = get_requested_device_features();
|
||||||
|
VLOG(2) << "Requested features:\n" << requested_features;
|
||||||
|
if(!device->load_kernels(requested_features)) {
|
||||||
string message = device->error_message();
|
string message = device->error_message();
|
||||||
if(message.empty())
|
if(message.empty())
|
||||||
message = "Failed loading render kernel, see console for errors";
|
message = "Failed loading render kernel, see console for errors";
|
||||||
|
Reference in New Issue
Block a user