[Bf-blender-cvs] [ad7deefc623] cycles_texture_cache: Cycles: Reintroduced path_flags for textures.

Stefan Werner noreply at git.blender.org
Mon May 3 20:57:20 CEST 2021


Commit: ad7deefc6237d654e8880235d4bc50507921e9b4
Author: Stefan Werner
Date:   Mon May 3 12:45:13 2021 +0200
Branches: cycles_texture_cache
https://developer.blender.org/rBad7deefc6237d654e8880235d4bc50507921e9b4

Cycles: Reintroduced path_flags for textures.

Texture lookups can now use wider or cheaper filters
for less important paths.

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

M	intern/cycles/device/device_memory.cpp
M	intern/cycles/kernel/kernels/cpu/kernel_cpu_image.h
M	intern/cycles/kernel/kernels/cuda/kernel_cuda_image.h
M	intern/cycles/kernel/kernels/opencl/kernel_opencl_image.h
M	intern/cycles/kernel/osl/osl_services.cpp
M	intern/cycles/kernel/shaders/node_environment_texture.osl
M	intern/cycles/kernel/shaders/node_image_texture.osl
M	intern/cycles/kernel/svm/svm_image.h
M	intern/cycles/kernel/svm/svm_sky.h
M	intern/cycles/render/image.cpp
M	intern/cycles/render/nodes.cpp

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

