Index: cc/output/direct_renderer.cc |
diff --git a/cc/output/direct_renderer.cc b/cc/output/direct_renderer.cc |
index 7554a97e3543219800d295c10faab1df75e5a728..99a75dc3de289534cbe9294dbc18fe5ccbe03549 100644 |
--- a/cc/output/direct_renderer.cc |
+++ b/cc/output/direct_renderer.cc |
@@ -141,14 +141,29 @@ DirectRenderer::DirectRenderer(RendererClient* client, |
DirectRenderer::~DirectRenderer() {} |
+const TileDrawQuad* DirectRenderer::CanPassBeDrawnDirectly( |
+ const RenderPass* pass) { |
+ return nullptr; |
+} |
+ |
void DirectRenderer::DecideRenderPassAllocationsForFrame( |
const RenderPassList& render_passes_in_draw_order) { |
+ render_pass_bypass_quads_.clear(); |
+ |
std::unordered_map<RenderPassId, gfx::Size, RenderPassIdHash> |
render_passes_in_frame; |
- for (size_t i = 0; i < render_passes_in_draw_order.size(); ++i) |
+ RenderPass* root_render_pass = render_passes_in_draw_order.back().get(); |
+ for (size_t i = 0; i < render_passes_in_draw_order.size(); ++i) { |
+ RenderPass* pass = render_passes_in_draw_order[i].get(); |
+ if (pass != root_render_pass) { |
enne (OOO)
2016/06/13 18:41:17
Maybe we shouldn't drop the root render pass?
Thi
|
+ if (const TileDrawQuad* tile_quad = CanPassBeDrawnDirectly(pass)) { |
+ render_pass_bypass_quads_[pass->id] = *tile_quad; |
+ continue; |
+ } |
+ } |
render_passes_in_frame.insert(std::pair<RenderPassId, gfx::Size>( |
- render_passes_in_draw_order[i]->id, |
- RenderPassTextureSize(render_passes_in_draw_order[i].get()))); |
+ pass->id, RenderPassTextureSize(pass))); |
+ } |
std::vector<RenderPassId> passes_to_delete; |
for (auto pass_iter = render_pass_textures_.begin(); |
@@ -405,6 +420,11 @@ void DirectRenderer::FlushPolygons( |
void DirectRenderer::DrawRenderPassAndExecuteCopyRequests( |
DrawingFrame* frame, |
RenderPass* render_pass) { |
+ if (render_pass_bypass_quads_.find(render_pass->id) != |
+ render_pass_bypass_quads_.end()) { |
+ return; |
+ } |
+ |
DrawRenderPass(frame, render_pass); |
bool first_request = true; |