[Bf-blender-cvs] SVN commit: /data/svn/bf-blender [51887] trunk/blender: Render engines: replace number of x/y tiles with tile size

Sergey Sharybin sergey.vfx at gmail.com
Mon Nov 5 09:05:14 CET 2012


Revision: 51887
          http://projects.blender.org/scm/viewvc.php?view=rev&root=bf-blender&revision=51887
Author:   nazgul
Date:     2012-11-05 08:05:14 +0000 (Mon, 05 Nov 2012)
Log Message:
-----------
Render engines: replace number of x/y tiles with tile size

Now tile size is setting up explicitly instead of using number of tiles.

This allows better control over GPU performance, where having tiles aligned
to specific size makes lots of sense.

Still to come: need to update startup.blend  to make tiles size 64x64.

Modified Paths:
--------------
    trunk/blender/intern/cycles/blender/addon/ui.py
    trunk/blender/intern/cycles/render/tile.cpp
    trunk/blender/release/scripts/startup/bl_ui/properties_render.py
    trunk/blender/source/blender/blenkernel/intern/scene.c
    trunk/blender/source/blender/blenloader/intern/readfile.c
    trunk/blender/source/blender/editors/render/render_preview.c
    trunk/blender/source/blender/editors/space_view3d/view3d_draw.c
    trunk/blender/source/blender/makesdna/DNA_scene_types.h
    trunk/blender/source/blender/makesrna/intern/rna_scene.c
    trunk/blender/source/blender/render/intern/include/render_types.h
    trunk/blender/source/blender/render/intern/source/envmap.c
    trunk/blender/source/blender/render/intern/source/initrender.c
    trunk/blender/source/blender/render/intern/source/pipeline.c
    trunk/blender/source/blender/render/intern/source/renderdatabase.c

Modified: trunk/blender/intern/cycles/blender/addon/ui.py
===================================================================
--- trunk/blender/intern/cycles/blender/addon/ui.py	2012-11-05 08:04:57 UTC (rev 51886)
+++ trunk/blender/intern/cycles/blender/addon/ui.py	2012-11-05 08:05:14 UTC (rev 51887)
@@ -193,10 +193,10 @@
         sub.prop(rd, "threads")
 
         sub = col.column(align=True)
-        sub.label(text="Tiles:")
+        sub.label(text="Tile Size:")
 
-        sub.prop(rd, "parts_x", text="X")
-        sub.prop(rd, "parts_y", text="Y")
+        sub.prop(rd, "tile_x", text="X")
+        sub.prop(rd, "tile_y", text="Y")
 
         sub.prop(cscene, "use_progressive_refine")
 

Modified: trunk/blender/intern/cycles/render/tile.cpp
===================================================================
--- trunk/blender/intern/cycles/render/tile.cpp	2012-11-05 08:04:57 UTC (rev 51886)
+++ trunk/blender/intern/cycles/render/tile.cpp	2012-11-05 08:05:14 UTC (rev 51887)
@@ -84,8 +84,6 @@
 
 	int tile_w = (tile_size.x >= image_w)? 1: (image_w + tile_size.x - 1)/tile_size.x;
 	int tile_h = (tile_size.y >= image_h)? 1: (image_h + tile_size.y - 1)/tile_size.y;
-	int sub_w = (image_w + tile_w - 1)/tile_w;
-	int sub_h = (image_h + tile_h - 1)/tile_h;
 
 	int num_logical_devices = preserve_tile_device? num_devices: 1;
 	int num = min(image_h, num_logical_devices);