diff --git a/intern/cycles/device/device_memory.cpp b/intern/cycles/device/device_memory.cpp
index 299f2a2c347..e898947d109 100644
--- a/intern/cycles/device/device_memory.cpp
+++ b/intern/cycles/device/device_memory.cpp
@@ -168,7 +168,6 @@ device_texture::device_texture(Device *device,
     case IMAGE_DATA_TYPE_BYTE:
     case IMAGE_DATA_TYPE_NANOVDB_FLOAT:
     case IMAGE_DATA_TYPE_NANOVDB_FLOAT3:
-    case IMAGE_DATA_TYPE_OIIO:
       data_type = TYPE_UCHAR;
       data_elements = 1;
       break;
@@ -188,6 +187,12 @@ device_texture::device_texture(Device *device,
       data_type = TYPE_UINT16;
       data_elements = 1;
       break;
+    case IMAGE_DATA_TYPE_OIIO:
+      /* Assumes 64 bit pointers to be stored as uint. */
+      static_assert(sizeof(void*) == sizeof(uint64_t));
+      data_type = TYPE_UINT64;
+      data_elements = 1;
+      break;
     case IMAGE_DATA_NUM_TYPES:
       assert(0);
       return;
diff --git a/intern/cycles/kernel/kernels/cpu/kernel_cpu_image.h b/intern/cycles/kernel/kernels/cpu/kernel_cpu_image.h
index c37198db93a..073b6defa5c 100644
--- a/intern/cycles/kernel/kernels/cpu/kernel_cpu_image.h
+++ b/intern/cycles/kernel/kernels/cpu/kernel_cpu_image.h
@@ -592,7 +592,7 @@ template<typename T> struct NanoVDBInterpolator {
 
 #undef SET_CUBIC_SPLINE_WEIGHTS
 
-ccl_device float4 kernel_tex_image_interp(KernelGlobals *kg, int id, float x, float y, differential ds, differential dt)
+ccl_device float4 kernel_tex_image_interp(KernelGlobals *kg, int id, float x, float y, differential ds, differential dt, uint path_flag)
 {
   const TextureInfo &info = kernel_tex_fetch(__texture_info, id);
   float4 r = make_float4(TEX_IMAGE_MISSING_R, TEX_IMAGE_MISSING_G, TEX_IMAGE_MISSING_B, TEX_IMAGE_MISSING_A);
@@ -625,12 +625,16 @@ ccl_device float4 kernel_tex_image_interp(KernelGlobals *kg, int id, float x, fl
     case IMAGE_DATA_TYPE_OIIO:
     {
 #ifdef __OIIO__
+      /* Make sure we have all necessary data in place, if not, bail. */
       kernel_assert(kg->oiio);
       kernel_assert(kg->oiio->tex_sys);
       kernel_assert(info.data);
       if (!kg->oiio || !kg->oiio->tex_sys || !info.data) {
         return r;
       }
+      /* Options: Anisotropic is a quality/speed tradeoff.
+       * Interpolation and extensions are supported in OIIO under different constants.
+       * */
       OIIO::TextureOpt options;
       options.anisotropic = 8;
       float missingcolor[4] = {
@@ -666,13 +670,13 @@ ccl_device float4 kernel_tex_image_interp(KernelGlobals *kg, int id, float x, fl
           options.swrap = options.twrap = OIIO::TextureOpt::WrapPeriodic;
           break;
       }
-#if 0
+
+      /* Texture lookup simplifications on less important paths. */
       if (path_flag & NEAREST_LOOKUP_PATHS && !(path_flag & PATH_RAY_SINGULAR)) {
         options.interpmode = OIIO::TextureOpt::InterpClosest;
         options.mipmode = OIIO::TextureOpt::MipModeOneLevel;
       }
       else {
-        options.interpmode = kg->oiio->textures[id].interpolation;
         options.mipmode = OIIO::TextureOpt::MipModeAniso;
       }
       if (path_flag & DIFFUSE_BLUR_PATHS) {
@@ -684,7 +688,7 @@ ccl_device float4 kernel_tex_image_interp(KernelGlobals *kg, int id, float x, fl
       else {
         options.sblur = options.tblur = 0.0f;
       }
-#endif
+  
       OIIO::TextureSystem::TextureHandle *handle = *((OIIO::TextureSystem::TextureHandle**)info.data);
       kernel_assert(handle && kg->oiio->tex_sys->good(handle));
       if(handle && !kg->oiio->tex_sys->good(handle)) {
diff --git a/intern/cycles/kernel/kernels/cuda/kernel_cuda_image.h b/intern/cycles/kernel/kernels/cuda/kernel_cuda_image.h
index 8acc2bedbcb..bf0c863bc41 100644
--- a/intern/cycles/kernel/kernels/cuda/kernel_cuda_image.h
+++ b/intern/cycles/kernel/kernels/cuda/kernel_cuda_image.h
@@ -178,7 +178,7 @@ ccl_device_inline T kernel_tex_image_interp_nanovdb(
 }
 #endif
 
-ccl_device float4 kernel_tex_image_interp(KernelGlobals *kg, int id, float x, float y, differential, differential)
+ccl_device float4 kernel_tex_image_interp(KernelGlobals *kg, int id, float x, float y, differential, differential, uint)
 {
   const TextureInfo &info = kernel_tex_fetch(__texture_info, id);
 
diff --git a/intern/cycles/kernel/kernels/opencl/kernel_opencl_image.h b/intern/cycles/kernel/kernels/opencl/kernel_opencl_image.h
index 5eaa14f52cd..8940258535b 100644
--- a/intern/cycles/kernel/kernels/opencl/kernel_opencl_image.h
+++ b/intern/cycles/kernel/kernels/opencl/kernel_opencl_image.h
@@ -203,7 +203,7 @@ ccl_device_inline float svm_image_texture_frac(float x, int *ix)
   } \
   (void)0
 
-ccl_device float4 kernel_tex_image_interp(KernelGlobals *kg, int id, float x, float y, differential, differential)
+ccl_device float4 kernel_tex_image_interp(KernelGlobals *kg, int id, float x, float y, differential, differential, uint)
 {
   const ccl_global TextureInfo *info = kernel_tex_info(kg, id);
 
diff --git a/intern/cycles/kernel/osl/osl_services.cpp b/intern/cycles/kernel/osl/osl_services.cpp
index 1b37f691e2b..938ab74ed15 100644
--- a/intern/cycles/kernel/osl/osl_services.cpp
+++ b/intern/cycles/kernel/osl/osl_services.cpp
@@ -1254,7 +1254,7 @@ bool OSLRenderServices::texture(ustring filename,
       ds.dy = dsdy;
       dt.dx = dtdx;
       dt.dy = dtdy;
-      float4 rgba = kernel_tex_image_interp(kernel_globals, handle->svm_slot, s, 1.0f - t, ds, dt);
+      float4 rgba = kernel_tex_image_interp(kernel_globals, handle->svm_slot, s, 1.0f - t, ds, dt, sg->raytype);
 
       result[0] = rgba[0];
       if (nchannels > 1)
@@ -1286,7 +1286,7 @@ bool OSLRenderServices::texture(ustring filename,
                              texture_thread_info,
                              options,
                              s,
-                             t,
+                             1.0f - t,
                              dsdx,
                              dtdx,
                              dsdy,
@@ -1300,7 +1300,7 @@ bool OSLRenderServices::texture(ustring filename,
         status = ts->texture(filename,
                              options,
                              s,
-                             t,
+                             1.0f -  t,
                              dsdx,
                              dtdx,
                              dsdy,
diff --git a/intern/cycles/kernel/shaders/node_environment_texture.osl b/intern/cycles/kernel/shaders/node_environment_texture.osl
index d04743eb368..d8b711b9c7f 100644
--- a/intern/cycles/kernel/shaders/node_environment_texture.osl
+++ b/intern/cycles/kernel/shaders/node_environment_texture.osl
@@ -47,7 +47,6 @@ shader node_environment_texture(
     string filename = "",
     string projection = "equirectangular",
     string interpolation = "linear",
-    int compress_as_srgb = 0,
     int ignore_alpha = 0,
     int unassociate_alpha = 0,
     int is_float = 1,
@@ -79,7 +78,4 @@ shader node_environment_texture(
     if (!is_float)
       Color = min(Color, 1.0);
   }
-
-  if (compress_as_srgb)
-    Color = color_srgb_to_scene_linear(Color);
 }
diff --git a/intern/cycles/kernel/shaders/node_image_texture.osl b/intern/cycles/kernel/shaders/node_image_texture.osl
index 3bf8656a2b8..cb1c6caace2 100644
--- a/intern/cycles/kernel/shaders/node_image_texture.osl
+++ b/intern/cycles/kernel/shaders/node_image_texture.osl
@@ -59,7 +59,6 @@ color image_texture_lookup(string filename,
                            float u,
                            float v,
                            output float Alpha,
-                           int compress_as_srgb,
                            int ignore_alpha,
                            int unassociate_alpha,
                            int is_float,
@@ -89,10 +88,6 @@ color image_texture_lookup(string filename,
       rgb = min(rgb, 1.0);
   }
 
-  if (compress_as_srgb && !endswith(filename, ".tx")) {
-    rgb = color_srgb_to_scene_linear(rgb);
-  }
-
   return rgb;
 }
 
@@ -104,7 +99,6 @@ shader node_image_texture(int use_mapping = 0,
                           string interpolation = "smartcubic",
                           string extension = "periodic",
                           float projection_blend = 0.0,
-                          int compress_as_srgb = 0,
                           int ignore_alpha = 0,
                           int unassociate_alpha = 0,
                           int is_tiled = 0,
@@ -122,7 +116,6 @@ shader node_image_texture(int use_mapping = 0,
                                  p[0],
                                  p[1],
                                  Alpha,
-                                 compress_as_srgb,
                                  ignore_alpha,
                                  unassociate_alpha,
                                  is_float,
@@ -201,7 +194,6 @@ shader node_image_texture(int use_mapping = 0,
                                                 p[1],
                                                 p[2],
                                                 tmp_alpha,
-                                                compress_as_srgb,
                                                 ignore_alpha,
                                                 unassociate_alpha,
                                                 is_float,
@@ -215,7 +207,6 @@ shader node_image_texture(int use_mapping = 0,
                                                 p[0],
                                                 p[2],
                                                 tmp_alpha,
-                                                compress_as_srgb,
                                                 ignore_alpha,
                                                 unassociate_alpha,
                                                 is_float,
@@ -229,7 +220,6 @@ shader node_image_texture(int use_mapping = 0,
                                                 p[1],
                                                 p[0],
                                                 tmp_alpha,
-                                                compress_as_srgb,
                                                 ignore_alpha,
                                                 unassociate_alpha,
                                                 

@@ Diff output truncated at 10240 characters. @@



More information about the Bf-blender-cvs mailing list