diff --git a/gfx/wr/webrender/src/picture.rs b/gfx/wr/webrender/src/picture.rs index 78b52342f8335eb5c47bb4446021e201da490a92..fd8a491c4d60d69f63e68a71d22dd2c435cbb71d 100644 --- a/gfx/wr/webrender/src/picture.rs +++ b/gfx/wr/webrender/src/picture.rs @@ -3996,6 +3996,7 @@ struct SurfaceAllocInfo { task_size: DeviceIntSize, needs_scissor_rect: bool, clipped: DeviceRect, + unclipped: DeviceRect, clipped_local: PictureRect, uv_rect_kind: UvRectKind, } @@ -5363,6 +5364,13 @@ impl PicturePrimitive { let cmd_buffer_index = frame_state.cmd_buffers.create_cmd_buffer(); + // Since we (may have) adjusted the render task size for downscaling accuracy + // above, recalculate the uv rect for tasks that may sample from this blur output + let uv_rect_kind = calculate_uv_rect_kind( + DeviceRect::from_origin_and_size(surface_rects.clipped.min, adjusted_size.to_f32()), + surface_rects.unclipped, + ); + let picture_task_id = frame_state.rg_builder.add().init( RenderTask::new_dynamic( adjusted_size, @@ -5379,7 +5387,7 @@ impl PicturePrimitive { cmd_buffer_index, can_use_shared_surface, ) - ).with_uv_rect_kind(surface_rects.uv_rect_kind) + ).with_uv_rect_kind(uv_rect_kind) ); let blur_render_task_id = RenderTask::new_blur( @@ -7269,6 +7277,7 @@ fn get_surface_rects( task_size, needs_scissor_rect, clipped, + unclipped, clipped_local, uv_rect_kind, }) diff --git a/gfx/wr/wrench/reftests/filters/filter-blur-downscale-fractional.png b/gfx/wr/wrench/reftests/filters/filter-blur-downscale-fractional.png index e6717b5ecc9f074e70dcff2335d3391f09c01041..36da2d2620f1d68c884012d7dab6ec0805e86d04 100644 Binary files a/gfx/wr/wrench/reftests/filters/filter-blur-downscale-fractional.png and b/gfx/wr/wrench/reftests/filters/filter-blur-downscale-fractional.png differ diff --git a/gfx/wr/wrench/reftests/filters/filter-large-blur-radius.png b/gfx/wr/wrench/reftests/filters/filter-large-blur-radius.png index e2027f080afb5d973e03d94cf94a3ffdff86a44f..e48a567c381ed44a089bd56ad81bb0271667889a 100644 Binary files a/gfx/wr/wrench/reftests/filters/filter-large-blur-radius.png and b/gfx/wr/wrench/reftests/filters/filter-large-blur-radius.png differ