[Bf-blender-cvs] [0f61e961613] cycles_texture_cache: Cycles: made OSL shading use .tx files where available, added a mutex to the kernel texture name array
Stefan Werner
noreply at git.blender.org
Mon Nov 27 20:40:09 CET 2017
Commit: 0f61e9616135443253ba3b9266c79612f7eb15cd
Author: Stefan Werner
Date: Thu May 4 23:36:44 2017 +0200
Branches: cycles_texture_cache
https://developer.blender.org/rB0f61e9616135443253ba3b9266c79612f7eb15cd
Cycles: made OSL shading use .tx files where available, added a mutex to the kernel texture name array
===================================================================
M intern/cycles/kernel/kernel_oiio_globals.h
M intern/cycles/kernel/svm/svm_image.h
M intern/cycles/render/image.cpp
M intern/cycles/render/image.h
M intern/cycles/render/nodes.cpp
===================================================================
diff --git a/intern/cycles/kernel/kernel_oiio_globals.h b/intern/cycles/kernel/kernel_oiio_globals.h
index 713752d3a3d..f40b91b8c1e 100644
--- a/intern/cycles/kernel/kernel_oiio_globals.h
+++ b/intern/cycles/kernel/kernel_oiio_globals.h
@@ -19,6 +19,7 @@
#include <OpenImageIO/texture.h>
#include "util/util_vector.h"
+#include "util/util_thread.h"
CCL_NAMESPACE_BEGIN
@@ -26,6 +27,7 @@ struct OIIOGlobals
{
public:
OIIO::TextureSystem *tex_sys;
+ thread_mutex tex_paths_mutex;
vector<OIIO::TextureSystem::TextureHandle*> tex_paths;
};
diff --git a/intern/cycles/kernel/svm/svm_image.h b/intern/cycles/kernel/svm/svm_image.h
index 934347c5964..8d36d7383bb 100644
--- a/intern/cycles/kernel/svm/svm_image.h
+++ b/intern/cycles/kernel/svm/svm_image.h
@@ -28,7 +28,7 @@ ccl_device float4 svm_image_texture(KernelGlobals *kg, int id, float x, float y,
OIIO::TextureOpt options;
options.swrap = options.twrap = OIIO::TextureOpt::WrapPeriodic;
options.interpmode = OIIO::TextureOpt::InterpBilinear;
- options.mipmode = OIIO::TextureOpt::MipModeNoMIP;
+ options.mipmode = OIIO::TextureOpt::MipModeOneLevel;
if(kg->oiio->tex_paths[id]) {
bool success = kg->oiio->tex_sys->texture(kg->oiio->tex_paths[id], kg->oiio->tex_sys->get_perthread_info(), options, x, 1.0f - y, 0.0f, 0.0f, 0.0f, 0.0f, 3, (float*)&r);
if(!success) {
diff --git a/intern/cycles/render/image.cpp b/intern/cycles/render/image.cpp
index a52e58d42d7..4eef11e7237 100644
--- a/intern/cycles/render/image.cpp
+++ b/intern/cycles/render/image.cpp
@@ -189,6 +189,27 @@ ImageDataType ImageManager::get_image_metadata(const string& filename,
}
}
+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 + ".tx";
+ if(path_exists(tx_name)) {
+ return tx_name;
+ }
+ return "";
+}
+
int ImageManager::max_flattened_slot(ImageDataType type)
{
if(tex_num_images[type] == 0) {
@@ -711,6 +732,7 @@ void ImageManager::device_load_image(Device *device,
}
OIIOGlobals *oiio = (OIIOGlobals*)device->oiio_memory();
if(oiio) {
+ thread_scoped_lock lock(oiio->tex_paths_mutex);
int flat_slot = type_index_to_flattened_slot(slot, type);
if (oiio->tex_paths.size() <= flat_slot) {
oiio->tex_paths.resize(flat_slot+1);
diff --git a/intern/cycles/render/image.h b/intern/cycles/render/image.h
index 2bbc75a3326..3972baf433c 100644
--- a/intern/cycles/render/image.h
+++ b/intern/cycles/render/image.h
@@ -72,6 +72,7 @@ public:
void device_free_builtin(Device *device);
void set_oiio_texture_system(void *texture_system);
+ const string get_mip_map_path(const string& filename);
void set_pack_images(bool pack_images_);
bool set_animation_frame_update(int frame);
diff --git a/intern/cycles/render/nodes.cpp b/intern/cycles/render/nodes.cpp
index 4452fadaf02..24096907c74 100644
--- a/intern/cycles/render/nodes.cpp
+++ b/intern/cycles/render/nodes.cpp
@@ -386,6 +386,7 @@ void ImageTextureNode::compile(OSLCompiler& compiler)
}
if(slot == -1) {
+ filename = image_manager->get_mip_map_path(filename.string());
compiler.parameter(this, "filename");
}
else {
More information about the Bf-blender-cvs
mailing list