diff options
author | Patrick Mours <pmours@nvidia.com> | 2019-09-12 15:50:06 +0300 |
---|---|---|
committer | Brecht Van Lommel <brechtvanlommel@gmail.com> | 2019-09-13 12:50:11 +0300 |
commit | a2b52dc5716a97e5413acbd6eefc9ce3788b6456 (patch) | |
tree | 7e6d6c17b73671e67c1f7fbdadd821b4541f820f /intern/cycles/kernel/CMakeLists.txt | |
parent | 53932f1f068501bfb095c407a7777a964dc5ec1c (diff) |
Cycles: add Optix device backend
This uses hardware-accelerated raytracing on NVIDIA RTX graphics cards.
It is still currently experimental. Most features are supported, but a few
are still missing like baking, branched path tracing and using CPU memory.
https://wiki.blender.org/wiki/Reference/Release_Notes/2.81/Cycles#NVIDIA_RTX
For building with Optix support, the Optix SDK must be installed. See here for
build instructions:
https://wiki.blender.org/wiki/Building_Blender/CUDA
Differential Revision: https://developer.blender.org/D5363
Diffstat (limited to 'intern/cycles/kernel/CMakeLists.txt')
-rw-r--r-- | intern/cycles/kernel/CMakeLists.txt | 76 |
1 files changed, 75 insertions, 1 deletions
diff --git a/intern/cycles/kernel/CMakeLists.txt b/intern/cycles/kernel/CMakeLists.txt index 41e57bb3e43..ea8aa197b6f 100644 --- a/intern/cycles/kernel/CMakeLists.txt +++ b/intern/cycles/kernel/CMakeLists.txt @@ -64,6 +64,10 @@ set(SRC_OPENCL_KERNELS kernels/opencl/filter.cl ) +set(SRC_OPTIX_KERNELS + kernels/optix/kernel_optix.cu +) + set(SRC_BVH_HEADERS bvh/bvh.h bvh/bvh_nodes.h @@ -95,6 +99,7 @@ set(SRC_HEADERS kernel_color.h kernel_compat_cpu.h kernel_compat_cuda.h + kernel_compat_optix.h kernel_compat_opencl.h kernel_differential.h kernel_emission.h @@ -140,6 +145,9 @@ set(SRC_KERNELS_CUDA_HEADERS kernels/cuda/kernel_cuda_image.h ) +set(SRC_KERNELS_OPTIX_HEADERS +) + set(SRC_KERNELS_OPENCL_HEADERS kernels/opencl/kernel_split_function.h kernels/opencl/kernel_opencl_image.h @@ -168,7 +176,7 @@ set(SRC_CLOSURE_HEADERS closure/volume.h closure/bsdf_principled_diffuse.h closure/bsdf_principled_sheen.h - closure/bsdf_hair_principled.h + closure/bsdf_hair_principled.h ) set(SRC_SVM_HEADERS @@ -476,6 +484,53 @@ if(WITH_CYCLES_CUDA_BINARIES) cycles_set_solution_folder(cycles_kernel_cuda) endif() +# OptiX PTX modules + +if(WITH_CYCLES_DEVICE_OPTIX) + foreach(input ${SRC_OPTIX_KERNELS}) + get_filename_component(input_we ${input} NAME_WE) + + set(output "${CMAKE_CURRENT_BINARY_DIR}/${input_we}.ptx") + set(cuda_flags + -I "${OPTIX_INCLUDE_DIR}" + -I "${CMAKE_CURRENT_SOURCE_DIR}/.." + -I "${CMAKE_CURRENT_SOURCE_DIR}/kernels/cuda" + -arch=sm_30 + --use_fast_math + -o ${output}) + + if(WITH_CYCLES_DEBUG) + set(cuda_flags ${cuda_flags} + -D __KERNEL_DEBUG__) + endif() + + add_custom_command( + OUTPUT + ${output} + DEPENDS + ${input} + ${SRC_HEADERS} + ${SRC_KERNELS_CUDA_HEADERS} + ${SRC_KERNELS_OPTIX_HEADERS} + ${SRC_BVH_HEADERS} + ${SRC_SVM_HEADERS} + ${SRC_GEOM_HEADERS} + ${SRC_CLOSURE_HEADERS} + ${SRC_UTIL_HEADERS} + COMMAND + ${CUDA_NVCC_EXECUTABLE} --ptx ${cuda_flags} ${input} + WORKING_DIRECTORY + "${CMAKE_CURRENT_SOURCE_DIR}") + + list(APPEND optix_ptx ${output}) + + delayed_install("${CMAKE_CURRENT_BINARY_DIR}" "${output}" ${CYCLES_INSTALL_PATH}/lib) + endforeach() + + add_custom_target(cycles_kernel_optix ALL DEPENDS ${optix_ptx}) + cycles_set_solution_folder(cycles_kernel_optix) +endif() + # OSL module if(WITH_CYCLES_OSL) @@ -535,10 +590,12 @@ endif() cycles_add_library(cycles_kernel "${LIB}" ${SRC_CPU_KERNELS} ${SRC_CUDA_KERNELS} + ${SRC_OPTIX_KERNELS} ${SRC_OPENCL_KERNELS} ${SRC_HEADERS} ${SRC_KERNELS_CPU_HEADERS} ${SRC_KERNELS_CUDA_HEADERS} + ${SRC_KERNELS_OPTIX_HEADERS} ${SRC_KERNELS_OPENCL_HEADERS} ${SRC_BVH_HEADERS} ${SRC_CLOSURE_HEADERS} @@ -548,9 +605,24 @@ cycles_add_library(cycles_kernel "${LIB}" ${SRC_SPLIT_HEADERS} ) +source_group("bvh" FILES ${SRC_BVH_HEADERS}) +source_group("closure" FILES ${SRC_CLOSURE_HEADERS}) +source_group("filter" FILES ${SRC_FILTER_HEADERS}) +source_group("geom" FILES ${SRC_GEOM_HEADERS}) +source_group("kernel" FILES ${SRC_HEADERS}) +source_group("kernel\\split" FILES ${SRC_SPLIT_HEADERS}) +source_group("kernels\\cpu" FILES ${SRC_CPU_KERNELS} ${SRC_KERNELS_CPU_HEADERS}) +source_group("kernels\\cuda" FILES ${SRC_CUDA_KERNELS} ${SRC_KERNELS_CUDA_HEADERS}) +source_group("kernels\\opencl" FILES ${SRC_OPENCL_KERNELS} ${SRC_KERNELS_OPENCL_HEADERS}) +source_group("kernels\\optix" FILES ${SRC_OPTIX_KERNELS} ${SRC_KERNELS_OPTIX_HEADERS}) +source_group("svm" FILES ${SRC_SVM_HEADERS}) + if(WITH_CYCLES_CUDA) add_dependencies(cycles_kernel cycles_kernel_cuda) endif() +if(WITH_CYCLES_DEVICE_OPTIX) + add_dependencies(cycles_kernel cycles_kernel_optix) +endif() # OpenCL kernel @@ -564,9 +636,11 @@ endif() 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_KERNELS_OPENCL_HEADERS}" ${CYCLES_INSTALL_PATH}/source/kernel/kernels/opencl) delayed_install(${CMAKE_CURRENT_SOURCE_DIR} "${SRC_KERNELS_CUDA_HEADERS}" ${CYCLES_INSTALL_PATH}/source/kernel/kernels/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_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_FILTER_HEADERS}" ${CYCLES_INSTALL_PATH}/source/kernel/filter) |