[Bf-blender-cvs] [ff860b516c9] cycles-x: Merge branch 'master' into cycles-x

Sergey Sharybin noreply at git.blender.org
Mon May 10 11:56:02 CEST 2021


Commit: ff860b516c934c10cde1dacf5930399c539cf410
Author: Sergey Sharybin
Date:   Mon May 10 11:52:00 2021 +0200
Branches: cycles-x
https://developer.blender.org/rBff860b516c934c10cde1dacf5930399c539cf410

Merge branch 'master' into cycles-x

===================================================================



===================================================================

diff --cc intern/cycles/blender/blender_session.cpp
index c80320beb36,89854f6a0e5..6bb08666f0d
--- a/intern/cycles/blender/blender_session.cpp
+++ b/intern/cycles/blender/blender_session.cpp
@@@ -245,18 -237,21 +245,21 @@@ void BlenderSession::reset_session(BL::
      sync->sync_recalc(b_depsgraph, b_v3d);
    }
  
+   BL::Object b_camera_override(b_engine.camera_override());
+   sync->sync_camera(b_render, b_camera_override, width, height, "");
+ 
    BL::SpaceView3D b_null_space_view3d(PointerRNA_NULL);
    BL::RegionView3D b_null_region_view3d(PointerRNA_NULL);
 -  BufferParams buffer_params = BlenderSync::get_buffer_params(b_render,
 -                                                              b_null_space_view3d,
 -                                                              b_null_region_view3d,
 -                                                              scene->camera,
 -                                                              width,
 -                                                              height,
 -                                                              session_params.denoising.use);
 +  BufferParams buffer_params = BlenderSync::get_buffer_params(
 +      b_render, b_null_space_view3d, b_null_region_view3d, scene->camera, width, height);
    session->reset(buffer_params, session_params.samples);
  
 -  b_engine.use_highlight_tiles(session_params.progressive_refine == false);
 +  /* TODO(sergey): Decice on what is to be communicated to the engine here. There is no tiled
 +   * rendering for from visual point of view when render buffer fits big tile. But for huge
 +   * render resolutions it might still be helpful to see which big tile is being sampled. */
 +  /* TODO(sergey): If some logic is needed here, de-duplicate it with the constructor using some
 +   * sort of utility function. */
 +  /* b_engine.use_highlight_tiles(session_params.progressive_refine == false); */
  
    /* reset time */
    start_resize_time = 0.0;
