From 606bb8b39fb758708a974bfb8ba335f47ddf6d18 Mon Sep 17 00:00:00 2001 From: Glenn Watson Date: Thu, 11 Jan 2018 17:07:21 +1000 Subject: [PATCH] Add support for caching render tasks across frames and display lists. This patch adds the infrastructure required to allow render tasks to be rendered into the texture cache, where they can be stored and referenced across multiple frames. Since the cache key is based on the contents of the task itself, the cache items remain valid even when a new display list is provided, so long as the content of the cached task is the same. When the cache is determined to be valid, the render task is just drawn as a simple image, rather than executing the complex render task chain used to build the output. Convert box-shadows to make use of this new feature. When a new box-shadow is required, the render task chain is set up to draw the minimal box-shadow, and blur it. The blurred result is then stored in the texture cache, available for use on this and subsequent frames. Since items are drawn into the texture cache, this will also help with batching in the future, as we collapse more items to be able to use a simple shader that draws an image from the texture cache. Remove blur regions since they are no longer used or required. Remove old render task sharing within a single frame, it's redundant now. TODO (as future work): * Support caching of RGBA8 render tasks. * Convert other tasks (e.g. clips, drop-shadows) to use cacheable tasks. * Use this as basis for optimizing rendering of static Pictures (e.g. a picture with a filter chain + image). --- webrender/res/brush_image.glsl | 48 ++-- webrender/res/cs_blur.glsl | 8 - webrender/res/prim_shared.glsl | 5 +- webrender/src/batch.rs | 45 ++-- webrender/src/box_shadow.rs | 2 - webrender/src/frame_builder.rs | 11 +- webrender/src/glyph_rasterizer.rs | 4 +- webrender/src/gpu_types.rs | 3 +- webrender/src/picture.rs | 190 +++++++++------- webrender/src/prim_store.rs | 4 +- webrender/src/render_task.rs | 211 ++++++++++++------ webrender/src/renderer.rs | 82 ++++++- webrender/src/resource_cache.rs | 33 ++- webrender/src/texture_cache.rs | 80 +++++-- webrender/src/tiling.rs | 134 ++++++----- .../boxshadow/box-shadow-border-radii.png | Bin 12343 -> 12027 bytes .../reftests/boxshadow/box-shadow-cache.png | Bin 36026 -> 34999 bytes wrench/reftests/boxshadow/inset-alpha.png | Bin 1565 -> 1572 bytes wrench/reftests/boxshadow/inset-downscale.png | Bin 12126 -> 12676 bytes wrench/reftests/boxshadow/overlap1.png | Bin 10871 -> 11033 bytes wrench/reftests/transforms/prim-suite.png | Bin 41312 -> 41312 bytes 21 files changed, 570 insertions(+), 290 deletions(-) diff --git a/webrender/res/brush_image.glsl b/webrender/res/brush_image.glsl index ca10f3c7cb..379fd997f3 100644 --- a/webrender/res/brush_image.glsl +++ b/webrender/res/brush_image.glsl @@ -2,7 +2,7 @@ * License, v. 2.0. If a copy of the MPL was not distributed with this * file, You can obtain one at http://mozilla.org/MPL/2.0/. */ -#define VECS_PER_SPECIFIC_BRUSH 0 +#define VECS_PER_SPECIFIC_BRUSH 1 #include shared,prim_shared,brush @@ -25,6 +25,16 @@ flat varying vec4 vColor; #define BRUSH_IMAGE_MIRROR 2 #ifdef WR_VERTEX_SHADER + +struct Picture { + vec4 color; +}; + +Picture fetch_picture(int address) { + vec4 data = fetch_from_resource_cache_1(address); + return Picture(data); +} + void brush_vs( int prim_address, vec2 local_pos, @@ -32,29 +42,35 @@ void brush_vs( ivec2 user_data, PictureTask pic_task ) { - // TODO(gw): For now, this brush_image shader is only - // being used to draw items from the intermediate - // surface cache (render tasks). In the future - // we can expand this to support items from - // the normal texture cache and unify this - // with the normal image shader. - BlurTask blur_task = fetch_blur_task(user_data.x); - vUv.z = blur_task.common_data.texture_layer_index; vImageKind = user_data.y; -#if defined WR_FEATURE_COLOR_TARGET - vec2 texture_size = vec2(textureSize(sColor0, 0).xy); -#elif defined WR_FEATURE_COLOR_TARGET_ALPHA_MASK + // TODO(gw): There's quite a bit of code duplication here, + // depending on which variation of brush image + // this is being used for. This is because only + // box-shadow pictures are currently supported + // as texture cacheable items. Once we port the + // drop-shadows and text-shadows to be cacheable, + // most of this code can be merged together. +#if defined WR_FEATURE_COLOR_TARGET || defined WR_FEATURE_COLOR_TARGET_ALPHA_MASK + BlurTask blur_task = fetch_blur_task(user_data.x); + vUv.z = blur_task.common_data.texture_layer_index; vec2 texture_size = vec2(textureSize(sColor0, 0).xy); - vColor = blur_task.color; -#else - vec2 texture_size = vec2(textureSize(sColor1, 0).xy); +#if defined WR_FEATURE_COLOR_TARGET_ALPHA_MASK vColor = blur_task.color; #endif - vec2 uv0 = blur_task.common_data.task_rect.p0; vec2 src_size = blur_task.common_data.task_rect.size * blur_task.scale_factor; vec2 uv1 = uv0 + blur_task.common_data.task_rect.size; +#else + Picture pic = fetch_picture(prim_address); + ImageResource uv_rect = fetch_image_resource(user_data.x); + vec2 texture_size = vec2(textureSize(sColor1, 0).xy); + vColor = pic.color; + vec2 uv0 = uv_rect.uv_rect.xy; + vec2 uv1 = uv_rect.uv_rect.zw; + vec2 src_size = (uv1 - uv0) * uv_rect.user_data.x; + vUv.z = uv_rect.layer; +#endif // TODO(gw): In the future we'll probably draw these as segments // with the brush shader. When that occurs, we can diff --git a/webrender/res/cs_blur.glsl b/webrender/res/cs_blur.glsl index fabc548536..830c529f1d 100644 --- a/webrender/res/cs_blur.glsl +++ b/webrender/res/cs_blur.glsl @@ -20,7 +20,6 @@ flat varying int vBlurRadius; in int aBlurRenderTaskAddress; in int aBlurSourceTaskAddress; in int aBlurDirection; -in vec4 aBlurRegion; void main(void) { BlurTask blur_task = fetch_blur_task(aBlurRenderTaskAddress); @@ -51,13 +50,6 @@ void main(void) { src_rect.p0 + src_rect.size - vec2(0.5)); vUvRect /= texture_size.xyxy; - if (aBlurRegion.z > 0.0) { - vec4 blur_region = aBlurRegion * uDevicePixelRatio; - src_rect = RectWithSize(src_rect.p0 + blur_region.xy, blur_region.zw); - target_rect.p0 = target_rect.p0 + blur_region.xy; - target_rect.size = blur_region.zw; - } - vec2 pos = target_rect.p0 + target_rect.size * aPosition.xy; vec2 uv0 = src_rect.p0 / texture_size; diff --git a/webrender/res/prim_shared.glsl b/webrender/res/prim_shared.glsl index 14ca38a933..ca1565a3b0 100644 --- a/webrender/res/prim_shared.glsl +++ b/webrender/res/prim_shared.glsl @@ -694,17 +694,18 @@ GlyphResource fetch_glyph_resource(int address) { struct ImageResource { vec4 uv_rect; float layer; + vec3 user_data; }; ImageResource fetch_image_resource(int address) { //Note: number of blocks has to match `renderer::BLOCKS_PER_UV_RECT` vec4 data[2] = fetch_from_resource_cache_2(address); - return ImageResource(data[0], data[1].x); + return ImageResource(data[0], data[1].x, data[1].yzw); } ImageResource fetch_image_resource_direct(ivec2 address) { vec4 data[2] = fetch_from_resource_cache_2_direct(address); - return ImageResource(data[0], data[1].x); + return ImageResource(data[0], data[1].x, data[1].yzw); } struct TextRun { diff --git a/webrender/src/batch.rs b/webrender/src/batch.rs index 0f158dc793..0190b293e9 100644 --- a/webrender/src/batch.rs +++ b/webrender/src/batch.rs @@ -16,7 +16,7 @@ use gpu_types::{BrushImageKind, BrushInstance, ClipChainRectIndex}; use gpu_types::{ClipMaskInstance, ClipScrollNodeIndex, PictureType}; use gpu_types::{CompositePrimitiveInstance, PrimitiveInstance, SimplePrimitiveInstance}; use internal_types::{FastHashMap, SourceTexture}; -use picture::{PictureCompositeMode, PictureKind, PicturePrimitive}; +use picture::{PictureCompositeMode, PictureKind, PicturePrimitive, PictureSurface}; use plane_split::{BspSplitter, Polygon, Splitter}; use prim_store::{PrimitiveIndex, PrimitiveKind, PrimitiveMetadata, PrimitiveStore}; use prim_store::{BrushPrimitive, BrushKind, DeferredResolve, PrimitiveRun}; @@ -109,7 +109,7 @@ impl BatchTextures { pub fn color(texture: SourceTexture) -> Self { BatchTextures { - colors: [texture, SourceTexture::Invalid, SourceTexture::Invalid], + colors: [texture, texture, SourceTexture::Invalid], } } } @@ -468,7 +468,12 @@ impl AlphaBatcher { let pic_metadata = &ctx.prim_store.cpu_metadata[prim_index.0]; let pic = &ctx.prim_store.cpu_pictures[pic_metadata.cpu_prim_index.0]; let batch = self.batch_list.get_suitable_batch(key, pic_metadata.screen_rect.as_ref().expect("bug")); - let source_task_address = render_tasks.get_task_address(pic.render_task_id.expect("bug")); + + let render_task_id = match pic.surface { + Some(PictureSurface::RenderTask(render_task_id)) => render_task_id, + Some(PictureSurface::TextureCache(..)) | None => panic!("BUG: unexpected surface in splitting"), + }; + let source_task_address = render_tasks.get_task_address(render_task_id); let gpu_address = gpu_handle.as_int(gpu_cache); let instance = CompositePrimitiveInstance::new( @@ -833,13 +838,15 @@ impl AlphaBatcher { let picture = &ctx.prim_store.cpu_pictures[prim_metadata.cpu_prim_index.0]; - match picture.render_task_id { - Some(cache_task_id) => { - let cache_task_address = render_tasks.get_task_address(cache_task_id); - let textures = BatchTextures::render_target_cache(); - + match picture.surface { + Some(PictureSurface::TextureCache(ref cache_item)) => { match picture.kind { - PictureKind::TextShadow { .. } => { + PictureKind::TextShadow { .. } | + PictureKind::Image { .. } => { + panic!("BUG: only supported as render tasks for now"); + } + PictureKind::BoxShadow { image_kind, .. } => { + let textures = BatchTextures::color(cache_item.texture_id); let kind = BatchKind::Brush( BrushBatchKind::Image( BrushImageSourceKind::from_render_target_kind(picture.target_kind())), @@ -855,12 +862,19 @@ impl AlphaBatcher { clip_task_address, z, segment_index: 0, - user_data0: cache_task_address.0 as i32, - user_data1: BrushImageKind::Simple as i32, + user_data0: cache_item.uv_rect_handle.as_int(gpu_cache), + user_data1: image_kind as i32, }; batch.push(PrimitiveInstance::from(instance)); } - PictureKind::BoxShadow { image_kind, .. } => { + } + } + Some(PictureSurface::RenderTask(cache_task_id)) => { + let cache_task_address = render_tasks.get_task_address(cache_task_id); + let textures = BatchTextures::render_target_cache(); + + match picture.kind { + PictureKind::TextShadow { .. } => { let kind = BatchKind::Brush( BrushBatchKind::Image( BrushImageSourceKind::from_render_target_kind(picture.target_kind())), @@ -877,10 +891,13 @@ impl AlphaBatcher { z, segment_index: 0, user_data0: cache_task_address.0 as i32, - user_data1: image_kind as i32, + user_data1: BrushImageKind::Simple as i32, }; batch.push(PrimitiveInstance::from(instance)); } + PictureKind::BoxShadow { .. } => { + panic!("BUG: should be handled as a texture cache surface"); + } PictureKind::Image { composite_mode, secondary_render_task_id, @@ -914,7 +931,7 @@ impl AlphaBatcher { // This will allow us to unify some of the shaders, apply clip masks // when compositing pictures, and also correctly apply pixel snapping // to picture compositing operations. - let source_id = picture.render_task_id.expect("no source!?"); + let source_id = cache_task_id; match composite_mode.expect("bug: only composites here") { PictureCompositeMode::Filter(filter) => { diff --git a/webrender/src/box_shadow.rs b/webrender/src/box_shadow.rs index 2a3a06601d..b783ad4397 100644 --- a/webrender/src/box_shadow.rs +++ b/webrender/src/box_shadow.rs @@ -242,7 +242,6 @@ impl FrameBuilder { let mut pic_prim = PicturePrimitive::new_box_shadow( blur_radius, *color, - Vec::new(), clip_mode, image_kind, cache_key, @@ -321,7 +320,6 @@ impl FrameBuilder { let mut pic_prim = PicturePrimitive::new_box_shadow( blur_radius, *color, - Vec::new(), BoxShadowClipMode::Inset, // TODO(gw): Make use of optimization for inset. BrushImageKind::NinePatch, diff --git a/webrender/src/frame_builder.rs b/webrender/src/frame_builder.rs index a4af4f957b..562d4e2597 100644 --- a/webrender/src/frame_builder.rs +++ b/webrender/src/frame_builder.rs @@ -22,7 +22,7 @@ use glyph_rasterizer::FontInstance; use gpu_cache::GpuCache; use gpu_types::{ClipScrollNodeData, PictureType}; use internal_types::{FastHashMap, FastHashSet, RenderPassIndex}; -use picture::{ContentOrigin, PictureCompositeMode, PictureKind, PicturePrimitive}; +use picture::{ContentOrigin, PictureCompositeMode, PictureKind, PicturePrimitive, PictureSurface}; use prim_store::{BrushKind, BrushPrimitive, TexelRect, YuvImagePrimitiveCpu}; use prim_store::{GradientPrimitiveCpu, ImagePrimitiveCpu, LinePrimitive, PrimitiveKind}; use prim_store::{PrimitiveContainer, PrimitiveIndex, SpecificPrimitiveIndex}; @@ -33,8 +33,7 @@ use render_task::{ClearMode, ClipChain, RenderTask, RenderTaskId, RenderTaskTree use resource_cache::ResourceCache; use scene::{ScenePipeline, SceneProperties}; use std::{mem, usize, f32}; -use tiling::{CompositeOps, Frame}; -use tiling::{RenderPass, RenderTargetKind}; +use tiling::{CompositeOps, Frame, RenderPass, RenderTargetKind}; use tiling::{RenderTargetContext, ScrollbarPrimitive}; use util::{self, MaxRect, pack_as_float, RectHelpers, recycle_vec}; @@ -1620,12 +1619,12 @@ impl FrameBuilder { PremultipliedColorF::TRANSPARENT, ClearMode::Transparent, child_tasks, - None, PictureType::Image, ); - pic.render_task_id = Some(render_tasks.add(root_render_task)); - pic.render_task_id + let render_task_id = render_tasks.add(root_render_task); + pic.surface = Some(PictureSurface::RenderTask(render_task_id)); + Some(render_task_id) } fn update_scroll_bars(&mut self, clip_scroll_tree: &ClipScrollTree, gpu_cache: &mut GpuCache) { diff --git a/webrender/src/glyph_rasterizer.rs b/webrender/src/glyph_rasterizer.rs index 9bf21bf7a7..ebe907308d 100644 --- a/webrender/src/glyph_rasterizer.rs +++ b/webrender/src/glyph_rasterizer.rs @@ -400,7 +400,7 @@ impl GlyphRasterizer { offset: 0, }, TextureFilter::Linear, - ImageData::Raw(glyph_info.glyph_bytes.clone()), + Some(ImageData::Raw(glyph_info.glyph_bytes.clone())), [glyph_info.offset.x, glyph_info.offset.y, glyph_info.scale], None, gpu_cache, @@ -523,7 +523,7 @@ impl GlyphRasterizer { offset: 0, }, TextureFilter::Linear, - ImageData::Raw(glyph_bytes.clone()), + Some(ImageData::Raw(glyph_bytes.clone())), [glyph.left, -glyph.top, glyph.scale], None, gpu_cache, diff --git a/webrender/src/gpu_types.rs b/webrender/src/gpu_types.rs index 5116f58f95..bc83c66d7a 100644 --- a/webrender/src/gpu_types.rs +++ b/webrender/src/gpu_types.rs @@ -2,7 +2,7 @@ * License, v. 2.0. If a copy of the MPL was not distributed with this * file, You can obtain one at http://mozilla.org/MPL/2.0/. */ -use api::{LayerRect, LayerToWorldTransform}; +use api::{LayerToWorldTransform}; use gpu_cache::GpuCacheAddress; use render_task::RenderTaskAddress; @@ -21,7 +21,6 @@ pub struct BlurInstance { pub task_address: RenderTaskAddress, pub src_task_address: RenderTaskAddress, pub blur_direction: BlurDirection, - pub region: LayerRect, } /// A clipping primitive drawn into the clipping mask. diff --git a/webrender/src/picture.rs b/webrender/src/picture.rs index 9d47a50d76..099fc6af41 100644 --- a/webrender/src/picture.rs +++ b/webrender/src/picture.rs @@ -8,10 +8,12 @@ use api::{BoxShadowClipMode, LayerPoint, LayerRect, LayerVector2D, Shadow}; use api::{ClipId, PremultipliedColorF}; use box_shadow::{BLUR_SAMPLE_SCALE, BoxShadowCacheKey}; use frame_builder::PrimitiveContext; -use gpu_cache::GpuDataRequest; +use gpu_cache::{GpuCache, GpuDataRequest}; use gpu_types::{BrushImageKind, PictureType}; use prim_store::{PrimitiveIndex, PrimitiveRun, PrimitiveRunLocalRect}; -use render_task::{ClearMode, RenderTask, RenderTaskId, RenderTaskTree}; +use render_task::{ClearMode, RenderTask, RenderTaskCacheKey}; +use render_task::{RenderTaskCacheKeyKind, RenderTaskId, RenderTaskTree}; +use resource_cache::{CacheItem, ResourceCache}; use scene::{FilterOpHelpers, SceneProperties}; use tiling::RenderTargetKind; @@ -57,7 +59,6 @@ pub enum PictureKind { BoxShadow { blur_radius: f32, color: ColorF, - blur_regions: Vec, clip_mode: BoxShadowClipMode, image_kind: BrushImageKind, content_rect: LayerRect, @@ -88,11 +89,21 @@ pub enum PictureKind { }, } +// The type of surface that a picture can be drawn to. +// RenderTask surfaces are not retained across frames. +// TextureCache surfaces are stored across frames, and +// also shared between display lists. +#[derive(Debug)] +pub enum PictureSurface { + RenderTask(RenderTaskId), + TextureCache(CacheItem), +} + #[derive(Debug)] pub struct PicturePrimitive { // If this picture is drawn to an intermediate surface, - // the associated render task. - pub render_task_id: Option, + // the associated target information. + pub surface: Option, // Details specific to this type of picture. pub kind: PictureKind, @@ -113,7 +124,7 @@ impl PicturePrimitive { pub fn new_text_shadow(shadow: Shadow, pipeline_id: PipelineId) -> Self { PicturePrimitive { runs: Vec::new(), - render_task_id: None, + surface: None, kind: PictureKind::TextShadow { offset: shadow.offset, color: shadow.color, @@ -149,7 +160,6 @@ impl PicturePrimitive { pub fn new_box_shadow( blur_radius: f32, color: ColorF, - blur_regions: Vec, clip_mode: BoxShadowClipMode, image_kind: BrushImageKind, cache_key: BoxShadowCacheKey, @@ -157,11 +167,10 @@ impl PicturePrimitive { ) -> Self { PicturePrimitive { runs: Vec::new(), - render_task_id: None, + surface: None, kind: PictureKind::BoxShadow { blur_radius, color, - blur_regions, clip_mode, image_kind, content_rect: LayerRect::zero(), @@ -181,7 +190,7 @@ impl PicturePrimitive { ) -> Self { PicturePrimitive { runs: Vec::new(), - render_task_id: None, + surface: None, kind: PictureKind::Image { secondary_render_task_id: None, composite_mode, @@ -303,6 +312,8 @@ impl PicturePrimitive { prim_local_rect: &LayerRect, child_tasks: Vec, parent_tasks: &mut Vec, + resource_cache: &mut ResourceCache, + gpu_cache: &mut GpuCache, ) { let content_scale = LayerToWorldScale::new(1.0) * prim_context.device_pixel_scale; @@ -323,26 +334,24 @@ impl PicturePrimitive { PremultipliedColorF::TRANSPARENT, ClearMode::Transparent, child_tasks, - None, PictureType::Image, ); let blur_std_deviation = blur_radius * prim_context.device_pixel_scale.0; let picture_task_id = render_tasks.add(picture_task); - let blur_render_task = RenderTask::new_blur( + let (blur_render_task, _) = RenderTask::new_blur( blur_std_deviation, picture_task_id, render_tasks, RenderTargetKind::Color, - &[], ClearMode::Transparent, PremultipliedColorF::TRANSPARENT, - None, ); - let blur_render_task_id = render_tasks.add(blur_render_task); - self.render_task_id = Some(blur_render_task_id); + let render_task_id = render_tasks.add(blur_render_task); + parent_tasks.push(render_task_id); + self.surface = Some(PictureSurface::RenderTask(render_task_id)); } Some(PictureCompositeMode::Filter(FilterOp::DropShadow(offset, blur_radius, color))) => { let rect = (prim_local_rect.translate(&-offset) * content_scale).round().to_i32(); @@ -354,26 +363,26 @@ impl PicturePrimitive { PremultipliedColorF::TRANSPARENT, ClearMode::Transparent, child_tasks, - None, PictureType::Image, ); let blur_std_deviation = blur_radius * prim_context.device_pixel_scale.0; let picture_task_id = render_tasks.add(picture_task); - let blur_render_task = RenderTask::new_blur( + let (blur_render_task, _) = RenderTask::new_blur( blur_std_deviation.round(), picture_task_id, render_tasks, RenderTargetKind::Color, - &[], ClearMode::Transparent, color.premultiplied(), - None, ); *secondary_render_task_id = Some(picture_task_id); - self.render_task_id = Some(render_tasks.add(blur_render_task)); + + let render_task_id = render_tasks.add(blur_render_task); + parent_tasks.push(render_task_id); + self.surface = Some(PictureSurface::RenderTask(render_task_id)); } Some(PictureCompositeMode::MixBlend(..)) => { let picture_task = RenderTask::new_picture( @@ -384,7 +393,6 @@ impl PicturePrimitive { PremultipliedColorF::TRANSPARENT, ClearMode::Transparent, child_tasks, - None, PictureType::Image, ); @@ -393,7 +401,9 @@ impl PicturePrimitive { *secondary_render_task_id = Some(readback_task_id); parent_tasks.push(readback_task_id); - self.render_task_id = Some(render_tasks.add(picture_task)); + let render_task_id = render_tasks.add(picture_task); + parent_tasks.push(render_task_id); + self.surface = Some(PictureSurface::RenderTask(render_task_id)); } Some(PictureCompositeMode::Filter(filter)) => { // If this filter is not currently going to affect @@ -403,7 +413,7 @@ impl PicturePrimitive { // filters and be a significant performance win. if filter.is_noop() { parent_tasks.extend(child_tasks); - self.render_task_id = None; + self.surface = None; } else { let picture_task = RenderTask::new_picture( Some(prim_screen_rect.size), @@ -413,11 +423,12 @@ impl PicturePrimitive { PremultipliedColorF::TRANSPARENT, ClearMode::Transparent, child_tasks, - None, PictureType::Image, ); - self.render_task_id = Some(render_tasks.add(picture_task)); + let render_task_id = render_tasks.add(picture_task); + parent_tasks.push(render_task_id); + self.surface = Some(PictureSurface::RenderTask(render_task_id)); } } Some(PictureCompositeMode::Blit) => { @@ -429,15 +440,16 @@ impl PicturePrimitive { PremultipliedColorF::TRANSPARENT, ClearMode::Transparent, child_tasks, - None, PictureType::Image, ); - self.render_task_id = Some(render_tasks.add(picture_task)); + let render_task_id = render_tasks.add(picture_task); + parent_tasks.push(render_task_id); + self.surface = Some(PictureSurface::RenderTask(render_task_id)); } None => { parent_tasks.extend(child_tasks); - self.render_task_id = None; + self.surface = None; } } } @@ -468,26 +480,25 @@ impl PicturePrimitive { color.premultiplied(), ClearMode::Transparent, Vec::new(), - None, PictureType::TextShadow, ); let picture_task_id = render_tasks.add(picture_task); - let render_task = RenderTask::new_blur( + let (blur_render_task, _) = RenderTask::new_blur( blur_std_deviation, picture_task_id, render_tasks, RenderTargetKind::Color, - &[], ClearMode::Transparent, color.premultiplied(), - None, ); - self.render_task_id = Some(render_tasks.add(render_task)); + let render_task_id = render_tasks.add(blur_render_task); + parent_tasks.push(render_task_id); + self.surface = Some(PictureSurface::RenderTask(render_task_id)); } - PictureKind::BoxShadow { blur_radius, clip_mode, ref blur_regions, color, content_rect, cache_key, .. } => { + PictureKind::BoxShadow { blur_radius, clip_mode, color, content_rect, cache_key, .. } => { // TODO(gw): Rounding the content rect here to device pixels is not // technically correct. Ideally we should ceil() here, and ensure that // the extra part pixel in the case of fractional sizes is correctly @@ -495,59 +506,82 @@ impl PicturePrimitive { // Gecko tests. let cache_size = (content_rect.size * content_scale).round().to_i32(); - // Quote from https://drafts.csswg.org/css-backgrounds-3/#shadow-blur - // "the image that would be generated by applying to the shadow a - // Gaussian blur with a standard deviation equal to half the blur radius." - let device_radius = (blur_radius * prim_context.device_pixel_scale.0).round(); - let blur_std_deviation = device_radius * 0.5; + // Request the texture cache item for this box-shadow key. If it + // doesn't exist in the cache, the closure is invoked to build + // a render task chain to draw the cacheable result. + let cache_item = resource_cache.request_render_task( + RenderTaskCacheKey { + size: cache_size, + kind: RenderTaskCacheKeyKind::BoxShadow(cache_key), + }, + gpu_cache, + render_tasks, + |render_tasks| { + // Quote from https://drafts.csswg.org/css-backgrounds-3/#shadow-blur + // "the image that would be generated by applying to the shadow a + // Gaussian blur with a standard deviation equal to half the blur radius." + let device_radius = (blur_radius * prim_context.device_pixel_scale.0).round(); + let blur_std_deviation = device_radius * 0.5; + + let blur_clear_mode = match clip_mode { + BoxShadowClipMode::Outset => { + ClearMode::One + } + BoxShadowClipMode::Inset => { + ClearMode::Zero + } + }; - let blur_clear_mode = match clip_mode { - BoxShadowClipMode::Outset => { - ClearMode::One - } - BoxShadowClipMode::Inset => { - ClearMode::Zero - } - }; + let picture_task = RenderTask::new_picture( + Some(cache_size), + prim_index, + RenderTargetKind::Alpha, + ContentOrigin::Local(content_rect.origin), + color.premultiplied(), + ClearMode::Zero, + Vec::new(), + PictureType::BoxShadow, + ); - let picture_task = RenderTask::new_picture( - Some(cache_size), - prim_index, - RenderTargetKind::Alpha, - ContentOrigin::Local(content_rect.origin), - color.premultiplied(), - ClearMode::Zero, - Vec::new(), - Some(cache_key), - PictureType::BoxShadow, - ); + let picture_task_id = render_tasks.add(picture_task); - let picture_task_id = render_tasks.add(picture_task); + let (blur_render_task, scale_factor) = RenderTask::new_blur( + blur_std_deviation, + picture_task_id, + render_tasks, + RenderTargetKind::Alpha, + blur_clear_mode, + color.premultiplied(), + ); - let render_task = RenderTask::new_blur( - blur_std_deviation, - picture_task_id, - render_tasks, - RenderTargetKind::Alpha, - blur_regions, - blur_clear_mode, - color.premultiplied(), - Some(cache_key), + let root_task_id = render_tasks.add(blur_render_task); + parent_tasks.push(root_task_id); + + // TODO(gw): Remove the nastiness with having to pass + // the scale factor through the texture cache + // item user data. This will disappear once + // the brush_image shader is updated to draw + // segments, since the scale factor will not + // be used at all then during drawing. + (root_task_id, [scale_factor, 0.0, 0.0]) + } ); - self.render_task_id = Some(render_tasks.add(render_task)); + self.surface = Some(PictureSurface::TextureCache(cache_item)); } } - - if let Some(render_task_id) = self.render_task_id { - parent_tasks.push(render_task_id); - } } - pub fn write_gpu_blocks(&self, _request: &mut GpuDataRequest) { - // TODO(gw): We'll need to write the GPU blocks - // here specific to a brush primitive - // once we start drawing pictures as brushes! + pub fn write_gpu_blocks(&self, request: &mut GpuDataRequest) { + match self.kind { + PictureKind::TextShadow { .. } | + PictureKind::Image { .. } => { + request.push([0.0; 4]); + } + PictureKind::BoxShadow { color, .. } => { + request.push(color.premultiplied()); + } + } } pub fn target_kind(&self) -> RenderTargetKind { diff --git a/webrender/src/prim_store.rs b/webrender/src/prim_store.rs index 2d323abacc..18f5c98332 100644 --- a/webrender/src/prim_store.rs +++ b/webrender/src/prim_store.rs @@ -1178,6 +1178,8 @@ impl PrimitiveStore { &metadata.local_rect, child_tasks, parent_tasks, + resource_cache, + gpu_cache, ); } PrimitiveKind::TextRun => { @@ -1513,7 +1515,6 @@ impl PrimitiveStore { combined_outer_rect.intersection(&segment_screen_rect).map(|bounds| { let clip_task = RenderTask::new_mask( - None, bounds, clips.clone(), prim_context.scroll_node.coordinate_system_id, @@ -1651,7 +1652,6 @@ impl PrimitiveStore { } let clip_task = RenderTask::new_mask( - None, combined_outer_rect, clips, prim_coordinate_system_id, diff --git a/webrender/src/render_task.rs b/webrender/src/render_task.rs index 8a7087288e..32a4322e6a 100644 --- a/webrender/src/render_task.rs +++ b/webrender/src/render_task.rs @@ -2,19 +2,23 @@ * License, v. 2.0. If a copy of the MPL was not distributed with this * file, You can obtain one at http://mozilla.org/MPL/2.0/. */ -use api::{ClipId, DeviceIntPoint, DeviceIntRect, DeviceIntSize}; -use api::{LayerRect, PremultipliedColorF}; +use api::{DeviceIntPoint, DeviceIntRect, DeviceIntSize}; +use api::{ImageDescriptor, ImageFormat, LayerRect, PremultipliedColorF}; use box_shadow::BoxShadowCacheKey; use clip::{ClipSourcesWeakHandle}; use clip_scroll_tree::CoordinateSystemId; +use device::TextureFilter; +use gpu_cache::GpuCache; use gpu_types::{ClipScrollNodeIndex, PictureType}; -use internal_types::RenderPassIndex; +use internal_types::{FastHashMap, RenderPassIndex, SourceTexture}; use picture::ContentOrigin; use prim_store::{PrimitiveIndex}; #[cfg(feature = "debugger")] use print_tree::{PrintTreePrinter}; +use resource_cache::CacheItem; use std::{cmp, ops, usize, f32, i32}; use std::rc::Rc; +use texture_cache::{TextureCache, TextureCacheHandle}; use tiling::{RenderPass, RenderTargetIndex}; use tiling::{RenderTargetKind}; @@ -160,7 +164,8 @@ impl RenderTaskTree { RenderTaskLocation::Fixed => { debug_assert!(pass_index == passes.len() - 1); } - RenderTaskLocation::Dynamic(..) => { + RenderTaskLocation::Dynamic(..) | + RenderTaskLocation::TextureCache(..) => { debug_assert!(pass_index < passes.len() - 1); } } @@ -180,10 +185,7 @@ impl RenderTaskTree { } pub fn get_task_address(&self, id: RenderTaskId) -> RenderTaskAddress { - match self[id].kind { - RenderTaskKind::Alias(alias_id) => RenderTaskAddress(alias_id.0), - _ => RenderTaskAddress(id.0), - } + RenderTaskAddress(id.0) } pub fn build(&mut self) { @@ -206,19 +208,11 @@ impl ops::IndexMut for RenderTaskTree { } } -#[derive(Debug, Copy, Clone, Eq, PartialEq, Hash)] -pub enum RenderTaskKey { - /// Draw the alpha mask for a shared clip. - CacheMask(ClipId), - CacheScaling(BoxShadowCacheKey, DeviceIntSize), - CacheBlur(BoxShadowCacheKey, i32), - CachePicture(BoxShadowCacheKey), -} - #[derive(Debug)] pub enum RenderTaskLocation { Fixed, Dynamic(Option<(DeviceIntPoint, RenderTargetIndex)>, DeviceIntSize), + TextureCache(SourceTexture, i32, DeviceIntRect), } #[derive(Debug, Clone)] @@ -248,7 +242,6 @@ pub struct PictureTask { pub struct BlurTask { pub blur_std_deviation: f32, pub target_kind: RenderTargetKind, - pub regions: Vec, pub color: PremultipliedColorF, pub scale_factor: f32, } @@ -259,9 +252,6 @@ impl BlurTask { pt.add_item(format!("std deviation: {}", self.blur_std_deviation)); pt.add_item(format!("target: {:?}", self.target_kind)); pt.add_item(format!("scale: {}", self.scale_factor)); - for region in &self.regions { - pt.add_item(format!("region {:?}", region)); - } } } @@ -277,7 +267,6 @@ pub enum RenderTaskKind { VerticalBlur(BlurTask), HorizontalBlur(BlurTask), Readback(DeviceIntRect), - Alias(RenderTaskId), Scaling(RenderTargetKind), } @@ -293,7 +282,6 @@ pub enum ClearMode { #[derive(Debug)] pub struct RenderTask { - pub cache_key: Option, pub location: RenderTaskLocation, pub children: Vec, pub kind: RenderTaskKind, @@ -310,7 +298,6 @@ impl RenderTask { color: PremultipliedColorF, clear_mode: ClearMode, children: Vec, - box_shadow_cache_key: Option, pic_type: PictureType, ) -> Self { let location = match size { @@ -319,10 +306,6 @@ impl RenderTask { }; RenderTask { - cache_key: match box_shadow_cache_key { - Some(key) => Some(RenderTaskKey::CachePicture(key)), - None => None, - }, children, location, kind: RenderTaskKind::Picture(PictureTask { @@ -339,7 +322,6 @@ impl RenderTask { pub fn new_readback(screen_rect: DeviceIntRect) -> Self { RenderTask { - cache_key: None, children: Vec::new(), location: RenderTaskLocation::Dynamic(None, screen_rect.size), kind: RenderTaskKind::Readback(screen_rect), @@ -349,13 +331,11 @@ impl RenderTask { } pub fn new_mask( - key: Option, outer_rect: DeviceIntRect, clips: Vec, prim_coordinate_system_id: CoordinateSystemId, ) -> RenderTask { RenderTask { - cache_key: key.map(RenderTaskKey::CacheMask), children: Vec::new(), location: RenderTaskLocation::Dynamic(None, outer_rect.size), kind: RenderTaskKind::CacheMask(CacheMaskTask { @@ -391,11 +371,9 @@ impl RenderTask { src_task_id: RenderTaskId, render_tasks: &mut RenderTaskTree, target_kind: RenderTargetKind, - regions: &[LayerRect], clear_mode: ClearMode, color: PremultipliedColorF, - box_shadow_cache_key: Option, - ) -> Self { + ) -> (Self, f32) { // Adjust large std deviation value. let mut adjusted_blur_std_deviation = blur_std_deviation; let blur_target_size = render_tasks[src_task_id].get_dynamic_size(); @@ -414,23 +392,17 @@ impl RenderTask { target_kind, downscaling_src_task_id, adjusted_blur_target_size, - box_shadow_cache_key, ); downscaling_src_task_id = render_tasks.add(downscaling_task); } scale_factor = blur_target_size.width as f32 / adjusted_blur_target_size.width as f32; let blur_task_v = RenderTask { - cache_key: match box_shadow_cache_key { - Some(key) => Some(RenderTaskKey::CacheBlur(key, 0)), - None => None, - }, children: vec![downscaling_src_task_id], location: RenderTaskLocation::Dynamic(None, adjusted_blur_target_size), kind: RenderTaskKind::VerticalBlur(BlurTask { blur_std_deviation: adjusted_blur_std_deviation, target_kind, - regions: regions.to_vec(), color, scale_factor, }), @@ -441,16 +413,11 @@ impl RenderTask { let blur_task_v_id = render_tasks.add(blur_task_v); let blur_task_h = RenderTask { - cache_key: match box_shadow_cache_key { - Some(key) => Some(RenderTaskKey::CacheBlur(key, 1)), - None => None, - }, children: vec![blur_task_v_id], location: RenderTaskLocation::Dynamic(None, adjusted_blur_target_size), kind: RenderTaskKind::HorizontalBlur(BlurTask { blur_std_deviation: adjusted_blur_std_deviation, target_kind, - regions: regions.to_vec(), color, scale_factor, }), @@ -458,20 +425,15 @@ impl RenderTask { pass_index: None, }; - blur_task_h + (blur_task_h, scale_factor) } pub fn new_scaling( target_kind: RenderTargetKind, src_task_id: RenderTaskId, target_size: DeviceIntSize, - box_shadow_cache_key: Option, ) -> Self { RenderTask { - cache_key: match box_shadow_cache_key { - Some(key) => Some(RenderTaskKey::CacheScaling(key, target_size)), - None => None, - }, children: vec![src_task_id], location: RenderTaskLocation::Dynamic(None, target_size), kind: RenderTaskKind::Scaling(target_kind), @@ -537,8 +499,7 @@ impl RenderTask { ) } RenderTaskKind::Readback(..) | - RenderTaskKind::Scaling(..) | - RenderTaskKind::Alias(..) => { + RenderTaskKind::Scaling(..) => { ( [0.0; 3], [0.0; 4], @@ -570,6 +531,7 @@ impl RenderTask { match self.location { RenderTaskLocation::Fixed => DeviceIntSize::zero(), RenderTaskLocation::Dynamic(_, size) => size, + RenderTaskLocation::TextureCache(_, _, rect) => rect.size, } } @@ -598,6 +560,9 @@ impl RenderTask { RenderTaskLocation::Dynamic(None, _) => { (DeviceIntRect::zero(), RenderTargetIndex(0)) } + RenderTaskLocation::TextureCache(_, layer, rect) => { + (rect, RenderTargetIndex(layer as usize)) + } } } @@ -621,10 +586,6 @@ impl RenderTask { RenderTaskKind::Picture(ref task_info) => { task_info.target_kind } - - RenderTaskKind::Alias(..) => { - panic!("BUG: target_kind() called on invalidated task"); - } } } @@ -643,10 +604,6 @@ impl RenderTask { RenderTaskKind::Scaling(..) => false, RenderTaskKind::CacheMask(..) => true, - - RenderTaskKind::Alias(..) => { - panic!("BUG: is_shared() called on aliased task"); - } } } @@ -677,10 +634,6 @@ impl RenderTask { pt.new_level("Scaling".to_owned()); pt.add_item(format!("kind: {:?}", kind)); } - RenderTaskKind::Alias(ref alias_id) => { - pt.add_item(format!("Alias of {:?}", alias_id)); - return false - } } pt.add_item(format!("clear to: {:?}", self.clear_mode)); @@ -695,3 +648,131 @@ impl RenderTask { true } } + +#[derive(Debug, Hash, PartialEq, Eq)] +pub enum RenderTaskCacheKeyKind { + BoxShadow(BoxShadowCacheKey), +} + +#[derive(Debug, Hash, PartialEq, Eq)] +pub struct RenderTaskCacheKey { + pub size: DeviceIntSize, + pub kind: RenderTaskCacheKeyKind, +} + +struct RenderTaskCacheEntry { + handle: TextureCacheHandle, +} + +// A cache of render tasks that are stored in the texture +// cache for usage across frames. +pub struct RenderTaskCache { + entries: FastHashMap, +} + +impl RenderTaskCache { + pub fn new() -> RenderTaskCache { + RenderTaskCache { + entries: FastHashMap::default(), + } + } + + pub fn clear(&mut self) { + self.entries.clear(); + } + + pub fn begin_frame( + &mut self, + texture_cache: &mut TextureCache, + ) { + // Drop any items from the cache that have been + // evicted from the texture cache. + // + // This isn't actually necessary for the texture + // cache to be able to evict old render tasks. + // It will evict render tasks as required, since + // the access time in the texture cache entry will + // be stale if this task hasn't been requested + // for a while. + // + // Nonetheless, we should remove stale entries + // from here so that this hash map doesn't + // grow indefinitely! + self.entries.retain(|_, value| { + texture_cache.is_allocated(&value.handle) + }); + } + + pub fn request_render_task( + &mut self, + key: RenderTaskCacheKey, + texture_cache: &mut TextureCache, + gpu_cache: &mut GpuCache, + render_tasks: &mut RenderTaskTree, + mut f: F, + ) -> CacheItem where F: FnMut(&mut RenderTaskTree) -> (RenderTaskId, [f32; 3]) { + // Get the texture cache handle for this cache key, + // or create one. + let cache_entry = self.entries + .entry(key) + .or_insert(RenderTaskCacheEntry { + handle: TextureCacheHandle::new(), + }); + + // Check if this texture cache handle is valie. + if texture_cache.request(&mut cache_entry.handle, gpu_cache) { + // Invoke user closure to get render task chain + // to draw this into the texture cache. + let (render_task_id, user_data) = f(render_tasks); + let render_task = &mut render_tasks[render_task_id]; + + // Find out what size to alloc in the texture cache. + let size = match render_task.location { + RenderTaskLocation::Fixed | + RenderTaskLocation::TextureCache(..) => { + panic!("BUG: dynamic task was expected"); + } + RenderTaskLocation::Dynamic(_, size) => size, + }; + + // TODO(gw): Support color tasks in the texture cache, + // and perhaps consider if we can determine + // if some tasks are opaque as an optimization. + let descriptor = ImageDescriptor::new( + size.width as u32, + size.height as u32, + ImageFormat::R8, + false, + ); + + // Allocate space in the texture cache, but don't supply + // and CPU-side data to be uploaded. + texture_cache.update( + &mut cache_entry.handle, + descriptor, + TextureFilter::Linear, + None, + user_data, + None, + gpu_cache, + ); + + // Get the allocation details in the texture cache, and store + // this in the render task. The renderer will draw this + // task into the appropriate layer and rect of the texture + // cache on this frame. + let (texture_id, texture_layer, uv_rect) = + texture_cache.get_cache_location(&cache_entry.handle); + + render_task.location = RenderTaskLocation::TextureCache( + texture_id, + texture_layer, + uv_rect.to_i32() + ); + } + + // Finally, return the texture cache handle that we know + // is now up to date. + texture_cache.get(&cache_entry.handle) + } +} diff --git a/webrender/src/renderer.rs b/webrender/src/renderer.rs index 55efc609dc..0a5621947f 100644 --- a/webrender/src/renderer.rs +++ b/webrender/src/renderer.rs @@ -66,7 +66,7 @@ use texture_cache::TextureCache; use thread_profiler::{register_thread_with_profiler, write_profile}; use tiling::{AlphaRenderTarget, ColorRenderTarget}; use tiling::{RenderPass, RenderPassKind, RenderTargetList}; -use tiling::{Frame, RenderTarget, ScalingInfo}; +use tiling::{Frame, RenderTarget, ScalingInfo, TextureCacheRenderTarget}; use time::precise_time_ns; use util::TransformedRectKind; @@ -413,11 +413,6 @@ const DESC_BLUR: VertexDescriptor = VertexDescriptor { count: 1, kind: VertexAttributeKind::I32, }, - VertexAttribute { - name: "aBlurRegion", - count: 4, - kind: VertexAttributeKind::F32 - }, ], }; @@ -2585,6 +2580,19 @@ impl Renderer { debug_target } + #[cfg(feature = "debugger")] + fn debug_texture_cache_target(target: &TextureCacheRenderTarget) -> debug_server::Target { + let mut debug_target = debug_server::Target::new("Texture Cache"); + + debug_target.add( + debug_server::BatchKind::Cache, + "Horizontal Blur", + target.horizontal_blurs.len(), + ); + + debug_target + } + #[cfg(feature = "debugger")] fn get_passes_for_debugger(&self) -> String { let mut debug_passes = debug_server::PassList::new(); @@ -2596,9 +2604,10 @@ impl Renderer { RenderPassKind::MainFramebuffer(ref target) => { debug_targets.push(Self::debug_color_target(target)); } - RenderPassKind::OffScreen { ref alpha, ref color } => { + RenderPassKind::OffScreen { ref alpha, ref color, ref texture_cache } => { debug_targets.extend(alpha.targets.iter().map(Self::debug_alpha_target)); debug_targets.extend(color.targets.iter().map(Self::debug_color_target)); + debug_targets.extend(texture_cache.iter().map(|(_, target)| Self::debug_texture_cache_target(target))) } } @@ -3963,6 +3972,51 @@ impl Renderer { self.gpu_profile.finish_sampler(alpha_sampler); } + fn draw_texture_cache_target( + &mut self, + texture: &SourceTexture, + layer: i32, + target: &TextureCacheRenderTarget, + stats: &mut RendererStats, + ) { + let projection = { + let texture = self.texture_resolver + .resolve(texture) + .expect("BUG: invalid target texture"); + let target_size = texture.get_dimensions(); + + self.device + .bind_draw_target(Some((texture, layer)), Some(target_size)); + self.device.disable_depth(); + self.device.disable_depth_write(); + self.device.set_blend(false); + + Transform3D::ortho( + 0.0, + target_size.width as f32, + 0.0, + target_size.height as f32, + ORTHO_NEAR_PLANE, + ORTHO_FAR_PLANE, + ) + }; + + // Draw any blurs for this target. + if !target.horizontal_blurs.is_empty() { + let _timer = self.gpu_profile.start_timer(GPU_TAG_BLUR); + + self.cs_blur_a8 + .bind(&mut self.device, &projection, 0, &mut self.renderer_errors); + + self.draw_instanced_batch( + &target.horizontal_blurs, + VertexArrayKind::Blur, + &BatchTextures::no_texture(), + stats, + ); + } + } + fn update_deferred_resolves(&mut self, frame: &Frame) -> Option { // The first thing we do is run through any pending deferred // resolves, and use a callback to get the UV rect for this @@ -4111,7 +4165,7 @@ impl Renderer { // Init textures and render targets to match this scene. // First pass grabs all the perfectly matching targets from the pool. for pass in &mut frame.passes { - if let RenderPassKind::OffScreen { ref mut alpha, ref mut color } = pass.kind { + if let RenderPassKind::OffScreen { ref mut alpha, ref mut color, .. } = pass.kind { self.prepare_target_list(alpha, true); self.prepare_target_list(color, true); } @@ -4125,7 +4179,7 @@ impl Renderer { // Some of the textures are already assigned by `prepare_frame`. // Now re-allocate the space for the rest of the target textures. for pass in &mut frame.passes { - if let RenderPassKind::OffScreen { ref mut alpha, ref mut color } = pass.kind { + if let RenderPassKind::OffScreen { ref mut alpha, ref mut color, .. } = pass.kind { self.prepare_target_list(alpha, false); self.prepare_target_list(color, false); } @@ -4218,9 +4272,17 @@ impl Renderer { (None, None) } - RenderPassKind::OffScreen { ref mut alpha, ref mut color } => { + RenderPassKind::OffScreen { ref mut alpha, ref mut color, ref mut texture_cache } => { alpha.check_ready(); color.check_ready(); + for (&(texture_id, target_index), target) in texture_cache { + self.draw_texture_cache_target( + &texture_id, + target_index, + target, + stats, + ); + } for (target_index, target) in alpha.targets.iter().enumerate() { stats.alpha_target_count += 1; diff --git a/webrender/src/resource_cache.rs b/webrender/src/resource_cache.rs index 2066656e26..a9cd0ab451 100644 --- a/webrender/src/resource_cache.rs +++ b/webrender/src/resource_cache.rs @@ -4,8 +4,7 @@ use api::{AddFont, BlobImageData, BlobImageResources, ResourceUpdate, ResourceUpdates}; use api::{BlobImageDescriptor, BlobImageError, BlobImageRenderer, BlobImageRequest}; -use api::ColorF; -use api::{DevicePoint, DeviceUintRect, DeviceUintSize}; +use api::{ColorF, DevicePoint, DeviceUintRect, DeviceUintSize}; use api::{Epoch, FontInstanceKey, FontKey, FontTemplate}; use api::{ExternalImageData, ExternalImageType}; use api::{FontInstanceOptions, FontInstancePlatformOptions, FontVariation}; @@ -25,6 +24,7 @@ use internal_types::{FastHashMap, FastHashSet, SourceTexture, TextureUpdateList} use internal_types::ExternalCaptureImage; use profiler::{ResourceProfileCounters, TextureCacheProfileCounters}; use rayon::ThreadPool; +use render_task::{RenderTaskCache, RenderTaskCacheKey, RenderTaskId, RenderTaskTree}; use std::collections::hash_map::Entry::{self, Occupied, Vacant}; use std::cmp; use std::fmt::Debug; @@ -52,6 +52,7 @@ pub struct GlyphFetchResult { // storing the coordinates as texel values // we don't need to go through and update // various CPU-side structures. +#[derive(Debug)] pub struct CacheItem { pub texture_id: SourceTexture, pub uv_rect_handle: GpuCacheHandle, @@ -219,6 +220,7 @@ impl BlobImageResources for Resources { pub struct ResourceCache { cached_glyphs: GlyphCache, cached_images: ImageCache, + cached_render_tasks: RenderTaskCache, resources: Resources, state: State, @@ -247,6 +249,7 @@ impl ResourceCache { ResourceCache { cached_glyphs: GlyphCache::new(), cached_images: ResourceClassCache::new(), + cached_render_tasks: RenderTaskCache::new(), resources: Resources { font_templates: FastHashMap::default(), font_instances: Arc::new(RwLock::new(FastHashMap::default())), @@ -278,6 +281,27 @@ impl ResourceCache { } } + // Request the texture cache item for a cacheable render + // task. If the item is already cached, the texture cache + // handle will be returned. Otherwise, the user supplied + // closure will be invoked to generate the render task + // chain that is required to draw this task. + pub fn request_render_task( + &mut self, + key: RenderTaskCacheKey, + gpu_cache: &mut GpuCache, + render_tasks: &mut RenderTaskTree, + f: F, + ) -> CacheItem where F: FnMut(&mut RenderTaskTree) -> (RenderTaskId, [f32; 3]) { + self.cached_render_tasks.request_render_task( + key, + &mut self.texture_cache, + gpu_cache, + render_tasks, + f + ) + } + pub fn update_resources( &mut self, updates: ResourceUpdates, @@ -762,6 +786,7 @@ impl ResourceCache { debug_assert_eq!(self.state, State::Idle); self.state = State::AddResources; self.texture_cache.begin_frame(frame_id); + self.cached_render_tasks.begin_frame(&mut self.texture_cache); self.current_frame_id = frame_id; } @@ -871,7 +896,7 @@ impl ResourceCache { &mut entry.texture_cache_handle, descriptor, filter, - image_data, + Some(image_data), [0.0; 3], image_template.dirty_rect, gpu_cache, @@ -896,6 +921,7 @@ impl ResourceCache { // recently used resources. self.cached_images.clear(); self.cached_glyphs.clear(); + self.cached_render_tasks.clear(); } pub fn clear_namespace(&mut self, namespace: IdNamespace) { @@ -1127,6 +1153,7 @@ impl ResourceCache { info!("loading resource cache"); self.cached_glyphs.clear(); self.cached_images.clear(); + self.cached_render_tasks.clear(); self.state = State::Idle; self.current_frame_id = FrameId(0); diff --git a/webrender/src/texture_cache.rs b/webrender/src/texture_cache.rs index 3e38ec921e..cc40e7e9d0 100644 --- a/webrender/src/texture_cache.rs +++ b/webrender/src/texture_cache.rs @@ -284,7 +284,7 @@ impl TextureCache { handle: &mut TextureCacheHandle, descriptor: ImageDescriptor, filter: TextureFilter, - data: ImageData, + data: Option, user_data: [f32; 3], mut dirty_rect: Option, gpu_cache: &mut GpuCache, @@ -337,25 +337,27 @@ impl TextureCache { // Create an update command, which the render thread processes // to upload the new image data into the correct location // in GPU memory. - let (layer_index, origin) = match entry.kind { - EntryKind::Standalone { .. } => (0, DeviceUintPoint::zero()), - EntryKind::Cache { - layer_index, - origin, - .. - } => (layer_index, origin), - }; + if let Some(data) = data { + let (layer_index, origin) = match entry.kind { + EntryKind::Standalone { .. } => (0, DeviceUintPoint::zero()), + EntryKind::Cache { + layer_index, + origin, + .. + } => (layer_index, origin), + }; - let op = TextureUpdate::new_update( - data, - &descriptor, - origin, - entry.size, - entry.texture_id, - layer_index as i32, - dirty_rect, - ); - self.pending_updates.push(op); + let op = TextureUpdate::new_update( + data, + &descriptor, + origin, + entry.size, + entry.texture_id, + layer_index as i32, + dirty_rect, + ); + self.pending_updates.push(op); + } } // Get a specific region by index from a shared texture array. @@ -377,6 +379,14 @@ impl TextureCache { &mut texture_array.regions[region_index as usize] } + // Check if a given texture handle has a valid allocation + // in the texture cache. + pub fn is_allocated(&self, handle: &TextureCacheHandle) -> bool { + handle.entry.as_ref().map_or(false, |handle| { + self.entries.get_opt(handle).is_some() + }) + } + // Retrieve the details of an item in the cache. This is used // during batch creation to provide the resource rect address // to the shaders and texture ID to the batching logic. @@ -398,6 +408,36 @@ impl TextureCache { } } + // A more detailed version of get(). This allows access to the actual + // device rect of the cache allocation. + pub fn get_cache_location( + &self, + handle: &TextureCacheHandle, + ) -> (SourceTexture, i32, DeviceUintRect) { + let handle = handle + .entry + .as_ref() + .expect("BUG: handle not requested earlier in frame"); + + let entry = self.entries + .get_opt(handle) + .expect("BUG: was dropped from cache or not updated!"); + debug_assert_eq!(entry.last_access, self.frame_id); + let (layer_index, origin) = match entry.kind { + EntryKind::Standalone { .. } => { + (0, DeviceUintPoint::zero()) + } + EntryKind::Cache { + layer_index, + origin, + .. + } => (layer_index, origin), + }; + (SourceTexture::TextureCache(entry.texture_id), + layer_index as i32, + DeviceUintRect::new(origin, entry.size)) + } + // Expire old standalone textures. fn expire_old_standalone_entries(&mut self) { let mut eviction_candidates = Vec::new(); @@ -470,7 +510,7 @@ impl TextureCache { // want to evict everything we can, since that will result in // more items being uploaded than necessary. // Instead, we say we will keep evicting until both of these - // consitions are met: + // conditions are met: // - We have evicted some arbitrary number of items (512 currently). // AND // - We have freed an item that will definitely allow us to diff --git a/webrender/src/tiling.rs b/webrender/src/tiling.rs index 1805f90e21..616092453c 100644 --- a/webrender/src/tiling.rs +++ b/webrender/src/tiling.rs @@ -14,16 +14,15 @@ use gpu_cache::{GpuCache, GpuCacheUpdateList}; use gpu_types::{BlurDirection, BlurInstance, BrushInstance, ClipChainRectIndex}; use gpu_types::{ClipScrollNodeData, ClipScrollNodeIndex}; use gpu_types::{PrimitiveInstance}; -use internal_types::{FastHashMap, RenderPassIndex}; +use internal_types::{FastHashMap, RenderPassIndex, SourceTexture}; use picture::{PictureKind}; use prim_store::{PrimitiveIndex, PrimitiveKind, PrimitiveStore}; use prim_store::{BrushMaskKind, BrushKind, DeferredResolve}; use profiler::FrameProfileCounters; -use render_task::{RenderTaskAddress, RenderTaskId, RenderTaskKey, RenderTaskKind}; +use render_task::{RenderTaskAddress, RenderTaskId, RenderTaskKind}; use render_task::{BlurTask, ClearMode, RenderTaskLocation, RenderTaskTree}; use resource_cache::{ResourceCache}; use std::{cmp, usize, f32, i32}; -use std::collections::hash_map::Entry; use texture_allocator::GuillotineAllocator; const MIN_TARGET_SIZE: u32 = 2048; @@ -38,12 +37,6 @@ pub struct ScrollbarPrimitive { #[derive(Debug, Copy, Clone)] pub struct RenderTargetIndex(pub usize); -#[derive(Debug)] -struct DynamicTaskInfo { - task_id: RenderTaskId, - rect: DeviceIntRect, -} - pub struct RenderTargetContext<'a> { pub device_pixel_scale: DevicePixelScale, pub prim_store: &'a PrimitiveStore, @@ -298,9 +291,6 @@ impl RenderTarget for ColorRenderTarget { let task = &render_tasks[task_id]; match task.kind { - RenderTaskKind::Alias(..) => { - panic!("BUG: add_task() called on invalidated task"); - } RenderTaskKind::VerticalBlur(ref info) => { info.add_instances( &mut self.vertical_blurs, @@ -425,9 +415,6 @@ impl RenderTarget for AlphaRenderTarget { } match task.kind { - RenderTaskKind::Alias(..) => { - panic!("BUG: add_task() called on invalidated task"); - } RenderTaskKind::Readback(..) => { panic!("Should not be added to alpha target!"); } @@ -541,12 +528,54 @@ impl RenderTarget for AlphaRenderTarget { } } +pub struct TextureCacheRenderTarget { + pub horizontal_blurs: Vec, +} + +impl TextureCacheRenderTarget { + fn new( + _size: Option, + _screen_size: DeviceIntSize, + ) -> Self { + TextureCacheRenderTarget { + horizontal_blurs: Vec::new(), + } + } + + fn add_task( + &mut self, + task_id: RenderTaskId, + render_tasks: &RenderTaskTree, + ) { + let task = &render_tasks[task_id]; + + match task.kind { + RenderTaskKind::HorizontalBlur(ref info) => { + info.add_instances( + &mut self.horizontal_blurs, + task_id, + task.children[0], + BlurDirection::Horizontal, + render_tasks, + ); + } + RenderTaskKind::VerticalBlur(..) | + RenderTaskKind::Picture(..) | + RenderTaskKind::CacheMask(..) | + RenderTaskKind::Readback(..) | + RenderTaskKind::Scaling(..) => { + panic!("BUG: unexpected task kind for texture cache target"); + } + } + } +} pub enum RenderPassKind { MainFramebuffer(ColorRenderTarget), OffScreen { alpha: RenderTargetList, color: RenderTargetList, + texture_cache: FastHashMap<(SourceTexture, i32), TextureCacheRenderTarget>, }, } @@ -558,7 +587,6 @@ pub enum RenderPassKind { pub struct RenderPass { pub kind: RenderPassKind, tasks: Vec, - dynamic_tasks: FastHashMap, } impl RenderPass { @@ -567,7 +595,6 @@ impl RenderPass { RenderPass { kind: RenderPassKind::MainFramebuffer(target), tasks: vec![], - dynamic_tasks: FastHashMap::default(), } } @@ -576,9 +603,9 @@ impl RenderPass { kind: RenderPassKind::OffScreen { color: RenderTargetList::new(screen_size, ImageFormat::BGRA8), alpha: RenderTargetList::new(screen_size, ImageFormat::R8), + texture_cache: FastHashMap::default(), }, tasks: vec![], - dynamic_tasks: FastHashMap::default(), } } @@ -588,7 +615,7 @@ impl RenderPass { size: DeviceIntSize, target_kind: RenderTargetKind, ) { - if let RenderPassKind::OffScreen { ref mut color, ref mut alpha } = self.kind { + if let RenderPassKind::OffScreen { ref mut color, ref mut alpha, .. } = self.kind { let max_size = match target_kind { RenderTargetKind::Color => &mut color.max_size, RenderTargetKind::Alpha => &mut alpha.max_size, @@ -620,10 +647,10 @@ impl RenderPass { } target.build(ctx, gpu_cache, render_tasks, deferred_resolves); } - RenderPassKind::OffScreen { ref mut color, ref mut alpha } => { + RenderPassKind::OffScreen { ref mut color, ref mut alpha, ref mut texture_cache } => { // Step through each task, adding to batches as appropriate. for &task_id in &self.tasks { - let target_kind = { + let (target_kind, texture_target) = { let task = &mut render_tasks[task_id]; task.pass_index = Some(pass_index); let target_kind = task.target_kind(); @@ -631,22 +658,16 @@ impl RenderPass { // Find a target to assign this task to, or create a new // one if required. match task.location { - RenderTaskLocation::Fixed => {} + RenderTaskLocation::TextureCache(texture_id, layer, _) => { + // TODO(gw): When we support caching color items, we will + // need to calculate that here to get the + // correct target kind. + (RenderTargetKind::Alpha, Some((texture_id, layer))) + } + RenderTaskLocation::Fixed => { + (RenderTargetKind::Color, None) + } RenderTaskLocation::Dynamic(ref mut origin, size) => { - let dynamic_entry = match task.cache_key { - // See if this task is a duplicate. - // If so, just skip adding it! - Some(cache_key) => match self.dynamic_tasks.entry(cache_key) { - Entry::Occupied(entry) => { - debug_assert_eq!(entry.get().rect.size, size); - task.kind = RenderTaskKind::Alias(entry.get().task_id); - continue; - }, - Entry::Vacant(entry) => Some(entry), - }, - None => None, - }; - let alloc_size = DeviceUintSize::new(size.width as u32, size.height as u32); let (alloc_origin, target_index) = match target_kind { RenderTargetKind::Color => color.allocate(alloc_size), @@ -654,23 +675,26 @@ impl RenderPass { }; *origin = Some((alloc_origin.to_i32(), target_index)); - // If this task is cacheable / sharable, store it in the task hash - // for this pass. - if let Some(entry) = dynamic_entry { - entry.insert(DynamicTaskInfo { - task_id, - rect: DeviceIntRect::new(alloc_origin.to_i32(), size), - }); - } + (target_kind, None) } } - - target_kind }; - match target_kind { - RenderTargetKind::Color => color.add_task(task_id, ctx, gpu_cache, render_tasks, clip_store), - RenderTargetKind::Alpha => alpha.add_task(task_id, ctx, gpu_cache, render_tasks, clip_store), + match texture_target { + Some(texture_target) => { + let texture = texture_cache + .entry(texture_target) + .or_insert( + TextureCacheRenderTarget::new(None, DeviceIntSize::zero()) + ); + texture.add_task(task_id, render_tasks); + } + None => { + match target_kind { + RenderTargetKind::Color => color.add_task(task_id, ctx, gpu_cache, render_tasks, clip_store), + RenderTargetKind::Alpha => alpha.add_task(task_id, ctx, gpu_cache, render_tasks, clip_store), + } + } } } @@ -742,18 +766,8 @@ impl BlurTask { task_address: render_tasks.get_task_address(task_id), src_task_address: render_tasks.get_task_address(source_task_id), blur_direction, - region: LayerRect::zero(), }; - if self.regions.is_empty() { - instances.push(instance); - } else { - for region in &self.regions { - instances.push(BlurInstance { - region: *region, - ..instance - }); - } - } + instances.push(instance); } } diff --git a/wrench/reftests/boxshadow/box-shadow-border-radii.png b/wrench/reftests/boxshadow/box-shadow-border-radii.png index 4d8f7218db481ac3dff62385d002f74a15b399b1..923112a6bd2e3b0deebd698fa8dfd0e78538bccc 100644 GIT binary patch literal 12027 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 literal 12343 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 S4*WyFfvYB###qB!sQ&@zGIs3% diff --git a/wrench/reftests/boxshadow/box-shadow-cache.png b/wrench/reftests/boxshadow/box-shadow-cache.png index d1ce0362159feb6bc92f814c7f576b870f00c6dd..af67e10bccbd379f0ff80035fc3ff6ed64f67d0f 100644 GIT binary patch literal 34999 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 G!T$>^VCzQ! literal 36026 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 Bcl`hW delta 1299 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 W4CYxB{NEKboW9v&&#~Qo{NDhY*5SJV literal 12126 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 diff --git a/wrench/reftests/boxshadow/overlap1.png b/wrench/reftests/boxshadow/overlap1.png index e0518aceff96fe6e799835c3f708476ec87a45bc..9b9089b7c5e9996eb6076ab8b86da31437757e15 100644 GIT binary patch literal 11033 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 diff --git a/wrench/reftests/transforms/prim-suite.png b/wrench/reftests/transforms/prim-suite.png index 8935673ac3651deee3269f02fa3a525c2c2ab46e..56a65eb9cd43c4a81f7cc640935b8f263e6903df 100644 GIT binary patch delta 37762 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 delta 37756 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