[Bf-blender-cvs] SVN commit: /data/svn/bf-blender [42765] trunk/blender/intern/cycles: Cycles: border rendering support, includes some refactoring in how pixels are

Brecht Van Lommel brechtvanlommel at pandora.be
Tue Dec 20 13:25:39 CET 2011


Revision: 42765
          http://projects.blender.org/scm/viewvc.php?view=rev&root=bf-blender&revision=42765
Author:   blendix
Date:     2011-12-20 12:25:37 +0000 (Tue, 20 Dec 2011)
Log Message:
-----------
Cycles: border rendering support, includes some refactoring in how pixels are
accessed on devices.

Modified Paths:
--------------
    trunk/blender/intern/cycles/app/cycles_test.cpp
    trunk/blender/intern/cycles/blender/addon/engine.py
    trunk/blender/intern/cycles/blender/blender_camera.cpp
    trunk/blender/intern/cycles/blender/blender_session.cpp
    trunk/blender/intern/cycles/blender/blender_sync.h
    trunk/blender/intern/cycles/device/device.h
    trunk/blender/intern/cycles/device/device_cpu.cpp
    trunk/blender/intern/cycles/device/device_cuda.cpp
    trunk/blender/intern/cycles/device/device_opencl.cpp
    trunk/blender/intern/cycles/kernel/kernel.cl
    trunk/blender/intern/cycles/kernel/kernel.cpp
    trunk/blender/intern/cycles/kernel/kernel.cu
    trunk/blender/intern/cycles/kernel/kernel.h
    trunk/blender/intern/cycles/kernel/kernel_film.h
    trunk/blender/intern/cycles/kernel/kernel_optimized.cpp
    trunk/blender/intern/cycles/kernel/kernel_path.h
    trunk/blender/intern/cycles/kernel/kernel_random.h
    trunk/blender/intern/cycles/kernel/kernel_types.h
    trunk/blender/intern/cycles/render/buffers.cpp
    trunk/blender/intern/cycles/render/buffers.h
    trunk/blender/intern/cycles/render/camera.cpp
    trunk/blender/intern/cycles/render/session.cpp
    trunk/blender/intern/cycles/render/session.h
    trunk/blender/intern/cycles/render/tile.cpp
    trunk/blender/intern/cycles/render/tile.h

Modified: trunk/blender/intern/cycles/app/cycles_test.cpp
===================================================================
--- trunk/blender/intern/cycles/app/cycles_test.cpp	2011-12-20 12:25:18 UTC (rev 42764)
+++ trunk/blender/intern/cycles/app/cycles_test.cpp	2011-12-20 12:25:37 UTC (rev 42765)
@@ -82,10 +82,21 @@
 	session_print(status);
 }
 
+static BufferParams session_buffer_params()
+{
+	BufferParams buffer_params;
+	buffer_params.width = options.width;
+	buffer_params.height = options.height;
+	buffer_params.full_width = options.width;
+	buffer_params.full_height = options.height;
+
+	return buffer_params;
+}
+
 static void session_init()
 {
 	options.session = new Session(options.session_params);
-	options.session->reset(options.width, options.height, options.session_params.samples);
+	options.session->reset(session_buffer_params(), options.session_params.samples);
 	options.session->scene = options.scene;
 	
 	if(options.session_params.background && !options.quiet)
@@ -151,7 +162,7 @@
 
 static void display()
 {
-	options.session->draw(options.width, options.height);
+	options.session->draw(session_buffer_params());
 
 	display_info(options.session->progress);
 }
@@ -162,13 +173,13 @@
 	options.height= height;
 
 	if(options.session)
-		options.session->reset(options.width, options.height, options.session_params.samples);
+		options.session->reset(session_buffer_params(), options.session_params.samples);
 }
 
 void keyboard(unsigned char key)
 {
 	if(key == 'r')
-		options.session->reset(options.width, options.height, options.session_params.samples);
+		options.session->reset(session_buffer_params(), options.session_params.samples);
 	else if(key == 27) // escape
 		options.session->progress.set_cancel("Cancelled");
 }

Modified: trunk/blender/intern/cycles/blender/addon/engine.py
===================================================================
--- trunk/blender/intern/cycles/blender/addon/engine.py	2011-12-20 12:25:18 UTC (rev 42764)
+++ trunk/blender/intern/cycles/blender/addon/engine.py	2011-12-20 12:25:37 UTC (rev 42765)
@@ -62,11 +62,7 @@
 
 def update(engine, data, scene):
     import bcycles
-    if scene.render.use_border:
-        engine.report({'ERROR'}, "Border rendering not supported yet")
-        free(engine)
-    else:
-        bcycles.sync(engine.session)
+    bcycles.sync(engine.session)
 
 
 def draw(engine, region, v3d, rv3d):

