Changeset View
Changeset View
Standalone View
Standalone View
intern/cycles/kernel/CMakeLists.txt
| Show All 16 Lines | |||||
| set(INC | set(INC | ||||
| .. | .. | ||||
| ) | ) | ||||
| set(INC_SYS | set(INC_SYS | ||||
| ) | ) | ||||
| set(SRC_CPU_KERNELS | set(SRC_DEVICE_CPU | ||||
| kernels/cpu/kernel.cpp | device/cpu/kernel.cpp | ||||
| kernels/cpu/kernel_sse2.cpp | device/cpu/kernel_sse2.cpp | ||||
| kernels/cpu/kernel_sse3.cpp | device/cpu/kernel_sse3.cpp | ||||
| kernels/cpu/kernel_sse41.cpp | device/cpu/kernel_sse41.cpp | ||||
| kernels/cpu/kernel_avx.cpp | device/cpu/kernel_avx.cpp | ||||
| kernels/cpu/kernel_avx2.cpp | device/cpu/kernel_avx2.cpp | ||||
| kernels/cpu/kernel_split.cpp | ) | ||||
| kernels/cpu/kernel_split_sse2.cpp | |||||
| kernels/cpu/kernel_split_sse3.cpp | set(SRC_DEVICE_CUDA | ||||
| kernels/cpu/kernel_split_sse41.cpp | device/cuda/kernel.cu | ||||
| kernels/cpu/kernel_split_avx.cpp | ) | ||||
| kernels/cpu/kernel_split_avx2.cpp | |||||
| kernels/cpu/filter.cpp | set(SRC_DEVICE_OPTIX | ||||
| kernels/cpu/filter_sse2.cpp | device/optix/kernel.cu | ||||
| kernels/cpu/filter_sse3.cpp | device/optix/kernel_shader_raytrace.cu | ||||
| kernels/cpu/filter_sse41.cpp | |||||
| kernels/cpu/filter_avx.cpp | |||||
| kernels/cpu/filter_avx2.cpp | |||||
| ) | |||||
| set(SRC_CUDA_KERNELS | |||||
| kernels/cuda/kernel.cu | |||||
| kernels/cuda/kernel_split.cu | |||||
| kernels/cuda/filter.cu | |||||
| ) | |||||
| set(SRC_OPENCL_KERNELS | |||||
| kernels/opencl/kernel_adaptive_stopping.cl | |||||
| kernels/opencl/kernel_adaptive_filter_x.cl | |||||
| kernels/opencl/kernel_adaptive_filter_y.cl | |||||
| kernels/opencl/kernel_adaptive_adjust_samples.cl | |||||
| kernels/opencl/kernel_bake.cl | |||||
| kernels/opencl/kernel_base.cl | |||||
| kernels/opencl/kernel_displace.cl | |||||
| kernels/opencl/kernel_background.cl | |||||
| kernels/opencl/kernel_state_buffer_size.cl | |||||
| kernels/opencl/kernel_split_bundle.cl | |||||
| kernels/opencl/kernel_data_init.cl | |||||
| kernels/opencl/kernel_path_init.cl | |||||
| kernels/opencl/kernel_queue_enqueue.cl | |||||
| kernels/opencl/kernel_scene_intersect.cl | |||||
| kernels/opencl/kernel_lamp_emission.cl | |||||
| kernels/opencl/kernel_do_volume.cl | |||||
| kernels/opencl/kernel_indirect_background.cl | |||||
| kernels/opencl/kernel_shader_setup.cl | |||||
| kernels/opencl/kernel_shader_sort.cl | |||||
| kernels/opencl/kernel_shader_eval.cl | |||||
| kernels/opencl/kernel_holdout_emission_blurring_pathtermination_ao.cl | |||||
| kernels/opencl/kernel_subsurface_scatter.cl | |||||
| kernels/opencl/kernel_direct_lighting.cl | |||||
| kernels/opencl/kernel_shadow_blocked_ao.cl | |||||
| kernels/opencl/kernel_shadow_blocked_dl.cl | |||||
| kernels/opencl/kernel_enqueue_inactive.cl | |||||
| kernels/opencl/kernel_next_iteration_setup.cl | |||||
| kernels/opencl/kernel_indirect_subsurface.cl | |||||
| kernels/opencl/kernel_buffer_update.cl | |||||
| kernels/opencl/filter.cl | |||||
| ) | |||||
| set(SRC_OPTIX_KERNELS | |||||
| kernels/optix/kernel_optix.cu | |||||
| ) | ) | ||||
| set(SRC_BVH_HEADERS | set(SRC_BVH_HEADERS | ||||
| bvh/bvh.h | bvh/bvh.h | ||||
| bvh/bvh_nodes.h | bvh/bvh_nodes.h | ||||
| bvh/bvh_shadow_all.h | bvh/bvh_shadow_all.h | ||||
| bvh/bvh_local.h | bvh/bvh_local.h | ||||
| bvh/bvh_traversal.h | bvh/bvh_traversal.h | ||||
| bvh/bvh_types.h | bvh/bvh_types.h | ||||
| bvh/bvh_util.h | bvh/bvh_util.h | ||||
| bvh/bvh_volume.h | bvh/bvh_volume.h | ||||
| bvh/bvh_volume_all.h | bvh/bvh_volume_all.h | ||||
| bvh/bvh_embree.h | bvh/bvh_embree.h | ||||
| ) | ) | ||||
| set(SRC_HEADERS | set(SRC_HEADERS | ||||
| kernel_accumulate.h | kernel_accumulate.h | ||||
| kernel_adaptive_sampling.h | kernel_adaptive_sampling.h | ||||
| kernel_bake.h | kernel_bake.h | ||||
| kernel_camera.h | kernel_camera.h | ||||
| kernel_color.h | kernel_color.h | ||||
| kernel_compat_cpu.h | |||||
| kernel_compat_cuda.h | |||||
| kernel_compat_optix.h | |||||
| kernel_compat_opencl.h | |||||
| kernel_differential.h | kernel_differential.h | ||||
| kernel_emission.h | kernel_emission.h | ||||
| kernel_film.h | kernel_film.h | ||||
| kernel_globals.h | |||||
| kernel_id_passes.h | kernel_id_passes.h | ||||
| kernel_jitter.h | kernel_jitter.h | ||||
| kernel_light.h | kernel_light.h | ||||
| kernel_light_background.h | kernel_light_background.h | ||||
| kernel_light_common.h | kernel_light_common.h | ||||
| kernel_lookup_table.h | |||||
| kernel_math.h | kernel_math.h | ||||
| kernel_montecarlo.h | kernel_montecarlo.h | ||||
| kernel_passes.h | kernel_passes.h | ||||
| kernel_path.h | |||||
| kernel_path_branched.h | |||||
| kernel_path_common.h | |||||
| kernel_path_state.h | kernel_path_state.h | ||||
| kernel_path_surface.h | |||||
| kernel_path_subsurface.h | |||||
| kernel_path_volume.h | |||||
| kernel_profiling.h | kernel_profiling.h | ||||
| kernel_projection.h | kernel_projection.h | ||||
| kernel_queues.h | |||||
| kernel_random.h | kernel_random.h | ||||
| kernel_shader.h | kernel_shader.h | ||||
| kernel_shadow.h | kernel_shadow_catcher.h | ||||
| kernel_subsurface.h | |||||
| kernel_textures.h | kernel_textures.h | ||||
| kernel_types.h | kernel_types.h | ||||
| kernel_volume.h | |||||
| kernel_work_stealing.h | kernel_work_stealing.h | ||||
| kernel_write_passes.h | kernel_write_passes.h | ||||
| ) | ) | ||||
| set(SRC_KERNELS_CPU_HEADERS | set(SRC_DEVICE_CPU_HEADERS | ||||
| kernel.h | device/cpu/compat.h | ||||
| kernels/cpu/kernel_cpu.h | device/cpu/image.h | ||||
| kernels/cpu/kernel_cpu_impl.h | device/cpu/globals.h | ||||
| kernels/cpu/kernel_cpu_image.h | device/cpu/kernel.h | ||||
| kernels/cpu/filter_cpu.h | device/cpu/kernel_arch.h | ||||
| kernels/cpu/filter_cpu_impl.h | device/cpu/kernel_arch_impl.h | ||||
| ) | ) | ||||
| set(SRC_DEVICE_GPU_HEADERS | |||||
| set(SRC_KERNELS_CUDA_HEADERS | device/gpu/image.h | ||||
| kernels/cuda/kernel_config.h | device/gpu/kernel.h | ||||
| kernels/cuda/kernel_cuda_image.h | device/gpu/parallel_active_index.h | ||||
| ) | device/gpu/parallel_prefix_sum.h | ||||
| device/gpu/parallel_reduce.h | |||||
| set(SRC_KERNELS_OPTIX_HEADERS | device/gpu/parallel_sorted_index.h | ||||
| ) | ) | ||||
| set(SRC_KERNELS_OPENCL_HEADERS | set(SRC_DEVICE_CUDA_HEADERS | ||||
| kernels/opencl/kernel_split_function.h | device/cuda/compat.h | ||||
| kernels/opencl/kernel_opencl_image.h | device/cuda/config.h | ||||
| device/cuda/globals.h | |||||
| ) | |||||
| set(SRC_DEVICE_OPTIX_HEADERS | |||||
| device/optix/compat.h | |||||
| device/optix/globals.h | |||||
| ) | ) | ||||
| set(SRC_CLOSURE_HEADERS | set(SRC_CLOSURE_HEADERS | ||||
| closure/alloc.h | closure/alloc.h | ||||
| closure/bsdf.h | closure/bsdf.h | ||||
| closure/bsdf_ashikhmin_velvet.h | closure/bsdf_ashikhmin_velvet.h | ||||
| closure/bsdf_diffuse.h | closure/bsdf_diffuse.h | ||||
| closure/bsdf_diffuse_ramp.h | closure/bsdf_diffuse_ramp.h | ||||
| ▲ Show 20 Lines • Show All 81 Lines • ▼ Show 20 Lines | set(SRC_GEOM_HEADERS | ||||
| geom/geom_curve_intersect.h | geom/geom_curve_intersect.h | ||||
| geom/geom_motion_curve.h | geom/geom_motion_curve.h | ||||
| geom/geom_motion_triangle.h | geom/geom_motion_triangle.h | ||||
| geom/geom_motion_triangle_intersect.h | geom/geom_motion_triangle_intersect.h | ||||
| geom/geom_motion_triangle_shader.h | geom/geom_motion_triangle_shader.h | ||||
| geom/geom_object.h | geom/geom_object.h | ||||
| geom/geom_patch.h | geom/geom_patch.h | ||||
| geom/geom_primitive.h | geom/geom_primitive.h | ||||
| geom/geom_shader_data.h | |||||
| geom/geom_subd_triangle.h | geom/geom_subd_triangle.h | ||||
| geom/geom_triangle.h | geom/geom_triangle.h | ||||
| geom/geom_triangle_intersect.h | geom/geom_triangle_intersect.h | ||||
| geom/geom_volume.h | geom/geom_volume.h | ||||
| ) | ) | ||||
| set(SRC_FILTER_HEADERS | set(SRC_INTEGRATOR_HEADERS | ||||
| filter/filter.h | integrator/integrator_init_from_bake.h | ||||
| filter/filter_defines.h | integrator/integrator_init_from_camera.h | ||||
| filter/filter_features.h | integrator/integrator_intersect_closest.h | ||||
| filter/filter_features_sse.h | integrator/integrator_intersect_shadow.h | ||||
| filter/filter_kernel.h | integrator/integrator_intersect_subsurface.h | ||||
| filter/filter_nlm_cpu.h | integrator/integrator_intersect_volume_stack.h | ||||
| filter/filter_nlm_gpu.h | integrator/integrator_megakernel.h | ||||
| filter/filter_prefilter.h | integrator/integrator_shade_background.h | ||||
| filter/filter_reconstruction.h | integrator/integrator_shade_light.h | ||||
| filter/filter_transform.h | integrator/integrator_shade_shadow.h | ||||
| filter/filter_transform_gpu.h | integrator/integrator_shade_surface.h | ||||
| filter/filter_transform_sse.h | integrator/integrator_shade_volume.h | ||||
| integrator/integrator_state.h | |||||
| integrator/integrator_state_flow.h | |||||
| integrator/integrator_state_template.h | |||||
| integrator/integrator_state_util.h | |||||
| integrator/integrator_subsurface.h | |||||
| integrator/integrator_volume_stack.h | |||||
| ) | ) | ||||
| set(SRC_UTIL_HEADERS | set(SRC_UTIL_HEADERS | ||||
| ../util/util_atomic.h | ../util/util_atomic.h | ||||
| ../util/util_color.h | ../util/util_color.h | ||||
| ../util/util_defines.h | ../util/util_defines.h | ||||
| ../util/util_half.h | ../util/util_half.h | ||||
| ../util/util_hash.h | ../util/util_hash.h | ||||
| Show All 39 Lines | set(SRC_UTIL_HEADERS | ||||
| ../util/util_types_uint3_impl.h | ../util/util_types_uint3_impl.h | ||||
| ../util/util_types_uint4.h | ../util/util_types_uint4.h | ||||
| ../util/util_types_uint4_impl.h | ../util/util_types_uint4_impl.h | ||||
| ../util/util_types_ushort4.h | ../util/util_types_ushort4.h | ||||
| ../util/util_types_vector3.h | ../util/util_types_vector3.h | ||||
| ../util/util_types_vector3_impl.h | ../util/util_types_vector3_impl.h | ||||
| ) | ) | ||||
| set(SRC_SPLIT_HEADERS | |||||
| split/kernel_adaptive_adjust_samples.h | |||||
| split/kernel_adaptive_filter_x.h | |||||
| split/kernel_adaptive_filter_y.h | |||||
| split/kernel_adaptive_stopping.h | |||||
| split/kernel_branched.h | |||||
| split/kernel_buffer_update.h | |||||
| split/kernel_data_init.h | |||||
| split/kernel_direct_lighting.h | |||||
| split/kernel_do_volume.h | |||||
| split/kernel_enqueue_inactive.h | |||||
| split/kernel_holdout_emission_blurring_pathtermination_ao.h | |||||
| split/kernel_indirect_background.h | |||||
| split/kernel_indirect_subsurface.h | |||||
| split/kernel_lamp_emission.h | |||||
| split/kernel_next_iteration_setup.h | |||||
| split/kernel_path_init.h | |||||
| split/kernel_queue_enqueue.h | |||||
| split/kernel_scene_intersect.h | |||||
| split/kernel_shader_setup.h | |||||
| split/kernel_shader_sort.h | |||||
| split/kernel_shader_eval.h | |||||
| split/kernel_shadow_blocked_ao.h | |||||
| split/kernel_shadow_blocked_dl.h | |||||
| split/kernel_split_common.h | |||||
| split/kernel_split_data.h | |||||
| split/kernel_split_data_types.h | |||||
| split/kernel_subsurface_scatter.h | |||||
| ) | |||||
| set(LIB | set(LIB | ||||
| ) | ) | ||||
| # CUDA module | # CUDA module | ||||
| if(WITH_CYCLES_CUDA_BINARIES) | if(WITH_CYCLES_CUDA_BINARIES) | ||||
| # 64 bit only | # 64 bit only | ||||
| Show All 14 Lines | if((CUDA_VERSION MATCHES "101") OR | ||||
| (CUDA_VERSION MATCHES "114")) | (CUDA_VERSION MATCHES "114")) | ||||
| else() | else() | ||||
| message(WARNING | message(WARNING | ||||
| "CUDA version ${CUDA_VERSION_MAJOR}.${CUDA_VERSION_MINOR} detected, " | "CUDA version ${CUDA_VERSION_MAJOR}.${CUDA_VERSION_MINOR} detected, " | ||||
| "build may succeed but only CUDA 10.1 to 11.4 are officially supported") | "build may succeed but only CUDA 10.1 to 11.4 are officially supported") | ||||
| endif() | endif() | ||||
| # build for each arch | # build for each arch | ||||
| set(cuda_sources kernels/cuda/kernel.cu kernels/cuda/kernel_split.cu | set(cuda_sources device/cuda/kernel.cu | ||||
| ${SRC_HEADERS} | ${SRC_HEADERS} | ||||
| ${SRC_KERNELS_CUDA_HEADERS} | ${SRC_DEVICE_GPU_HEADERS} | ||||
| ${SRC_DEVICE_CUDA_HEADERS} | |||||
| ${SRC_BVH_HEADERS} | ${SRC_BVH_HEADERS} | ||||
| ${SRC_SVM_HEADERS} | ${SRC_SVM_HEADERS} | ||||
| ${SRC_GEOM_HEADERS} | ${SRC_GEOM_HEADERS} | ||||
| ${SRC_INTEGRATOR_HEADERS} | |||||
| ${SRC_CLOSURE_HEADERS} | ${SRC_CLOSURE_HEADERS} | ||||
| ${SRC_UTIL_HEADERS} | ${SRC_UTIL_HEADERS} | ||||
| ) | ) | ||||
| set(cuda_filter_sources kernels/cuda/filter.cu | |||||
| ${SRC_HEADERS} | |||||
| ${SRC_KERNELS_CUDA_HEADERS} | |||||
| ${SRC_FILTER_HEADERS} | |||||
| ${SRC_UTIL_HEADERS} | |||||
| ) | |||||
| set(cuda_cubins) | set(cuda_cubins) | ||||
| macro(CYCLES_CUDA_KERNEL_ADD arch prev_arch name flags sources experimental) | macro(CYCLES_CUDA_KERNEL_ADD arch prev_arch name flags sources experimental) | ||||
| if(${arch} MATCHES "compute_.*") | if(${arch} MATCHES "compute_.*") | ||||
| set(format "ptx") | set(format "ptx") | ||||
| else() | else() | ||||
| set(format "cubin") | set(format "cubin") | ||||
| endif() | endif() | ||||
| set(cuda_file ${name}_${arch}.${format}) | set(cuda_file ${name}_${arch}.${format}) | ||||
| set(kernel_sources ${sources}) | set(kernel_sources ${sources}) | ||||
| if(NOT ${prev_arch} STREQUAL "none") | if(NOT ${prev_arch} STREQUAL "none") | ||||
| if(${prev_arch} MATCHES "compute_.*") | if(${prev_arch} MATCHES "compute_.*") | ||||
| set(kernel_sources ${kernel_sources} ${name}_${prev_arch}.ptx) | set(kernel_sources ${kernel_sources} ${name}_${prev_arch}.ptx) | ||||
| else() | else() | ||||
| set(kernel_sources ${kernel_sources} ${name}_${prev_arch}.cubin) | set(kernel_sources ${kernel_sources} ${name}_${prev_arch}.cubin) | ||||
| endif() | endif() | ||||
| endif() | endif() | ||||
| set(cuda_kernel_src "/kernels/cuda/${name}.cu") | set(cuda_kernel_src "/device/cuda/${name}.cu") | ||||
| set(cuda_flags ${flags} | set(cuda_flags ${flags} | ||||
| -D CCL_NAMESPACE_BEGIN= | -D CCL_NAMESPACE_BEGIN= | ||||
| -D CCL_NAMESPACE_END= | -D CCL_NAMESPACE_END= | ||||
| -D NVCC | -D NVCC | ||||
| -m ${CUDA_BITS} | -m ${CUDA_BITS} | ||||
| -I ${CMAKE_CURRENT_SOURCE_DIR}/.. | -I ${CMAKE_CURRENT_SOURCE_DIR}/.. | ||||
| -I ${CMAKE_CURRENT_SOURCE_DIR}/kernels/cuda | -I ${CMAKE_CURRENT_SOURCE_DIR}/device/cuda | ||||
| --use_fast_math | --use_fast_math | ||||
| -o ${CMAKE_CURRENT_BINARY_DIR}/${cuda_file}) | -o ${CMAKE_CURRENT_BINARY_DIR}/${cuda_file}) | ||||
| if(${experimental}) | if(${experimental}) | ||||
| set(cuda_flags ${cuda_flags} -D __KERNEL_EXPERIMENTAL__) | set(cuda_flags ${cuda_flags} -D __KERNEL_EXPERIMENTAL__) | ||||
| set(name ${name}_experimental) | set(name ${name}_experimental) | ||||
| endif() | endif() | ||||
| ▲ Show 20 Lines • Show All 71 Lines • ▼ Show 20 Lines | elseif(${arch} MATCHES ".*_8.") | ||||
| message(STATUS "CUDA binaries for ${arch} require CUDA 11.1+, skipped.") | message(STATUS "CUDA binaries for ${arch} require CUDA 11.1+, skipped.") | ||||
| endif() | endif() | ||||
| else() | else() | ||||
| set(cuda_nvcc_executable ${CUDA_NVCC_EXECUTABLE}) | set(cuda_nvcc_executable ${CUDA_NVCC_EXECUTABLE}) | ||||
| set(cuda_toolkit_root_dir ${CUDA_TOOLKIT_ROOT_DIR}) | set(cuda_toolkit_root_dir ${CUDA_TOOLKIT_ROOT_DIR}) | ||||
| endif() | endif() | ||||
| if(DEFINED cuda_nvcc_executable AND DEFINED cuda_toolkit_root_dir) | if(DEFINED cuda_nvcc_executable AND DEFINED cuda_toolkit_root_dir) | ||||
| # Compile regular kernel | # Compile regular kernel | ||||
| CYCLES_CUDA_KERNEL_ADD(${arch} ${prev_arch} filter "" "${cuda_filter_sources}" FALSE) | |||||
| CYCLES_CUDA_KERNEL_ADD(${arch} ${prev_arch} kernel "" "${cuda_sources}" FALSE) | CYCLES_CUDA_KERNEL_ADD(${arch} ${prev_arch} kernel "" "${cuda_sources}" FALSE) | ||||
| if(WITH_CYCLES_CUDA_SPLIT_KERNEL_BINARIES) | |||||
| # Compile split kernel | |||||
| CYCLES_CUDA_KERNEL_ADD(${arch} ${prev_arch} kernel_split "-D __SPLIT__" "${cuda_sources}" FALSE) | |||||
| endif() | |||||
| if(WITH_CYCLES_CUDA_BUILD_SERIAL) | if(WITH_CYCLES_CUDA_BUILD_SERIAL) | ||||
| set(prev_arch ${arch}) | set(prev_arch ${arch}) | ||||
| endif() | endif() | ||||
| unset(cuda_nvcc_executable) | unset(cuda_nvcc_executable) | ||||
| unset(cuda_toolkit_root_dir) | unset(cuda_toolkit_root_dir) | ||||
| endif() | endif() | ||||
| endforeach() | endforeach() | ||||
| add_custom_target(cycles_kernel_cuda ALL DEPENDS ${cuda_cubins}) | add_custom_target(cycles_kernel_cuda ALL DEPENDS ${cuda_cubins}) | ||||
| cycles_set_solution_folder(cycles_kernel_cuda) | cycles_set_solution_folder(cycles_kernel_cuda) | ||||
| endif() | endif() | ||||
| # OptiX PTX modules | # OptiX PTX modules | ||||
| if(WITH_CYCLES_DEVICE_OPTIX AND WITH_CYCLES_CUDA_BINARIES) | if(WITH_CYCLES_DEVICE_OPTIX AND WITH_CYCLES_CUDA_BINARIES) | ||||
| macro(CYCLES_OPTIX_KERNEL_ADD name flags) | macro(CYCLES_OPTIX_KERNEL_ADD name input flags) | ||||
| set(input "kernels/optix/kernel_optix.cu") | |||||
| set(output "${CMAKE_CURRENT_BINARY_DIR}/${name}.ptx") | set(output "${CMAKE_CURRENT_BINARY_DIR}/${name}.ptx") | ||||
| set(cuda_flags ${flags} | set(cuda_flags ${flags} | ||||
| -I "${OPTIX_INCLUDE_DIR}" | -I "${OPTIX_INCLUDE_DIR}" | ||||
| -I "${CMAKE_CURRENT_SOURCE_DIR}/.." | -I "${CMAKE_CURRENT_SOURCE_DIR}/.." | ||||
| -I "${CMAKE_CURRENT_SOURCE_DIR}/kernels/cuda" | -I "${CMAKE_CURRENT_SOURCE_DIR}/device/cuda" | ||||
| --use_fast_math | --use_fast_math | ||||
| -Wno-deprecated-gpu-targets | |||||
| -o ${output}) | -o ${output}) | ||||
| if(WITH_NANOVDB) | if(WITH_NANOVDB) | ||||
| set(cuda_flags ${cuda_flags} | set(cuda_flags ${cuda_flags} | ||||
| -D WITH_NANOVDB | -D WITH_NANOVDB | ||||
| -I "${NANOVDB_INCLUDE_DIR}") | -I "${NANOVDB_INCLUDE_DIR}") | ||||
| endif() | endif() | ||||
| if(WITH_CYCLES_CUBIN_COMPILER) | if(WITH_CYCLES_CUBIN_COMPILER) | ||||
| # Needed to find libnvrtc-builtins.so. Can't do it from inside | # Needed to find libnvrtc-builtins.so. Can't do it from inside | ||||
| # cycles_cubin_cc since the env variable is read before main() | # cycles_cubin_cc since the env variable is read before main() | ||||
| if(APPLE) | if(APPLE) | ||||
| set(CUBIN_CC_ENV ${CMAKE_COMMAND} | set(CUBIN_CC_ENV ${CMAKE_COMMAND} | ||||
| -E env DYLD_LIBRARY_PATH="${CUDA_TOOLKIT_ROOT_DIR}/lib") | -E env DYLD_LIBRARY_PATH="${CUDA_TOOLKIT_ROOT_DIR}/lib") | ||||
| elseif(UNIX) | elseif(UNIX) | ||||
| set(CUBIN_CC_ENV ${CMAKE_COMMAND} | set(CUBIN_CC_ENV ${CMAKE_COMMAND} | ||||
| -E env LD_LIBRARY_PATH="${CUDA_TOOLKIT_ROOT_DIR}/lib64") | -E env LD_LIBRARY_PATH="${CUDA_TOOLKIT_ROOT_DIR}/lib64") | ||||
| endif() | endif() | ||||
| add_custom_command( | add_custom_command( | ||||
| OUTPUT ${output} | OUTPUT ${output} | ||||
| DEPENDS | DEPENDS | ||||
| ${input} | ${input} | ||||
| ${SRC_HEADERS} | ${SRC_HEADERS} | ||||
| ${SRC_KERNELS_CUDA_HEADERS} | ${SRC_DEVICE_GPU_HEADERS} | ||||
| ${SRC_KERNELS_OPTIX_HEADERS} | ${SRC_DEVICE_CUDA_HEADERS} | ||||
| ${SRC_DEVICE_OPTIX_HEADERS} | |||||
| ${SRC_BVH_HEADERS} | ${SRC_BVH_HEADERS} | ||||
| ${SRC_SVM_HEADERS} | ${SRC_SVM_HEADERS} | ||||
| ${SRC_GEOM_HEADERS} | ${SRC_GEOM_HEADERS} | ||||
| ${SRC_INTEGRATOR_HEADERS} | |||||
| ${SRC_CLOSURE_HEADERS} | ${SRC_CLOSURE_HEADERS} | ||||
| ${SRC_UTIL_HEADERS} | ${SRC_UTIL_HEADERS} | ||||
| COMMAND ${CUBIN_CC_ENV} | COMMAND ${CUBIN_CC_ENV} | ||||
| "$<TARGET_FILE:cycles_cubin_cc>" | "$<TARGET_FILE:cycles_cubin_cc>" | ||||
| -target 50 | -target 50 | ||||
| -ptx | -ptx | ||||
| -i ${CMAKE_CURRENT_SOURCE_DIR}/${input} | -i ${CMAKE_CURRENT_SOURCE_DIR}/${input} | ||||
| ${cuda_flags} | ${cuda_flags} | ||||
| -v | -v | ||||
| -cuda-toolkit-dir "${CUDA_TOOLKIT_ROOT_DIR}" | -cuda-toolkit-dir "${CUDA_TOOLKIT_ROOT_DIR}" | ||||
| DEPENDS ${kernel_sources} cycles_cubin_cc) | DEPENDS ${kernel_sources} cycles_cubin_cc) | ||||
| else() | else() | ||||
| add_custom_command( | add_custom_command( | ||||
| OUTPUT | OUTPUT | ||||
| ${output} | ${output} | ||||
| DEPENDS | DEPENDS | ||||
| ${input} | ${input} | ||||
| ${SRC_HEADERS} | ${SRC_HEADERS} | ||||
| ${SRC_KERNELS_CUDA_HEADERS} | ${SRC_DEVICE_GPU_HEADERS} | ||||
| ${SRC_KERNELS_OPTIX_HEADERS} | ${SRC_DEVICE_CUDA_HEADERS} | ||||
| ${SRC_DEVICE_OPTIX_HEADERS} | |||||
| ${SRC_BVH_HEADERS} | ${SRC_BVH_HEADERS} | ||||
| ${SRC_SVM_HEADERS} | ${SRC_SVM_HEADERS} | ||||
| ${SRC_GEOM_HEADERS} | ${SRC_GEOM_HEADERS} | ||||
| ${SRC_INTEGRATOR_HEADERS} | |||||
| ${SRC_CLOSURE_HEADERS} | ${SRC_CLOSURE_HEADERS} | ||||
| ${SRC_UTIL_HEADERS} | ${SRC_UTIL_HEADERS} | ||||
| COMMAND | COMMAND | ||||
| ${CUDA_NVCC_EXECUTABLE} | ${CUDA_NVCC_EXECUTABLE} | ||||
| --ptx | --ptx | ||||
| -arch=sm_50 | -arch=sm_50 | ||||
| ${cuda_flags} | ${cuda_flags} | ||||
| ${input} | ${input} | ||||
| WORKING_DIRECTORY | WORKING_DIRECTORY | ||||
| "${CMAKE_CURRENT_SOURCE_DIR}") | "${CMAKE_CURRENT_SOURCE_DIR}") | ||||
| endif() | endif() | ||||
| list(APPEND optix_ptx ${output}) | list(APPEND optix_ptx ${output}) | ||||
| delayed_install("${CMAKE_CURRENT_BINARY_DIR}" "${output}" ${CYCLES_INSTALL_PATH}/lib) | delayed_install("${CMAKE_CURRENT_BINARY_DIR}" "${output}" ${CYCLES_INSTALL_PATH}/lib) | ||||
| endmacro() | endmacro() | ||||
| CYCLES_OPTIX_KERNEL_ADD(kernel_optix "-D __NO_SHADER_RAYTRACE__") | CYCLES_OPTIX_KERNEL_ADD( | ||||
| CYCLES_OPTIX_KERNEL_ADD(kernel_optix_shader_raytrace "--keep-device-functions") | kernel_optix | ||||
| "device/optix/kernel.cu" | |||||
| "") | |||||
| CYCLES_OPTIX_KERNEL_ADD( | |||||
| kernel_optix_shader_raytrace | |||||
| "device/optix/kernel_shader_raytrace.cu" | |||||
| "--keep-device-functions") | |||||
| add_custom_target(cycles_kernel_optix ALL DEPENDS ${optix_ptx}) | add_custom_target(cycles_kernel_optix ALL DEPENDS ${optix_ptx}) | ||||
| cycles_set_solution_folder(cycles_kernel_optix) | cycles_set_solution_folder(cycles_kernel_optix) | ||||
| endif() | endif() | ||||
| # OSL module | # OSL module | ||||
| if(WITH_CYCLES_OSL) | if(WITH_CYCLES_OSL) | ||||
| Show All 17 Lines | if(WITH_COMPILER_ASAN) | ||||
| elseif(CMAKE_C_COMPILER_ID MATCHES "Clang") | elseif(CMAKE_C_COMPILER_ID MATCHES "Clang") | ||||
| # With OSL, Cycles disables rtti in some modules, wich then breaks at linking | # With OSL, Cycles disables rtti in some modules, wich then breaks at linking | ||||
| # when trying to use vptr sanitizer (included into 'undefined' general option). | # when trying to use vptr sanitizer (included into 'undefined' general option). | ||||
| string(APPEND CMAKE_CXX_FLAGS_RELWITHDEBINFO " -fno-sanitize=vptr") | string(APPEND CMAKE_CXX_FLAGS_RELWITHDEBINFO " -fno-sanitize=vptr") | ||||
| string(APPEND CMAKE_CXX_FLAGS_DEBUG " -fno-sanitize=vptr") | string(APPEND CMAKE_CXX_FLAGS_DEBUG " -fno-sanitize=vptr") | ||||
| endif() | endif() | ||||
| endif() | endif() | ||||
| set_source_files_properties(kernels/cpu/kernel.cpp PROPERTIES COMPILE_FLAGS "${CYCLES_KERNEL_FLAGS}") | set_source_files_properties(device/cpu/kernel.cpp PROPERTIES COMPILE_FLAGS "${CYCLES_KERNEL_FLAGS}") | ||||
| set_source_files_properties(kernels/cpu/kernel_split.cpp PROPERTIES COMPILE_FLAGS "${CYCLES_KERNEL_FLAGS}") | |||||
| set_source_files_properties(kernels/cpu/filter.cpp PROPERTIES COMPILE_FLAGS "${CYCLES_KERNEL_FLAGS}") | |||||
| if(CXX_HAS_SSE) | if(CXX_HAS_SSE) | ||||
| set_source_files_properties(kernels/cpu/kernel_sse2.cpp PROPERTIES COMPILE_FLAGS "${CYCLES_SSE2_KERNEL_FLAGS}") | set_source_files_properties(device/cpu/kernel_sse2.cpp PROPERTIES COMPILE_FLAGS "${CYCLES_SSE2_KERNEL_FLAGS}") | ||||
| set_source_files_properties(kernels/cpu/kernel_sse3.cpp PROPERTIES COMPILE_FLAGS "${CYCLES_SSE3_KERNEL_FLAGS}") | set_source_files_properties(device/cpu/kernel_sse3.cpp PROPERTIES COMPILE_FLAGS "${CYCLES_SSE3_KERNEL_FLAGS}") | ||||
| set_source_files_properties(kernels/cpu/kernel_sse41.cpp PROPERTIES COMPILE_FLAGS "${CYCLES_SSE41_KERNEL_FLAGS}") | set_source_files_properties(device/cpu/kernel_sse41.cpp PROPERTIES COMPILE_FLAGS "${CYCLES_SSE41_KERNEL_FLAGS}") | ||||
| set_source_files_properties(kernels/cpu/kernel_split_sse2.cpp PROPERTIES COMPILE_FLAGS "${CYCLES_SSE2_KERNEL_FLAGS}") | |||||
| set_source_files_properties(kernels/cpu/kernel_split_sse3.cpp PROPERTIES COMPILE_FLAGS "${CYCLES_SSE3_KERNEL_FLAGS}") | |||||
| set_source_files_properties(kernels/cpu/kernel_split_sse41.cpp PROPERTIES COMPILE_FLAGS "${CYCLES_SSE41_KERNEL_FLAGS}") | |||||
| set_source_files_properties(kernels/cpu/filter_sse2.cpp PROPERTIES COMPILE_FLAGS "${CYCLES_SSE2_KERNEL_FLAGS}") | |||||
| set_source_files_properties(kernels/cpu/filter_sse3.cpp PROPERTIES COMPILE_FLAGS "${CYCLES_SSE3_KERNEL_FLAGS}") | |||||
| set_source_files_properties(kernels/cpu/filter_sse41.cpp PROPERTIES COMPILE_FLAGS "${CYCLES_SSE41_KERNEL_FLAGS}") | |||||
| endif() | endif() | ||||
| if(CXX_HAS_AVX) | if(CXX_HAS_AVX) | ||||
| set_source_files_properties(kernels/cpu/kernel_avx.cpp PROPERTIES COMPILE_FLAGS "${CYCLES_AVX_KERNEL_FLAGS}") | set_source_files_properties(device/cpu/kernel_avx.cpp PROPERTIES COMPILE_FLAGS "${CYCLES_AVX_KERNEL_FLAGS}") | ||||
| set_source_files_properties(kernels/cpu/kernel_split_avx.cpp PROPERTIES COMPILE_FLAGS "${CYCLES_AVX_KERNEL_FLAGS}") | |||||
| set_source_files_properties(kernels/cpu/filter_avx.cpp PROPERTIES COMPILE_FLAGS "${CYCLES_AVX_KERNEL_FLAGS}") | |||||
| endif() | endif() | ||||
| if(CXX_HAS_AVX2) | if(CXX_HAS_AVX2) | ||||
| set_source_files_properties(kernels/cpu/kernel_avx2.cpp PROPERTIES COMPILE_FLAGS "${CYCLES_AVX2_KERNEL_FLAGS}") | set_source_files_properties(device/cpu/kernel_avx2.cpp PROPERTIES COMPILE_FLAGS "${CYCLES_AVX2_KERNEL_FLAGS}") | ||||
| set_source_files_properties(kernels/cpu/kernel_split_avx2.cpp PROPERTIES COMPILE_FLAGS "${CYCLES_AVX2_KERNEL_FLAGS}") | |||||
| set_source_files_properties(kernels/cpu/filter_avx2.cpp PROPERTIES COMPILE_FLAGS "${CYCLES_AVX2_KERNEL_FLAGS}") | |||||
| endif() | endif() | ||||
| cycles_add_library(cycles_kernel "${LIB}" | cycles_add_library(cycles_kernel "${LIB}" | ||||
| ${SRC_CPU_KERNELS} | ${SRC_DEVICE_CPU} | ||||
| ${SRC_CUDA_KERNELS} | ${SRC_DEVICE_CUDA} | ||||
| ${SRC_OPTIX_KERNELS} | ${SRC_DEVICE_OPTIX} | ||||
| ${SRC_OPENCL_KERNELS} | |||||
| ${SRC_HEADERS} | ${SRC_HEADERS} | ||||
| ${SRC_KERNELS_CPU_HEADERS} | ${SRC_DEVICE_CPU_HEADERS} | ||||
| ${SRC_KERNELS_CUDA_HEADERS} | ${SRC_DEVICE_GPU_HEADERS} | ||||
| ${SRC_KERNELS_OPTIX_HEADERS} | ${SRC_DEVICE_CUDA_HEADERS} | ||||
| ${SRC_KERNELS_OPENCL_HEADERS} | ${SRC_DEVICE_OPTIX_HEADERS} | ||||
| ${SRC_BVH_HEADERS} | ${SRC_BVH_HEADERS} | ||||
| ${SRC_CLOSURE_HEADERS} | ${SRC_CLOSURE_HEADERS} | ||||
| ${SRC_FILTER_HEADERS} | |||||
| ${SRC_SVM_HEADERS} | ${SRC_SVM_HEADERS} | ||||
| ${SRC_GEOM_HEADERS} | ${SRC_GEOM_HEADERS} | ||||
| ${SRC_SPLIT_HEADERS} | ${SRC_INTEGRATOR_HEADERS} | ||||
| ) | ) | ||||
| source_group("bvh" FILES ${SRC_BVH_HEADERS}) | source_group("bvh" FILES ${SRC_BVH_HEADERS}) | ||||
| source_group("closure" FILES ${SRC_CLOSURE_HEADERS}) | source_group("closure" FILES ${SRC_CLOSURE_HEADERS}) | ||||
| source_group("filter" FILES ${SRC_FILTER_HEADERS}) | |||||
| source_group("geom" FILES ${SRC_GEOM_HEADERS}) | source_group("geom" FILES ${SRC_GEOM_HEADERS}) | ||||
| source_group("integrator" FILES ${SRC_INTEGRATOR_HEADERS}) | |||||
| source_group("kernel" FILES ${SRC_HEADERS}) | source_group("kernel" FILES ${SRC_HEADERS}) | ||||
| source_group("kernel\\split" FILES ${SRC_SPLIT_HEADERS}) | source_group("device\\cpu" FILES ${SRC_DEVICE_CPU} ${SRC_DEVICE_CPU_HEADERS}) | ||||
| source_group("kernels\\cpu" FILES ${SRC_CPU_KERNELS} ${SRC_KERNELS_CPU_HEADERS}) | source_group("device\\gpu" FILES ${SRC_DEVICE_GPU_HEADERS}) | ||||
| source_group("kernels\\cuda" FILES ${SRC_CUDA_KERNELS} ${SRC_KERNELS_CUDA_HEADERS}) | source_group("device\\cuda" FILES ${SRC_DEVICE_CUDA} ${SRC_DEVICE_CUDA_HEADERS}) | ||||
| source_group("kernels\\opencl" FILES ${SRC_OPENCL_KERNELS} ${SRC_KERNELS_OPENCL_HEADERS}) | source_group("device\\optix" FILES ${SRC_DEVICE_OPTIX} ${SRC_DEVICE_OPTIX_HEADERS}) | ||||
| source_group("kernels\\optix" FILES ${SRC_OPTIX_KERNELS} ${SRC_KERNELS_OPTIX_HEADERS}) | |||||
| source_group("svm" FILES ${SRC_SVM_HEADERS}) | source_group("svm" FILES ${SRC_SVM_HEADERS}) | ||||
| if(WITH_CYCLES_CUDA) | if(WITH_CYCLES_CUDA) | ||||
| add_dependencies(cycles_kernel cycles_kernel_cuda) | add_dependencies(cycles_kernel cycles_kernel_cuda) | ||||
| endif() | endif() | ||||
| if(WITH_CYCLES_DEVICE_OPTIX AND WITH_CYCLES_CUDA_BINARIES) | if(WITH_CYCLES_DEVICE_OPTIX AND WITH_CYCLES_CUDA_BINARIES) | ||||
| add_dependencies(cycles_kernel cycles_kernel_optix) | add_dependencies(cycles_kernel cycles_kernel_optix) | ||||
| endif() | endif() | ||||
| # OpenCL kernel | # Install kernel source for runtime compilation | ||||
| # set(KERNEL_PREPROCESSED ${CMAKE_CURRENT_BINARY_DIR}/kernel_preprocessed.cl) | delayed_install(${CMAKE_CURRENT_SOURCE_DIR} "${SRC_DEVICE_CUDA}" ${CYCLES_INSTALL_PATH}/source/kernel/device/cuda) | ||||
| # add_custom_command( | delayed_install(${CMAKE_CURRENT_SOURCE_DIR} "${SRC_DEVICE_OPTIX}" ${CYCLES_INSTALL_PATH}/source/kernel/device/optix) | ||||
| # OUTPUT ${KERNEL_PREPROCESSED} | |||||
| # COMMAND gcc -x c++ -E ${CMAKE_CURRENT_SOURCE_DIR}/kernel.cl -I ${CMAKE_CURRENT_SOURCE_DIR}/../util/ -DCCL_NAMESPACE_BEGIN= -DCCL_NAMESPACE_END= -o ${KERNEL_PREPROCESSED} | |||||
| # DEPENDS ${SRC_KERNEL} ${SRC_UTIL_HEADERS}) | |||||
| # add_custom_target(cycles_kernel_preprocess ALL DEPENDS ${KERNEL_PREPROCESSED}) | |||||
| # delayed_install(${CMAKE_CURRENT_SOURCE_DIR} "${KERNEL_PREPROCESSED}" ${CYCLES_INSTALL_PATH}/kernel) | |||||
| delayed_install(${CMAKE_CURRENT_SOURCE_DIR} "${SRC_OPENCL_KERNELS}" ${CYCLES_INSTALL_PATH}/source/kernel/kernels/opencl) | |||||
| delayed_install(${CMAKE_CURRENT_SOURCE_DIR} "${SRC_CUDA_KERNELS}" ${CYCLES_INSTALL_PATH}/source/kernel/kernels/cuda) | |||||
| delayed_install(${CMAKE_CURRENT_SOURCE_DIR} "${SRC_OPTIX_KERNELS}" ${CYCLES_INSTALL_PATH}/source/kernel/kernels/optix) | |||||
| delayed_install(${CMAKE_CURRENT_SOURCE_DIR} "${SRC_HEADERS}" ${CYCLES_INSTALL_PATH}/source/kernel) | delayed_install(${CMAKE_CURRENT_SOURCE_DIR} "${SRC_HEADERS}" ${CYCLES_INSTALL_PATH}/source/kernel) | ||||
| delayed_install(${CMAKE_CURRENT_SOURCE_DIR} "${SRC_KERNELS_OPENCL_HEADERS}" ${CYCLES_INSTALL_PATH}/source/kernel/kernels/opencl) | delayed_install(${CMAKE_CURRENT_SOURCE_DIR} "${SRC_DEVICE_GPU_HEADERS}" ${CYCLES_INSTALL_PATH}/source/kernel/device/gpu) | ||||
| delayed_install(${CMAKE_CURRENT_SOURCE_DIR} "${SRC_KERNELS_CUDA_HEADERS}" ${CYCLES_INSTALL_PATH}/source/kernel/kernels/cuda) | delayed_install(${CMAKE_CURRENT_SOURCE_DIR} "${SRC_DEVICE_CUDA_HEADERS}" ${CYCLES_INSTALL_PATH}/source/kernel/device/cuda) | ||||
| delayed_install(${CMAKE_CURRENT_SOURCE_DIR} "${SRC_KERNELS_OPTIX_HEADERS}" ${CYCLES_INSTALL_PATH}/source/kernel/kernels/optix) | delayed_install(${CMAKE_CURRENT_SOURCE_DIR} "${SRC_DEVICE_OPTIX_HEADERS}" ${CYCLES_INSTALL_PATH}/source/kernel/device/optix) | ||||
| delayed_install(${CMAKE_CURRENT_SOURCE_DIR} "${SRC_BVH_HEADERS}" ${CYCLES_INSTALL_PATH}/source/kernel/bvh) | delayed_install(${CMAKE_CURRENT_SOURCE_DIR} "${SRC_BVH_HEADERS}" ${CYCLES_INSTALL_PATH}/source/kernel/bvh) | ||||
| delayed_install(${CMAKE_CURRENT_SOURCE_DIR} "${SRC_CLOSURE_HEADERS}" ${CYCLES_INSTALL_PATH}/source/kernel/closure) | delayed_install(${CMAKE_CURRENT_SOURCE_DIR} "${SRC_CLOSURE_HEADERS}" ${CYCLES_INSTALL_PATH}/source/kernel/closure) | ||||
| delayed_install(${CMAKE_CURRENT_SOURCE_DIR} "${SRC_FILTER_HEADERS}" ${CYCLES_INSTALL_PATH}/source/kernel/filter) | |||||
| delayed_install(${CMAKE_CURRENT_SOURCE_DIR} "${SRC_SVM_HEADERS}" ${CYCLES_INSTALL_PATH}/source/kernel/svm) | delayed_install(${CMAKE_CURRENT_SOURCE_DIR} "${SRC_SVM_HEADERS}" ${CYCLES_INSTALL_PATH}/source/kernel/svm) | ||||
| delayed_install(${CMAKE_CURRENT_SOURCE_DIR} "${SRC_GEOM_HEADERS}" ${CYCLES_INSTALL_PATH}/source/kernel/geom) | delayed_install(${CMAKE_CURRENT_SOURCE_DIR} "${SRC_GEOM_HEADERS}" ${CYCLES_INSTALL_PATH}/source/kernel/geom) | ||||
| delayed_install(${CMAKE_CURRENT_SOURCE_DIR} "${SRC_INTEGRATOR_HEADERS}" ${CYCLES_INSTALL_PATH}/source/kernel/integrator) | |||||
| delayed_install(${CMAKE_CURRENT_SOURCE_DIR} "${SRC_UTIL_HEADERS}" ${CYCLES_INSTALL_PATH}/source/util) | delayed_install(${CMAKE_CURRENT_SOURCE_DIR} "${SRC_UTIL_HEADERS}" ${CYCLES_INSTALL_PATH}/source/util) | ||||
| delayed_install(${CMAKE_CURRENT_SOURCE_DIR} "${SRC_SPLIT_HEADERS}" ${CYCLES_INSTALL_PATH}/source/kernel/split) | |||||
| if(WITH_NANOVDB) | if(WITH_NANOVDB) | ||||
| set(SRC_NANOVDB_HEADERS | set(SRC_NANOVDB_HEADERS | ||||
| nanovdb/NanoVDB.h | nanovdb/NanoVDB.h | ||||
| nanovdb/CNanoVDB.h | nanovdb/CNanoVDB.h | ||||
| ) | ) | ||||
| set(SRC_NANOVDB_UTIL_HEADERS | set(SRC_NANOVDB_UTIL_HEADERS | ||||
| nanovdb/util/CSampleFromVoxels.h | nanovdb/util/CSampleFromVoxels.h | ||||
| nanovdb/util/SampleFromVoxels.h | nanovdb/util/SampleFromVoxels.h | ||||
| ) | ) | ||||
| delayed_install(${NANOVDB_INCLUDE_DIR} "${SRC_NANOVDB_HEADERS}" ${CYCLES_INSTALL_PATH}/source/nanovdb) | delayed_install(${NANOVDB_INCLUDE_DIR} "${SRC_NANOVDB_HEADERS}" ${CYCLES_INSTALL_PATH}/source/nanovdb) | ||||
| delayed_install(${NANOVDB_INCLUDE_DIR} "${SRC_NANOVDB_UTIL_HEADERS}" ${CYCLES_INSTALL_PATH}/source/nanovdb/util) | delayed_install(${NANOVDB_INCLUDE_DIR} "${SRC_NANOVDB_UTIL_HEADERS}" ${CYCLES_INSTALL_PATH}/source/nanovdb/util) | ||||
| endif() | endif() | ||||