diff --cc intern/cycles/device/optix/device_impl.cpp
index 5843d88ce88,00000000000..2bb31d8d1d3
mode 100644,000000..100644
--- a/intern/cycles/device/optix/device_impl.cpp
+++ b/intern/cycles/device/optix/device_impl.cpp
@@@ -1,1414 -1,0 +1,1448 @@@
 +/*
 + * Copyright 2019, NVIDIA Corporation.
 + * Copyright 2019, Blender Foundation.
 + *
 + * Licensed under the Apache License, Version 2.0 (the "License");
 + * you may not use this file except in compliance with the License.
 + * You may obtain a copy of the License at
 + *
 + * http://www.apache.org/licenses/LICENSE-2.0
 + *
 + * Unless required by applicable law or agreed to in writing, software
 + * distributed under the License is distributed on an "AS IS" BASIS,
 + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
 + * See the License for the specific language governing permissions and
 + * limitations under the License.
 + */
 +
 +#ifdef WITH_OPTIX
 +
 +#  include "device/optix/device_impl.h"
 +
 +#  include "bvh/bvh.h"
 +#  include "bvh/bvh_optix.h"
 +#  include "render/buffers.h"
 +#  include "render/hair.h"
 +#  include "render/mesh.h"
 +#  include "render/object.h"
 +#  include "render/scene.h"
 +
 +#  include "util/util_debug.h"
 +#  include "util/util_logging.h"
 +#  include "util/util_md5.h"
 +#  include "util/util_path.h"
 +#  include "util/util_progress.h"
 +#  include "util/util_time.h"
 +
 +#  undef __KERNEL_CPU__
 +#  define __KERNEL_OPTIX__
 +#  include "kernel/device/optix/globals.h"
 +
 +CCL_NAMESPACE_BEGIN
 +
 +OptiXDevice::Denoiser::Denoiser(CUDADevice *device)
 +    : device(device), state(device, "__denoiser_state")
 +{
 +}
 +
 +OptiXDevice::Denoiser::~Denoiser()
 +{
 +  const CUDAContextScope scope(device);
 +  if (optix_denoiser != nullptr) {
 +    optixDenoiserDestroy(optix_denoiser);
 +  }
 +}
 +
 +OptiXDevice::OptiXDevice(const DeviceInfo &info, Stats &stats, Profiler &profiler)
 +    : CUDADevice(info, stats, profiler),
 +      sbt_data(this, "__sbt", MEM_READ_ONLY),
 +      launch_params(this, "__params"),
 +      denoiser_(this)
 +{
 +  /* Make the CUDA context current. */
 +  if (!cuContext) {
 +    /* Do not initialize if CUDA context creation failed already. */
 +    return;
 +  }
 +  const CUDAContextScope scope(this);
 +
 +  /* Create OptiX context for this device. */
 +  OptixDeviceContextOptions options = {};
 +#  ifdef WITH_CYCLES_LOGGING
 +  options.logCallbackLevel = 4; /* Fatal = 1, Error = 2, Warning = 3, Print = 4. */
 +  options.logCallbackFunction = [](unsigned int level, const char *, const char *message, void *) {
 +    switch (level) {
 +      case 1:
 +        LOG_IF(FATAL, VLOG_IS_ON(1)) << message;
 +        break;
 +      case 2:
 +        LOG_IF(ERROR, VLOG_IS_ON(1)) << message;
 +        break;
 +      case 3:
 +        LOG_IF(WARNING, VLOG_IS_ON(1)) << message;
 +        break;
 +      case 4:
 +        LOG_IF(INFO, VLOG_IS_ON(1)) << message;
 +        break;
 +    }
 +  };
 +#  endif
 +#  if OPTIX_ABI_VERSION >= 41 && defined(WITH_CYCLES_DEBUG)
 +  options.validationMode = OPTIX_DEVICE_CONTEXT_VALIDATION_MODE_ALL;
 +#  endif
 +  optix_assert(optixDeviceContextCreate(cuContext, &options, &context));
 +#  ifdef WITH_CYCLES_LOGGING
 +  optix_assert(optixDeviceContextSetLogCallback(
 +      context, options.logCallbackFunction, options.logCallbackData, options.logCallbackLevel));
 +#  endif
 +
 +  /* Fix weird compiler bug that assigns wrong size. */
 +  launch_params.data_elements = sizeof(KernelParamsOptiX);
 +
 +  /* Allocate launch parameter buffer memory on device. */
 +  launch_params.alloc_to_device(1);
 +}
 +
 +OptiXDevice::~OptiXDevice()
 +{
 +  /* Make CUDA context current. */
 +  const CUDAContextScope scope(this);
 +
 +  sbt_data.free();
 +  texture_info.free();
 +  launch_params.free();
 +
 +  /* Unload modules. */
 +  if (optix_module != NULL) {
 +    optixModuleDestroy(optix_module);
 +  }
 +  for (unsigned int i = 0; i < 2; ++i) {
 +    if (builtin_modules[i] != NULL) {
 +      optixModuleDestroy(builtin_modules[i]);
 +    }
 +  }
 +  for (unsigned int i = 0; i < NUM_PIPELINES; ++i) {
 +    if (pipelines[i] != NULL) {
 +      optixPipelineDestroy(pipelines[i]);
 +    }
 +  }
 +
 +  optixDeviceContextDestroy(context);
 +}
 +
 +unique_ptr<DeviceQueue> OptiXDevice::gpu_queue_create()
 +{
 +  return make_unique<OptiXDeviceQueue>(this);
 +}
 +
 +BVHLayoutMask OptiXDevice::get_bvh_layout_mask() const
 +{
 +  /* CUDA kernels are used when doing baking, so need to build a BVH those can understand too! */
 +  if (optix_module == NULL) {
 +    return CUDADevice::get_bvh_layout_mask();
 +  }
 +
 +  /* OptiX has its own internal acceleration structure format. */
 +  return BVH_LAYOUT_OPTIX;
 +}
 +
 +string OptiXDevice::compile_kernel_get_common_cflags(
 +    const DeviceRequestedFeatures &requested_features)
 +{
 +  string common_cflags = CUDADevice::compile_kernel_get_common_cflags(requested_features);
 +
 +  /* Add OptiX SDK include directory to include paths. */
 +  const char *optix_sdk_path = getenv("OPTIX_ROOT_DIR");
 +  if (optix_sdk_path) {
 +    common_cflags += string_printf(" -I\"%s/include\"", optix_sdk_path);
 +  }
 +
 +  /* Specialization for shader raytracing. */
 +  if (requested_features.use_shader_raytrace) {
 +    common_cflags += " --keep-device-functions";
 +  }
 +  else {
 +    common_cflags += " -D __NO_SHADER_RAYTRACE__";
 +  }
 +
 +  return common_cflags;
 +}
 +
 +bool OptiXDevice::load_kernels(const DeviceRequestedFeatures &requested_features)
 +{
 +  if (have_error()) {
 +    /* Abort early if context creation failed already. */
 +    return false;
 +  }
 +
 +  /* Load CUDA modules because we need some of the utility kernels. */
 +  if (!CUDADevice::load_kernels(requested_features)) {
 +    return false;
 +  }
 +
 +  /* Baking is currently performed using CUDA, so no need to load OptiX kernels.
 +   * Can also skip creating OptiX module if only doing denoising (no path tracing).
 +   */
 +  if (requested_features.use_baking || !requested_features.use_path_tracing) {
 +    return true;
 +  }
 +
 +  /* TODO: Shader raytracing requires OptiX to overwrite the shading kernels too! */
 +  if (requested_features.use_shader_raytrace) {
 +    set_error("AO and Bevel shader nodes are not currently supported with OptiX");
 +    return false;
 +  }
 +
 +  const CUDAContextScope scope(this);
 +
 +  /* Unload existing OptiX module and pipelines first. */
 +  if (optix_module != NULL) {
 +    optixModuleDestroy(optix_module);
 +    optix_module = NULL;
 +  }
 +  for (unsigned int i = 0; i < 2; ++i) {
 +    if (builtin_modules[i] != NULL) {
 +      optixModuleDestroy(builtin_modules[i]);
 +      builtin_modules[i] = NULL;
 +    }
 +  }
 +  for (unsigned int i = 0; i < NUM_PIPELINES; ++i) {
 +    if (pipelines[i] != NULL) {
 +      optixPipelineDestroy(pipelines[i]);
 +      pipelines[i] = NULL;
 +    }
 +  }
 +
 +  OptixModuleCompileOptions module_options = {};
 +  module_options.maxRegisterCount = 0; /* Do not set an explicit register limit. */
 +#  ifdef WITH_CYCLES_DEBUG
 +  module_options.optLevel = OPTIX_COMPILE_OPTIMIZATION_LEVEL_0;
 +  module_options.debugLevel = OPTIX_COMPILE_DEBUG_LEVEL_FULL;
 +#  else
 +  module_options.optLevel = OPTIX_COMPILE_OPTIMIZATION_LEVEL_3;
 +  module_options.debugLevel = OPTIX_COMPILE_DEBUG_LEVEL_LINEINFO;
 +#  endif
 +
 +#  if OPTIX_ABI_VERSION >= 41
 +  module_options.boundValues = nullptr;
 +  module_options.numBoundValues = 0;
 +#  endif
 +
 +  OptixPipelineCompileOptions pipeline_options = {};
 +  /* Default to no motion blur and two-level graph, since it is the fastest option. */
 +  pipeline_options.usesMotionBlur = false;
 +  pipeline_options.traversableGraphFlags =
 +      OPTIX_TRAVERSABLE_GRAPH_FLAG_ALLOW_SINGLE_LEVEL_INSTANCING;
 +  pipeline_options.numPayloadValues = 6;
 +  pipeline_options.numAttributeValues = 2; /* u, v */
 +  pipeline_options.exceptionFlags = OPTIX_EXCEPTION_FLAG_NONE;
 +  pipeline_options.pipelineLaunchParamsVariableName = "__params"; /* See globals.h */
 +
 +#  if OPTIX_ABI_VERSION >= 36
 +  pipeline_options.usesPrimitiveTypeFlags = OPTIX_PRIMITIVE_TYPE_FLAGS_TRIANGLE;
 +  if (requested_features.use_hair) {
 +    if (DebugFlags().optix.curves_api && requested_features.use_hair_thic

@@ Diff output truncated at 10240 characters. @@



More information about the Bf-blender-cvs mailing list