Commit: a45c36efae07f22dd1da1ebac728324aeafce85e Author: Patrick Mours Date: Mon Sep 12 18:46:20 2022 +0200 Branches: master https://developer.blender.org/rBa45c36efae07f22dd1da1ebac728324aeafce85e
Cycles: Make OSL implementation independent from SVM Cleans up the file structure to be more similar to that of the SVM and also makes it possible to build kernels with OSL support, but without having to include SVM support. This patch was split from D15902. Differential Revision: https://developer.blender.org/D15949 =================================================================== M intern/cycles/device/cpu/device_impl.cpp M intern/cycles/device/cpu/device_impl.h M intern/cycles/device/cpu/kernel_thread_globals.cpp M intern/cycles/kernel/CMakeLists.txt M intern/cycles/kernel/closure/bsdf.h M intern/cycles/kernel/film/data_passes.h M intern/cycles/kernel/geom/shader_data.h M intern/cycles/kernel/integrator/displacement_shader.h M intern/cycles/kernel/integrator/intersect_closest.h M intern/cycles/kernel/integrator/surface_shader.h M intern/cycles/kernel/integrator/volume_shader.h M intern/cycles/kernel/osl/CMakeLists.txt M intern/cycles/kernel/osl/closures.cpp A intern/cycles/kernel/osl/globals.cpp M intern/cycles/kernel/osl/globals.h R073 intern/cycles/kernel/osl/shader.h intern/cycles/kernel/osl/osl.h M intern/cycles/kernel/osl/services.cpp M intern/cycles/kernel/osl/services.h D intern/cycles/kernel/osl/shader.cpp M intern/cycles/scene/osl.cpp =================================================================== diff --git a/intern/cycles/device/cpu/device_impl.cpp b/intern/cycles/device/cpu/device_impl.cpp index 1e4b9baa0c0..a2b8d1cbbfa 100644 --- a/intern/cycles/device/cpu/device_impl.cpp +++ b/intern/cycles/device/cpu/device_impl.cpp @@ -28,7 +28,6 @@ #include "kernel/device/cpu/kernel.h" #include "kernel/types.h" -#include "kernel/osl/shader.h" #include "kernel/osl/globals.h" // clang-format on diff --git a/intern/cycles/device/cpu/device_impl.h b/intern/cycles/device/cpu/device_impl.h index 5c1f3cc6ce5..e7e77f18194 100644 --- a/intern/cycles/device/cpu/device_impl.h +++ b/intern/cycles/device/cpu/device_impl.h @@ -23,7 +23,6 @@ #include "kernel/device/cpu/kernel.h" #include "kernel/device/cpu/globals.h" -#include "kernel/osl/shader.h" #include "kernel/osl/globals.h" // clang-format on diff --git a/intern/cycles/device/cpu/kernel_thread_globals.cpp b/intern/cycles/device/cpu/kernel_thread_globals.cpp index 89545399602..99af1525d92 100644 --- a/intern/cycles/device/cpu/kernel_thread_globals.cpp +++ b/intern/cycles/device/cpu/kernel_thread_globals.cpp @@ -3,10 +3,7 @@ #include "device/cpu/kernel_thread_globals.h" -// clang-format off -#include "kernel/osl/shader.h" #include "kernel/osl/globals.h" -// clang-format on #include "util/profiling.h" @@ -20,7 +17,7 @@ CPUKernelThreadGlobals::CPUKernelThreadGlobals(const KernelGlobalsCPU &kernel_gl reset_runtime_memory(); #ifdef WITH_OSL - OSLShader::thread_init(this, reinterpret_cast<OSLGlobals *>(osl_globals_memory)); + OSLGlobals::thread_init(this, static_cast<OSLGlobals *>(osl_globals_memory)); #else (void)osl_globals_memory; #endif @@ -35,7 +32,7 @@ CPUKernelThreadGlobals::CPUKernelThreadGlobals(CPUKernelThreadGlobals &&other) n CPUKernelThreadGlobals::~CPUKernelThreadGlobals() { #ifdef WITH_OSL - OSLShader::thread_free(this); + OSLGlobals::thread_free(this); #endif } diff --git a/intern/cycles/kernel/CMakeLists.txt b/intern/cycles/kernel/CMakeLists.txt index aa31335393f..a89c5679b27 100644 --- a/intern/cycles/kernel/CMakeLists.txt +++ b/intern/cycles/kernel/CMakeLists.txt @@ -544,8 +544,6 @@ if(WITH_CYCLES_CUDA_BINARIES) cycles_set_solution_folder(cycles_kernel_cuda) endif() -####################################################### START - # HIP module if(WITH_CYCLES_HIP_BINARIES AND WITH_CYCLES_DEVICE_HIP) @@ -620,7 +618,6 @@ if(WITH_CYCLES_HIP_BINARIES AND WITH_CYCLES_DEVICE_HIP) cycles_set_solution_folder(cycles_kernel_hip) endif() -####################################################### END # OptiX PTX modules if(WITH_CYCLES_DEVICE_OPTIX AND WITH_CYCLES_CUDA_BINARIES) @@ -712,6 +709,8 @@ if(WITH_CYCLES_DEVICE_OPTIX AND WITH_CYCLES_CUDA_BINARIES) cycles_set_solution_folder(cycles_kernel_optix) endif() +# oneAPI module + if(WITH_CYCLES_DEVICE_ONEAPI) if(WIN32) set(cycles_kernel_oneapi_lib ${CMAKE_CURRENT_BINARY_DIR}/cycles_kernel_oneapi.dll) diff --git a/intern/cycles/kernel/closure/bsdf.h b/intern/cycles/kernel/closure/bsdf.h index 02cf8bfe3e2..f0b28ff77c4 100644 --- a/intern/cycles/kernel/closure/bsdf.h +++ b/intern/cycles/kernel/closure/bsdf.h @@ -116,7 +116,7 @@ ccl_device_inline int bsdf_sample(KernelGlobals kg, case CLOSURE_BSDF_DIFFUSE_ID: label = bsdf_diffuse_sample(sc, Ng, sd->I, randu, randv, eval, omega_in, pdf); break; -#ifdef __SVM__ +#if defined(__SVM__) || defined(__OSL__) case CLOSURE_BSDF_OREN_NAYAR_ID: label = bsdf_oren_nayar_sample(sc, Ng, sd->I, randu, randv, eval, omega_in, pdf); break; @@ -246,7 +246,7 @@ ccl_device_inline case CLOSURE_BSDF_DIFFUSE_ID: eval = bsdf_diffuse_eval_reflect(sc, sd->I, omega_in, pdf); break; -#ifdef __SVM__ +#if defined(__SVM__) || defined(__OSL__) case CLOSURE_BSDF_OREN_NAYAR_ID: eval = bsdf_oren_nayar_eval_reflect(sc, sd->I, omega_in, pdf); break; @@ -337,7 +337,7 @@ ccl_device_inline case CLOSURE_BSDF_DIFFUSE_ID: eval = bsdf_diffuse_eval_transmit(sc, sd->I, omega_in, pdf); break; -#ifdef __SVM__ +#if defined(__SVM__) || defined(__OSL__) case CLOSURE_BSDF_OREN_NAYAR_ID: eval = bsdf_oren_nayar_eval_transmit(sc, sd->I, omega_in, pdf); break; @@ -419,7 +419,7 @@ ccl_device_inline ccl_device void bsdf_blur(KernelGlobals kg, ccl_private ShaderClosure *sc, float roughness) { /* TODO: do we want to blur volume closures? */ -#ifdef __SVM__ +#if defined(__SVM__) || defined(__OSL__) switch (sc->type) { case CLOSURE_BSDF_MICROFACET_MULTI_GGX_ID: case CLOSURE_BSDF_MICROFACET_MULTI_GGX_FRESNEL_ID: diff --git a/intern/cycles/kernel/film/data_passes.h b/intern/cycles/kernel/film/data_passes.h index d14b3cea989..efdf616749f 100644 --- a/intern/cycles/kernel/film/data_passes.h +++ b/intern/cycles/kernel/film/data_passes.h @@ -5,6 +5,8 @@ #include "kernel/geom/geom.h" +#include "kernel/camera/camera.h" + #include "kernel/film/cryptomatte_passes.h" #include "kernel/film/write.h" diff --git a/intern/cycles/kernel/geom/shader_data.h b/intern/cycles/kernel/geom/shader_data.h index 028c03ace1d..b67d19365a3 100644 --- a/intern/cycles/kernel/geom/shader_data.h +++ b/intern/cycles/kernel/geom/shader_data.h @@ -7,6 +7,8 @@ #pragma once +#include "kernel/util/differential.h" + CCL_NAMESPACE_BEGIN /* ShaderData setup from incoming ray */ diff --git a/intern/cycles/kernel/integrator/displacement_shader.h b/intern/cycles/kernel/integrator/displacement_shader.h index 71a0f56fb3e..839dfe244ac 100644 --- a/intern/cycles/kernel/integrator/displacement_shader.h +++ b/intern/cycles/kernel/integrator/displacement_shader.h @@ -5,10 +5,11 @@ #pragma once -#include "kernel/svm/svm.h" - +#ifdef __SVM__ +# include "kernel/svm/svm.h" +#endif #ifdef __OSL__ -# include "kernel/osl/shader.h" +# include "kernel/osl/osl.h" #endif CCL_NAMESPACE_BEGIN @@ -22,17 +23,18 @@ ccl_device void displacement_shader_eval(KernelGlobals kg, sd->num_closure_left = 0; /* this will modify sd->P */ -#ifdef __SVM__ -# ifdef __OSL__ - if (kg->osl) +#ifdef __OSL__ + if (kg->osl) { OSLShader::eval_displacement(kg, state, sd); + } else -# endif +#endif { +#ifdef __SVM__ svm_eval_nodes<KERNEL_FEATURE_NODE_MASK_DISPLACEMENT, SHADER_TYPE_DISPLACEMENT>( kg, state, sd, NULL, 0); - } #endif + } } CCL_NAMESPACE_END diff --git a/intern/cycles/kernel/integrator/intersect_closest.h b/intern/cycles/kernel/integrator/intersect_closest.h index 4ecff56a3fd..c7c3d74fa21 100644 --- a/intern/cycles/kernel/integrator/intersect_closest.h +++ b/intern/cycles/kernel/integrator/intersect_closest.h @@ -12,8 +12,6 @@ #include "kernel/light/light.h" -#include "kernel/util/differential.h" - #include "kernel/geom/geom.h" #include "kernel/bvh/bvh.h" diff --git a/intern/cycles/kernel/integrator/surface_shader.h b/intern/cycles/kernel/integrator/surface_shader.h index f40ff3c33ee..64b5556f7e9 100644 --- a/intern/cycles/kernel/integrator/surface_shader.h +++ b/intern/cycles/kernel/integrator/surface_shader.h @@ -10,10 +10,11 @@ #include "kernel/closure/bsdf_util.h" #include "kernel/closure/emissive.h" -#include "kernel/svm/svm.h" - +#ifdef __SVM__ +# include "kernel/svm/svm.h" +#endif #ifdef __OSL__ -# include "kernel/osl/shader.h" +# include "kernel/osl/osl.h" #endif CCL_NAMESPACE_BEGIN diff --git a/intern/cycles/kernel/integrator/volume_shader.h b/intern/cycles/kernel/integrator/volume_shader.h index a1d191e2d32..31039bfdcf5 100644 --- a/intern/cycles/kernel/integrator/volume_shader.h +++ b/intern/cycles/kernel/integrator/volume_shader.h @@ -10,10 +10,11 @@ #include "kernel/closure/bsdf_util.h" #include "kernel/closure/emissive.h" -#include "kernel/svm/svm.h" - +#ifdef __SVM__ +# include "kernel/svm/svm.h" +#endif #ifdef __OSL__ -# include "kernel/osl/shader.h" +# include "kernel/osl/osl.h" #endif CCL_NAMESPACE_BEGIN @@ -326,18 +327,18 @@ ccl_device_inline void volume_shader_eval(KernelGlobals kg, } /* evaluate shader */ -# ifdef __SVM__ -# ifdef __OSL__ +# ifdef __OSL__ if (kg->osl) { OSLShader::eval_volume(kg, state, sd, path_flag); } else -# endif +# endif { +# ifdef __SVM__ svm_eval_nodes<KERNEL_FEATURE_NODE_MASK_VOLUME, SHADER_TYPE_VOLUME>( kg, state, sd, NULL, path_flag); - } # endif + } /* Merge closures to avoid exceeding number of closures limit. */ if (!shadow) { diff --git a/intern/cycles/kernel/osl/CMakeLists.txt b/intern/cycles/kernel/osl/CMakeLists.txt index b27bcb066fd..5075e4e1528 100644 --- a/intern/cycles/kernel/osl/CMakeLists.txt +++ b/intern/cycles/kernel/osl/CMakeLists.txt @@ -11,16 +11,17 @@ set(INC_SYS set(SRC closures.cpp + globals.cpp services.cpp - shader.cpp ) set(HEADER_SRC closures_setup.h closures_template.h globals.h + osl.h services.h - shader.h + types.h ) set(LIB diff --git a/intern/cycles/kernel/osl/closures.cpp b/intern/cycles/kernel/osl/closures.cpp index 45ecd5132ef..d56e0551a91 100644 --- a/intern/cycles/kernel/osl/closures.cpp +++ b/intern/cycles/kernel/osl/closures.cpp @@ -20,8 +20,15 @@ #include "kernel/device/cpu/compat.h" #include "kernel/device/cpu/globals.h" +#include "kernel/geom/object.h" +#include "kernel/util/differential.h" + +#include "kernel/osl/osl.h" + #include "kernel/osl/closures_setup.h" -#include "kernel/osl/types.h" + +#define TO_VEC3(v) OSL::Vec3(v.x, v.y, v.z) +#define TO_FLOAT3(v) make_float3(v[0], v[1], v[2]) CCL_NAMESPACE_BEGIN @@ -53,4 +60,253 @@ void OSLRenderServices::register_closures(OSL::ShadingSystem *ss) #include "closures_template.h" } +/* Globals */ + +static void shaderdata_to_shaderglobals(const KernelGlobalsCPU *kg, + ShaderData *sd, + const void *state, + uint32_t path_flag, + OSLThreadData *tdata) +{ + OSL::ShaderGlobals *globals = &tdata->globals; + + const differential3 dP = differential_from_compact(sd->Ng, sd->dP); + const differential3 dI = differential_from_compact(sd->I, sd->dI); + + /* copy from shader data to shader globals */ + g @@ Diff output truncated at 10240 characters. @@ _______________________________________________ Bf-blender-cvs mailing list Bf-blender-cvs@blender.org List details, subscription details or unsubscribe: https://lists.blender.org/mailman/listinfo/bf-blender-cvs