Revision: 49185
http://projects.blender.org/scm/viewvc.php?view=rev&root=bf-blender&revision=49185
Author: nazgul
Date: 2012-07-24 20:54:06 +0000 (Tue, 24 Jul 2012)
Log Message:
-----------
Tomato Cycles: speedup realtime samples update
Copy pixels for combined pass only when updating tile after each sample
skipping all other passes. Behaves noticeable faster on scenes with
lots passes used.
Would check further tomorrow from studio whether stuff could be speed
up further.
Modified Paths:
--------------
branches/soc-2011-tomato/intern/cycles/blender/blender_session.cpp
branches/soc-2011-tomato/intern/cycles/blender/blender_session.h
Modified: branches/soc-2011-tomato/intern/cycles/blender/blender_session.cpp
===================================================================
--- branches/soc-2011-tomato/intern/cycles/blender/blender_session.cpp
2012-07-24 20:33:55 UTC (rev 49184)
+++ branches/soc-2011-tomato/intern/cycles/blender/blender_session.cpp
2012-07-24 20:54:06 UTC (rev 49185)
@@ -203,7 +203,7 @@
params->render_result = NULL;
}
-void BlenderSession::do_write_update_render_buffers(RenderBuffers *buffers,
bool do_update, bool do_write)
+void BlenderSession::do_write_update_render_buffers(RenderBuffers *buffers,
bool do_update_only)
{
BufferParams& params = buffers->params;
int x = params.full_x - session->tile_manager.params.full_x;
@@ -223,22 +223,25 @@
b_rr.layers.begin(b_single_rlay);
BL::RenderLayer b_rlay = *b_single_rlay;
- /* write result */
- if (do_update)
+ if (do_update_only) {
+ /* update only needed */
+ update_render_result(b_rr, b_rlay, buffers);
+ }
+ else {
+ /* write result */
write_render_result(b_rr, b_rlay, buffers);
-
- if (do_write)
end_render_result(b_engine, b_rr, ¶ms);
+ }
}
void BlenderSession::write_render_buffers(RenderBuffers *buffers)
{
- do_write_update_render_buffers(buffers, true, true);
+ do_write_update_render_buffers(buffers, false);
}
void BlenderSession::update_render_buffers(RenderBuffers *buffers)
{
- do_write_update_render_buffers(buffers, true, false);
+ do_write_update_render_buffers(buffers, true);
}
void BlenderSession::render()
@@ -319,7 +322,7 @@
session->update_render_buffers_cb = NULL;
}
-void BlenderSession::write_render_result(BL::RenderResult b_rr,
BL::RenderLayer b_rlay, RenderBuffers *buffers)
+void BlenderSession::do_write_update_render_result(BL::RenderResult b_rr,
BL::RenderLayer b_rlay, RenderBuffers *buffers, bool do_update_only)
{
/* copy data from device */
if(!buffers->copy_from_device())
@@ -334,19 +337,21 @@
vector<float> pixels(params.width*params.height*4);
- /* copy each pass */
- BL::RenderLayer::passes_iterator b_iter;
-
- for(b_rlay.passes.begin(b_iter); b_iter != b_rlay.passes.end();
++b_iter) {
- BL::RenderPass b_pass(*b_iter);
+ if (!do_update_only) {
+ /* copy each pass */
+ BL::RenderLayer::passes_iterator b_iter;
- /* find matching pass type */
- PassType pass_type = get_pass_type(b_pass);
- int components = b_pass.channels();
+ for(b_rlay.passes.begin(b_iter); b_iter != b_rlay.passes.end();
++b_iter) {
+ BL::RenderPass b_pass(*b_iter);
- /* copy pixels */
- if(buffers->get_pass(pass_type, exposure, sample, components,
&pixels[0]))
- rna_RenderPass_rect_set(&b_pass.ptr, &pixels[0]);
+ /* find matching pass type */
+ PassType pass_type = get_pass_type(b_pass);
+ int components = b_pass.channels();
+
+ /* copy pixels */
+ if(buffers->get_pass(pass_type, exposure, sample,
components, &pixels[0]))
+ rna_RenderPass_rect_set(&b_pass.ptr,
&pixels[0]);
+ }
}
/* copy combined pass */
@@ -357,6 +362,16 @@
RE_engine_update_result((RenderEngine*)b_engine.ptr.data,
(RenderResult*)b_rr.ptr.data);
}
+void BlenderSession::write_render_result(BL::RenderResult b_rr,
BL::RenderLayer b_rlay, RenderBuffers *buffers)
+{
+ do_write_update_render_result(b_rr, b_rlay, buffers, false);
+}
+
+void BlenderSession::update_render_result(BL::RenderResult b_rr,
BL::RenderLayer b_rlay, RenderBuffers *buffers)
+{
+ do_write_update_render_result(b_rr, b_rlay, buffers, true);
+}
+
void BlenderSession::synchronize()
{
/* on session/scene parameter changes, we recreate session entirely */
Modified: branches/soc-2011-tomato/intern/cycles/blender/blender_session.h
===================================================================
--- branches/soc-2011-tomato/intern/cycles/blender/blender_session.h
2012-07-24 20:33:55 UTC (rev 49184)
+++ branches/soc-2011-tomato/intern/cycles/blender/blender_session.h
2012-07-24 20:54:06 UTC (rev 49185)
@@ -47,9 +47,14 @@
/* offline render */
void render();
- void do_write_update_render_buffers(RenderBuffers *buffers, bool
do_update, bool do_write);
+
void write_render_result(BL::RenderResult b_rr, BL::RenderLayer b_rlay,
RenderBuffers *buffers);
void write_render_buffers(RenderBuffers *buffers);
+
+ /* update functions are used to update display buffer only after sample
was rendered
+ * only needed for better visual feedback
+ */
+ void update_render_result(BL::RenderResult b_rr, BL::RenderLayer
b_rlay, RenderBuffers *buffers);
void update_render_buffers(RenderBuffers *buffers);
/* interactive updates */
@@ -82,6 +87,10 @@
float last_progress;
int width, height;
+
+protected:
+ void do_write_update_render_result(BL::RenderResult b_rr,
BL::RenderLayer b_rlay, RenderBuffers *buffers, bool do_update_only);
+ void do_write_update_render_buffers(RenderBuffers *buffers, bool
do_update_only);
};
CCL_NAMESPACE_END
_______________________________________________
Bf-blender-cvs mailing list
[email protected]
http://lists.blender.org/mailman/listinfo/bf-blender-cvs