@@ -96,10 +94,10 @@
 
 	for(int tile_y = 0; tile_y < tile_h; tile_y++) {
 		for(int tile_x = 0; tile_x < tile_w; tile_x++, tile_index++) {
-			int x = tile_x * sub_w;
-			int y = tile_y * sub_h;
-			int w = (tile_x == tile_w-1)? image_w - x: sub_w;
-			int h = (tile_y == tile_h-1)? image_h - y: sub_h;
+			int x = tile_x * tile_size.x;
+			int y = tile_y * tile_size.y;
+			int w = (tile_x == tile_w-1)? image_w - x: tile_size.x;
+			int h = (tile_y == tile_h-1)? image_h - y: tile_size.y;
 
 			state.tiles.push_back(Tile(tile_index, x, y, w, h, cur_device));
 			cur_tiles++;
@@ -131,15 +129,13 @@
 
 		int tile_w = (tile_size.x >= image_w)? 1: (image_w + tile_size.x - 1)/tile_size.x;
 		int tile_h = (tile_size.y >= device_h)? 1: (device_h + tile_size.y - 1)/tile_size.y;
-		int sub_w = (image_w + tile_w - 1)/tile_w;
-		int sub_h = (device_h + tile_h - 1)/tile_h;
 
 		for(int tile_y = 0; tile_y < tile_h; tile_y++) {
 			for(int tile_x = 0; tile_x < tile_w; tile_x++, tile_index++) {
-				int x = tile_x * sub_w;
-				int y = tile_y * sub_h;
-				int w = (tile_x == tile_w-1)? image_w - x: sub_w;
-				int h = (tile_y == tile_h-1)? device_h - y: sub_h;
+				int x = tile_x * tile_size.x;
+				int y = tile_y * tile_size.y;
+				int w = (tile_x == tile_w-1)? image_w - x: tile_size.x;
+				int h = (tile_y == tile_h-1)? device_h - y: tile_size.x;
 
 				state.tiles.push_back(Tile(tile_index, x, y + device_y, w, h, device));
 			}

Modified: trunk/blender/release/scripts/startup/bl_ui/properties_render.py
===================================================================
--- trunk/blender/release/scripts/startup/bl_ui/properties_render.py	2012-11-05 08:04:57 UTC (rev 51886)
+++ trunk/blender/release/scripts/startup/bl_ui/properties_render.py	2012-11-05 08:05:14 UTC (rev 51887)
@@ -340,9 +340,9 @@
         subsub.prop(rd, "threads")
         
         sub = col.column(align=True)
-        sub.label(text="Tiles:")
-        sub.prop(rd, "parts_x", text="X")
-        sub.prop(rd, "parts_y", text="Y")
+        sub.label(text="Tile Size:")
+        sub.prop(rd, "tile_x", text="X")
+        sub.prop(rd, "tile_y", text="Y")
 
         col = split.column()
         col.label(text="Memory:")

Modified: trunk/blender/source/blender/blenkernel/intern/scene.c
===================================================================
--- trunk/blender/source/blender/blenkernel/intern/scene.c	2012-11-05 08:04:57 UTC (rev 51886)
+++ trunk/blender/source/blender/blenkernel/intern/scene.c	2012-11-05 08:05:14 UTC (rev 51887)
@@ -368,8 +368,8 @@
 	sce->r.ysch = 1080;
 	sce->r.xasp = 1;
 	sce->r.yasp = 1;
-	sce->r.xparts = 8;
-	sce->r.yparts = 8;
+	sce->r.tilex = 256;
+	sce->r.tiley = 256;
 	sce->r.mblur_samples = 1;
 	sce->r.filtertype = R_FILTER_MITCH;
 	sce->r.size = 50;

Modified: trunk/blender/source/blender/blenloader/intern/readfile.c
===================================================================
--- trunk/blender/source/blender/blenloader/intern/readfile.c	2012-11-05 08:04:57 UTC (rev 51886)
+++ trunk/blender/source/blender/blenloader/intern/readfile.c	2012-11-05 08:05:14 UTC (rev 51887)
@@ -8297,7 +8297,23 @@
 				}
 			}
 		}
+	}
 
