[Bf-blender-cvs] [be421bc7752] cycles-x: Cleanup: make shader raytracing a node feature flag
Brecht Van Lommel
noreply at git.blender.org
Thu May 27 19:15:40 CEST 2021
Commit: be421bc77523e982fdbad283893c6c78e0fb721f
Author: Brecht Van Lommel
Date: Thu May 27 11:38:52 2021 +0200
Branches: cycles-x
https://developer.blender.org/rBbe421bc77523e982fdbad283893c6c78e0fb721f
Cleanup: make shader raytracing a node feature flag
===================================================================
M intern/cycles/device/device.h
M intern/cycles/device/opencl/device_impl.cpp
M intern/cycles/device/optix/device_impl.cpp
M intern/cycles/kernel/CMakeLists.txt
M intern/cycles/kernel/device/cuda/kernel.cu
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_types.h
M intern/cycles/kernel/svm/svm.h
M intern/cycles/kernel/svm/svm_types.h
M intern/cycles/render/graph.h
M intern/cycles/render/nodes.h
M intern/cycles/render/osl.cpp
M intern/cycles/render/shader.cpp
M intern/cycles/render/shader.h
M intern/cycles/render/svm.cpp
===================================================================
diff --git a/intern/cycles/device/device.h b/intern/cycles/device/device.h
index 68393c67fb7..180e33aebf3 100644
--- a/intern/cycles/device/device.h
+++ b/intern/cycles/device/device.h
@@ -157,9 +157,6 @@ class DeviceRequestedFeatures {
/* Denoising features. */
bool use_denoising;
- /* Use raytracing in shaders. */
- bool use_shader_raytrace;
-
/* Use true displacement */
bool use_true_displacement;
@@ -186,7 +183,6 @@ class DeviceRequestedFeatures {
use_shadow_catcher = false;
use_principled = false;
use_denoising = false;
- use_shader_raytrace = false;
use_true_displacement = false;
use_background_light = false;
use_path_tracing = true;
@@ -208,7 +204,6 @@ class DeviceRequestedFeatures {
use_shadow_catcher == requested_features.use_shadow_catcher &&
use_principled == requested_features.use_principled &&
use_denoising == requested_features.use_denoising &&
- use_shader_raytrace == requested_features.use_shader_raytrace &&
use_true_displacement == requested_features.use_true_displacement &&
use_background_light == requested_features.use_background_light);
}
@@ -257,9 +252,6 @@ class DeviceRequestedFeatures {
if (!use_denoising) {
build_options += " -D__NO_DENOISING__";
}
- if (!use_shader_raytrace) {
- build_options += " -D__NO_SHADER_RAYTRACE__";
- }
return build_options;
}
};
diff --git a/intern/cycles/device/opencl/device_impl.cpp b/intern/cycles/device/opencl/device_impl.cpp
index da0d1abf8dc..8672fbb9297 100644
--- a/intern/cycles/device/opencl/device_impl.cpp
+++ b/intern/cycles/device/opencl/device_impl.cpp
@@ -158,10 +158,9 @@ string OpenCLDevice::get_build_options(const DeviceRequestedFeatures &requested_
/* NOTE: currently possible to use surface nodes like `Hair Info`, `Bump` node.
* Perhaps we should remove them in UI as it does not make any sense when
* rendering background. */
- features.nodes_features &= ~NODE_FEATURE_VOLUME;
+ features.nodes_features &= ~(NODE_FEATURE_VOLUME | NODE_FEATURE_RAYTRACE);
features.use_subsurface = false;
features.use_volume = false;
- features.use_shader_raytrace = false;
features.use_patch_evaluation = false;
features.use_integrator_branched = false;
return features.get_build_options();
@@ -197,7 +196,6 @@ string OpenCLDevice::get_build_options(const DeviceRequestedFeatures &requested_
if (opencl_program_name == "split_bundle") {
features.max_nodes_group = 0;
features.nodes_features = 0;
- features.use_shader_raytrace = false;
}
/* No specific settings, just add the regular ones */
diff --git a/intern/cycles/device/optix/device_impl.cpp b/intern/cycles/device/optix/device_impl.cpp
index 03bed23423c..1ffd3223675 100644
--- a/intern/cycles/device/optix/device_impl.cpp
+++ b/intern/cycles/device/optix/device_impl.cpp
@@ -162,12 +162,9 @@ string OptiXDevice::compile_kernel_get_common_cflags(
}
/* Specialization for shader raytracing. */
- if (requested_features.use_shader_raytrace) {
+ if (requested_features.nodes_features & NODE_FEATURE_RAYTRACE) {
common_cflags += " --keep-device-functions";
}
- else {
- common_cflags += " -D __NO_SHADER_RAYTRACE__";
- }
return common_cflags;
}
@@ -192,7 +189,7 @@ bool OptiXDevice::load_kernels(const DeviceRequestedFeatures &requested_features
}
/* TODO: Shader raytracing requires OptiX to overwrite the shading kernels too! */
- if (requested_features.use_shader_raytrace) {
+ if (requested_features.nodes_features & NODE_FEATURE_RAYTRACE) {
set_error("AO and Bevel shader nodes are not currently supported with OptiX");
return false;
}
@@ -269,9 +266,10 @@ bool OptiXDevice::load_kernels(const DeviceRequestedFeatures &requested_features
}
{ /* Load and compile PTX module with OptiX kernels. */
- string ptx_data, ptx_filename = path_get(requested_features.use_shader_raytrace ?
- "lib/kernel_optix_shader_raytrace.ptx" :
- "lib/kernel_optix.ptx");
+ string ptx_data,
+ ptx_filename = path_get((requested_features.nodes_features & NODE_FEATURE_RAYTRACE) ?
+ "lib/kernel_optix_shader_raytrace.ptx" :
+ "lib/kernel_optix.ptx");
if (use_adaptive_compilation() || path_file_size(ptx_filename) == -1) {
if (!getenv("OPTIX_ROOT_DIR")) {
set_error(
@@ -375,7 +373,8 @@ bool OptiXDevice::load_kernels(const DeviceRequestedFeatures &requested_features
# endif
}
- if (requested_features.use_subsurface || requested_features.use_shader_raytrace) {
+ if (requested_features.use_subsurface ||
+ (requested_features.nodes_features & NODE_FEATURE_RAYTRACE)) {
/* Add hit group for local intersections. */
group_descs[PG_HITL].kind = OPTIX_PROGRAM_GROUP_KIND_HITGROUP;
group_descs[PG_HITL].hitgroup.moduleAH = optix_module;
@@ -383,7 +382,7 @@ bool OptiXDevice::load_kernels(const DeviceRequestedFeatures &requested_features
}
/* Shader raytracing replaces some functions with direct callables. */
- if (requested_features.use_shader_raytrace) {
+ if (requested_features.nodes_features & NODE_FEATURE_RAYTRACE) {
group_descs[PG_CALL + 0].kind = OPTIX_PROGRAM_GROUP_KIND_CALLABLES;
group_descs[PG_CALL + 0].callables.moduleDC = optix_module;
group_descs[PG_CALL + 0].callables.entryFunctionNameDC = "__direct_callable__svm_eval_nodes";
diff --git a/intern/cycles/kernel/CMakeLists.txt b/intern/cycles/kernel/CMakeLists.txt
index 9a46e4bff19..756f943eed0 100644
--- a/intern/cycles/kernel/CMakeLists.txt
+++ b/intern/cycles/kernel/CMakeLists.txt
@@ -547,7 +547,7 @@ if(WITH_CYCLES_DEVICE_OPTIX AND WITH_CYCLES_CUDA_BINARIES)
delayed_install("${CMAKE_CURRENT_BINARY_DIR}" "${output}" ${CYCLES_INSTALL_PATH}/lib)
endmacro()
- CYCLES_OPTIX_KERNEL_ADD(kernel_optix "-D __NO_SHADER_RAYTRACE__")
+ CYCLES_OPTIX_KERNEL_ADD(kernel_optix "")
CYCLES_OPTIX_KERNEL_ADD(kernel_optix_shader_raytrace "--keep-device-functions")
add_custom_target(cycles_kernel_optix ALL DEPENDS ${optix_ptx})
diff --git a/intern/cycles/kernel/device/cuda/kernel.cu b/intern/cycles/kernel/device/cuda/kernel.cu
index 0ce3c1abd71..098c1f12cc9 100644
--- a/intern/cycles/kernel/device/cuda/kernel.cu
+++ b/intern/cycles/kernel/device/cuda/kernel.cu
@@ -207,7 +207,8 @@ extern "C" __global__ void CUDA_LAUNCH_BOUNDS(CUDA_KERNEL_BLOCK_NUM_THREADS,
if (global_index < work_size) {
const int path_index = (path_index_array) ? path_index_array[global_index] : global_index;
- integrator_shade_surface(NULL, path_index, render_buffer);
+ integrator_shade_surface<NODE_FEATURE_MASK_SURFACE & ~NODE_FEATURE_RAYTRACE>(
+ NULL, path_index, render_buffer);
}
}
diff --git a/intern/cycles/kernel/integrator/integrator_shade_background.h b/intern/cycles/kernel/integrator/integrator_shade_background.h
index 93a61dbe962..4b81fdc347f 100644
--- a/intern/cycles/kernel/integrator/integrator_shade_background.h
+++ b/intern/cycles/kernel/integrator/integrator_shade_background.h
@@ -59,7 +59,7 @@ ccl_device_noinline_cpu float3 integrator_eval_background_shader(
INTEGRATOR_STATE(ray, P),
INTEGRATOR_STATE(ray, D),
INTEGRATOR_STATE(ray, time));
- shader_eval_surface<NODE_FEATURE_MASK_LIGHT>(
+ shader_eval_surface<NODE_FEATURE_MASK_SURFACE_LIGHT>(
INTEGRATOR_STATE_PASS, emission_sd, render_buffer, path_flag | PATH_RAY_EMISSION);
L = shader_background_eval(emission_sd);
diff --git a/intern/cycles/kernel/integrator/integrator_shade_shadow.h b/intern/cycles/kernel/integrator/integrator_shade_shadow.h
index 34d1a84314d..e8aad52a509 100644
--- a/intern/cycles/kernel/integrator/integrator_shade_shadow.h
+++ b/intern/cycles/kernel/integrator/integrator_shade_shadow.h
@@ -41,7 +41,7 @@ ccl_device_inline float3 integrate_transparent_shadow_shader_eval(INTEGRATOR_STA
/* Evaluate shader. */
if (!(shadow_sd->flag & SD_HAS_ONLY_VOLUME)) {
- shader_eval_surface<NODE_FEATURE_MASK_SURFACE>(
+ shader_eval_surface<NODE_FEATURE_MASK_SURFACE_SHADOW>(
INTEGRATOR_STATE_PASS, shadow_sd, NULL, PATH_RAY_SHADOW);
}
diff --git a/intern/cycles/kernel/integrator/integrator_shade_surface.h b/intern/cycles/kernel/integrator/integrator_shade_surface.h
index cdce6236524..f0ec4474241 100644
--- a/intern/cycles/kernel/integrator/integrator_shade_surface.h
+++ b/intern/cycles/kernel/integrator/integrator_shade_surface.h
@@ -284,6 +284,7 @@ ccl_device bool integrate_surface_bounce(INTEGRATOR_STATE_ARGS,
}
}
+template<uint node_feature_mask>
ccl_device_inline bool integrate_surface(INTEGRATOR_STATE_ARGS,
ccl_global float *ccl_restrict render_buffer)
@@ -306,8 +307,7 @@ ccl_device_inline bool integrate_surface(INTEGRATOR_STATE_ARGS,
#endif
{
/* Evaluate shader. */
- shader_eval_surface<NODE_FEATURE_MASK_SURFACE>(
- INTEGRATOR_STATE_PASS, &sd, render_buffer, path_flag);
+ shader_eval_surface<node_feature_mask>(INTEGRATOR_STATE_PASS, &sd, render_buffer, path_flag);
}
#ifdef __SUBSURFACE__
@@ -379,10 +379,11 @@ ccl_device_inline bool integrate_surface(INTEGRATOR_STATE_ARGS,
return integrate_surface_bounce(INTEGRATOR_STATE_PASS, &sd, &rng_state);
}
+template<uint node_feature_mask = NODE_FEATURE_MASK_SURFACE>
ccl_device void integrator_shade_surface(INTEGRATOR_STATE_ARGS,
ccl_global float *ccl_restrict render_buffer)
{
- if (integrate_surface(INTEGRATOR_STATE_PASS, render_buffer)) {
+ if (integrate_surface<node_feature_mask>(INTEGRATOR_STATE_PASS, render_buffer)) {
if (INTEGRATOR_STATE(path, flag) & PATH_RAY_SUBSURFACE) {
INTEGRATOR_PATH_NEXT(DEVICE_KERNEL_INTEGRATOR_SHADE_SURFACE,
DEVICE_KERNEL_INTEGRATOR_INTERSECT_SUBSURFACE);
diff --git a/intern/cycles/kernel/kernel_bake.h b/intern/cycles/kernel/kernel_bake.h
index
@@ Diff output truncated at 10240 characters. @@
More information about the Bf-blender-cvs
mailing list