Fix border segment. try: -b do -p linux64 -u all[linux64-qr] -t all[linux64-qr]
Fix border segment. try: -b do -p linux64 -u all[linux64-qr] -t all[linux64-qr]
--- a/gfx/webrender/src/prim_store.rs
+++ b/gfx/webrender/src/prim_store.rs
@@ -1325,25 +1325,34 @@ impl PrimitiveStore {
clip_store: &mut ClipStore,
node_data: &[ClipScrollNodeData],
clips: &Vec<ClipWorkItem>,
) {
debug_assert!(self.cpu_metadata[prim_index.0].prim_kind == PrimitiveKind::Brush);
let metadata = &self.cpu_metadata[prim_index.0];
let brush = &mut self.cpu_brushes[metadata.cpu_prim_index.0];
- if !brush.kind.is_solid() {
- return;
- }
- if metadata.local_rect.size.area() <= MIN_BRUSH_SPLIT_AREA {
- return;
- }
- if let Some(ref segment_desc) = brush.segment_desc {
- if segment_desc.clip_mask_kind != BrushClipMaskKind::Unknown {
- return;
+
+ match brush.segment_desc {
+ Some(ref segment_desc) => {
+ // If we already have a segment descriptor, only run through the
+ // clips list if we haven't already determined the mask kind.
+ if segment_desc.clip_mask_kind != BrushClipMaskKind::Unknown {
+ return;
+ }
+ }
+ None => {
+ // If no segment descriptor built yet, see if it is a brush
+ // type that wants to be segmented.
+ if !brush.kind.is_solid() {
+ return;
+ }
+ if metadata.local_rect.size.area() <= MIN_BRUSH_SPLIT_AREA {
+ return;
+ }
}
}
let mut segment_builder = SegmentBuilder::new(
metadata.local_rect,
metadata.local_clip_rect
);