[Bf-blender-cvs] [49ece611955] cycles_texture_cache: Merge branch 'master' into cycles_texture_cache

Stefan Werner noreply at git.blender.org
Mon Jun 15 12:33:10 CEST 2020


Commit: 49ece611955bd8bfa28c9a504252e7329094d1ff
Author: Stefan Werner
Date:   Wed Mar 25 14:49:25 2020 +0100
Branches: cycles_texture_cache
https://developer.blender.org/rB49ece611955bd8bfa28c9a504252e7329094d1ff

Merge branch 'master' into cycles_texture_cache

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



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

diff --cc intern/cycles/blender/blender_python.cpp
index d4df0e973bc,89bcebda193..0dd95a371b3
--- a/intern/cycles/blender/blender_python.cpp
+++ b/intern/cycles/blender/blender_python.cpp
@@@ -19,10 -19,11 +19,12 @@@
  #include "blender/CCL_api.h"
  
  #include "blender/blender_device.h"
- #include "blender/blender_sync.h"
  #include "blender/blender_session.h"
+ #include "blender/blender_sync.h"
+ #include "blender/blender_util.h"
  
  #include "render/denoising.h"
++#include "render/image_oiio.h"
  #include "render/merge.h"
  
  #include "util/util_debug.h"
@@@ -638,21 -639,6 +640,21 @@@ static PyObject *osl_compile_func(PyObj
  }
  #endif
  
 +static PyObject *oiio_make_tx(PyObject * /*self*/, PyObject *args)
 +{
 +  const char *inputfile = NULL, *outputfile = NULL, *colorspace = NULL;
 +  int extension = EXTENSION_CLIP;
 +
 +  if (!PyArg_ParseTuple(args, "sssi", &inputfile, &outputfile, &colorspace, &extension))
 +    return NULL;
 +
 +  /* return */
-   if (!ImageManager::make_tx(inputfile, outputfile, ustring(colorspace), (ExtensionType)extension))
++  if (!OIIOImageLoader::make_tx(inputfile, outputfile, ustring(colorspace), (ExtensionType)extension))
 +    Py_RETURN_FALSE;
 +
 +  Py_RETURN_TRUE;
 +}
 +
  static PyObject *system_info_func(PyObject * /*self*/, PyObject * /*value*/)
  {
    string system_info = Device::device_capabilities();
diff --cc intern/cycles/device/device_cpu.cpp
index 7386f3a9fb4,57e8523e02a..7e37219ac6e
--- a/intern/cycles/device/device_cpu.cpp
+++ b/intern/cycles/device/device_cpu.cpp
@@@ -34,7 -35,7 +35,8 @@@
  #include "kernel/kernel_types.h"
  #include "kernel/split/kernel_split_data.h"
  #include "kernel/kernel_globals.h"
 +#include "kernel/kernel_oiio_globals.h"
+ #include "kernel/kernel_adaptive_sampling.h"
  
  #include "kernel/filter/filter.h"
  
@@@ -517,20 -525,16 +536,21 @@@ class CPUDevice : public Device 
  #endif
    }
  
 +  void *oiio_memory()
 +  {
 +    return &oiio_globals;
 +  }
 +
    void thread_run(DeviceTask *task)
    {
-     if (task->type == DeviceTask::RENDER) {
+     if (task->type == DeviceTask::RENDER)
        thread_render(*task);
-     }
-     else if (task->type == DeviceTask::FILM_CONVERT)
-       thread_film_convert(*task);
      else if (task->type == DeviceTask::SHADER)
        thread_shader(*task);
+     else if (task->type == DeviceTask::FILM_CONVERT)
+       thread_film_convert(*task);
+     else if (task->type == DeviceTask::DENOISE_BUFFER)
+       thread_denoise(*task);
    }
  
    class CPUDeviceTask : public DeviceTask {
diff --cc intern/cycles/kernel/kernel_path.h
index e746647ecbb,db35303e3f1..18543e64432
--- a/intern/cycles/kernel/kernel_path.h
+++ b/intern/cycles/kernel/kernel_path.h
@@@ -29,8 -30,9 +30,9 @@@
  
  #include "kernel/kernel_write_passes.h"
  #include "kernel/kernel_accumulate.h"
 -#include "kernel/kernel_shader.h"
  #include "kernel/kernel_light.h"
 +#include "kernel/kernel_shader.h"
+ #include "kernel/kernel_adaptive_sampling.h"
  #include "kernel/kernel_passes.h"
  
  #if defined(__VOLUME__) || defined(__SUBSURFACE__)
diff --cc intern/cycles/kernel/osl/osl_services.cpp
index 7849a96ed0c,2857de533f3..4ba0d77b0d2
--- a/intern/cycles/kernel/osl/osl_services.cpp
+++ b/intern/cycles/kernel/osl/osl_services.cpp
@@@ -55,8 -56,8 +56,9 @@@
  
  #include "kernel/kernel_projection.h"
  #include "kernel/kernel_accumulate.h"
 +#include "kernel/kernel_light.h"
  #include "kernel/kernel_shader.h"
+ // clang-format on
  
  CCL_NAMESPACE_BEGIN
  
diff --cc intern/cycles/kernel/svm/svm.h
index 3674b57b59e,abeb8fa7457..40fff6f5c08
--- a/intern/cycles/kernel/svm/svm.h
+++ b/intern/cycles/kernel/svm/svm.h
@@@ -309,12 -312,11 +312,11 @@@ ccl_device_noinline void svm_eval_nodes
          svm_node_vector_displacement(kg, sd, stack, node, &offset);
          break;
  #  endif /* NODES_FEATURE(NODE_FEATURE_BUMP) */
- #  ifdef __TEXTURES__
        case NODE_TEX_IMAGE:
 -        svm_node_tex_image(kg, sd, stack, node, &offset);
 +        svm_node_tex_image(kg, sd, path_flag, stack, node, &offset);
          break;
        case NODE_TEX_IMAGE_BOX:
 -        svm_node_tex_image_box(kg, sd, stack, node);
 +        svm_node_tex_image_box(kg, sd, path_flag, stack, node);
          break;
        case NODE_TEX_NOISE:
          svm_node_tex_noise(kg, sd, stack, node.y, node.z, node.w, &offset);
@@@ -427,9 -422,8 +422,8 @@@
        case NODE_CAMERA:
          svm_node_camera(kg, sd, stack, node.y, node.z, node.w);
          break;
- #  ifdef __TEXTURES__
        case NODE_TEX_ENVIRONMENT:
 -        svm_node_tex_environment(kg, sd, stack, node);
 +        svm_node_tex_environment(kg, sd, path_flag, stack, node);
          break;
        case NODE_TEX_SKY:
          svm_node_tex_sky(kg, sd, stack, node, &offset);
diff --cc intern/cycles/kernel/svm/svm_image.h
index 155c2ee5252,f57c85fc23e..f6db9151b17
--- a/intern/cycles/kernel/svm/svm_image.h
+++ b/intern/cycles/kernel/svm/svm_image.h
@@@ -14,25 -14,9 +14,24 @@@
   * limitations under the License.
   */
  
 +#ifdef __OIIO__
 +#  include "kernel/kernel_oiio_globals.h"
 +#  define NEAREST_LOOKUP_PATHS \
 +    (PATH_RAY_DIFFUSE | PATH_RAY_SHADOW | PATH_RAY_DIFFUSE_ANCESTOR | PATH_RAY_VOLUME_SCATTER | \
 +     PATH_RAY_GLOSSY | PATH_RAY_EMISSION)
 +#  define DIFFUSE_BLUR_PATHS (PATH_RAY_DIFFUSE | PATH_RAY_DIFFUSE_ANCESTOR)
 +#endif
 +
  CCL_NAMESPACE_BEGIN
  
- #ifdef __TEXTURES__
 -ccl_device float4 svm_image_texture(KernelGlobals *kg, int id, float x, float y, uint flags)
 +ccl_device float4 svm_image_texture(KernelGlobals *kg,
 +                                    int id,
 +                                    float x,
 +                                    float y,
 +                                    differential ds,
 +                                    differential dt,
 +                                    uint flags,
 +                                    int path_flag)
  {
    if (id == -1) {
      return make_float4(
diff --cc intern/cycles/render/image.cpp
index f8194e80d1c,67ed1176171..1e447236759
--- a/intern/cycles/render/image.cpp
+++ b/intern/cycles/render/image.cpp
@@@ -32,9 -34,6 +34,8 @@@
  #  include <OSL/oslexec.h>
  #endif
  
 +#include "kernel/kernel_oiio_globals.h"
- #include <OpenImageIO/imagebufalgo.h>
 +
  CCL_NAMESPACE_BEGIN
  
  namespace {
@@@ -113,81 -96,128 +98,128 @@@ ImageHandle::ImageHandle(const ImageHan
    }
  }
  
- ImageManager::~ImageManager()
+ ImageHandle &ImageHandle::operator=(const ImageHandle &other)
  {
-   for (size_t type = 0; type < IMAGE_DATA_NUM_TYPES; type++) {
-     for (size_t slot = 0; slot < images[type].size(); slot++)
-       assert(!images[type][slot]);
+   clear();
+   manager = other.manager;
+   tile_slots = other.tile_slots;
+ 
+   foreach (const int slot, tile_slots) {
+     manager->add_image_user(slot);
    }
+ 
+   return *this;
  }
  
- void ImageManager::set_pack_images(bool pack_images_)
+ ImageHandle::~ImageHandle()
  {
-   pack_images = pack_images_;
+   clear();
  }
  
- void ImageManager::set_oiio_texture_system(void *texture_system)
+ void ImageHandle::clear()
  {
-   oiio_texture_system = texture_system;
+   foreach (const int slot, tile_slots) {
+     manager->remove_image_user(slot);
+   }
+ 
+   tile_slots.clear();
+   manager = NULL;
  }
  
- bool ImageManager::set_animation_frame_update(int frame)
+ bool ImageHandle::empty()
  {
-   if (frame != animation_frame) {
-     animation_frame = frame;
+   return tile_slots.empty();
+ }
  
-     for (size_t type = 0; type < IMAGE_DATA_NUM_TYPES; type++) {
-       for (size_t slot = 0; slot < images[type].size(); slot++) {
-         if (images[type][slot] && images[type][slot]->animated)
-           return true;
-       }
-     }
+ int ImageHandle::num_tiles()
+ {
+   return tile_slots.size();
+ }
+ 
+ ImageMetaData ImageHandle::metadata()
+ {
+   if (tile_slots.empty()) {
+     return ImageMetaData();
    }
  
-   return false;
+   ImageManager::Image *img = manager->images[tile_slots.front()];
+   manager->load_image_metadata(img);
+   return img->metadata;
  }
  
- device_memory *ImageManager::image_memory(int flat_slot)
+ int ImageHandle::svm_slot(const int tile_index) const
  {
-   ImageDataType type;
-   int slot = flattened_slot_to_type_index(flat_slot, &type);
+   if (tile_index >= tile_slots.size()) {
+     return -1;
+   }
  
-   Image *img = images[type][slot];
 -  if (manager->osl_texture_system) {
++  if (manager->oiio_texture_system) {
+     ImageManager::Image *img = manager->images[tile_slots[tile_index]];
+     if (!img->loader->osl_filepath().empty()) {
+       return -1;
+     }
+   }
  
-   return img->mem;
+   return tile_slots[tile_index];
  }
  
- bool ImageManager::get_image_metadata(int flat_slot, ImageMetaData &metadata)
+ device_texture *ImageHandle::image_memory(const int tile_index) const
  {
-   if (flat_slot == -1) {
-     return false;
+   if (tile_index >= tile_slots.size()) {
+     return NULL;
    }
  
-   ImageDataType type;
-   int slot = flattened_slot_to_type_index(flat_slot, &type);
+   ImageManager::Image *img = manager->images[tile_slots[tile_index]];
+   return img ? img->mem : NULL;
+ }
  
-   Image *img = images[type][slot];
-   if (img) {
-     metadata = img->metadata;
-     return true;
-   }
+ bool ImageHandle::operator==(const ImageHandle &other) const
+ {
+   return manager == other.manager && tile_slots == other.tile_slots;
+ }
  
-   return false;
+ /* Image MetaData */
+ 
+ ImageMetaData::ImageMetaData()
+     : channels(0),
+       width(0),
+       height(0),
+       depth(0),
+       type(IMAGE_DATA_NUM_TYPES),
+       colorspace(u_colorspace_raw),
+       colorspace_file_format(""),
+       use_transform_3d(false),
+       compress_as_srgb(false)
+ {
  }
  
- void ImageManager::metadata_detect_colorspace(ImageMetaData &metadata, const char *file_format)
+ bool ImageMetaData::operator==(const ImageMetaData &other) const
+ {
+   return channels == other.channels && width == other.width && height == other.height &&
+          depth == other.depth && use_transform_3d == other.use_transform_3d &&
+          (!use_transform_3d || transform_3d == other.transform_3d) && type == other.type &&
+          colorspace == other.colorspace && compress_as_srgb == other.compress_

@@ Diff output truncated at 10240 characters. @@



More information about the Bf-blender-cvs mailing list