+	{
+		/* convert tiles size from resolution and number of tiles */
+		{
+			Scene *scene;
+
+			for (scene = main->scene.first; scene; scene = scene->id.next) {
+				if (scene->r.tilex == 0 || scene->r.tiley == 1) {
+					/* scene could be set for panoramic rendering, so clamp with the
+					 * lowest possible tile size value
+					 */
+					scene->r.tilex = max_ii(scene->r.xsch * scene->r.size / scene->r.xparts / 100, 8);
+					scene->r.tiley = max_ii(scene->r.ysch * scene->r.size / scene->r.yparts / 100, 8);
+				}
+			}
+		}
 	}
 	
 	{

Modified: trunk/blender/source/blender/editors/render/render_preview.c
===================================================================
--- trunk/blender/source/blender/editors/render/render_preview.c	2012-11-05 08:04:57 UTC (rev 51886)
+++ trunk/blender/source/blender/editors/render/render_preview.c	2012-11-05 08:05:14 UTC (rev 51887)
@@ -266,10 +266,13 @@
 		BKE_color_managed_view_settings_copy(&sce->view_settings, &scene->view_settings);
 		
 		/* prevent overhead for small renders and icons (32) */
-		if (id && sp->sizex < 40)
-			sce->r.xparts = sce->r.yparts = 1;
-		else
-			sce->r.xparts = sce->r.yparts = 4;
+		if (id && sp->sizex < 40) {
+			sce->r.tilex = sce->r.tiley = 64;
+		}
+		else {
+			sce->r.tilex = sce->r.xsch / 4;
+			sce->r.tiley = sce->r.ysch / 4;
+		}
 		
 		/* exception: don't apply render part of display transform for texture previews or icons */
 		if ((id && sp->pr_method == PR_ICON_RENDER) || id_type == ID_TE) {

Modified: trunk/blender/source/blender/editors/space_view3d/view3d_draw.c
===================================================================
--- trunk/blender/source/blender/editors/space_view3d/view3d_draw.c	2012-11-05 08:04:57 UTC (rev 51886)
+++ trunk/blender/source/blender/editors/space_view3d/view3d_draw.c	2012-11-05 08:05:14 UTC (rev 51887)
@@ -2857,15 +2857,9 @@
 
 		engine = RE_engine_create(type);
 
-		engine->tile_x = ceil(ar->winx / (float)scene->r.xparts);
-		engine->tile_y = ceil(ar->winy / (float)scene->r.yparts);
+		engine->tile_x = scene->r.tilex;
+		engine->tile_y = scene->r.tiley;
 
-		/* clamp small tile sizes to prevent inefficient threading utilization
-		 * the same happens for final renders as well
-		 */
-		engine->tile_x = max_ii(engine->tile_x, 64);
-		engine->tile_y = max_ii(engine->tile_x, 64);
-
 		type->view_update(engine, C);
 
 		rv3d->render_engine = engine;

Modified: trunk/blender/source/blender/makesdna/DNA_scene_types.h
===================================================================
--- trunk/blender/source/blender/makesdna/DNA_scene_types.h	2012-11-05 08:04:57 UTC (rev 51886)
+++ trunk/blender/source/blender/makesdna/DNA_scene_types.h	2012-11-05 08:05:14 UTC (rev 51887)
@@ -396,12 +396,17 @@
 	/**
 	 * The number of part to use in the x direction
 	 */
-	short xparts;
+	short xparts DNA_DEPRECATED;
 	/**
 	 * The number of part to use in the y direction
 	 */
-	short yparts;
+	short yparts DNA_DEPRECATED;
 
+	/**
+	 * render tile dimensions
+	 */
+	short tilex, tiley;
+
 	short planes  DNA_DEPRECATED, imtype  DNA_DEPRECATED, subimtype  DNA_DEPRECATED, quality  DNA_DEPRECATED; /*deprecated!*/
 	
 	/**
@@ -448,6 +453,8 @@
 
 	short frs_sec, edgeint;
 
+	int pad;
+
 	
 	/* safety, border and display rect */
 	rctf safety, border;

Modified: trunk/blender/source/blender/makesrna/intern/rna_scene.c
===================================================================
--- trunk/blender/source/blender/makesrna/intern/rna_scene.c	2012-11-05 08:04:57 UTC (rev 51886)
+++ trunk/blender/source/blender/makesrna/intern/rna_scene.c	2012-11-05 08:05:14 UTC (rev 51887)
@@ -3395,16 +3395,16 @@
 	RNA_def_property_ui_text(prop, "Resolution %", "Percentage scale for render resolution");
 	RNA_def_property_update(prop, NC_SCENE | ND_RENDER_OPTIONS, NULL);
 	
-	prop = RNA_def_property(srna, "parts_x", PROP_INT, PROP_NONE);
-	RNA_def_property_int_sdna(prop, NULL, "xparts");
-	RNA_def_property_range(prop, 1, 512);
-	RNA_def_property_ui_text(prop, "Parts X", "Number of horizontal tiles to use while rendering");
+	prop = RNA_def_property(srna, "tile_x", PROP_INT, PROP_NONE);
+	RNA_def_property_int_sdna(prop, NULL, "tilex");
+	RNA_def_property_range(prop, 8, 10000);
+	RNA_def_property_ui_text(prop, "Tile X", "Horizontal tile size to use while rendering");
 	RNA_def_property_update(prop, NC_SCENE | ND_RENDER_OPTIONS, NULL);
 	
-	prop = RNA_def_property(srna, "parts_y", PROP_INT, PROP_NONE);
-	RNA_def_property_int_sdna(prop, NULL, "yparts");
-	RNA_def_property_range(prop, 1, 512);
-	RNA_def_property_ui_text(prop, "Parts Y", "Number of vertical tiles to use while rendering");
+	prop = RNA_def_property(srna, "tile_y", PROP_INT, PROP_NONE);
+	RNA_def_property_int_sdna(prop, NULL, "tiley");
+	RNA_def_property_range(prop, 8, 10000);
+	RNA_def_property_ui_text(prop, "Tile Y", "Vertical tile size to use while rendering");
 	RNA_def_property_update(prop, NC_SCENE | ND_RENDER_OPTIONS, NULL);
 	
 	prop = RNA_def_property(srna, "pixel_aspect_x", PROP_FLOAT, PROP_NONE);

Modified: trunk/blender/source/blender/render/intern/include/render_types.h
===================================================================
--- trunk/blender/source/blender/render/intern/include/render_types.h	2012-11-05 08:04:57 UTC (rev 51886)
+++ trunk/blender/source/blender/render/intern/include/render_types.h	2012-11-05 08:05:14 UTC (rev 51887)
@@ -145,8 +145,6 @@
 	/* final picture width and height (within disprect) */
 	int rectx, recty;
 	
-	/* real maximum amount of xparts/yparts after correction for minimum */
-	int xparts, yparts;
 	/* real maximum size of parts after correction for minimum 
 	 * partx*xparts can be larger than rectx, in that case last part is smaller */
 	int partx, party;

Modified: trunk/blender/source/blender/render/intern/source/envmap.c
===================================================================

@@ Diff output truncated at 10240 characters. @@



More information about the Bf-blender-cvs mailing list