[Bf-blender-cvs] SVN commit: /data/svn/bf-blender [49835] branches/soc-2011-tomato: Tomato Cycles: use actual number of tiles for viewport rendering

Sergey Sharybin sergey.vfx at gmail.com
Sun Aug 12 13:58:35 CEST 2012


Revision: 49835
          http://projects.blender.org/scm/viewvc.php?view=rev&root=bf-blender&revision=49835
Author:   nazgul
Date:     2012-08-12 11:58:34 +0000 (Sun, 12 Aug 2012)
Log Message:
-----------
Tomato Cycles: use actual number of tiles for viewport rendering

Before this debug_tile_size was used as a size of tile, which
became hidden property since tile-based rendering implementation
and couldn't have been controlled.

This resolves the issue with single thread used for viewport
rendering in some cases. Also it makes possible to control tiles
for CUDA viewport rendering, which still behaves much faster when
using the single tile.

Also fixed issue with minimal tile size which was used to calculate
divider of final resolution to be used for initial rendering. Now
it's a Resolution Divider property in Performance tab. This option
could be used to tweak initial resolution of viewport for faster
navigation or faster refresh when changing some properties.

Modified Paths:
--------------
    branches/soc-2011-tomato/intern/cycles/blender/addon/properties.py
    branches/soc-2011-tomato/intern/cycles/blender/addon/ui.py
    branches/soc-2011-tomato/intern/cycles/blender/blender_sync.cpp
    branches/soc-2011-tomato/intern/cycles/render/session.cpp
    branches/soc-2011-tomato/intern/cycles/render/session.h
    branches/soc-2011-tomato/intern/cycles/render/tile.cpp
    branches/soc-2011-tomato/intern/cycles/render/tile.h
    branches/soc-2011-tomato/source/blender/editors/space_view3d/view3d_draw.c

Modified: branches/soc-2011-tomato/intern/cycles/blender/addon/properties.py
===================================================================
--- branches/soc-2011-tomato/intern/cycles/blender/addon/properties.py	2012-08-12 10:07:55 UTC (rev 49834)
+++ branches/soc-2011-tomato/intern/cycles/blender/addon/properties.py	2012-08-12 11:58:34 UTC (rev 49835)
@@ -235,18 +235,13 @@
                 default=0.0,
                 )
 
