Bug 1754350 - Fix mix-blend mode readbacks on fractional device pixel boundaries r=gfx-reviewers,bradwerth

Differential Revision: https://phabricator.services.mozilla.com/D138253
This commit is contained in:
Glenn Watson 2022-02-09 20:25:34 +00:00
Родитель a85f12c5d6
Коммит e4a7b2d232
2 изменённых файлов: 4 добавлений и 14 удалений

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

@ -135,7 +135,7 @@ use std::sync::atomic::{AtomicUsize, Ordering};
use std::collections::hash_map::Entry;
use std::ops::Range;
use crate::picture_textures::PictureCacheTextureHandle;
use crate::util::{MaxRect, VecHelper, MatrixHelpers, Recycler, raster_rect_to_device_pixels, ScaleOffset};
use crate::util::{MaxRect, VecHelper, MatrixHelpers, Recycler, ScaleOffset};
use crate::filterdata::{FilterDataHandle};
use crate::tile_cache::{SliceDebugInfo, TileDebugInfo, DirtyTileDebugInfo};
use crate::visibility::{PrimitiveVisibilityFlags, FrameVisibilityContext};
@ -5031,15 +5031,8 @@ impl PicturePrimitive {
// Apply device pixel ratio for parent surface to get into device
// pixels for that surface.
let backdrop_rect = raster_rect_to_device_pixels(
pic_in_raster_space,
parent_device_pixel_scale,
);
let parent_surface_rect = raster_rect_to_device_pixels(
parent_surface.clipping_rect.cast_unit(),
parent_device_pixel_scale,
);
let backdrop_rect = pic_in_raster_space.cast_unit() * parent_device_pixel_scale;
let parent_surface_rect = parent_surface.clipping_rect.cast_unit() * parent_device_pixel_scale;
// If there is no available parent surface to read back from (for example, if
// the parent surface is affected by a clip that doesn't affect the child
@ -5053,6 +5046,7 @@ impl PicturePrimitive {
// from the primitive rect within the readback region. This is
// 0..1 for aligned surfaces, but doing it this way allows
// accurate sampling if the primitive bounds have fractional values.
let available_rect = available_rect.round_out();
let backdrop_uv = calculate_uv_rect_kind(
available_rect,

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

@ -1,4 +0,0 @@
[mix-blend-mode-rotated-clip.html]
expected:
if swgl: PASS
FAIL