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. @@ _______________________________________________ Bf-blender-cvs mailing list [email protected] List details, subscription details or unsubscribe: https://lists.blender.org/mailman/listinfo/bf-blender-cvs
