diff --git a/gfx/tests/crashtests/1771294.html b/gfx/tests/crashtests/1771294.html new file mode 100644 index 000000000000..78ec441bff24 --- /dev/null +++ b/gfx/tests/crashtests/1771294.html @@ -0,0 +1,16 @@ + + +
+ + + \ No newline at end of file diff --git a/gfx/tests/crashtests/crashtests.list b/gfx/tests/crashtests/crashtests.list index a6d4c48472e6..cbbea35e469c 100644 --- a/gfx/tests/crashtests/crashtests.list +++ b/gfx/tests/crashtests/crashtests.list @@ -214,3 +214,4 @@ load 1758127-1.html load 1762973-1.html pref(layout.css.backdrop-filter.enabled,true) load 1765667.html load 1768096-1.html +pref(layout.css.backdrop-filter.enabled,true) load 1771294.html diff --git a/gfx/wr/webrender/src/batch.rs b/gfx/wr/webrender/src/batch.rs index 03a3b9a9f259..f486c018643d 100644 --- a/gfx/wr/webrender/src/batch.rs +++ b/gfx/wr/webrender/src/batch.rs @@ -3000,15 +3000,23 @@ impl BatchBuilder { ctx.spatial_tree, ); - let top_left = map_prim_to_backdrop.map_point(prim_rect.top_left()).unwrap(); - let top_right = map_prim_to_backdrop.map_point(prim_rect.top_right()).unwrap(); - let bottom_left = map_prim_to_backdrop.map_point(prim_rect.bottom_left()).unwrap(); - let bottom_right = map_prim_to_backdrop.map_point(prim_rect.bottom_right()).unwrap(); + let points = [ + map_prim_to_backdrop.map_point(prim_rect.top_left()), + map_prim_to_backdrop.map_point(prim_rect.top_right()), + map_prim_to_backdrop.map_point(prim_rect.bottom_left()), + map_prim_to_backdrop.map_point(prim_rect.bottom_right()), + ]; - let top_left = calculate_screen_uv(top_left * pic_info.device_pixel_scale, backdrop_rect); - let top_right = calculate_screen_uv(top_right * pic_info.device_pixel_scale, backdrop_rect); - let bottom_left = calculate_screen_uv(bottom_left * pic_info.device_pixel_scale, backdrop_rect); - let bottom_right = calculate_screen_uv(bottom_right * pic_info.device_pixel_scale, backdrop_rect); + if points.iter().any(|p| p.is_none()) { + return; + } + + let uvs = [ + calculate_screen_uv(points[0].unwrap() * pic_info.device_pixel_scale, backdrop_rect), + calculate_screen_uv(points[1].unwrap() * pic_info.device_pixel_scale, backdrop_rect), + calculate_screen_uv(points[2].unwrap() * pic_info.device_pixel_scale, backdrop_rect), + calculate_screen_uv(points[3].unwrap() * pic_info.device_pixel_scale, backdrop_rect), + ]; // TODO (gw): This is a hack that provides the GPU cache blocks for an // ImageSource. We should update the GPU cache interfaces to @@ -3021,10 +3029,10 @@ impl BatchBuilder { target_rect.max.y as f32, ]), GpuBlockData::from([0.0; 4]), - GpuBlockData::from(top_left), - GpuBlockData::from(top_right), - GpuBlockData::from(bottom_left), - GpuBlockData::from(bottom_right), + GpuBlockData::from(uvs[0]), + GpuBlockData::from(uvs[1]), + GpuBlockData::from(uvs[2]), + GpuBlockData::from(uvs[3]), ]; let uv_rect_handle = gpu_cache.push_per_frame_blocks(gpu_blocks);