Welcome to mirror list, hosted at ThFree Co, Russian Federation.

git.blender.org/blender.git - Unnamed repository; edit this file 'description' to name the repository.
summaryrefslogtreecommitdiff
path: root/intern
diff options
context:
space:
mode:
authorSergey Sharybin <sergey.vfx@gmail.com>2015-01-23 12:00:48 +0300
committerSergey Sharybin <sergey.vfx@gmail.com>2015-01-23 12:00:48 +0300
commit2dfe5e30ac43af0c65a7a89d8f6ebb79056eaab7 (patch)
tree8b217d98f67681dfde985667cce6fabb33c717ed /intern
parent7733bd5efc8e90f85385e5a93066158a17b14a93 (diff)
Cycles: Don't re-generate blackbody/beckmann tables on every shaders update
This commit makes it so blackbody and beckmann lookup tables are stored on CPU after being generated and then only being copied to the device if needed. This solves lag of viewport update when tweaking shader tree by using 266KB of CPU memory.
Diffstat (limited to 'intern')
-rw-r--r--intern/cycles/render/blackbody.cpp2
-rw-r--r--intern/cycles/render/blackbody.h2
-rw-r--r--intern/cycles/render/shader.cpp14
-rw-r--r--intern/cycles/render/shader.h3
4 files changed, 13 insertions, 8 deletions
diff --git a/intern/cycles/render/blackbody.cpp b/intern/cycles/render/blackbody.cpp
index 6e2cb7c62b6..04e6eaf5373 100644
--- a/intern/cycles/render/blackbody.cpp
+++ b/intern/cycles/render/blackbody.cpp
@@ -38,7 +38,7 @@
CCL_NAMESPACE_BEGIN
-vector<float> blackbody_table()
+vector<float> blackbody_table_build()
{
/* quoted from OSLs opcolor.cpp
In order to speed up the blackbody computation, we have a table
diff --git a/intern/cycles/render/blackbody.h b/intern/cycles/render/blackbody.h
index 5671cbaf9bd..6b752a227fa 100644
--- a/intern/cycles/render/blackbody.h
+++ b/intern/cycles/render/blackbody.h
@@ -21,7 +21,7 @@
CCL_NAMESPACE_BEGIN
-vector<float> blackbody_table();
+vector<float> blackbody_table_build();
CCL_NAMESPACE_END
diff --git a/intern/cycles/render/shader.cpp b/intern/cycles/render/shader.cpp
index 1fa949b17de..dbf5c5ed7ff 100644
--- a/intern/cycles/render/shader.cpp
+++ b/intern/cycles/render/shader.cpp
@@ -387,8 +387,10 @@ void ShaderManager::device_update_common(Device *device, DeviceScene *dscene, Sc
KernelTables *ktables = &dscene->data.tables;
if(has_converter_blackbody && blackbody_table_offset == TABLE_OFFSET_INVALID) {
- vector<float> table = blackbody_table();
- blackbody_table_offset = scene->lookup_tables->add_table(dscene, table);
+ if(blackbody_table.size() == 0) {
+ blackbody_table = blackbody_table_build();
+ }
+ blackbody_table_offset = scene->lookup_tables->add_table(dscene, blackbody_table);
ktables->blackbody_offset = (int)blackbody_table_offset;
}
@@ -399,10 +401,10 @@ void ShaderManager::device_update_common(Device *device, DeviceScene *dscene, Sc
/* beckmann lookup table */
if(beckmann_table_offset == TABLE_OFFSET_INVALID) {
- vector<float> table;
- beckmann_table_build(table);
- beckmann_table_offset = scene->lookup_tables->add_table(dscene, table);
-
+ if(beckmann_table.size() == 0) {
+ beckmann_table_build(beckmann_table);
+ }
+ beckmann_table_offset = scene->lookup_tables->add_table(dscene, beckmann_table);
ktables->beckmann_offset = (int)beckmann_table_offset;
}
diff --git a/intern/cycles/render/shader.h b/intern/cycles/render/shader.h
index 58960e7fc89..1d903ee3a13 100644
--- a/intern/cycles/render/shader.h
+++ b/intern/cycles/render/shader.h
@@ -170,6 +170,9 @@ protected:
typedef unordered_map<ustring, uint, ustringHash> AttributeIDMap;
AttributeIDMap unique_attribute_id;
+ vector<float> blackbody_table;
+ vector<float> beckmann_table;
+
size_t blackbody_table_offset;
size_t beckmann_table_offset;
};