[Bf-blender-cvs] [2dfe5e3] master: Cycles: Don't re-generate blackbody/beckmann tables on every shaders update

Sergey Sharybin noreply at git.blender.org
Fri Jan 23 10:03:11 CET 2015


Commit: 2dfe5e30ac43af0c65a7a89d8f6ebb79056eaab7
Author: Sergey Sharybin
Date:   Fri Jan 23 14:00:48 2015 +0500
Branches: master
https://developer.blender.org/rB2dfe5e30ac43af0c65a7a89d8f6ebb79056eaab7

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.

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

M	intern/cycles/render/blackbody.cpp
M	intern/cycles/render/blackbody.h
M	intern/cycles/render/shader.cpp
M	intern/cycles/render/shader.h

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

diff --git a/intern/cycles/render/blackbody.cpp b/intern/cycles/render/blackbody.cpp
index 6e2cb7c..04e6eaf 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 5671cba..6b752a2 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 1fa949b..dbf5c5e 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 58960e7..1d903ee 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;
 };




More information about the Bf-blender-cvs mailing list