-        cls.debug_tile_size = IntProperty(
-                name="Tile Size",
-                description="",
-                min=1, max=4096,
-                default=1024,
+        cls.resolution_divider = IntProperty(
+                name="Resolution Divider",
+                description="Start viewport rendering with lower resolutionm which would be real resolution divided by two in power of this value",
+                min=1, max=512,
+                default=4,
                 )
-        cls.debug_min_size = IntProperty(
-                name="Min Size",
-                description="",
-                min=1, max=4096,
-                default=64,
-                )
+
         cls.debug_reset_timeout = FloatProperty(
                 name="Reset timeout",
                 description="",

Modified: branches/soc-2011-tomato/intern/cycles/blender/addon/ui.py
===================================================================
--- branches/soc-2011-tomato/intern/cycles/blender/addon/ui.py	2012-08-12 10:07:55 UTC (rev 49834)
+++ branches/soc-2011-tomato/intern/cycles/blender/addon/ui.py	2012-08-12 11:58:34 UTC (rev 49835)
@@ -205,9 +205,6 @@
         subsub.enabled = not rd.use_border
         subsub.prop(rd, "use_save_buffers")
 
-        #sub.prop(cscene, "debug_tile_size")
-        #sub.prop(cscene, "debug_min_size")
-
         col = split.column()
 
         sub = col.column(align=True)
@@ -216,7 +213,9 @@
         sub.prop(cscene, "debug_use_spatial_splits")
         sub.prop(cscene, "use_cache")
 
+        sub.prop(cscene, "resolution_divider")
 
+
 class CyclesRender_PT_layers(CyclesButtonsPanel, Panel):
     bl_label = "Layers"
     bl_options = {'DEFAULT_CLOSED'}

Modified: branches/soc-2011-tomato/intern/cycles/blender/blender_sync.cpp
===================================================================
--- branches/soc-2011-tomato/intern/cycles/blender/blender_sync.cpp	2012-08-12 10:07:55 UTC (rev 49834)
+++ branches/soc-2011-tomato/intern/cycles/blender/blender_sync.cpp	2012-08-12 11:58:34 UTC (rev 49835)
@@ -347,18 +347,9 @@
 	int tile_x = b_engine.tile_x();
 	int tile_y = b_engine.tile_y();
 
-	if(tile_x == 0 || tile_y == 0) {
-		tile_x = get_int(cscene, "debug_tile_size");
-		tile_y = tile_x;
+	params.tile_size = make_int2(tile_x, tile_y);
+	params.resolution = 1 << get_int(cscene, "resolution_divider");
 
-		params.tile_size = make_int2(tile_x, tile_y);
-		params.min_size = get_int(cscene, "debug_min_size");
-	}
-	else {
-		params.tile_size = make_int2(tile_x, tile_y);
-		params.min_size = min(tile_x, tile_y);
-	}
-
 	/* other parameters */
 	params.threads = b_scene.render().threads();
 
@@ -368,7 +359,7 @@
 
 	if(background) {
 		params.progressive = false;
-		params.min_size = INT_MAX;
+		params.resolution = 1;
 	}
 	else
 		params.progressive = true;

Modified: branches/soc-2011-tomato/intern/cycles/render/session.cpp
===================================================================
--- branches/soc-2011-tomato/intern/cycles/render/session.cpp	2012-08-12 10:07:55 UTC (rev 49834)
+++ branches/soc-2011-tomato/intern/cycles/render/session.cpp	2012-08-12 11:58:34 UTC (rev 49835)
@@ -36,7 +36,7 @@
 
 Session::Session(const SessionParams& params_)
 : params(params_),
-  tile_manager(params.progressive, params.samples, params.tile_size, params.min_size,
+  tile_manager(params.progressive, params.samples, params.tile_size, params.resolution,
   	(params.background)? 1: max(params.device.multi_devices.size(), 1))
 {
 	device_use_gl = ((params.device.type != DEVICE_CPU) && !params.background);

Modified: branches/soc-2011-tomato/intern/cycles/render/session.h
===================================================================
--- branches/soc-2011-tomato/intern/cycles/render/session.h	2012-08-12 10:07:55 UTC (rev 49834)
+++ branches/soc-2011-tomato/intern/cycles/render/session.h	2012-08-12 11:58:34 UTC (rev 49835)
@@ -48,7 +48,7 @@
 	bool experimental;
 	int samples;
 	int2 tile_size;
-	int min_size;
+	int resolution;
 	int threads;
 
 	double cancel_timeout;
@@ -64,7 +64,7 @@
 		experimental = false;
 		samples = INT_MAX;
 		tile_size = make_int2(64, 64);
-		min_size = 64;
+		resolution = 4;
 		threads = 0;
 
 		cancel_timeout = 0.1;
@@ -81,7 +81,7 @@
 		&& progressive == params.progressive
 		&& experimental == params.experimental
 		&& tile_size == params.tile_size
-		&& min_size == params.min_size
+		&& resolution == params.resolution
 		&& threads == params.threads
 		&& cancel_timeout == params.cancel_timeout
 		&& reset_timeout == params.reset_timeout

Modified: branches/soc-2011-tomato/intern/cycles/render/tile.cpp
===================================================================
--- branches/soc-2011-tomato/intern/cycles/render/tile.cpp	2012-08-12 10:07:55 UTC (rev 49834)
+++ branches/soc-2011-tomato/intern/cycles/render/tile.cpp	2012-08-12 11:58:34 UTC (rev 49835)
@@ -23,11 +23,11 @@
 
 CCL_NAMESPACE_BEGIN
 
-TileManager::TileManager(bool progressive_, int num_samples_, int2 tile_size_, int min_size_, int num_devices_)
+TileManager::TileManager(bool progressive_, int num_samples_, int2 tile_size_, int resolution_, int num_devices_)
 {
 	progressive = progressive_;
 	tile_size = tile_size_;
-	min_size = min_size_;
+	resolution = resolution_;
 	num_devices = num_devices_;
 
 	BufferParams buffer_params;
@@ -42,19 +42,6 @@
 {
 	params = params_;
 
-	start_resolution = 1;
-
-	int w = params.width, h = params.height;
-
-	if(min_size != INT_MAX) {
-		while(w*h > min_size*min_size) {
-			w = max(1, w/2); 
-			h = max(1, h/2); 
-
-			start_resolution *= 2;
-		}
-	}
-
 	num_samples = num_samples_;
 
 	state.buffer = BufferParams();
@@ -62,7 +49,7 @@
 	state.num_tiles = 0;
 	state.num_rendered_tiles = 0;
 	state.num_samples = 0;
-	state.resolution = start_resolution;
+	state.resolution = resolution;
 	state.tiles.clear();
 }
 

Modified: branches/soc-2011-tomato/intern/cycles/render/tile.h
===================================================================
--- branches/soc-2011-tomato/intern/cycles/render/tile.h	2012-08-12 10:07:55 UTC (rev 49834)
+++ branches/soc-2011-tomato/intern/cycles/render/tile.h	2012-08-12 11:58:34 UTC (rev 49835)
@@ -57,7 +57,7 @@
 		list<Tile> tiles;
 	} state;
 
-	TileManager(bool progressive, int num_samples, int2 tile_size, int min_size, int num_devices = 1);
+	TileManager(bool progressive, int num_samples, int2 tile_size, int resolution, int num_devices = 1);
 	~TileManager();
 
 	void reset(BufferParams& params, int num_samples);
@@ -72,7 +72,7 @@
 	bool progressive;
 	int num_samples;
 	int2 tile_size;
-	int min_size;
+	int resolution;
 	int num_devices;
 
 	int start_resolution;

Modified: branches/soc-2011-tomato/source/blender/editors/space_view3d/view3d_draw.c
===================================================================
--- branches/soc-2011-tomato/source/blender/editors/space_view3d/view3d_draw.c	2012-08-12 10:07:55 UTC (rev 49834)
+++ branches/soc-2011-tomato/source/blender/editors/space_view3d/view3d_draw.c	2012-08-12 11:58:34 UTC (rev 49835)
@@ -2824,13 +2824,21 @@
 
 	/* create render engine */
 	if (!rv3d->render_engine) {
+		RenderEngine *engine;
+
 		type = RE_engines_find(scene->r.engine);
 
 		if (!(type->view_update && type->view_draw))
 			return 0;
 
-		rv3d->render_engine = RE_engine_create(type);
-		type->view_update(rv3d->render_engine, C);
+		engine = RE_engine_create(type);
+
+		engine->tile_x = scene->r.xparts;
+		engine->tile_y = scene->r.yparts;
+
+		type->view_update(engine, C);
+
+		rv3d->render_engine = engine;
 	}
 
 	/* setup view matrices */




More information about the Bf-blender-cvs mailing list