Bug 1510074 - Update webrender to commit 604c69a40920e34bb1b8fa3f02bca6e5edfe73f4 (WR PR #3352). r=kats

https://github.com/servo/webrender/pull/3352

Differential Revision: https://phabricator.services.mozilla.com/D13056

--HG--
extra : moz-landing-system : lando
This commit is contained in:
WR Updater Bot 2018-11-27 12:11:06 +00:00
parent e6a8a6668e
commit 347e5a041c
9 changed files with 735 additions and 487 deletions

View File

@ -1 +1 @@
235273012e08230c07a214e907175c535206098d
604c69a40920e34bb1b8fa3f02bca6e5edfe73f4

View File

@ -908,6 +908,7 @@ impl AlphaBatchBuilder {
PrimitiveInstanceKind::Rectangle { .. } |
PrimitiveInstanceKind::YuvImage { .. } |
PrimitiveInstanceKind::Image { .. } |
PrimitiveInstanceKind::LinearGradient { .. } |
PrimitiveInstanceKind::Clear => {
unreachable!();
}
@ -1410,8 +1411,7 @@ impl AlphaBatchBuilder {
let is_multiple_primitives = match prim.details {
PrimitiveDetails::Brush(ref brush) => {
match brush.kind {
BrushKind::LinearGradient { ref visible_tiles, .. } => !visible_tiles.is_empty(),
BrushKind::RadialGradient { ref visible_tiles, .. } => !visible_tiles.is_empty(),
BrushKind::RadialGradient { visible_tiles_range, .. } => !visible_tiles_range.is_empty(),
}
}
};
@ -1450,22 +1450,9 @@ impl AlphaBatchBuilder {
}
match brush.kind {
BrushKind::LinearGradient { ref stops_handle, ref visible_tiles, .. } if !visible_tiles.is_empty() => {
add_gradient_tiles(
visible_tiles,
stops_handle,
BrushBatchKind::LinearGradient,
specified_blend_mode,
bounding_rect,
clip_task_address,
gpu_cache,
&mut self.batch_list,
&prim_header,
prim_headers,
z_id,
);
}
BrushKind::RadialGradient { ref stops_handle, ref visible_tiles, .. } if !visible_tiles.is_empty() => {
BrushKind::RadialGradient { ref stops_handle, visible_tiles_range, .. } if !visible_tiles_range.is_empty() => {
let visible_tiles = &ctx.scratch.gradient_tiles[visible_tiles_range];
add_gradient_tiles(
visible_tiles,
stops_handle,
@ -1894,6 +1881,89 @@ impl AlphaBatchBuilder {
}
}
}
(
PrimitiveInstanceKind::LinearGradient { visible_tiles_range, .. },
PrimitiveTemplateKind::LinearGradient { stops_handle, ref brush_segments, .. }
) => {
let specified_blend_mode = BlendMode::PremultipliedAlpha;
let mut prim_header = PrimitiveHeader {
local_rect: prim_data.prim_rect,
local_clip_rect: prim_instance.combined_local_clip_rect,
task_address,
specific_prim_address: GpuCacheAddress::invalid(),
clip_task_address,
transform_id,
};
if visible_tiles_range.is_empty() {
let non_segmented_blend_mode = if !prim_data.opacity.is_opaque ||
prim_instance.clip_task_index != ClipTaskIndex::INVALID ||
transform_kind == TransformedRectKind::Complex
{
specified_blend_mode
} else {
BlendMode::None
};
let batch_params = BrushBatchParameters::shared(
BrushBatchKind::LinearGradient,
BatchTextures::no_texture(),
[
stops_handle.as_int(gpu_cache),
0,
0,
],
0,
);
prim_header.specific_prim_address = gpu_cache.get_address(&prim_data.gpu_cache_handle);
let prim_header_index = prim_headers.push(
&prim_header,
z_id,
batch_params.prim_user_data,
);
let segments = if brush_segments.is_empty() {
None
} else {
Some(brush_segments.as_slice())
};
self.add_segmented_prim_to_batch(
segments,
prim_data.opacity,
&batch_params,
specified_blend_mode,
non_segmented_blend_mode,
prim_header_index,
clip_task_address,
bounding_rect,
transform_kind,
render_tasks,
z_id,
prim_instance.clip_task_index,
ctx,
);
} else {
let visible_tiles = &ctx.scratch.gradient_tiles[*visible_tiles_range];
add_gradient_tiles(
visible_tiles,
stops_handle,
BrushBatchKind::LinearGradient,
specified_blend_mode,
bounding_rect,
clip_task_address,
gpu_cache,
&mut self.batch_list,
&prim_header,
prim_headers,
z_id,
);
}
}
_ => {
unreachable!();
}
@ -2243,18 +2313,6 @@ impl BrushPrimitive {
0,
))
}
BrushKind::LinearGradient { ref stops_handle, .. } => {
Some(BrushBatchParameters::shared(
BrushBatchKind::LinearGradient,
BatchTextures::no_texture(),
[
stops_handle.as_int(gpu_cache),
0,
0,
],
0,
))
}
}
}
}
@ -2286,6 +2344,7 @@ impl PrimitiveInstance {
PrimitiveInstanceKind::NormalBorder { .. } |
PrimitiveInstanceKind::ImageBorder { .. } |
PrimitiveInstanceKind::Rectangle { .. } |
PrimitiveInstanceKind::LinearGradient { .. } |
PrimitiveInstanceKind::Clear => {
return true;
}

View File

@ -7,10 +7,10 @@ use api::{LayoutSideOffsets, LayoutSizeAu, LayoutPrimitiveInfo, LayoutToDeviceSc
use api::{DeviceVector2D, DevicePoint, LayoutRect, LayoutSize, NormalBorder, DeviceIntSize};
use api::{AuHelpers, LayoutPoint, RepeatMode, TexelRect};
use ellipse::Ellipse;
use euclid::{SideOffsets2D, vec2};
use euclid::vec2;
use display_list_flattener::DisplayListFlattener;
use gpu_types::{BorderInstance, BorderSegment, BrushFlags};
use prim_store::{BorderSegmentInfo, BrushSegment};
use prim_store::{BorderSegmentInfo, BrushSegment, NinePatchDescriptor};
use prim_store::{EdgeAaSegmentMask, PrimitiveContainer, ScrollNodeAndClipChain};
use util::{lerp, RectHelpers};
@ -1128,176 +1128,171 @@ pub fn build_border_instances(
instances
}
pub fn create_nine_patch_segments(
rect: &LayoutRect,
widths: &LayoutSideOffsets,
width: i32,
height: i32,
slice: SideOffsets2D<i32>,
fill: bool,
repeat_horizontal: RepeatMode,
repeat_vertical: RepeatMode,
outset: SideOffsets2D<f32>,
) -> Vec<BrushSegment> {
// Calculate the modified rect as specific by border-image-outset
let origin = LayoutPoint::new(
rect.origin.x - outset.left,
rect.origin.y - outset.top,
);
let size = LayoutSize::new(
rect.size.width + outset.left + outset.right,
rect.size.height + outset.top + outset.bottom,
);
let rect = LayoutRect::new(origin, size);
impl NinePatchDescriptor {
pub fn create_segments(
&self,
rect: &LayoutRect,
) -> Vec<BrushSegment> {
// Calculate the modified rect as specific by border-image-outset
let origin = LayoutPoint::new(
rect.origin.x - self.outset.left,
rect.origin.y - self.outset.top,
);
let size = LayoutSize::new(
rect.size.width + self.outset.left + self.outset.right,
rect.size.height + self.outset.top + self.outset.bottom,
);
let rect = LayoutRect::new(origin, size);
// Calculate the local texel coords of the slices.
let px0 = 0.0;
let px1 = slice.left as f32;
let px2 = width as f32 - slice.right as f32;
let px3 = width as f32;
// Calculate the local texel coords of the slices.
let px0 = 0.0;
let px1 = self.slice.left as f32;
let px2 = self.width as f32 - self.slice.right as f32;
let px3 = self.width as f32;
let py0 = 0.0;
let py1 = slice.top as f32;
let py2 = height as f32 - slice.bottom as f32;
let py3 = height as f32;
let py0 = 0.0;
let py1 = self.slice.top as f32;
let py2 = self.height as f32 - self.slice.bottom as f32;
let py3 = self.height as f32;
let tl_outer = LayoutPoint::new(rect.origin.x, rect.origin.y);
let tl_inner = tl_outer + vec2(widths.left, widths.top);
let tl_outer = LayoutPoint::new(rect.origin.x, rect.origin.y);
let tl_inner = tl_outer + vec2(self.widths.left, self.widths.top);
let tr_outer = LayoutPoint::new(rect.origin.x + rect.size.width, rect.origin.y);
let tr_inner = tr_outer + vec2(-widths.right, widths.top);
let tr_outer = LayoutPoint::new(rect.origin.x + rect.size.width, rect.origin.y);
let tr_inner = tr_outer + vec2(-self.widths.right, self.widths.top);
let bl_outer = LayoutPoint::new(rect.origin.x, rect.origin.y + rect.size.height);
let bl_inner = bl_outer + vec2(widths.left, -widths.bottom);
let bl_outer = LayoutPoint::new(rect.origin.x, rect.origin.y + rect.size.height);
let bl_inner = bl_outer + vec2(self.widths.left, -self.widths.bottom);
let br_outer = LayoutPoint::new(
rect.origin.x + rect.size.width,
rect.origin.y + rect.size.height,
);
let br_inner = br_outer - vec2(widths.right, widths.bottom);
let br_outer = LayoutPoint::new(
rect.origin.x + rect.size.width,
rect.origin.y + rect.size.height,
);
let br_inner = br_outer - vec2(self.widths.right, self.widths.bottom);
fn add_segment(
segments: &mut Vec<BrushSegment>,
rect: LayoutRect,
uv_rect: TexelRect,
repeat_horizontal: RepeatMode,
repeat_vertical: RepeatMode
) {
if uv_rect.uv1.x > uv_rect.uv0.x &&
uv_rect.uv1.y > uv_rect.uv0.y {
fn add_segment(
segments: &mut Vec<BrushSegment>,
rect: LayoutRect,
uv_rect: TexelRect,
repeat_horizontal: RepeatMode,
repeat_vertical: RepeatMode
) {
if uv_rect.uv1.x > uv_rect.uv0.x &&
uv_rect.uv1.y > uv_rect.uv0.y {
// Use segment relative interpolation for all
// instances in this primitive.
let mut brush_flags =
BrushFlags::SEGMENT_RELATIVE |
BrushFlags::SEGMENT_TEXEL_RECT;
// Use segment relative interpolation for all
// instances in this primitive.
let mut brush_flags =
BrushFlags::SEGMENT_RELATIVE |
BrushFlags::SEGMENT_TEXEL_RECT;
// Enable repeat modes on the segment.
if repeat_horizontal == RepeatMode::Repeat {
brush_flags |= BrushFlags::SEGMENT_REPEAT_X;
// Enable repeat modes on the segment.
if repeat_horizontal == RepeatMode::Repeat {
brush_flags |= BrushFlags::SEGMENT_REPEAT_X;
}
if repeat_vertical == RepeatMode::Repeat {
brush_flags |= BrushFlags::SEGMENT_REPEAT_Y;
}
let segment = BrushSegment::new(
rect,
true,
EdgeAaSegmentMask::empty(),
[
uv_rect.uv0.x,
uv_rect.uv0.y,
uv_rect.uv1.x,
uv_rect.uv1.y,
],
brush_flags,
);
segments.push(segment);
}
if repeat_vertical == RepeatMode::Repeat {
brush_flags |= BrushFlags::SEGMENT_REPEAT_Y;
}
let segment = BrushSegment::new(
rect,
true,
EdgeAaSegmentMask::empty(),
[
uv_rect.uv0.x,
uv_rect.uv0.y,
uv_rect.uv1.x,
uv_rect.uv1.y,
],
brush_flags,
);
segments.push(segment);
}
}
// Build the list of image segments
let mut segments = Vec::new();
// Build the list of image segments
let mut segments = Vec::new();
// Top left
add_segment(
&mut segments,
LayoutRect::from_floats(tl_outer.x, tl_outer.y, tl_inner.x, tl_inner.y),
TexelRect::new(px0, py0, px1, py1),
RepeatMode::Stretch,
RepeatMode::Stretch
);
// Top right
add_segment(
&mut segments,
LayoutRect::from_floats(tr_inner.x, tr_outer.y, tr_outer.x, tr_inner.y),
TexelRect::new(px2, py0, px3, py1),
RepeatMode::Stretch,
RepeatMode::Stretch
);
// Bottom right
add_segment(
&mut segments,
LayoutRect::from_floats(br_inner.x, br_inner.y, br_outer.x, br_outer.y),
TexelRect::new(px2, py2, px3, py3),
RepeatMode::Stretch,
RepeatMode::Stretch
);
// Bottom left
add_segment(
&mut segments,
LayoutRect::from_floats(bl_outer.x, bl_inner.y, bl_inner.x, bl_outer.y),
TexelRect::new(px0, py2, px1, py3),
RepeatMode::Stretch,
RepeatMode::Stretch
);
// Center
if fill {
// Top left
add_segment(
&mut segments,
LayoutRect::from_floats(tl_inner.x, tl_inner.y, tr_inner.x, bl_inner.y),
TexelRect::new(px1, py1, px2, py2),
repeat_horizontal,
repeat_vertical
LayoutRect::from_floats(tl_outer.x, tl_outer.y, tl_inner.x, tl_inner.y),
TexelRect::new(px0, py0, px1, py1),
RepeatMode::Stretch,
RepeatMode::Stretch
);
// Top right
add_segment(
&mut segments,
LayoutRect::from_floats(tr_inner.x, tr_outer.y, tr_outer.x, tr_inner.y),
TexelRect::new(px2, py0, px3, py1),
RepeatMode::Stretch,
RepeatMode::Stretch
);
// Bottom right
add_segment(
&mut segments,
LayoutRect::from_floats(br_inner.x, br_inner.y, br_outer.x, br_outer.y),
TexelRect::new(px2, py2, px3, py3),
RepeatMode::Stretch,
RepeatMode::Stretch
);
// Bottom left
add_segment(
&mut segments,
LayoutRect::from_floats(bl_outer.x, bl_inner.y, bl_inner.x, bl_outer.y),
TexelRect::new(px0, py2, px1, py3),
RepeatMode::Stretch,
RepeatMode::Stretch
);
// Center
if self.fill {
add_segment(
&mut segments,
LayoutRect::from_floats(tl_inner.x, tl_inner.y, tr_inner.x, bl_inner.y),
TexelRect::new(px1, py1, px2, py2),
self.repeat_horizontal,
self.repeat_vertical
);
}
// Add edge segments.
// Top
add_segment(
&mut segments,
LayoutRect::from_floats(tl_inner.x, tl_outer.y, tr_inner.x, tl_inner.y),
TexelRect::new(px1, py0, px2, py1),
self.repeat_horizontal,
RepeatMode::Stretch,
);
// Bottom
add_segment(
&mut segments,
LayoutRect::from_floats(bl_inner.x, bl_inner.y, br_inner.x, bl_outer.y),
TexelRect::new(px1, py2, px2, py3),
self.repeat_horizontal,
RepeatMode::Stretch,
);
// Left
add_segment(
&mut segments,
LayoutRect::from_floats(tl_outer.x, tl_inner.y, tl_inner.x, bl_inner.y),
TexelRect::new(px0, py1, px1, py2),
RepeatMode::Stretch,
self.repeat_vertical,
);
// Right
add_segment(
&mut segments,
LayoutRect::from_floats(tr_inner.x, tr_inner.y, br_outer.x, br_inner.y),
TexelRect::new(px2, py1, px3, py2),
RepeatMode::Stretch,
self.repeat_vertical,
);
segments
}
// Add edge segments.
// Top
add_segment(
&mut segments,
LayoutRect::from_floats(tl_inner.x, tl_outer.y, tr_inner.x, tl_inner.y),
TexelRect::new(px1, py0, px2, py1),
repeat_horizontal,
RepeatMode::Stretch,
);
// Bottom
add_segment(
&mut segments,
LayoutRect::from_floats(bl_inner.x, bl_inner.y, br_inner.x, bl_outer.y),
TexelRect::new(px1, py2, px2, py3),
repeat_horizontal,
RepeatMode::Stretch,
);
// Left
add_segment(
&mut segments,
LayoutRect::from_floats(tl_outer.x, tl_inner.y, tl_inner.x, bl_inner.y),
TexelRect::new(px0, py1, px1, py2),
RepeatMode::Stretch,
repeat_vertical,
);
// Right
add_segment(
&mut segments,
LayoutRect::from_floats(tr_inner.x, tr_inner.y, br_outer.x, br_inner.y),
TexelRect::new(px2, py1, px3, py2),
RepeatMode::Stretch,
repeat_vertical,
);
segments
}

View File

@ -13,7 +13,6 @@ use api::{LineOrientation, LineStyle, NinePatchBorderSource, PipelineId};
use api::{PropertyBinding, ReferenceFrame, ScrollFrameDisplayItem, ScrollSensitivity};
use api::{Shadow, SpecificDisplayItem, StackingContext, StickyFrameDisplayItem, TexelRect};
use api::{ClipMode, TransformStyle, YuvColorSpace, YuvData};
use border::create_nine_patch_segments;
use clip::{ClipChainId, ClipRegion, ClipItemKey, ClipStore, ClipItemSceneData};
use clip_scroll_tree::{ROOT_SPATIAL_NODE_INDEX, ClipScrollTree, SpatialNodeIndex};
use frame_builder::{ChasePrimitive, FrameBuilder, FrameBuilderConfig};
@ -24,9 +23,9 @@ use image::simplify_repeated_primitive;
use internal_types::{FastHashMap, FastHashSet};
use picture::{Picture3DContext, PictureCompositeMode, PicturePrimitive, PrimitiveList};
use prim_store::{BrushKind, BrushPrimitive, PrimitiveInstance, PrimitiveDataInterner, PrimitiveKeyKind};
use prim_store::{PrimitiveOpacity, PrimitiveKey, PrimitiveSceneData, PrimitiveInstanceKind};
use prim_store::{PrimitiveKey, PrimitiveSceneData, PrimitiveInstanceKind, GradientStopKey, NinePatchDescriptor};
use prim_store::{PrimitiveContainer, PrimitiveDataHandle, PrimitiveStore, PrimitiveStoreStats, BrushSegmentDescriptor};
use prim_store::{ScrollNodeAndClipChain, PictureIndex, register_prim_chase_id};
use prim_store::{ScrollNodeAndClipChain, PictureIndex, register_prim_chase_id, GradientTileRange};
use render_backend::{DocumentView};
use resource_cache::{FontInstanceMap, ImageRequest};
use scene::{Scene, ScenePipeline, StackingContextHelpers};
@ -581,7 +580,7 @@ impl<'a> DisplayListFlattener<'a> {
);
}
SpecificDisplayItem::Gradient(ref info) => {
if let Some(brush_kind) = self.create_brush_kind_for_gradient(
if let Some(prim) = self.create_linear_gradient_prim(
&prim_info,
info.gradient.start_point,
info.gradient.end_point,
@ -590,9 +589,14 @@ impl<'a> DisplayListFlattener<'a> {
info.tile_size,
info.tile_spacing,
pipeline_id,
None,
) {
let prim = PrimitiveContainer::Brush(BrushPrimitive::new(brush_kind, None));
self.add_primitive(clip_and_scroll, &prim_info, Vec::new(), prim);
self.add_primitive(
clip_and_scroll,
&prim_info,
Vec::new(),
prim,
);
}
}
SpecificDisplayItem::RadialGradient(ref info) => {
@ -1738,6 +1742,17 @@ impl<'a> DisplayListFlattener<'a> {
) {
match border_item.details {
BorderDetails::NinePatch(ref border) => {
let nine_patch = NinePatchDescriptor {
width: border.width,
height: border.height,
slice: border.slice,
fill: border.fill,
repeat_horizontal: border.repeat_horizontal,
repeat_vertical: border.repeat_vertical,
outset: border.outset.into(),
widths: border_item.widths.into(),
};
let prim = match border.source {
NinePatchBorderSource::Image(image_key) => {
PrimitiveContainer::ImageBorder {
@ -1746,18 +1761,11 @@ impl<'a> DisplayListFlattener<'a> {
rendering: ImageRendering::Auto,
tile: None,
},
widths: border_item.widths,
width: border.width,
height: border.height,
slice: border.slice,
fill: border.fill,
repeat_horizontal: border.repeat_horizontal,
repeat_vertical: border.repeat_vertical,
outset: border.outset,
nine_patch,
}
}
NinePatchBorderSource::Gradient(gradient) => {
match self.create_brush_kind_for_gradient(
match self.create_linear_gradient_prim(
&info,
gradient.start_point,
gradient.end_point,
@ -1766,28 +1774,9 @@ impl<'a> DisplayListFlattener<'a> {
LayoutSize::new(border.height as f32, border.width as f32),
LayoutSize::zero(),
pipeline_id,
Some(Box::new(nine_patch)),
) {
Some(brush_kind) => {
let segments = create_nine_patch_segments(
&info.rect,
&border_item.widths,
border.width,
border.height,
border.slice,
border.fill,
border.repeat_horizontal,
border.repeat_vertical,
border.outset,
);
let descriptor = BrushSegmentDescriptor {
segments: SmallVec::from_vec(segments),
};
PrimitiveContainer::Brush(
BrushPrimitive::new(brush_kind, Some(descriptor))
)
}
Some(prim) => prim,
None => return,
}
}
@ -1804,17 +1793,7 @@ impl<'a> DisplayListFlattener<'a> {
LayoutSize::zero(),
);
let segments = create_nine_patch_segments(
&info.rect,
&border_item.widths,
border.width,
border.height,
border.slice,
border.fill,
border.repeat_horizontal,
border.repeat_vertical,
border.outset,
);
let segments = nine_patch.create_segments(&info.rect);
let descriptor = BrushSegmentDescriptor {
segments: SmallVec::from_vec(segments),
@ -1844,7 +1823,7 @@ impl<'a> DisplayListFlattener<'a> {
}
}
pub fn create_brush_kind_for_gradient(
pub fn create_linear_gradient_prim(
&mut self,
info: &LayoutPrimitiveInfo,
start_point: LayoutPoint,
@ -1854,7 +1833,8 @@ impl<'a> DisplayListFlattener<'a> {
stretch_size: LayoutSize,
mut tile_spacing: LayoutSize,
pipeline_id: PipelineId,
) -> Option<BrushKind> {
nine_patch: Option<Box<NinePatchDescriptor>>,
) -> Option<PrimitiveContainer> {
let mut prim_rect = info.rect;
simplify_repeated_primitive(&stretch_size, &mut tile_spacing, &mut prim_rect);
@ -1862,13 +1842,15 @@ impl<'a> DisplayListFlattener<'a> {
// flatten_root() and pass to all children here to avoid
// some hash lookups?
let display_list = self.scene.get_display_list_for_pipeline(pipeline_id);
let mut max_alpha: f32 = 0.0;
let mut min_alpha: f32 = 1.0;
for stop in display_list.get(stops) {
let stops = display_list.get(stops).map(|stop| {
max_alpha = max_alpha.max(stop.color.a);
min_alpha = min_alpha.min(stop.color.a);
}
GradientStopKey {
offset: stop.offset,
color: stop.color.into(),
}
}).collect();
// If all the stops have no alpha, then this
// gradient can't contribute to the scene.
@ -1876,11 +1858,6 @@ impl<'a> DisplayListFlattener<'a> {
return None;
}
// Save opacity of the stops for use in
// selecting which pass this gradient
// should be drawn in.
let stops_opacity = PrimitiveOpacity::from_alpha(min_alpha);
// Try to ensure that if the gradient is specified in reverse, then so long as the stops
// are also supplied in reverse that the rendered result will be equivalent. To do this,
// a reference orientation for the gradient line must be chosen, somewhat arbitrarily, so
@ -1899,17 +1876,15 @@ impl<'a> DisplayListFlattener<'a> {
(start_point, end_point)
};
Some(BrushKind::LinearGradient {
stops_range: stops,
Some(PrimitiveContainer::LinearGradient {
extend_mode,
reverse_stops,
start_point: sp,
end_point: ep,
stops_handle: GpuCacheHandle::new(),
stretch_size,
tile_spacing,
visible_tiles: Vec::new(),
stops_opacity,
stops,
reverse_stops,
nine_patch,
})
}
@ -1938,7 +1913,7 @@ impl<'a> DisplayListFlattener<'a> {
stops_handle: GpuCacheHandle::new(),
stretch_size,
tile_spacing,
visible_tiles: Vec::new(),
visible_tiles_range: GradientTileRange::empty(),
}
}

View File

@ -446,6 +446,7 @@ impl TileCache {
PrimitiveInstanceKind::LineDecoration { .. } |
PrimitiveInstanceKind::Clear |
PrimitiveInstanceKind::NormalBorder { .. } |
PrimitiveInstanceKind::LinearGradient { .. } |
PrimitiveInstanceKind::ImageBorder { .. } => {
// These don't contribute dependencies
}

File diff suppressed because it is too large Load Diff

View File

@ -243,6 +243,7 @@ impl SurfaceDescriptor {
PrimitiveInstanceKind::Image { .. } |
PrimitiveInstanceKind::YuvImage { .. } |
PrimitiveInstanceKind::LineDecoration { .. } |
PrimitiveInstanceKind::LinearGradient { .. } |
PrimitiveInstanceKind::TextRun { .. } |
PrimitiveInstanceKind::NormalBorder { .. } |
PrimitiveInstanceKind::Rectangle { .. } |

Binary file not shown.

Before

Width:  |  Height:  |  Size: 7.4 KiB

After

Width:  |  Height:  |  Size: 23 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 5.7 KiB

After

Width:  |  Height:  |  Size: 30 KiB