From 27246428ba04093cf3c0f4abd55366e49a741bb9 Mon Sep 17 00:00:00 2001 From: Dzmitry Malyshau Date: Mon, 1 May 2017 14:12:49 -0400 Subject: [PATCH] Render option that disables batching --- webrender/src/renderer.rs | 19 ++++++++++++++++--- wrench/src/args.yaml | 3 +++ wrench/src/main.rs | 3 ++- wrench/src/wrench.rs | 4 +++- 4 files changed, 24 insertions(+), 5 deletions(-) diff --git a/webrender/src/renderer.rs b/webrender/src/renderer.rs index 2cda9f470d..ad75db19c1 100644 --- a/webrender/src/renderer.rs +++ b/webrender/src/renderer.rs @@ -532,6 +532,7 @@ pub struct Renderer { clear_color: ColorF, debug: DebugRenderer, render_target_debug: bool, + enable_batcher: bool, backend_profile_counters: BackendProfileCounters, profile_counters: RendererProfileCounters, profiler: Profiler, @@ -1061,6 +1062,7 @@ impl Renderer { notifier: notifier, debug: debug_renderer, render_target_debug: render_target_debug, + enable_batcher: options.enable_batcher, backend_profile_counters: BackendProfileCounters::new(), profile_counters: RendererProfileCounters::new(), profiler: Profiler::new(), @@ -1437,10 +1439,19 @@ impl Renderer { self.device.bind_texture(TextureSampler::Dither, id); } - self.device.update_vao_instances(vao, data, VertexUsageHint::Stream); - self.device.draw_indexed_triangles_instanced_u16(6, data.len() as i32); + if self.enable_batcher { + self.device.update_vao_instances(vao, data, VertexUsageHint::Stream); + self.device.draw_indexed_triangles_instanced_u16(6, data.len() as i32); + self.profile_counters.draw_calls.inc(); + } else { + for i in 0 .. data.len() { + self.device.update_vao_instances(vao, &data[i..i+1], VertexUsageHint::Stream); + self.device.draw_triangles_u16(0, 6); + self.profile_counters.draw_calls.inc(); + } + } + self.profile_counters.vertices.add(6 * data.len()); - self.profile_counters.draw_calls.inc(); } fn submit_batch(&mut self, @@ -2120,6 +2131,7 @@ pub struct RendererOptions { pub enable_subpixel_aa: bool, pub clear_framebuffer: bool, pub clear_color: ColorF, + pub enable_batcher: bool, pub render_target_debug: bool, pub max_texture_size: Option, pub workers: Option>>, @@ -2143,6 +2155,7 @@ impl Default for RendererOptions { enable_subpixel_aa: false, clear_framebuffer: true, clear_color: ColorF::new(1.0, 1.0, 1.0, 1.0), + enable_batcher: true, render_target_debug: false, max_texture_size: None, workers: None, diff --git a/wrench/src/args.yaml b/wrench/src/args.yaml index 45643d68b1..b24a1aedea 100644 --- a/wrench/src/args.yaml +++ b/wrench/src/args.yaml @@ -50,6 +50,9 @@ args: - vsync: long: vsync help: Enable vsync for OpenGL window + - no_batch: + long: no-batch + help: Disable batching of instanced draw calls subcommands: - png: diff --git a/wrench/src/main.rs b/wrench/src/main.rs index 60ab46236e..021edad733 100644 --- a/wrench/src/main.rs +++ b/wrench/src/main.rs @@ -324,7 +324,8 @@ fn main() { args.is_present("rebuild"), args.is_present("subpixel_aa"), args.is_present("debug"), - args.is_present("verbose")); + args.is_present("verbose"), + args.is_present("no_batch")); let mut thing = if let Some(subargs) = args.subcommand_matches("show") { diff --git a/wrench/src/wrench.rs b/wrench/src/wrench.rs index 55e3a0a56b..d064e59075 100644 --- a/wrench/src/wrench.rs +++ b/wrench/src/wrench.rs @@ -146,7 +146,8 @@ impl Wrench { do_rebuild: bool, subpixel_aa: bool, debug: bool, - verbose: bool) + verbose: bool, + no_batch: bool) -> Wrench { println!("Shader override path: {:?}", shader_override_path); @@ -171,6 +172,7 @@ impl Wrench { recorder: recorder, enable_subpixel_aa: subpixel_aa, debug: debug, + enable_batcher: !no_batch, max_recorded_profiles: 16, .. Default::default() };