| Index: cc/output/gl_renderer.cc
 | 
| diff --git a/cc/output/gl_renderer.cc b/cc/output/gl_renderer.cc
 | 
| index f4b1e575d3920391c6e667c5bc230b1f0496730a..99c45730c135b5b8bb3606533bd3082d1214adc7 100644
 | 
| --- a/cc/output/gl_renderer.cc
 | 
| +++ b/cc/output/gl_renderer.cc
 | 
| @@ -772,25 +772,31 @@ void GLRenderer::DrawRenderPassQuad(DrawingFrame* frame,
 | 
|    SkBitmap filter_bitmap;
 | 
|    SkScalar color_matrix[20];
 | 
|    bool use_color_matrix = false;
 | 
| -  if (quad->filter) {
 | 
| -    skia::RefPtr<SkColorFilter> cf;
 | 
| -
 | 
| -    {
 | 
| -      SkColorFilter* colorfilter_rawptr = NULL;
 | 
| -      quad->filter->asColorFilter(&colorfilter_rawptr);
 | 
| -      cf = skia::AdoptRef(colorfilter_rawptr);
 | 
| -    }
 | 
| +  // TODO(ajuma): Always use RenderSurfaceFilters::BuildImageFilter, not just
 | 
| +  // when we have a reference filter.
 | 
| +  if (quad->filters.HasReferenceFilter()) {
 | 
| +    skia::RefPtr<SkImageFilter> filter = RenderSurfaceFilters::BuildImageFilter(
 | 
| +        quad->filters, contents_texture->size());
 | 
| +    if (filter) {
 | 
| +      skia::RefPtr<SkColorFilter> cf;
 | 
| +
 | 
| +      {
 | 
| +        SkColorFilter* colorfilter_rawptr = NULL;
 | 
| +        filter->asColorFilter(&colorfilter_rawptr);
 | 
| +        cf = skia::AdoptRef(colorfilter_rawptr);
 | 
| +      }
 | 
|  
 | 
| -    if (cf && cf->asColorMatrix(color_matrix) && !quad->filter->getInput(0)) {
 | 
| -      // We have a single color matrix as a filter; apply it locally
 | 
| -      // in the compositor.
 | 
| -      use_color_matrix = true;
 | 
| -    } else {
 | 
| -      filter_bitmap = ApplyImageFilter(this,
 | 
| -                                       frame->offscreen_context_provider,
 | 
| -                                       quad->rect.origin(),
 | 
| -                                       quad->filter.get(),
 | 
| -                                       contents_texture);
 | 
| +      if (cf && cf->asColorMatrix(color_matrix) && !filter->getInput(0)) {
 | 
| +        // We have a single color matrix as a filter; apply it locally
 | 
| +        // in the compositor.
 | 
| +        use_color_matrix = true;
 | 
| +      } else {
 | 
| +        filter_bitmap = ApplyImageFilter(this,
 | 
| +                                         frame->offscreen_context_provider,
 | 
| +                                         quad->rect.origin(),
 | 
| +                                         filter.get(),
 | 
| +                                         contents_texture);
 | 
| +      }
 | 
|      }
 | 
|    } else if (!quad->filters.IsEmpty()) {
 | 
|      FilterOperations optimized_filters =
 | 
| 
 |