Modified: trunk/blender/intern/cycles/blender/blender_camera.cpp
===================================================================
--- trunk/blender/intern/cycles/blender/blender_camera.cpp	2011-12-20 12:25:18 UTC (rev 42764)
+++ trunk/blender/intern/cycles/blender/blender_camera.cpp	2011-12-20 12:25:37 UTC (rev 42765)
@@ -287,5 +287,29 @@
 	blender_camera_sync(scene->camera, &bcam, width, height);
 }
 
+BufferParams BlenderSync::get_buffer_params(BL::Scene b_scene, BL::RegionView3D b_rv3d, int width, int height)
+{
+	BufferParams params;
+
+	params.full_width = width;
+	params.full_height = height;
+
+	/* border render */
+	BL::RenderSettings r = b_scene.render();
+
+	if(!b_rv3d && r.use_border()) {
+		params.full_x = r.border_min_x()*width;
+		params.full_y = r.border_min_y()*height;
+		params.width = (int)(r.border_max_x()*width) - params.full_x;
+		params.height = (int)(r.border_max_y()*height) - params.full_y;
+	}
+	else {
+		params.width = width;
+		params.height = height;
+	}
+
+	return params;
+}
+
 CCL_NAMESPACE_END
 

Modified: trunk/blender/intern/cycles/blender/blender_session.cpp
===================================================================
--- trunk/blender/intern/cycles/blender/blender_session.cpp	2011-12-20 12:25:18 UTC (rev 42764)
+++ trunk/blender/intern/cycles/blender/blender_session.cpp	2011-12-20 12:25:37 UTC (rev 42765)
@@ -100,7 +100,9 @@
 	session->set_pause(BlenderSync::get_session_pause(b_scene, background));
 
 	/* start rendering */
-	session->reset(width, height, session_params.samples);
+	BufferParams buffer_params = BlenderSync::get_buffer_params(b_scene, b_rv3d, width, height);
+
+	session->reset(buffer_params, session_params.samples);
 	session->start();
 }
 
@@ -135,7 +137,10 @@
 	if(!pixels)
 		return;
 
-	struct RenderResult *rrp = RE_engine_begin_result((RenderEngine*)b_engine.ptr.data, 0, 0, width, height);
+	BufferParams buffer_params = BlenderSync::get_buffer_params(b_scene, b_rv3d, width, height);
+	int w = buffer_params.width, h = buffer_params.height;
+
+	struct RenderResult *rrp = RE_engine_begin_result((RenderEngine*)b_engine.ptr.data, 0, 0, w, h);
 	PointerRNA rrptr;
 	RNA_pointer_create(NULL, &RNA_RenderResult, rrp, &rrptr);
 	BL::RenderResult rr(rrptr);
@@ -188,8 +193,10 @@
 	session->scene->mutex.unlock();
 
 	/* reset if needed */
-	if(scene->need_reset())
-		session->reset(width, height, session_params.samples);
+	if(scene->need_reset()) {
+		BufferParams buffer_params = BlenderSync::get_buffer_params(b_scene, b_rv3d, width, height);
+		session->reset(buffer_params, session_params.samples);
+	}
 }
 
 bool BlenderSession::draw(int w, int h)
@@ -225,7 +232,9 @@
 		/* reset if requested */
 		if(reset) {
 			SessionParams session_params = BlenderSync::get_session_params(b_scene, background);
-			session->reset(width, height, session_params.samples);
+			BufferParams buffer_params = BlenderSync::get_buffer_params(b_scene, b_rv3d, width, height);
+
+			session->reset(buffer_params, session_params.samples);
 		}
 	}
 
@@ -233,7 +242,9 @@
 	update_status_progress();
 
 	/* draw */
-	return !session->draw(width, height);
+	BufferParams buffer_params = BlenderSync::get_buffer_params(b_scene, b_rv3d, width, height);
+
+	return !session->draw(buffer_params);
 }
 
 void BlenderSession::get_status(string& status, string& substatus)

Modified: trunk/blender/intern/cycles/blender/blender_sync.h
===================================================================
--- trunk/blender/intern/cycles/blender/blender_sync.h	2011-12-20 12:25:18 UTC (rev 42764)
+++ trunk/blender/intern/cycles/blender/blender_sync.h	2011-12-20 12:25:37 UTC (rev 42765)
@@ -62,6 +62,7 @@
 	static SceneParams get_scene_params(BL::Scene b_scene, bool background);
 	static SessionParams get_session_params(BL::Scene b_scene, bool background);
 	static bool get_session_pause(BL::Scene b_scene, bool background);
+	static BufferParams get_buffer_params(BL::Scene b_scene, BL::RegionView3D b_rv3d, int width, int height);
 
 private:
 	/* sync */

Modified: trunk/blender/intern/cycles/device/device.h
===================================================================
--- trunk/blender/intern/cycles/device/device.h	2011-12-20 12:25:18 UTC (rev 42764)
+++ trunk/blender/intern/cycles/device/device.h	2011-12-20 12:25:37 UTC (rev 42765)
@@ -60,6 +60,7 @@
 	device_ptr buffer;
 	int sample;
 	int resolution;
