[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