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

Brecht Van Lommel noreply at git.blender.org
Tue Jul 6 11:48:45 CEST 2021


Commit: acbf2c9f484b7b536f15995f4f1af78902f4aaff
Author: Brecht Van Lommel
Date:   Tue Jul 6 11:36:32 2021 +0200
Branches: cycles-x
https://developer.blender.org/rBacbf2c9f484b7b536f15995f4f1af78902f4aaff

Merge branch 'master' into cycles-x

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



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

diff --cc intern/cycles/blender/blender_sync.cpp
index 9659acc2cdd,3b3a193b3e8..ebea976f134
--- a/intern/cycles/blender/blender_sync.cpp
+++ b/intern/cycles/blender/blender_sync.cpp
@@@ -285,9 -279,8 +285,8 @@@ void BlenderSync::sync_data(BL::RenderS
  
  /* Integrator */
  
 -void BlenderSync::sync_integrator()
 +void BlenderSync::sync_integrator(BL::ViewLayer &b_view_layer, bool background)
  {
-   BL::RenderSettings r = b_scene.render();
    PointerRNA cscene = RNA_pointer_get(&b_scene.ptr, "cycles");
  
    experimental = (get_enum(cscene, "feature_set") != 0);
@@@ -331,27 -324,60 +330,27 @@@
    integrator->set_sample_clamp_direct(get_float(cscene, "sample_clamp_direct"));
    integrator->set_sample_clamp_indirect(get_float(cscene, "sample_clamp_indirect"));
    if (!preview) {
-     integrator->set_motion_blur(r.use_motion_blur());
+     integrator->set_motion_blur(view_layer.use_motion_blur);
    }
  
 -  integrator->set_method((Integrator::Method)get_enum(
 -      cscene, "progressive", Integrator::NUM_METHODS, Integrator::PATH));
 -
 -  integrator->set_sample_all_lights_direct(get_boolean(cscene, "sample_all_lights_direct"));
 -  integrator->set_sample_all_lights_indirect(get_boolean(cscene, "sample_all_lights_indirect"));
    integrator->set_light_sampling_threshold(get_float(cscene, "light_sampling_threshold"));
  
 +  const bool use_adaptive_sampling = RNA_boolean_get(&cscene, "use_adaptive_sampling");
 +
    SamplingPattern sampling_pattern = (SamplingPattern)get_enum(
        cscene, "sampling_pattern", SAMPLING_NUM_PATTERNS, SAMPLING_PATTERN_SOBOL);
 -
 -  int adaptive_min_samples = INT_MAX;
 -
 -  if (RNA_boolean_get(&cscene, "use_adaptive_sampling")) {
 +  if (use_adaptive_sampling) {
      sampling_pattern = SAMPLING_PATTERN_PMJ;
 -    adaptive_min_samples = get_int(cscene, "adaptive_min_samples");
 -    integrator->set_adaptive_threshold(get_float(cscene, "adaptive_threshold"));
 -  }
 -  else {
 -    integrator->set_adaptive_threshold(0.0f);
    }
 -
    integrator->set_sampling_pattern(sampling_pattern);
  
 -  int diffuse_samples = get_int(cscene, "diffuse_samples");
 -  int glossy_samples = get_int(cscene, "glossy_samples");
 -  int transmission_samples = get_int(cscene, "transmission_samples");
 -  int ao_samples = get_int(cscene, "ao_samples");
 -  int mesh_light_samples = get_int(cscene, "mesh_light_samples");
 -  int subsurface_samples = get_int(cscene, "subsurface_samples");
 -  int volume_samples = get_int(cscene, "volume_samples");
 +  integrator->set_use_adaptive_sampling(use_adaptive_sampling);
 +  integrator->set_adaptive_threshold(get_float(cscene, "adaptive_threshold"));
  
 +  int adaptive_min_samples = get_int(cscene, "adaptive_min_samples");
    if (get_boolean(cscene, "use_square_samples")) {
 -    integrator->set_diffuse_samples(diffuse_samples * diffuse_samples);
 -    integrator->set_glossy_samples(glossy_samples * glossy_samples);
 -    integrator->set_transmission_samples(transmission_samples * transmission_samples);
 -    integrator->set_ao_samples(ao_samples * ao_samples);
 -    integrator->set_mesh_light_samples(mesh_light_samples * mesh_light_samples);
 -    integrator->set_subsurface_samples(subsurface_samples * subsurface_samples);
 -    integrator->set_volume_samples(volume_samples * volume_samples);
      adaptive_min_samples = min(adaptive_min_samples * adaptive_min_samples, INT_MAX);
    }
 -  else {
 -    integrator->set_diffuse_samples(diffuse_samples);
 -    integrator->set_glossy_samples(glossy_samples);
 -    integrator->set_transmission_samples(transmission_samples);
 -    integrator->set_ao_samples(ao_samples);
 -    integrator->set_mesh_light_samples(mesh_light_samples);
 -    integrator->set_subsurface_samples(subsurface_samples);
 -    integrator->set_volume_samples(volume_samples);
 -  }
 -
    integrator->set_adaptive_min_samples(adaptive_min_samples);
  
    if (get_boolean(cscene, "use_fast_gi")) {
@@@ -582,23 -601,14 +583,24 @@@ void BlenderSync::sync_render_passes(BL
  
    /* loop over passes */
    for (BL::RenderPass &b_pass : b_rlay.passes) {
 -    PassType pass_type = get_pass_type(b_pass);
 +    const BlenderPassInfo pass_info = get_blender_pass_info(b_pass);
  
 -    if (pass_type == PASS_MOTION &&
 +    if (pass_info.type == PASS_NONE) {
 +      LOG(ERROR) << "Unknown pass " << b_pass.name();
 +      continue;
 +    }
 +
-     if (pass_info.type == PASS_MOTION && b_scene.render().use_motion_blur()) {
++    if (pass_info.type == PASS_MOTION &&
+         (b_view_layer.use_motion_blur() && b_scene.render().use_motion_blur())) {
        continue;
      }
 -    if (pass_type != PASS_NONE)
 -      Pass::add(pass_type, passes, b_pass.name().c_str());
 +
 +    if (pass_info.mode == PassMode::DENOISED) {
 +      Pass::add_denoising_read(passes, pass_info.type, b_pass.name().c_str());
 +    }
 +    else {
 +      Pass::add(passes, pass_info.type, b_pass.name().c_str());
 +    }
    }
  
    PointerRNA crl = RNA_pointer_get(&b_view_layer.ptr, "cycles");
diff --cc intern/cycles/device/optix/device_impl.h
index 78a7d382440,00000000000..65619d42b7b
mode 100644,000000..100644
--- a/intern/cycles/device/optix/device_impl.h
+++ b/intern/cycles/device/optix/device_impl.h
@@@ -1,177 -1,0 +1,177 @@@
 +/*
 + * 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.
 + */
 +
 +#pragma once
 +
 +#ifdef WITH_OPTIX
 +
 +#  include "device/cuda/device_impl.h"
 +#  include "device/optix/queue.h"
 +#  include "device/optix/util.h"
 +#  include "kernel/kernel_types.h"
 +
 +CCL_NAMESPACE_BEGIN
 +
 +class BVHOptiX;
 +struct KernelParamsOptiX;
 +
 +/* List of OptiX program groups. */
 +enum {
 +  PG_RGEN_INTERSECT_CLOSEST,
 +  PG_RGEN_INTERSECT_SHADOW,
 +  PG_RGEN_INTERSECT_SUBSURFACE,
 +  PG_RGEN_SHADE_SURFACE_RAYTRACE,
 +  PG_MISS,
 +  PG_HITD, /* Default hit group. */
 +  PG_HITS, /* __SHADOW_RECORD_ALL__ hit group. */
 +  PG_HITL, /* __BVH_LOCAL__ hit group (only used for triangles). */
 +#  if OPTIX_ABI_VERSION >= 36
 +  PG_HITD_MOTION,
 +  PG_HITS_MOTION,
 +#  endif
 +  PG_CALL_SVM_AO,
 +  PG_CALL_SVM_BEVEL,
 +  NUM_PROGRAM_GROUPS
 +};
 +
 +static const int MISS_PROGRAM_GROUP_OFFSET = PG_MISS;
 +static const int NUM_MIS_PROGRAM_GROUPS = 1;
 +static const int HIT_PROGAM_GROUP_OFFSET = PG_HITD;
 +#  if OPTIX_ABI_VERSION >= 36
 +static const int NUM_HIT_PROGRAM_GROUPS = 5;
 +#  else
 +static const int NUM_HIT_PROGRAM_GROUPS = 3;
 +#  endif
 +static const int CALLABLE_PROGRAM_GROUPS_BASE = PG_CALL_SVM_AO;
 +static const int NUM_CALLABLE_PROGRAM_GROUPS = 2;
 +
 +/* List of OptiX pipelines. */
 +enum { PIP_SHADE_RAYTRACE, PIP_INTERSECT, NUM_PIPELINES };
 +
 +/* A single shader binding table entry. */
 +struct SbtRecord {
 +  char header[OPTIX_SBT_RECORD_HEADER_SIZE];
 +};
 +
 +class OptiXDevice : public CUDADevice {
 + public:
 +  OptixDeviceContext context = NULL;
 +
 +  OptixModule optix_module = NULL; /* All necessary OptiX kernels are in one module. */
 +  OptixModule builtin_modules[2] = {};
 +  OptixPipeline pipelines[NUM_PIPELINES] = {};
 +
 +  bool motion_blur = false;
 +  device_vector<SbtRecord> sbt_data;
 +  device_only_memory<KernelParamsOptiX> launch_params;
 +  OptixTraversableHandle tlas_handle = 0;
 +
 +  vector<device_only_memory<char>> delayed_free_bvh_memory;
 +  thread_mutex delayed_free_bvh_mutex;
 +
 +  class Denoiser {
 +   public:
 +    explicit Denoiser(OptiXDevice *device);
 +    ~Denoiser();
 +
 +    OptiXDevice *device;
 +    OptiXDeviceQueue queue;
 +
 +    OptixDenoiser optix_denoiser = nullptr;
 +
 +    /* Configuration size, as provided to `optixDenoiserSetup`.
 +     * If the `optixDenoiserSetup()` was never used on the current `optix_denoiser` the
 +     * `is_configured` will be false. */
 +    bool is_configured = false;
 +    int2 configured_size = make_int2(0, 0);
 +
 +    /* OptiX denoiser state and scratch buffers, stored in a single memory buffer.
 +     * The memory layout goes as following: [denoiser state][scratch buffer]. */
 +    device_only_memory<unsigned char> state;
 +    size_t scratch_offset = 0;
 +    size_t scratch_size = 0;
 +
 +    int input_passes = 0;
 +  };
 +  Denoiser denoiser_;
 +
 + public:
 +  OptiXDevice(const DeviceInfo &info, Stats &stats, Profiler &profiler);
 +  ~OptiXDevice();
 +
 + private:
 +  BVHLayoutMask get_bvh_layout_mask() const override;
 +
 +  string compile_kernel_get_common_cflags(
 +      const DeviceRequestedFeatures &requested_features) override;
 +
 +  bool load_kernels(const DeviceRequestedFeatures &requested_features) override;
 +
 +  bool build_optix_bvh(BVHOptiX *bvh,
 +                       OptixBuildOperation operation,
 +                       const OptixBuildInput &build_input,
 +                       uint16_t num_motion_steps);
 +
 +  void build_bvh(BVH *bvh, Progress &progress, bool refit) override;
 +
 +  void release_optix_bvh(BVH *bvh) override;
 +  void free_bvh_memory_delayed();
 +
 +  void const_copy_to(const char *name, void *host, size_t size) override;
 +
 +  void update_launch_params(size_t offset, void *data, size_t data_size);
 +
 +  virtual unique_ptr<DeviceQueue> gpu_queue_create() override;
 +
 +  /* --------------------------------------------------------------------
 +   * Denoising.
 +   */
 +
 +  class DenoiseContext;
 +  class DenoisePass;
 +
 +  virtual void denoise_buffer(const DeviceDenoiseTask &task) override;
-   virtual DeviceQueue *get_denoise_queue();
++  virtual DeviceQueue *get_denoise_queue() override;
 +
 +  void denoise_pass(DenoiseContext &context, PassType pass_type);
 +
 +  /* Read pixels from the input noisy image and store scaled result in the given memory. */
 +  void denoise_r

@@ Diff output truncated at 10240 characters. @@



More information about the Bf-blender-cvs mailing list