From 52a7636c2921c8a165a783c00821692b0c84fd46 Mon Sep 17 00:00:00 2001 From: Brecht Van Lommel Date: Fri, 15 Mar 2019 19:11:33 +0100 Subject: Tests: remove unnecessary _test postfix on test names. --- tests/python/CMakeLists.txt | 6 +++--- 1 file changed, 3 insertions(+), 3 deletions(-) diff --git a/tests/python/CMakeLists.txt b/tests/python/CMakeLists.txt index 23d32821c5b..d34c9f70f82 100644 --- a/tests/python/CMakeLists.txt +++ b/tests/python/CMakeLists.txt @@ -535,7 +535,7 @@ if(WITH_CYCLES) if(OPENIMAGEIO_IDIFF AND EXISTS "${TEST_SRC_DIR}/render/ctests/shader") macro(add_cycles_render_test subject) add_python_test( - cycles_${subject}_test + cycles_${subject} ${CMAKE_CURRENT_LIST_DIR}/cycles_render_tests.py -blender "$" -testdir "${TEST_SRC_DIR}/render/ctests/${subject}" @@ -581,7 +581,7 @@ if(WITH_OPENGL_DRAW_TESTS) file(GLOB_RECURSE blends "${child_path}/*.blend") if(blends) add_python_test( - opengl_draw_${child}_test + opengl_draw_${child} ${CMAKE_CURRENT_LIST_DIR}/opengl_draw_tests.py -blender "$" -testdir "${child_path}" @@ -625,7 +625,7 @@ endif() if(WITH_CODEC_FFMPEG) add_python_test( - ffmpeg_tests + ffmpeg ${CMAKE_CURRENT_LIST_DIR}/ffmpeg_tests.py --blender "$" --testdir "${TEST_DATA_SRC_DIR}/ffmpeg" -- cgit v1.2.3 From e17f7af0ce7e045e287b517f775a282a7d7cc8c1 Mon Sep 17 00:00:00 2001 From: Brecht Van Lommel Date: Sat, 16 Mar 2019 16:06:36 +0100 Subject: Cleanup: remove Cycles advanced shading features toggle. It's effectively always enabled, only not on some unsupported OpenCL devices. For testing those it's not useful to disable these features. This is replaced by the more fine grained feature toggles that we have now. --- intern/cycles/blender/blender_sync.cpp | 4 ---- intern/cycles/device/device.h | 2 -- intern/cycles/device/device_cpu.cpp | 1 - intern/cycles/device/device_cuda.cpp | 1 - intern/cycles/device/device_network.cpp | 1 - intern/cycles/device/device_opencl.cpp | 1 - intern/cycles/device/opencl/opencl.h | 1 - intern/cycles/device/opencl/opencl_util.cpp | 17 -------------- intern/cycles/kernel/kernel_types.h | 35 +++-------------------------- intern/cycles/render/light.cpp | 3 +-- 10 files changed, 4 insertions(+), 62 deletions(-) diff --git a/intern/cycles/blender/blender_sync.cpp b/intern/cycles/blender/blender_sync.cpp index a1202cbbad4..c595e0364c6 100644 --- a/intern/cycles/blender/blender_sync.cpp +++ b/intern/cycles/blender/blender_sync.cpp @@ -559,10 +559,6 @@ vector BlenderSync::sync_render_passes(BL::RenderLayer& b_rlay, vector passes; Pass::add(PASS_COMBINED, passes); - if(!session_params.device.advanced_shading) { - return passes; - } - /* loop over passes */ BL::RenderLayer::passes_iterator b_pass_iter; diff --git a/intern/cycles/device/device.h b/intern/cycles/device/device.h index 6f3208e955f..281681eaf78 100644 --- a/intern/cycles/device/device.h +++ b/intern/cycles/device/device.h @@ -73,7 +73,6 @@ public: string id; /* used for user preferences, should stay fixed with changing hardware config */ int num; bool display_device; /* GPU is used as a display device. */ - bool advanced_shading; /* Supports full shading system. */ bool has_half_images; /* Support half-float textures. */ bool has_volume_decoupled; /* Decoupled volume shading. */ bool has_osl; /* Support Open Shading Language. */ @@ -89,7 +88,6 @@ public: num = 0; cpu_threads = 0; display_device = false; - advanced_shading = true; has_half_images = false; has_volume_decoupled = false; has_osl = false; diff --git a/intern/cycles/device/device_cpu.cpp b/intern/cycles/device/device_cpu.cpp index 27f091d4188..370bc48f9f7 100644 --- a/intern/cycles/device/device_cpu.cpp +++ b/intern/cycles/device/device_cpu.cpp @@ -1122,7 +1122,6 @@ void device_cpu_info(vector& devices) info.description = system_cpu_brand_string(); info.id = "CPU"; info.num = 0; - info.advanced_shading = true; info.has_volume_decoupled = true; info.has_osl = true; info.has_half_images = true; diff --git a/intern/cycles/device/device_cuda.cpp b/intern/cycles/device/device_cuda.cpp index a7539d2ac31..594782f3d1d 100644 --- a/intern/cycles/device/device_cuda.cpp +++ b/intern/cycles/device/device_cuda.cpp @@ -2512,7 +2512,6 @@ void device_cuda_info(vector& devices) info.description = string(name); info.num = num; - info.advanced_shading = (major >= 3); info.has_half_images = (major >= 3); info.has_volume_decoupled = false; diff --git a/intern/cycles/device/device_network.cpp b/intern/cycles/device/device_network.cpp index 91628490b51..6736480e95a 100644 --- a/intern/cycles/device/device_network.cpp +++ b/intern/cycles/device/device_network.cpp @@ -308,7 +308,6 @@ void device_network_info(vector& devices) info.num = 0; /* todo: get this info from device */ - info.advanced_shading = true; info.has_volume_decoupled = false; info.has_osl = false; diff --git a/intern/cycles/device/device_opencl.cpp b/intern/cycles/device/device_opencl.cpp index 948fe407f63..4cefaa217f1 100644 --- a/intern/cycles/device/device_opencl.cpp +++ b/intern/cycles/device/device_opencl.cpp @@ -119,7 +119,6 @@ void device_opencl_info(vector& devices) info.num = num_devices; /* We don't know if it's used for display, but assume it is. */ info.display_device = true; - info.advanced_shading = OpenCLInfo::kernel_use_advanced_shading(platform_name); info.use_split_kernel = true; info.has_volume_decoupled = false; info.id = id; diff --git a/intern/cycles/device/opencl/opencl.h b/intern/cycles/device/opencl/opencl.h index bb507be4c72..a8ad4a935f7 100644 --- a/intern/cycles/device/opencl/opencl.h +++ b/intern/cycles/device/opencl/opencl.h @@ -84,7 +84,6 @@ class OpenCLInfo public: static cl_device_type device_type(); static bool use_debug(); - static bool kernel_use_advanced_shading(const string& platform_name); static bool device_supported(const string& platform_name, const cl_device_id device_id); static bool platform_version_check(cl_platform_id platform, diff --git a/intern/cycles/device/opencl/opencl_util.cpp b/intern/cycles/device/opencl/opencl_util.cpp index 920c8dc4e6a..5a1e12af8ab 100644 --- a/intern/cycles/device/opencl/opencl_util.cpp +++ b/intern/cycles/device/opencl/opencl_util.cpp @@ -737,23 +737,6 @@ bool OpenCLInfo::use_debug() return DebugFlags().opencl.debug; } -bool OpenCLInfo::kernel_use_advanced_shading(const string& platform) -{ - /* keep this in sync with kernel_types.h! */ - if(platform == "NVIDIA CUDA") - return true; - else if(platform == "Apple") - return true; - else if(platform == "AMD Accelerated Parallel Processing") - return true; - else if(platform == "Intel(R) OpenCL") - return true; - /* Make sure officially unsupported OpenCL platforms - * does not set up to use advanced shading. - */ - return false; -} - bool OpenCLInfo::device_supported(const string& platform_name, const cl_device_id device_id) { diff --git a/intern/cycles/kernel/kernel_types.h b/intern/cycles/kernel/kernel_types.h index 281d9a25047..e0bf9b054ac 100644 --- a/intern/cycles/kernel/kernel_types.h +++ b/intern/cycles/kernel/kernel_types.h @@ -90,7 +90,6 @@ CCL_NAMESPACE_BEGIN # define __QBVH__ # endif # define __KERNEL_SHADING__ -# define __KERNEL_ADV_SHADING__ # define __BRANCHED_PATH__ # ifdef WITH_OSL # define __OSL__ @@ -107,7 +106,6 @@ CCL_NAMESPACE_BEGIN #ifdef __KERNEL_CUDA__ # define __KERNEL_SHADING__ -# define __KERNEL_ADV_SHADING__ # define __VOLUME__ # define __VOLUME_SCATTER__ # define __SUBSURFACE__ @@ -132,50 +130,26 @@ CCL_NAMESPACE_BEGIN # define __HAIR__ # else -/* keep __KERNEL_ADV_SHADING__ in sync with opencl_kernel_use_advanced_shading! */ +# define __KERNEL_SHADING__ +# define __PRINCIPLED__ +# define __CMJ__ # ifdef __KERNEL_OPENCL_NVIDIA__ -# define __KERNEL_SHADING__ -# define __KERNEL_ADV_SHADING__ # define __SUBSURFACE__ -# define __PRINCIPLED__ # define __VOLUME__ # define __VOLUME_SCATTER__ # define __SHADOW_RECORD_ALL__ -# define __CMJ__ # define __BRANCHED_PATH__ # endif /* __KERNEL_OPENCL_NVIDIA__ */ -# ifdef __KERNEL_OPENCL_APPLE__ -# define __KERNEL_SHADING__ -# define __KERNEL_ADV_SHADING__ -# define __PRINCIPLED__ -# define __CMJ__ -/* TODO(sergey): Currently experimental section is ignored here, - * this is because megakernel in device_opencl does not support - * custom cflags depending on the scene features. - */ -# endif /* __KERNEL_OPENCL_APPLE__ */ - # ifdef __KERNEL_OPENCL_AMD__ -# define __KERNEL_SHADING__ -# define __KERNEL_ADV_SHADING__ # define __SUBSURFACE__ -# define __PRINCIPLED__ # define __VOLUME__ # define __VOLUME_SCATTER__ # define __SHADOW_RECORD_ALL__ -# define __CMJ__ # define __BRANCHED_PATH__ # endif /* __KERNEL_OPENCL_AMD__ */ -# ifdef __KERNEL_OPENCL_INTEL_CPU__ -# define __KERNEL_SHADING__ -# define __KERNEL_ADV_SHADING__ -# define __PRINCIPLED__ -# define __CMJ__ -# endif /* __KERNEL_OPENCL_INTEL_CPU__ */ - # endif /* KERNEL_OPENCL_PREVIEW__ */ #endif /* __KERNEL_OPENCL__ */ @@ -202,9 +176,6 @@ CCL_NAMESPACE_BEGIN # define __TEXTURES__ # define __EXTRA_NODES__ # define __HOLDOUT__ -#endif - -#ifdef __KERNEL_ADV_SHADING__ # define __MULTI_CLOSURE__ # define __TRANSPARENT_SHADOWS__ # define __PASSES__ diff --git a/intern/cycles/render/light.cpp b/intern/cycles/render/light.cpp index 3580f4a8eeb..f60fba65599 100644 --- a/intern/cycles/render/light.cpp +++ b/intern/cycles/render/light.cpp @@ -210,8 +210,7 @@ void LightManager::disable_ineffective_light(Device *device, Scene *scene) * - If we don't need it (no HDRs etc.) */ Shader *shader = (scene->background->shader) ? scene->background->shader : scene->default_background; - bool disable_mis = !(has_portal || shader->has_surface_spatial_varying) || - !(device->info.advanced_shading); + bool disable_mis = !(has_portal || shader->has_surface_spatial_varying); if(disable_mis) { VLOG(1) << "Background MIS has been disabled.\n"; foreach(Light *light, scene->lights) { -- cgit v1.2.3 From 9873005ecd7c21e3a6d371833a64b3ce722a48ea Mon Sep 17 00:00:00 2001 From: Brecht Van Lommel Date: Sat, 16 Mar 2019 16:45:50 +0100 Subject: Cleanup: simplify kernel features definition. No functional changes, logic here got too complex after many changes over the years. --- intern/cycles/device/opencl/opencl_split.cpp | 2 +- intern/cycles/kernel/kernel_compat_opencl.h | 2 +- intern/cycles/kernel/kernel_types.h | 106 +++++++++------------------ 3 files changed, 35 insertions(+), 75 deletions(-) diff --git a/intern/cycles/device/opencl/opencl_split.cpp b/intern/cycles/device/opencl/opencl_split.cpp index 555707cecd5..fd7eebf0221 100644 --- a/intern/cycles/device/opencl/opencl_split.cpp +++ b/intern/cycles/device/opencl/opencl_split.cpp @@ -184,7 +184,7 @@ string OpenCLDevice::get_build_options(const DeviceRequestedFeatures& requested_ if (preview_kernel) { DeviceRequestedFeatures preview_features; preview_features.use_hair = true; - build_options += "-D__KERNEL_OPENCL_PREVIEW__ "; + build_options += "-D__KERNEL_AO_PREVIEW__ "; build_options += preview_features.get_build_options(); } else if (opencl_program_name == "split_do_volume" && !requested_features.use_volume) { diff --git a/intern/cycles/kernel/kernel_compat_opencl.h b/intern/cycles/kernel/kernel_compat_opencl.h index 21a95098894..3bf8cdebf4a 100644 --- a/intern/cycles/kernel/kernel_compat_opencl.h +++ b/intern/cycles/kernel/kernel_compat_opencl.h @@ -125,7 +125,7 @@ #define fmodf(x, y) fmod((float)(x), (float)(y)) #define sinhf(x) sinh(((float)(x))) -#ifndef __CL_USE_NATIVE__ +#if !(defined(__KERNEL_OPENCL_AMD__) || defined(__KERNEL_OPENCL_INTEL_CPU__)) # define sinf(x) native_sin(((float)(x))) # define cosf(x) native_cos(((float)(x))) # define tanf(x) native_tan(((float)(x))) diff --git a/intern/cycles/kernel/kernel_types.h b/intern/cycles/kernel/kernel_types.h index e0bf9b054ac..4b1c8e82dfa 100644 --- a/intern/cycles/kernel/kernel_types.h +++ b/intern/cycles/kernel/kernel_types.h @@ -83,76 +83,6 @@ CCL_NAMESPACE_BEGIN # define SHADER_SORT_LOCAL_SIZE 1 #endif - -/* Device capabilities */ -#ifdef __KERNEL_CPU__ -# ifdef __KERNEL_SSE2__ -# define __QBVH__ -# endif -# define __KERNEL_SHADING__ -# define __BRANCHED_PATH__ -# ifdef WITH_OSL -# define __OSL__ -# endif -# define __PRINCIPLED__ -# define __SUBSURFACE__ -# define __CMJ__ -# define __VOLUME__ -# define __VOLUME_SCATTER__ -# define __SHADOW_RECORD_ALL__ -# define __VOLUME_DECOUPLED__ -# define __VOLUME_RECORD_ALL__ -#endif /* __KERNEL_CPU__ */ - -#ifdef __KERNEL_CUDA__ -# define __KERNEL_SHADING__ -# define __VOLUME__ -# define __VOLUME_SCATTER__ -# define __SUBSURFACE__ -# define __PRINCIPLED__ -# define __SHADOW_RECORD_ALL__ -# define __CMJ__ -# ifndef __SPLIT_KERNEL__ -# define __BRANCHED_PATH__ -# endif -#endif /* __KERNEL_CUDA__ */ - -#ifdef __KERNEL_OPENCL__ - -# if defined(__KERNEL_OPENCL_AMD__) || defined(__KERNEL_OPENCL_INTEL_CPU__) -# define __CL_USE_NATIVE__ -# endif - -/* Preview kernel is used as a small kernel when the optimized kernel is still being compiled. */ -# ifdef __KERNEL_OPENCL_PREVIEW__ -# define __AO__ -# define __PASSES__ -# define __HAIR__ -# else - -# define __KERNEL_SHADING__ -# define __PRINCIPLED__ -# define __CMJ__ - -# ifdef __KERNEL_OPENCL_NVIDIA__ -# define __SUBSURFACE__ -# define __VOLUME__ -# define __VOLUME_SCATTER__ -# define __SHADOW_RECORD_ALL__ -# define __BRANCHED_PATH__ -# endif /* __KERNEL_OPENCL_NVIDIA__ */ - -# ifdef __KERNEL_OPENCL_AMD__ -# define __SUBSURFACE__ -# define __VOLUME__ -# define __VOLUME_SCATTER__ -# define __SHADOW_RECORD_ALL__ -# define __BRANCHED_PATH__ -# endif /* __KERNEL_OPENCL_AMD__ */ - -# endif /* KERNEL_OPENCL_PREVIEW__ */ -#endif /* __KERNEL_OPENCL__ */ - /* Kernel features */ #define __SOBOL__ #define __INSTANCING__ @@ -169,8 +99,12 @@ CCL_NAMESPACE_BEGIN #define __SHADOW_TRICKS__ #define __DENOISING_FEATURES__ #define __SHADER_RAYTRACE__ +#define __AO__ +#define __PASSES__ +#define __HAIR__ -#ifdef __KERNEL_SHADING__ +/* Without these we get an AO render, used by OpenCL preview kernel. */ +#ifndef __KERNEL_AO_PREVIEW__ # define __SVM__ # define __EMISSION__ # define __TEXTURES__ @@ -178,16 +112,42 @@ CCL_NAMESPACE_BEGIN # define __HOLDOUT__ # define __MULTI_CLOSURE__ # define __TRANSPARENT_SHADOWS__ -# define __PASSES__ # define __BACKGROUND_MIS__ # define __LAMP_MIS__ -# define __AO__ # define __CAMERA_MOTION__ # define __OBJECT_MOTION__ # define __HAIR__ # define __BAKING__ +# define __PRINCIPLED__ +# define __SUBSURFACE__ +# define __VOLUME__ +# define __VOLUME_SCATTER__ +# define __CMJ__ +# define __SHADOW_RECORD_ALL__ +# define __BRANCHED_PATH__ #endif +/* Device specific features */ +#ifdef __KERNEL_CPU__ +# ifdef __KERNEL_SSE2__ +# define __QBVH__ +# endif +# ifdef WITH_OSL +# define __OSL__ +# endif +# define __VOLUME_DECOUPLED__ +# define __VOLUME_RECORD_ALL__ +#endif /* __KERNEL_CPU__ */ + +#ifdef __KERNEL_CUDA__ +# ifdef __SPLIT_KERNEL__ +# undef __BRANCHED_PATH__ +# endif +#endif /* __KERNEL_CUDA__ */ + +#ifdef __KERNEL_OPENCL__ +#endif /* __KERNEL_OPENCL__ */ + /* Scene-based selective features compilation. */ #ifdef __NO_CAMERA_MOTION__ # undef __CAMERA_MOTION__ -- cgit v1.2.3 From 9c7517fb636da9c5a8b4eead09957f29db1a6687 Mon Sep 17 00:00:00 2001 From: Brecht Van Lommel Date: Sun, 17 Mar 2019 01:56:08 +0100 Subject: Fix Cycles OpenCL compile waiting unnecessarily for background shader. Makes preview kernel appear quicker when background color is fixed. --- intern/cycles/render/light.cpp | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/intern/cycles/render/light.cpp b/intern/cycles/render/light.cpp index f60fba65599..8073c622040 100644 --- a/intern/cycles/render/light.cpp +++ b/intern/cycles/render/light.cpp @@ -184,7 +184,7 @@ LightManager::~LightManager() bool LightManager::has_background_light(Scene *scene) { foreach(Light *light, scene->lights) { - if(light->type == LIGHT_BACKGROUND) { + if(light->type == LIGHT_BACKGROUND && light->is_enabled) { return true; } } -- cgit v1.2.3 From 7778a1a0a12fc026dc5bcc2c195b9460d1c77b53 Mon Sep 17 00:00:00 2001 From: Brecht Van Lommel Date: Tue, 19 Feb 2019 17:44:58 +0100 Subject: Cycles: optimization for constant background colors. Skip shader evaluation then, as we already do for lights. Less than 1% faster in my tests, but might as well be consistent for both. --- intern/cycles/kernel/kernel_bake.h | 12 +++-- intern/cycles/kernel/kernel_emission.h | 96 ++++++++++++++++++---------------- intern/cycles/kernel/kernel_shader.h | 91 ++++++++++++++++++-------------- intern/cycles/render/shader.cpp | 31 ++++++++--- 4 files changed, 135 insertions(+), 95 deletions(-) diff --git a/intern/cycles/kernel/kernel_bake.h b/intern/cycles/kernel/kernel_bake.h index 920b10086c5..37c163f2538 100644 --- a/intern/cycles/kernel/kernel_bake.h +++ b/intern/cycles/kernel/kernel_bake.h @@ -351,7 +351,7 @@ ccl_device void kernel_bake_evaluate(KernelGlobals *kg, ccl_global uint4 *input, out = make_float3(roughness, roughness, roughness); } else { - out = shader_emissive_eval(kg, &sd); + out = shader_emissive_eval(&sd); } break; } @@ -475,8 +475,9 @@ ccl_device void kernel_bake_evaluate(KernelGlobals *kg, ccl_global uint4 *input, shader_setup_from_background(kg, &sd, &ray); /* evaluate */ - int flag = 0; /* we can't know which type of BSDF this is for */ - out = shader_eval_background(kg, &sd, &state, flag); + int path_flag = 0; /* we can't know which type of BSDF this is for */ + shader_eval_surface(kg, &sd, &state, path_flag | PATH_RAY_EMISSION); + out = shader_background_eval(&sd); break; } default: @@ -554,8 +555,9 @@ ccl_device void kernel_background_evaluate(KernelGlobals *kg, shader_setup_from_background(kg, &sd, &ray); /* evaluate */ - int flag = 0; /* we can't know which type of BSDF this is for */ - float3 color = shader_eval_background(kg, &sd, &state, flag); + int path_flag = 0; /* we can't know which type of BSDF this is for */ + shader_eval_surface(kg, &sd, &state, path_flag | PATH_RAY_EMISSION); + float3 color = shader_background_eval(&sd); /* write output */ output[i] += make_float4(color.x, color.y, color.z, 0.0f); diff --git a/intern/cycles/kernel/kernel_emission.h b/intern/cycles/kernel/kernel_emission.h index 302bb047647..9c47d1ca7be 100644 --- a/intern/cycles/kernel/kernel_emission.h +++ b/intern/cycles/kernel/kernel_emission.h @@ -29,43 +29,36 @@ ccl_device_noinline float3 direct_emissive_eval(KernelGlobals *kg, /* setup shading at emitter */ float3 eval; - int shader_flag = kernel_tex_fetch(__shaders, (ls->shader & SHADER_MASK)).flags; - -#ifdef __BACKGROUND_MIS__ - if(ls->type == LIGHT_BACKGROUND) { - Ray ray; - ray.D = ls->D; - ray.P = ls->P; - ray.t = 1.0f; - ray.time = time; - ray.dP = differential3_zero(); - ray.dD = dI; - - shader_setup_from_background(kg, emission_sd, &ray); - - path_state_modify_bounce(state, true); - eval = shader_eval_background(kg, emission_sd, state, 0); - path_state_modify_bounce(state, false); - } - else -#endif - if(shader_flag & SD_HAS_CONSTANT_EMISSION) - { - eval.x = kernel_tex_fetch(__shaders, (ls->shader & SHADER_MASK)).constant_emission[0]; - eval.y = kernel_tex_fetch(__shaders, (ls->shader & SHADER_MASK)).constant_emission[1]; - eval.z = kernel_tex_fetch(__shaders, (ls->shader & SHADER_MASK)).constant_emission[2]; + if(shader_constant_emission_eval(kg, ls->shader, &eval)) { if((ls->prim != PRIM_NONE) && dot(ls->Ng, I) < 0.0f) { ls->Ng = -ls->Ng; } } - else - { - shader_setup_from_sample(kg, emission_sd, - ls->P, ls->Ng, I, - ls->shader, ls->object, ls->prim, - ls->u, ls->v, t, time, false, ls->lamp); + else { + /* Setup shader data and call shader_eval_surface once, better + * for GPU coherence and compile times. */ +#ifdef __BACKGROUND_MIS__ + if(ls->type == LIGHT_BACKGROUND) { + Ray ray; + ray.D = ls->D; + ray.P = ls->P; + ray.t = 1.0f; + ray.time = time; + ray.dP = differential3_zero(); + ray.dD = dI; + + shader_setup_from_background(kg, emission_sd, &ray); + } + else +#endif + { + shader_setup_from_sample(kg, emission_sd, + ls->P, ls->Ng, I, + ls->shader, ls->object, ls->prim, + ls->u, ls->v, t, time, false, ls->lamp); - ls->Ng = emission_sd->Ng; + ls->Ng = emission_sd->Ng; + } /* No proper path flag, we're evaluating this for all closures. that's * weak but we'd have to do multiple evaluations otherwise. */ @@ -73,8 +66,16 @@ ccl_device_noinline float3 direct_emissive_eval(KernelGlobals *kg, shader_eval_surface(kg, emission_sd, state, PATH_RAY_EMISSION); path_state_modify_bounce(state, false); - /* Evaluate emissive closure. */ - eval = shader_emissive_eval(kg, emission_sd); + /* Evaluate closures. */ +#ifdef __BACKGROUND_MIS__ + if (ls->type == LIGHT_BACKGROUND) { + eval = shader_background_eval(emission_sd); + } + else +#endif + { + eval = shader_emissive_eval(emission_sd); + } } eval *= ls->eval_fac; @@ -201,7 +202,7 @@ ccl_device_noinline bool direct_emission(KernelGlobals *kg, ccl_device_noinline float3 indirect_primitive_emission(KernelGlobals *kg, ShaderData *sd, float t, int path_flag, float bsdf_pdf) { /* evaluate emissive closure */ - float3 L = shader_emissive_eval(kg, sd); + float3 L = shader_emissive_eval(sd); #ifdef __HAIR__ if(!(path_flag & PATH_RAY_MIS_SKIP) && (sd->flag & SD_USE_MIS) && (sd->type & PRIMITIVE_ALL_TRIANGLE)) @@ -294,7 +295,7 @@ ccl_device_noinline float3 indirect_background(KernelGlobals *kg, #ifdef __BACKGROUND__ int shader = kernel_data.background.surface_shader; - /* use visibility flag to skip lights */ + /* Use visibility flag to skip lights. */ if(shader & SHADER_EXCLUDE_ANY) { if(((shader & SHADER_EXCLUDE_DIFFUSE) && (state->flag & PATH_RAY_DIFFUSE)) || ((shader & SHADER_EXCLUDE_GLOSSY) && @@ -305,20 +306,27 @@ ccl_device_noinline float3 indirect_background(KernelGlobals *kg, return make_float3(0.0f, 0.0f, 0.0f); } - /* evaluate background closure */ + + /* Evaluate background shader. */ + float3 L; + if(!shader_constant_emission_eval(kg, shader, &L)) { # ifdef __SPLIT_KERNEL__ - Ray priv_ray = *ray; - shader_setup_from_background(kg, emission_sd, &priv_ray); + Ray priv_ray = *ray; + shader_setup_from_background(kg, emission_sd, &priv_ray); # else - shader_setup_from_background(kg, emission_sd, ray); + shader_setup_from_background(kg, emission_sd, ray); # endif - path_state_modify_bounce(state, true); - float3 L = shader_eval_background(kg, emission_sd, state, state->flag); - path_state_modify_bounce(state, false); + path_state_modify_bounce(state, true); + shader_eval_surface(kg, emission_sd, state, PATH_RAY_EMISSION); + path_state_modify_bounce(state, false); + + L = shader_background_eval(emission_sd); + } + /* Background MIS weights. */ #ifdef __BACKGROUND_MIS__ - /* check if background light exists or if we should skip pdf */ + /* Check if background light exists or if we should skip pdf. */ int res_x = kernel_data.integrator.pdf_background_res_x; if(!(state->flag & PATH_RAY_MIS_SKIP) && res_x) { diff --git a/intern/cycles/kernel/kernel_shader.h b/intern/cycles/kernel/kernel_shader.h index afb9ff11c10..eff792ec53d 100644 --- a/intern/cycles/kernel/kernel_shader.h +++ b/intern/cycles/kernel/kernel_shader.h @@ -984,9 +984,40 @@ ccl_device float3 shader_bssrdf_sum(ShaderData *sd, float3 *N_, float *texture_b } #endif /* __SUBSURFACE__ */ +/* Constant emission optimization */ + +ccl_device bool shader_constant_emission_eval(KernelGlobals *kg, int shader, float3 *eval) +{ + int shader_index = shader & SHADER_MASK; + int shader_flag = kernel_tex_fetch(__shaders, shader_index).flags; + + if (shader_flag & SD_HAS_CONSTANT_EMISSION) { + *eval = make_float3( + kernel_tex_fetch(__shaders, shader_index).constant_emission[0], + kernel_tex_fetch(__shaders, shader_index).constant_emission[1], + kernel_tex_fetch(__shaders, shader_index).constant_emission[2]); + + return true; + } + + return false; +} + +/* Background */ + +ccl_device float3 shader_background_eval(ShaderData *sd) +{ + if(sd->flag & SD_EMISSION) { + return sd->closure_emission_background; + } + else { + return make_float3(0.0f, 0.0f, 0.0f); + } +} + /* Emission */ -ccl_device float3 shader_emissive_eval(KernelGlobals *kg, ShaderData *sd) +ccl_device float3 shader_emissive_eval(ShaderData *sd) { if(sd->flag & SD_EMISSION) { return emissive_simple_eval(sd->Ng, sd->I) * sd->closure_emission_background; @@ -1034,20 +1065,32 @@ ccl_device void shader_eval_surface(KernelGlobals *kg, ShaderData *sd, sd->num_closure_left = max_closures; #ifdef __OSL__ - if(kg->osl) - OSLShader::eval_surface(kg, sd, state, path_flag); + if(kg->osl) { + if (sd->object == OBJECT_NONE) { + OSLShader::eval_background(kg, sd, state, path_flag); + } + else { + OSLShader::eval_surface(kg, sd, state, path_flag); + } + } else #endif { #ifdef __SVM__ svm_eval_nodes(kg, sd, state, SHADER_TYPE_SURFACE, path_flag); #else - DiffuseBsdf *bsdf = (DiffuseBsdf*)bsdf_alloc(sd, - sizeof(DiffuseBsdf), - make_float3(0.8f, 0.8f, 0.8f)); - if(bsdf != NULL) { - bsdf->N = sd->N; - sd->flag |= bsdf_diffuse_setup(bsdf); + if(sd->object == OBJECT_NONE) { + sd->closure_emission_background = make_float3(0.8f, 0.8f, 0.8f); + sd->flag |= SD_EMISSION; + } + else { + DiffuseBsdf *bsdf = (DiffuseBsdf*)bsdf_alloc(sd, + sizeof(DiffuseBsdf), + make_float3(0.8f, 0.8f, 0.8f)); + if(bsdf != NULL) { + bsdf->N = sd->N; + sd->flag |= bsdf_diffuse_setup(bsdf); + } } #endif } @@ -1057,36 +1100,6 @@ ccl_device void shader_eval_surface(KernelGlobals *kg, ShaderData *sd, } } -/* Background Evaluation */ - -ccl_device float3 shader_eval_background(KernelGlobals *kg, ShaderData *sd, - ccl_addr_space PathState *state, int path_flag) -{ - sd->num_closure = 0; - sd->num_closure_left = 0; - -#ifdef __SVM__ -# ifdef __OSL__ - if(kg->osl) { - OSLShader::eval_background(kg, sd, state, path_flag); - } - else -# endif /* __OSL__ */ - { - svm_eval_nodes(kg, sd, state, SHADER_TYPE_SURFACE, path_flag); - } - - if(sd->flag & SD_EMISSION) { - return sd->closure_emission_background; - } - else { - return make_float3(0.0f, 0.0f, 0.0f); - } -#else /* __SVM__ */ - return make_float3(0.8f, 0.8f, 0.8f); -#endif /* __SVM__ */ -} - /* Volume */ #ifdef __VOLUME__ diff --git a/intern/cycles/render/shader.cpp b/intern/cycles/render/shader.cpp index 9f256a665cd..0f40ab7b15f 100644 --- a/intern/cycles/render/shader.cpp +++ b/intern/cycles/render/shader.cpp @@ -219,20 +219,37 @@ bool Shader::is_constant_emission(float3 *emission) { ShaderInput *surf = graph->output()->input("Surface"); - if(!surf->link || surf->link->parent->type != EmissionNode::node_type) { + if(surf->link == NULL) { return false; } - EmissionNode *node = (EmissionNode*) surf->link->parent; + if(surf->link->parent->type == EmissionNode::node_type) { + EmissionNode *node = (EmissionNode*) surf->link->parent; - assert(node->input("Color")); - assert(node->input("Strength")); + assert(node->input("Color")); + assert(node->input("Strength")); - if(node->input("Color")->link || node->input("Strength")->link) { - return false; + if(node->input("Color")->link || node->input("Strength")->link) { + return false; + } + + *emission = node->color*node->strength; } + else if(surf->link->parent->type == BackgroundNode::node_type) { + BackgroundNode *node = (BackgroundNode*) surf->link->parent; - *emission = node->color*node->strength; + assert(node->input("Color")); + assert(node->input("Strength")); + + if(node->input("Color")->link || node->input("Strength")->link) { + return false; + } + + *emission = node->color*node->strength; + } + else { + return false; + } return true; } -- cgit v1.2.3 From 0676badb80b3137d5ee963036c9726ee78ea0be8 Mon Sep 17 00:00:00 2001 From: Brecht Van Lommel Date: Sun, 17 Mar 2019 02:56:22 +0100 Subject: Fix Windows 32bit buildbot trying to use CUDA, should be disabled. --- build_files/buildbot/slave_compile.py | 8 ++++---- 1 file changed, 4 insertions(+), 4 deletions(-) diff --git a/build_files/buildbot/slave_compile.py b/build_files/buildbot/slave_compile.py index 2a71b69ed53..6a74dad5f4f 100644 --- a/build_files/buildbot/slave_compile.py +++ b/build_files/buildbot/slave_compile.py @@ -125,13 +125,13 @@ if 'cmake' in builder: cuda_cmake_options.append("-DWITH_CYCLES_CUDA_BINARIES=%s" % ('ON' if build_cubins else 'OFF')) if build_cubins or 'cuda' in targets: cuda_cmake_options.append("-DCUDA_64_BIT_DEVICE_CODE=ON") - - # Only modify common cmake options if cuda doesn't require separate target. - if 'cuda' not in targets: - cmake_options += cuda_cmake_options else: cuda_cmake_options.append("-DWITH_CYCLES_CUDA_BINARIES=OFF") + # Only modify common cmake options if cuda doesn't require separate target. + if 'cuda' not in targets: + cmake_options += cuda_cmake_options + cmake_options.append("-DCMAKE_INSTALL_PREFIX=%s" % (install_dir)) cmake_options += cmake_extra_options -- cgit v1.2.3 From 9d2397c710af9180e7e2ec6db42e8513390b4ab1 Mon Sep 17 00:00:00 2001 From: Brecht Van Lommel Date: Sun, 17 Mar 2019 03:02:00 +0100 Subject: Cleanup: remove unused buildbot code. --- build_files/buildbot/slave_compile.py | 63 +++++------------------------------ 1 file changed, 9 insertions(+), 54 deletions(-) diff --git a/build_files/buildbot/slave_compile.py b/build_files/buildbot/slave_compile.py index 6a74dad5f4f..595eacbda80 100644 --- a/build_files/buildbot/slave_compile.py +++ b/build_files/buildbot/slave_compile.py @@ -54,19 +54,16 @@ if 'cmake' in builder: targets = ['blender'] chroot_name = None # If not None command will be delegated to that chroot - cuda_chroot_name = None # If not None cuda compilationcommand will be delegated to that chroot build_cubins = True # Whether to build Cycles CUDA kernels bits = 64 # Config file to be used (relative to blender's sources root) cmake_config_file = "build_files/cmake/config/blender_release.cmake" cmake_player_config_file = None - cmake_cuda_config_file = None # Set build options. cmake_options = [] cmake_extra_options = ['-DCMAKE_BUILD_TYPE:STRING=Release'] - cuda_cmake_options = [] if builder.startswith('mac'): # Set up OSX architecture @@ -75,26 +72,11 @@ if 'cmake' in builder: cmake_extra_options.append('-DCMAKE_OSX_DEPLOYMENT_TARGET=10.9') elif builder.startswith('win'): - if builder.endswith('_vs2017'): - if builder.startswith('win64'): - cmake_options.extend(['-G', 'Visual Studio 15 2017 Win64']) - elif builder.startswith('win32'): - bits = 32 - cmake_options.extend(['-G', 'Visual Studio 15 2017']) - elif builder.endswith('_vc2015'): - if builder.startswith('win64'): - cmake_options.extend(['-G', 'Visual Studio 14 2015 Win64']) - elif builder.startswith('win32'): - bits = 32 - cmake_options.extend(['-G', 'Visual Studio 14 2015']) - cmake_extra_options.append('-DCUDA_NVCC_FLAGS=--cl-version;2013;' + - '--compiler-bindir;C:\\Program Files (x86)\\Microsoft Visual Studio 12.0\\VC\\bin') - else: - if builder.startswith('win64'): - cmake_options.extend(['-G', 'Visual Studio 12 2013 Win64']) - elif builder.startswith('win32'): - bits = 32 - cmake_options.extend(['-G', 'Visual Studio 12 2013']) + if builder.startswith('win64'): + cmake_options.extend(['-G', 'Visual Studio 15 2017 Win64']) + elif builder.startswith('win32'): + bits = 32 + cmake_options.extend(['-G', 'Visual Studio 15 2017']) elif builder.startswith('linux'): tokens = builder.split("_") @@ -121,16 +103,11 @@ if 'cmake' in builder: cmake_options.append("-C" + os.path.join(blender_dir, cmake_config_file)) # Prepare CMake options needed to configure cuda binaries compilation, 64bit only. - if bits == 64: - cuda_cmake_options.append("-DWITH_CYCLES_CUDA_BINARIES=%s" % ('ON' if build_cubins else 'OFF')) - if build_cubins or 'cuda' in targets: - cuda_cmake_options.append("-DCUDA_64_BIT_DEVICE_CODE=ON") + if bits == 64 and build_cubins: + cmake_options.append("-DWITH_CYCLES_CUDA_BINARIES=ON") + cmake_options.append("-DCUDA_64_BIT_DEVICE_CODE=ON") else: - cuda_cmake_options.append("-DWITH_CYCLES_CUDA_BINARIES=OFF") - - # Only modify common cmake options if cuda doesn't require separate target. - if 'cuda' not in targets: - cmake_options += cuda_cmake_options + cmake_options.append("-DWITH_CYCLES_CUDA_BINARIES=OFF") cmake_options.append("-DCMAKE_INSTALL_PREFIX=%s" % (install_dir)) @@ -141,10 +118,6 @@ if 'cmake' in builder: chroot_prefix = ['schroot', '-c', chroot_name, '--'] else: chroot_prefix = [] - if cuda_chroot_name: - cuda_chroot_prefix = ['schroot', '-c', cuda_chroot_name, '--'] - else: - cuda_chroot_prefix = chroot_prefix[:] # Make sure no garbage remained from the previous run if os.path.isdir(install_dir): @@ -162,14 +135,6 @@ if 'cmake' in builder: target_cmake_options = cmake_options[:] if target == 'player': target_cmake_options.append("-C" + os.path.join(blender_dir, cmake_player_config_file)) - elif target == 'cuda': - target_cmake_options += cuda_cmake_options - target_chroot_prefix = cuda_chroot_prefix[:] - target_name = 'cycles_kernel_cuda' - # If cuda binaries are compiled as a separate target, make sure - # other targets don't compile cuda binaries. - if 'cuda' in targets and target != 'cuda': - target_cmake_options.append("-DWITH_CYCLES_CUDA_BINARIES=OFF") # Do extra git fetch because not all platform/git/buildbot combinations # update the origin remote, causing buildinfo to detect local changes. os.chdir(blender_dir) @@ -206,16 +171,6 @@ if 'cmake' in builder: if retcode != 0: sys.exit(retcode) - if builder.startswith('linux') and target == 'cuda': - blender_h = os.path.join(blender_dir, "source", "blender", "blenkernel", "BKE_blender_version.h") - blender_version = int(parse_header_file(blender_h, 'BLENDER_VERSION')) - blender_version = "%d.%d" % (blender_version // 100, blender_version % 100) - kernels = os.path.join(target_build_dir, 'intern', 'cycles', 'kernel') - install_kernels = os.path.join(install_dir, blender_version, 'scripts', 'addons', 'cycles', 'lib') - os.mkdir(install_kernels) - print("Copying cuda binaries from %s to %s" % (kernels, install_kernels)) - os.system('cp %s/*.cubin %s' % (kernels, install_kernels)) - else: print("Unknown building system") sys.exit(1) -- cgit v1.2.3