[Bf-blender-cvs] [6953bae3afb] cycles-x: Cycles X: change requested device features to bitflags
Brecht Van Lommel
noreply at git.blender.org
Wed Jul 14 17:50:46 CEST 2021
Commit: 6953bae3afb7ecef82cf8fac12ac43b6dcedf525
Author: Brecht Van Lommel
Date: Tue Jul 13 19:21:33 2021 +0200
Branches: cycles-x
https://developer.blender.org/rB6953bae3afb7ecef82cf8fac12ac43b6dcedf525
Cycles X: change requested device features to bitflags
So that they can be shared between host and device.
Differential Revision: https://developer.blender.org/D11914
===================================================================
M intern/cycles/device/cpu/device_impl.cpp
M intern/cycles/device/cpu/device_impl.h
M intern/cycles/device/cuda/device_impl.cpp
M intern/cycles/device/cuda/device_impl.h
M intern/cycles/device/device.cpp
M intern/cycles/device/device.h
M intern/cycles/device/multi/device.cpp
M intern/cycles/device/optix/device_impl.cpp
M intern/cycles/device/optix/device_impl.h
M intern/cycles/integrator/denoiser.cpp
M intern/cycles/kernel/integrator/integrator_shade_background.h
M intern/cycles/kernel/integrator/integrator_shade_shadow.h
M intern/cycles/kernel/integrator/integrator_shade_surface.h
M intern/cycles/kernel/kernel_bake.h
M intern/cycles/kernel/kernel_emission.h
M intern/cycles/kernel/kernel_shader.h
M intern/cycles/kernel/kernel_types.h
M intern/cycles/kernel/svm/svm.h
M intern/cycles/kernel/svm/svm_attribute.h
M intern/cycles/kernel/svm/svm_closure.h
M intern/cycles/kernel/svm/svm_types.h
M intern/cycles/kernel/svm/svm_voronoi.h
M intern/cycles/render/denoising.cpp
M intern/cycles/render/graph.h
M intern/cycles/render/nodes.h
M intern/cycles/render/osl.cpp
M intern/cycles/render/scene.cpp
M intern/cycles/render/scene.h
M intern/cycles/render/session.h
M intern/cycles/render/shader.cpp
M intern/cycles/render/shader.h
M intern/cycles/render/svm.cpp
===================================================================
diff --git a/intern/cycles/device/cpu/device_impl.cpp b/intern/cycles/device/cpu/device_impl.cpp
index 0888acfbbd4..5b54d99303b 100644
--- a/intern/cycles/device/cpu/device_impl.cpp
+++ b/intern/cycles/device/cpu/device_impl.cpp
@@ -474,7 +474,7 @@ void *CPUDevice::get_cpu_osl_memory()
#endif
}
-bool CPUDevice::load_kernels(const DeviceRequestedFeatures & /*requested_features*/)
+bool CPUDevice::load_kernels(const uint /*kernel_features*/)
{
return true;
}
diff --git a/intern/cycles/device/cpu/device_impl.h b/intern/cycles/device/cpu/device_impl.h
index 7d7949dbb93..7d222808652 100644
--- a/intern/cycles/device/cpu/device_impl.h
+++ b/intern/cycles/device/cpu/device_impl.h
@@ -93,7 +93,7 @@ class CPUDevice : public Device {
virtual void *get_cpu_osl_memory() override;
protected:
- virtual bool load_kernels(const DeviceRequestedFeatures & /*requested_features*/) override;
+ virtual bool load_kernels(uint /*kernel_features*/) override;
};
CCL_NAMESPACE_END
diff --git a/intern/cycles/device/cuda/device_impl.cpp b/intern/cycles/device/cuda/device_impl.cpp
index c4f997cf6ec..5aa3b3e5014 100644
--- a/intern/cycles/device/cuda/device_impl.cpp
+++ b/intern/cycles/device/cuda/device_impl.cpp
@@ -147,7 +147,7 @@ CUDADevice::~CUDADevice()
cuda_assert(cuCtxDestroy(cuContext));
}
-bool CUDADevice::support_device(const DeviceRequestedFeatures & /*requested_features*/)
+bool CUDADevice::support_device(const uint /*kernel_features*/)
{
int major, minor;
cuDeviceGetAttribute(&major, CU_DEVICE_ATTRIBUTE_COMPUTE_CAPABILITY_MAJOR, cuDevId);
@@ -220,8 +220,7 @@ bool CUDADevice::use_adaptive_compilation()
/* Common NVCC flags which stays the same regardless of shading model,
* kernel sources md5 and only depends on compiler or compilation settings.
*/
-string CUDADevice::compile_kernel_get_common_cflags(
- const DeviceRequestedFeatures &requested_features)
+string CUDADevice::compile_kernel_get_common_cflags(const uint kernel_features)
{
const int machine = system_cpu_bits();
const string source_path = path_get("source");
@@ -235,7 +234,7 @@ string CUDADevice::compile_kernel_get_common_cflags(
machine,
include_path.c_str());
if (use_adaptive_compilation()) {
- cflags += " " + requested_features.get_build_options();
+ cflags += " -D__KERNEL_FEATURES__=" + string_printf("%d", kernel_features);
}
const char *extra_cflags = getenv("CYCLES_CUDA_EXTRA_CFLAGS");
if (extra_cflags) {
@@ -249,7 +248,7 @@ string CUDADevice::compile_kernel_get_common_cflags(
return cflags;
}
-string CUDADevice::compile_kernel(const DeviceRequestedFeatures &requested_features,
+string CUDADevice::compile_kernel(const uint kernel_features,
const char *name,
const char *base,
bool force_ptx)
@@ -298,7 +297,7 @@ string CUDADevice::compile_kernel(const DeviceRequestedFeatures &requested_featu
/* We include cflags into md5 so changing cuda toolkit or changing other
* compiler command line arguments makes sure cubin gets re-built.
*/
- string common_cflags = compile_kernel_get_common_cflags(requested_features);
+ string common_cflags = compile_kernel_get_common_cflags(kernel_features);
const string kernel_md5 = util_md5_string(source_md5 + common_cflags);
const char *const kernel_ext = force_ptx ? "ptx" : "cubin";
@@ -407,7 +406,7 @@ string CUDADevice::compile_kernel(const DeviceRequestedFeatures &requested_featu
return cubin;
}
-bool CUDADevice::load_kernels(const DeviceRequestedFeatures &requested_features)
+bool CUDADevice::load_kernels(const uint kernel_features)
{
/* TODO(sergey): Support kernels re-load for CUDA devices.
*
@@ -424,12 +423,12 @@ bool CUDADevice::load_kernels(const DeviceRequestedFeatures &requested_features)
return false;
/* check if GPU is supported */
- if (!support_device(requested_features))
+ if (!support_device(kernel_features))
return false;
/* get kernel */
const char *kernel_name = "kernel";
- string cubin = compile_kernel(requested_features, kernel_name);
+ string cubin = compile_kernel(kernel_features, kernel_name);
if (cubin.empty())
return false;
@@ -449,14 +448,14 @@ bool CUDADevice::load_kernels(const DeviceRequestedFeatures &requested_features)
"Failed to load CUDA kernel from '%s' (%s)", cubin.c_str(), cuewErrorString(result)));
if (result == CUDA_SUCCESS) {
- reserve_local_memory(requested_features);
+ reserve_local_memory(kernel_features);
kernels.load(this);
}
return (result == CUDA_SUCCESS);
}
-void CUDADevice::reserve_local_memory(const DeviceRequestedFeatures & /* requested_features */)
+void CUDADevice::reserve_local_memory(const uint /* kernel_features */)
{
/* Together with CU_CTX_LMEM_RESIZE_TO_MAX, this reserves local memory
* needed for kernel launches, so that we can reliably figure out when
@@ -471,7 +470,7 @@ void CUDADevice::reserve_local_memory(const DeviceRequestedFeatures & /* request
/* Get kernel function. */
CUfunction cuRender;
- if (requested_features.use_baking) {
+ if (kernel_features & KERNEL_FEATURE_BAKING) {
cuda_assert(cuModuleGetFunction(&cuRender, cuModule, "kernel_cuda_bake"));
}
else {
diff --git a/intern/cycles/device/cuda/device_impl.h b/intern/cycles/device/cuda/device_impl.h
index 9d80b4cc288..170e0e6ccfd 100644
--- a/intern/cycles/device/cuda/device_impl.h
+++ b/intern/cycles/device/cuda/device_impl.h
@@ -95,23 +95,22 @@ class CUDADevice : public Device {
virtual ~CUDADevice();
- bool support_device(const DeviceRequestedFeatures & /*requested_features*/);
+ bool support_device(const uint /*kernel_features*/);
bool check_peer_access(Device *peer_device) override;
bool use_adaptive_compilation();
- virtual string compile_kernel_get_common_cflags(
- const DeviceRequestedFeatures &requested_features);
+ virtual string compile_kernel_get_common_cflags(const uint kernel_features);
- string compile_kernel(const DeviceRequestedFeatures &requested_features,
+ string compile_kernel(const uint kernel_features,
const char *name,
const char *base = "cuda",
bool force_ptx = false);
- virtual bool load_kernels(const DeviceRequestedFeatures &requested_features) override;
+ virtual bool load_kernels(const uint kernel_features) override;
- void reserve_local_memory(const DeviceRequestedFeatures &requested_features);
+ void reserve_local_memory(const uint kernel_features);
void init_host_memory();
diff --git a/intern/cycles/device/device.cpp b/intern/cycles/device/device.cpp
index 2762c5746e7..6ccedcf54ef 100644
--- a/intern/cycles/device/device.cpp
+++ b/intern/cycles/device/device.cpp
@@ -49,35 +49,6 @@ vector<DeviceInfo> Device::optix_devices;
vector<DeviceInfo> Device::cpu_devices;
uint Device::devices_initialized_mask = 0;
-/* Device Requested Features */
-
-std::ostream &operator<<(std::ostream &os, const DeviceRequestedFeatures &requested_features)
-{
- os << "Experimental features: " << (requested_features.experimental ? "On" : "Off") << std::endl;
- /* TODO(sergey): Decode bitflag into list of names. */
- os << "Nodes features: " << requested_features.nodes_features << std::endl;
- os << "Use Hair: " << string_from_bool(requested_features.use_hair) << std::endl;
- os << "Use Object Motion: " << string_from_bool(requested_features.use_object_motion)
- << std::endl;
- os << "Use Camera Motion: " << string_from_bool(requested_features.use_camera_motion)
- << std::endl;
- os << "Use Baking: " << string_from_bool(requested_features.use_baking) << std::endl;
- os << "Use Subsurface: " << string_from_bool(requested_features.use_subsurface) << std::endl;
- os << "Use Volume: " << string_from_bool(requested_features.use_volume) << std::endl;
- os << "Use Patch Evaluation: " << string_from_bool(requested_features.use_patch_evaluation)
- << std::endl;
- os << "Use Transparent Shadows: " << string_from_bool(requested_features.use_transparent)
- << std::endl;
- os << "Use Principled BSDF: " << string_from_bool(requested_features.use_principled)
- << std::endl;
- os << "Use Denoising: " << string_from_bool(requested_features.use_denoising) << std::endl;
- os << "Use Displacement: " << string_from_bool(requested_features.use_true_displacement)
- << std::endl;
- os << "Use Background Light: " << string_from_bool(requested_features.use_background_light)
- << std::endl;
- return os;
-}
-
/* Device */
Device::~Device() noexcept(false)
diff --git a/intern/cycles/device/device.h b/intern/cycles/device/device.h
index 0ec319782c8..4413e02039d 100644
--- a/intern/cycles/device/device.h
+++ b/intern/cycles/device/device.h
@@ -104,145 +104,6 @@ class DeviceInfo {
}
};
-class DeviceRequestedFeatures {
- public:
- /* Use experimental feature set. */
- bool experimental;
-
- /* Selective nodes compilation. */
-
- /* Features bitfield indicating which features from the requested group
- * will be compiled in. Nodes which corresponds to features which are not
- * in this bitfield will be ignored even if they're in the requested group.
- */
- int nodes_features;
-
- /* BVH/sampling kernel features. */
- bool use_hair;
- bool use_hair_thick;
- bool use_object_motion;
- bool use_camera_motion;
-
- /* Denotes whether baking functionality is needed. */
- bool use_baking;
-
- /* Use subsurface scattering materials. */
- bool use_subsurface;
-
- /* Use volume materials. */
- bool use_volume;
-
- /* Use OpenSubdiv patch evaluation */
- bool use_patch_evaluation;
-
- /* Use Transparent shadows */
- bool use_transparent;
-
- /* Use shadow catcher. */
- bool use_shadow_catcher;
-
- /* Per-uber shader usage flags. */
- bool use_principled;
-
- /* Denoising features. */
- bool use_denoising;
-
- /* Use true displacement */
- bool use_true_displacement;
-
- /* Use background lights */
- bool use_background_light;
-
- /* Use path tracing kernels. */
- bool use_path_tracing;
-
- DeviceRequestedFeatures()
- {
- nodes_features = 0;
- use
@@ Diff output truncated at 10240 characters. @@
More information about the Bf-blender-cvs
mailing list