+	int offset, stride;
 
 	device_ptr displace_input;
 	device_ptr displace_offset;

Modified: trunk/blender/intern/cycles/device/device_cpu.cpp
===================================================================
--- trunk/blender/intern/cycles/device/device_cpu.cpp	2011-12-20 12:25:18 UTC (rev 42764)
+++ trunk/blender/intern/cycles/device/device_cpu.cpp	2011-12-20 12:25:37 UTC (rev 42765)
@@ -162,7 +162,8 @@
 		if(system_cpu_support_optimized()) {
 			for(int y = task.y; y < task.y + task.h; y++) {
 				for(int x = task.x; x < task.x + task.w; x++)
-					kernel_cpu_optimized_path_trace(kg, (float4*)task.buffer, (unsigned int*)task.rng_state, task.sample, x, y);
+					kernel_cpu_optimized_path_trace(kg, (float4*)task.buffer, (unsigned int*)task.rng_state,
+						task.sample, x, y, task.offset, task.stride);
 
 				if(tasks.worker_cancel())
 					break;
@@ -173,7 +174,8 @@
 		{
 			for(int y = task.y; y < task.y + task.h; y++) {
 				for(int x = task.x; x < task.x + task.w; x++)
-					kernel_cpu_path_trace(kg, (float4*)task.buffer, (unsigned int*)task.rng_state, task.sample, x, y);
+					kernel_cpu_path_trace(kg, (float4*)task.buffer, (unsigned int*)task.rng_state,
+						task.sample, x, y, task.offset, task.stride);
 
 				if(tasks.worker_cancel())
 					break;
@@ -192,14 +194,16 @@
 		if(system_cpu_support_optimized()) {
 			for(int y = task.y; y < task.y + task.h; y++)
 				for(int x = task.x; x < task.x + task.w; x++)
-					kernel_cpu_optimized_tonemap(kg, (uchar4*)task.rgba, (float4*)task.buffer, task.sample, task.resolution, x, y);
+					kernel_cpu_optimized_tonemap(kg, (uchar4*)task.rgba, (float4*)task.buffer,
+						task.sample, task.resolution, x, y, task.offset, task.stride);
 		}
 		else
 #endif
 		{
 			for(int y = task.y; y < task.y + task.h; y++)
 				for(int x = task.x; x < task.x + task.w; x++)
-					kernel_cpu_tonemap(kg, (uchar4*)task.rgba, (float4*)task.buffer, task.sample, task.resolution, x, y);
+					kernel_cpu_tonemap(kg, (uchar4*)task.rgba, (float4*)task.buffer,
+						task.sample, task.resolution, x, y, task.offset, task.stride);
 		}
 	}
 

Modified: trunk/blender/intern/cycles/device/device_cuda.cpp
===================================================================
--- trunk/blender/intern/cycles/device/device_cuda.cpp	2011-12-20 12:25:18 UTC (rev 42764)
+++ trunk/blender/intern/cycles/device/device_cuda.cpp	2011-12-20 12:25:37 UTC (rev 42765)
@@ -520,6 +520,12 @@
 		cuda_assert(cuParamSeti(cuPathTrace, offset, task.h))
 		offset += sizeof(task.h);
 
+		cuda_assert(cuParamSeti(cuPathTrace, offset, task.offset))
+		offset += sizeof(task.offset);
+
+		cuda_assert(cuParamSeti(cuPathTrace, offset, task.stride))
+		offset += sizeof(task.stride);
+
 		cuda_assert(cuParamSetSize(cuPathTrace, offset))
 
 		/* launch kernel: todo find optimal size, cache config for fermi */
@@ -581,6 +587,12 @@
 		cuda_assert(cuParamSeti(cuFilmConvert, offset, task.h))
 		offset += sizeof(task.h);
 
+		cuda_assert(cuParamSeti(cuFilmConvert, offset, task.offset))
+		offset += sizeof(task.offset);
+
+		cuda_assert(cuParamSeti(cuFilmConvert, offset, task.stride))
+		offset += sizeof(task.stride);
+
 		cuda_assert(cuParamSetSize(cuFilmConvert, offset))
 
 		/* launch kernel: todo find optimal size, cache config for fermi */

Modified: trunk/blender/intern/cycles/device/device_opencl.cpp
===================================================================
--- trunk/blender/intern/cycles/device/device_opencl.cpp	2011-12-20 12:25:18 UTC (rev 42764)
+++ trunk/blender/intern/cycles/device/device_opencl.cpp	2011-12-20 12:25:37 UTC (rev 42765)
@@ -191,7 +191,7 @@
 	{
 		char version[256];
 
-		int major, minor, req_major = 1, req_minor = 1;

@@ Diff output truncated at 10240 characters. @@



More information about the Bf-blender-cvs mailing list