diff --git a/.isu/issues.json b/.isu/issues.json index 7c26f5a..bc580a5 100644 --- a/.isu/issues.json +++ b/.isu/issues.json @@ -1,5 +1,5 @@ { - "next_id": 394, + "next_id": 395, "issues": [ { "id": 1, @@ -4803,6 +4803,19 @@ "author": "piefev", "state": "open", "created_at": "2026-07-16T14:20:35Z" + }, + { + "id": 394, + "repo": "we", + "title": "Bing parity remains blocked after linear image sampling", + "body": "Parent: isu issue 280. Related: isu issues 305 and 393.\n\nThis pass changed raster image upload/sampling to use level-0 textures with a linear sampler instead of generated Metal mipmaps. The change improves the deterministic same-cache Bing comparison, but it is not enough to remove the xfail from crates/e2e/scenarios/real-web/bing.com.we.\n\nRepro:\n cargo run -p we-e2e -- --scenario crates/e2e/scenarios/real-web/bing.com.we --out-dir crates/e2e/artifacts\n\nCurrent committed-golden failure after this change:\n- desktop L147: 4.87% match (1168640/1228500 px differ, tol=4, max_diff=0.1000%)\n- mobile L161: 5.17% match (312150/329160 px differ, tol=4, max_diff=0.1000%)\n\nThe committed Chromium goldens are still stale relative to the Sichuan Tea offline snapshot; that remains tracked by isu issue 305.\n\nUseful same-cache Chromium comparison after this change:\n- desktop vs crates/e2e/artifacts/real-web/bing.com/desktop.scenario-cache.chromium.png: 80.53% match (239245/1228500 px differ at tolerance 4)\n- mobile vs crates/e2e/artifacts/real-web/bing.com/mobile.scenario-cache.chromium.png: 82.09% match (58940/329160 px differ at tolerance 4)\n\nThis improves the previous text-shadow pass numbers recorded in isu issue 391 (desktop 76.98%, mobile 74.94%), but the same-cache gap is still dominated by Bing carousel/lower-content placement and residual text/raster differences. The mid-background photo region is now close to Chromium; the remaining parity work should focus on the bottom rail/card layout and UI/text raster differences.\n\nArtifacts:\n- crates/e2e/artifacts/real-web/bing.com/desktop.png\n- crates/e2e/artifacts/real-web/bing.com/desktop.png.diff.png\n- crates/e2e/artifacts/real-web/bing.com/mobile.png\n- crates/e2e/artifacts/real-web/bing.com/mobile.png.diff.png\n- crates/e2e/artifacts/real-web/bing.com/desktop.scenario-cache.chromium.png\n- crates/e2e/artifacts/real-web/bing.com/mobile.scenario-cache.chromium.png\n\nAcceptance: after isu issue 305 rebaselines the committed references, continue reducing the deterministic same-cache layout/raster gap until bing.com.we can remove its # xfail marker and pass both screenshot assertions within the default threshold.", + "labels": [ + "real-web" + ], + "assigned": [], + "author": "piefev", + "state": "open", + "created_at": "2026-07-16T15:17:34Z" } ] } diff --git a/crates/render/src/gpu.rs b/crates/render/src/gpu.rs index 68f877d..2f6b809 100644 --- a/crates/render/src/gpu.rs +++ b/crates/render/src/gpu.rs @@ -144,8 +144,9 @@ pub struct GpuRenderer { image_cache: TextureCache, /// GPU textures for each atlas page. atlas_textures: Vec>, - /// Trilinear (linear min/mag + mipmap) sampler for raster images, so they - /// scale smoothly instead of aliasing on HiDPI / under CSS scaling. + /// Linear sampler for raster images. CSS images are sampled from their + /// decoded level-0 pixels; generated Metal mipmaps noticeably diverge from + /// browser image resampling on real-web photographic backgrounds. image_sampler: SamplerState, /// Device pixels per logical point (Retina backing scale). The display /// list stays in logical coordinates; this scales the drawable, scissor @@ -164,7 +165,7 @@ impl GpuRenderer { /// /// Returns `None` if Metal pipeline creation fails. pub fn new(device: Device) -> Option { - let image_sampler = device.new_sampler_state_mipmap()?; + let image_sampler = device.new_sampler_state()?; let renderer = MetalRenderer::new(device)?; Some(GpuRenderer { renderer, @@ -1742,7 +1743,7 @@ fn upload_image(device: &Device, img: &Image) -> Option { bgra.push(chunk[3]); // A } - device.new_texture_mipmapped( + device.new_texture( img.width, img.height, MTL_PIXEL_FORMAT_BGRA8_UNORM,