Commit: 295944b49e45e009bd11d36af9b7d670c068ec36
Author: Stefan Werner
Date:   Fri Aug 3 06:02:30 2018 +0200
Branches: cycles_texture_cache
https://developer.blender.org/rB295944b49e45e009bd11d36af9b7d670c068ec36

Merge branch 'master' of git.blender.org:blender into cycles_texture_cache

# Conflicts:
#       intern/cycles/render/image.cpp
#       intern/cycles/render/nodes.cpp
#       intern/cycles/render/osl.cpp

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



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

diff --cc intern/cycles/blender/addon/properties.py
index 5c92b9dc9ca,c97d942af9d..62ca4da683f
--- a/intern/cycles/blender/addon/properties.py
+++ b/intern/cycles/blender/addon/properties.py
@@@ -654,65 -655,8 +655,65 @@@ class CyclesRenderSettings(bpy.types.Pr
              default='OFF',
              description="Limit texture size used by final rendering",
              items=enum_texture_limit
-             )
+         )
  
 +        cls.texture_cache_size = IntProperty(
 +            name="Texture Cache Size (MB)",
 +            default=0,
 +            description="The size of the OpenImageIO texture cache in MB. A 
value of 0 turns off texture caching. Typical values are in the range of 100s 
of MB",
 +            min=0
 +        )
 +
 +        cls.texture_auto_convert = BoolProperty(
 +            name="Auto Convert Textures",
 +            default=True,
 +            description="Automatically convert textures to .tx files for 
optimal texture cache performance"
 +        )
 +
 +        cls.texture_accept_unmipped = BoolProperty(
 +            name="Accept Unmipped",
 +            default=True,
 +            description="Texture cached rendering without mip mapping is very 
expensive. Uncheck to prevent Cycles from using textures that are not mip 
mapped"
 +        )
 +
 +        cls.texture_accept_untiled = BoolProperty(
 +            name="Accept Untiled",
 +            default=True,
 +            description="Texture cached rendering without tiled textures is 
very expensive. Uncheck to prevent Cycles from using textures that are not 
tiled"
 +        )
 +
 +        cls.texture_auto_tile = BoolProperty(
 +            name="Auto Tile",
 +            default=True,
 +            description="On the fly creation of tiled versions of textures 
that are not tiled. This can increase render time but helps reduce memory usage"
 +        )
 +
 +        cls.texture_auto_mip = BoolProperty(
 +            name="Auto Mip",
 +            default=True,
 +            description="On the fly creation of mip maps of textures that are 
not mip mapped. This can increase render time but helps reduce memory usage"
 +        )
 + 
 +        cls.texture_tile_size = IntProperty(
 +            name="Tile Size",
 +            default=64,
 +            description="The size of tiles that Cycles uses for auto tiling"
 +        )
 +
 +        cls.texture_blur_diffuse = FloatProperty(
 +            name="Diffuse Blur",
 +            default=0.0156,
 +            description="The amount of texture blur applied to diffuse 
bounces",
 +            min = 0.0, max = 1.0
 +        )
 +
 +        cls.texture_blur_glossy = FloatProperty(
 +            name="Glossy Blur",
 +            default=0.0,
 +            description="The amount of texture blur applied to diffuse 
bounces",
 +            min = 0.0, max = 1.0
 +        )
 +
          cls.ao_bounces = IntProperty(
              name="AO Bounces",
              default=0,
diff --cc intern/cycles/device/device.h
index dfc9d366738,2400788c833..753368bbac7
--- a/intern/cycles/device/device.h
+++ b/intern/cycles/device/device.h
@@@ -293,11 -293,8 +293,11 @@@ public
  
        /* open shading language, only for CPU device */
        virtual void *osl_memory() { return NULL; }
 +      
 +      /* open image io, only for CPU device */
 +      virtual void *oiio_memory() { return NULL; }
  
-       /* load/compile kernels, must be called before adding tasks */ 
+       /* load/compile kernels, must be called before adding tasks */
        virtual bool load_kernels(
                const DeviceRequestedFeatures& /*requested_features*/)
        { return true; }
diff --cc intern/cycles/kernel/closure/bsdf_phong_ramp.h
index 8c8d4fdffef,91c7803346d..8b550397826
--- a/intern/cycles/kernel/closure/bsdf_phong_ramp.h
+++ b/intern/cycles/kernel/closure/bsdf_phong_ramp.h
@@@ -104,12 -104,10 +104,12 @@@ ccl_device int bsdf_phong_ramp_sample(c
                float3 R = (2 * cosNO) * bsdf->N - I;
  
  #ifdef __RAY_DIFFERENTIALS__
 -              *domega_in_dx = (2 * dot(bsdf->N, dIdx)) * bsdf->N - dIdx;
 -              *domega_in_dy = (2 * dot(bsdf->N, dIdy)) * bsdf->N - dIdy;
 +              *domega_in_dx = (2.0f * dot(bsdf->N, dIdx)) * bsdf->N - dIdx;
 +              *domega_in_dy = (2.0f * dot(bsdf->N, dIdy)) * bsdf->N - dIdy;
 +              *domega_in_dx *= 10.0f;
 +              *domega_in_dy *= 10.0f;
  #endif
-               
+ 
                float3 T, B;
                make_orthonormals (R, &T, &B);
                float phi = M_2PI_F * randu;
diff --cc intern/cycles/kernel/closure/bsdf_util.h
index dacc406cdab,b080e025d16..f87b3667431
--- a/intern/cycles/kernel/closure/bsdf_util.h
+++ b/intern/cycles/kernel/closure/bsdf_util.h
@@@ -65,16 -62,16 +65,16 @@@ ccl_device float fresnel_dielectric
                Nn   = -N;
                *is_inside = true;
        }
-       
+ 
        // compute reflection
 -      *R = (2 * cos)* Nn - I;
 +      *R = (2.0f * cos)* Nn - I;
  #ifdef __RAY_DIFFERENTIALS__
 -      *dRdx = (2 * dot(Nn, dIdx)) * Nn - dIdx;
 -      *dRdy = (2 * dot(Nn, dIdy)) * Nn - dIdy;
 +      *dRdx = (2.0f * dot(Nn, dIdx)) * Nn - dIdx;
 +      *dRdy = (2.0f * dot(Nn, dIdy)) * Nn - dIdy;
  #endif
-       
+ 
        float arg = 1 -(neta * neta *(1 -(cos * cos)));
 -      if(arg < 0) {
 +      if(arg < 0.0f) {
                *T = make_float3(0.0f, 0.0f, 0.0f);
  #ifdef __RAY_DIFFERENTIALS__
                *dTdx = make_float3(0.0f, 0.0f, 0.0f);
diff --cc intern/cycles/render/image.cpp
index b5450d19936,e6ef19cc3be..e951d0266ea
--- a/intern/cycles/render/image.cpp
+++ b/intern/cycles/render/image.cpp
@@@ -28,21 -29,60 +29,63 @@@
  #include <OSL/oslexec.h>
  #endif
  
 +#include "kernel/kernel_oiio_globals.h"
 +#include <OpenImageIO/imagebufalgo.h>
 +
  CCL_NAMESPACE_BEGIN
  
+ namespace {
+ 
  /* Some helpers to silence warning in templated function. */
- static bool isfinite(uchar /*value*/)
+ bool isfinite(uchar /*value*/)
  {
-       return false;
+       return true;
  }
- static bool isfinite(half /*value*/)
+ bool isfinite(half /*value*/)
  {
-       return false;
+       return true;
+ }
+ bool isfinite(uint16_t  /*value*/)
+ {
+       return true;
+ }
+ 
+ /* The lower three bits of a device texture slot number indicate its type.
+  * These functions convert the slot ids from ImageManager "images" ones
+  * to device ones and vice verse.
+  */
+ int type_index_to_flattened_slot(int slot, ImageDataType type)
+ {
+       return (slot << IMAGE_DATA_TYPE_SHIFT) | (type);
+ }
+ 
+ int flattened_slot_to_type_index(int flat_slot, ImageDataType *type)
+ {
+       *type = (ImageDataType)(flat_slot & IMAGE_DATA_TYPE_MASK);
+       return flat_slot >> IMAGE_DATA_TYPE_SHIFT;
+ }
+ 
+ const char* name_from_type(ImageDataType type)
+ {
+       switch(type) {
+               case IMAGE_DATA_TYPE_FLOAT4: return "float4";
+               case IMAGE_DATA_TYPE_BYTE4: return "byte4";
+               case IMAGE_DATA_TYPE_HALF4: return "half4";
+               case IMAGE_DATA_TYPE_FLOAT: return "float";
+               case IMAGE_DATA_TYPE_BYTE: return "byte";
+               case IMAGE_DATA_TYPE_HALF: return "half";
+               case IMAGE_DATA_TYPE_USHORT4: return "ushort4";
+               case IMAGE_DATA_TYPE_USHORT: return "ushort";
+               case IMAGE_DATA_NUM_TYPES:
+                       assert(!"System enumerator type, should never be used");
+                       return "";
+       }
+       assert(!"Unhandled image data type");
+       return "";
  }
  
+ }  // namespace
+ 
  ImageManager::ImageManager(const DeviceInfo& info)
  {
        need_update = true;
@@@ -227,68 -275,6 +284,28 @@@ bool ImageManager::get_image_metadata(c
        return true;
  }
  
 +const string ImageManager::get_mip_map_path(const string& filename)
 +{
 +      if(!path_exists(filename)) {
 +              return "";
 +      }
 +      
 +      string::size_type idx = filename.rfind('.');
 +      if(idx != string::npos) {
 +              std::string extension = filename.substr(idx+1);
 +              if(extension == "tx") {
 +                      return filename;
 +              }
 +      }
 +      
 +      string tx_name = filename.substr(0, idx) + ".tx";
 +      if(path_exists(tx_name)) {
 +              return tx_name;
 +      }
 +
 +      return "";
 +}
 +
- int ImageManager::max_flattened_slot(ImageDataType type)
- {
-       if(tex_num_images[type] == 0) {
-               /* No textures for the type, no slots needs allocation. */
-               return 0;
-       }
-       return type_index_to_flattened_slot(tex_num_images[type], type);
- }
- 
- /* The lower three bits of a device texture slot number indicate its type.
-  * These functions convert the slot ids from ImageManager "images" ones
-  * to device ones and vice verse.
-  */
- int ImageManager::type_index_to_flattened_slot(int slot, ImageDataType type)
- {
-       return (slot << IMAGE_DATA_TYPE_SHIFT) | (type);
- }
- 
- int ImageManager::flattened_slot_to_type_index(int flat_slot, ImageDataType 
*type)
- {
-       *type = (ImageDataType)(flat_slot & IMAGE_DATA_TYPE_MASK);
-       return flat_slot >> IMAGE_DATA_TYPE_SHIFT;
- }
- 
- string ImageManager::name_from_type(int type)
- {
-       if(type == IMAGE_DATA_TYPE_FLOAT4)
-               return "float4";
-       else if(type == IMAGE_DATA_TYPE_FLOAT)
-               return "float";
-       else if(type == IMAGE_DATA_TYPE_BYTE)
-               return "byte";
-       else if(type == IMAGE_DATA_TYPE_HALF4)
-               return "half4";
-       else if(type == IMAGE_DATA_TYPE_HALF)
-               return "half";
-       else
-               return "byte4";
- }
- 
  static bool image_equals(ImageManager::Image *image,
                           const string& filename,
                           void *builtin_data,
@@@ -1055,55 -1043,15 +1127,65 @@@ void ImageManager::device_free(Device *
        }
  }
  
 +bool ImageManager::make_tx(const string &filename, const string 
&outputfilename, bool srgb)
 +{
 +      ImageSpec config;
 +      config.attribute("maketx:filtername", "lanczos3");
 +      config.attribute("maketx:opaque_detect", 1);
 +      config.attribute("maketx:highlightcomp", 1);
 +      config.attribute("maketx:updatemode", 1);
 +      config.attribute("maketx:oiio_options", 1);
 +      config.attribute("maketx:updatemode", 1);
 +      /* Convert textures to linear color space before mip mapping. */
 +      if(srgb) {
 +              config.attribute("maketx:incolorspace", "sRGB");
 +              config.attribute("maketx:outcolorspace", "linear");
 +      }
 +
 +      return ImageBufAlgo::make_texture(ImageBufAlgo::MakeTxTexture, 
filename, outputfilename, config);
 +}
 +
 +bool ImageManager::get_tx(Image *image, Progress *progress, bool auto_convert)
 +{
 +      if(!path_exists(image->filename)) {
 +              return false;
 +      }
 +      
 +      string::size_type idx = image->filename.rfind('.');
 +      if(idx != string::npos) {
 +              std::string extension = image->filename.substr(idx+1);
 +              if(extension == "tx") {
 +                      return true;
 +              }
 +      }
 +      
 +      string tx_name = image->filename.substr(0, idx) + ".tx";
 +      if(path_exis

@@ Diff output truncated at 10240 characters. @@

_______________________________________________
Bf-blender-cvs mailing list
[email protected]
https://lists.blender.org/mailman/listinfo/bf-blender-cvs

Reply via email to