[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