Bug 1830588 - Fix clip on fractional composite prims r=gfx-reviewers,lsalzman

Also add a test and re-enable the new clip-mask code paths.

Differential Revision: https://phabricator.services.mozilla.com/D178614
This commit is contained in:
Glenn Watson 2023-05-22 21:48:13 +00:00
Родитель c0c95c1afe
Коммит 42ef0ea1c2
6 изменённых файлов: 26 добавлений и 8 удалений

Просмотреть файл

@ -33,7 +33,7 @@ use crate::render_task_cache::{RenderTaskCacheKey, to_cache_size, RenderTaskPare
use crate::render_task::{RenderTaskKind, RenderTask};
use crate::renderer::{GpuBufferBuilder, GpuBufferAddress};
use crate::segment::{EdgeAaSegmentMask, SegmentBuilder};
use crate::util::{clamp_to_scale_factor, pack_as_float, MaxRect};
use crate::util::{clamp_to_scale_factor, pack_as_float};
use crate::visibility::{compute_conservative_visible_rect, PrimitiveVisibility, VisibilityState};
@ -108,8 +108,8 @@ fn can_use_clip_chain_for_quad_path(
clip_chain: &ClipChainInstance,
prim_spatial_node_index: SpatialNodeIndex,
raster_spatial_node_index: SpatialNodeIndex,
_clip_store: &ClipStore,
_data_stores: &DataStores,
clip_store: &ClipStore,
data_stores: &DataStores,
spatial_tree: &SpatialTree,
) -> bool {
let map_prim_to_surface = spatial_tree.get_relative_transform(
@ -123,12 +123,9 @@ fn can_use_clip_chain_for_quad_path(
return false;
}
!clip_chain.needs_mask
// TODO(gw): Temporarily disable the new clip-mask rendering path for now, while
// investigating a driver-specific shader optimization regression.
/*
if !clip_chain.needs_mask {
return true;
}
@ -161,7 +158,6 @@ fn can_use_clip_chain_for_quad_path(
}
true
*/
}
#[derive(Debug, Copy, Clone)]
@ -2006,7 +2002,7 @@ fn add_composite_prim(
let composite_prim_address = write_prim_blocks(
frame_state.frame_gpu_data,
rect,
LayoutRect::max_rect(),
rect,
color,
segments,
);

Двоичные данные
gfx/wr/wrench/reftests/aa/fractional-nine-patch.png Normal file

Двоичный файл не отображается.

После

Ширина:  |  Высота:  |  Размер: 2.0 KiB

Просмотреть файл

@ -0,0 +1,21 @@
---
root:
items:
- bounds: 0 0 450 400
type: rect
color: white
- type: stacking-context
bounds: 50.0 50.0 0 0
transform: [0.9999767, 8.142047e-6, 0.0, 0.0, 1.6284093e-5, 0.9999767, 0.0, 0.0, 0.0, 0.0, 1.0, 0.0, 0.0019226074, 0.0019683838, 0.0, 1.0]
items:
- type: stacking-context
items:
- type: clip
id: 3
complex:
- rect: [0, 0, 375, 300]
radius: 12
- type: rect
bounds: 0 0 375 300
color: red
clip-chain: [3]

Просмотреть файл

@ -1,3 +1,4 @@
skip_on(android) fuzzy(1,1) fuzzy-if(platform(swgl),4,27) == rounded-rects.yaml rounded-rects-ref.png # Too wide for Android
== aa-dist-bug.yaml aa-dist-bug-ref.yaml
fuzzy-if(env(android,device),6,792) == fractional-radii.yaml fractional-radii-ref.yaml
platform(linux) == fractional-nine-patch.yaml fractional-nine-patch.png

Двоичный файл не отображается.

До

Ширина:  |  Высота:  |  Размер: 19 KiB

После

Ширина:  |  Высота:  |  Размер: 19 KiB

Двоичные данные
gfx/wr/wrench/reftests/snap/preserve-3d.png

Двоичный файл не отображается.

До

Ширина:  |  Высота:  |  Размер: 6.7 KiB

После

Ширина:  |  Высота:  |  Размер: 6.7 KiB