The picture-cache invalidation stores prim corners quantized to 1/4px via round(v * 4). Those buckets are centered on the .5 boundary, which is exactly where the rasterizer's whole-pixel round() flips device pixels. So two corners that render to different device pixels (e.g. 20.4 -> 20 and 20.5 -> 21) can share one invalidation key, and a tile is not re-rasterized when it should be, leaving stale content. This was masked while prims were device-snapped (integer corners quantize unambiguously); it surfaces once prims carry sub-pixel positions. Truncate toward zero instead. This places the 1/4px bucket boundaries on every half-integer with the same sign-aware tie-ownership as round() (half away from zero), so a quant key uniquely determines the rendered device pixel for both positive and negative coordinates, while keeping the 1/4px tolerance for anti-aliased content. Verified: a full sweep over [-300, 300] including exact half-integers has zero keys mapping to two device pixels (600 with the old round). Differential Revision: https://phabricator.services.mozilla.com/D310211
5 lines
152 B
INI
5 lines
152 B
INI
[offset-path-url-004.html]
|
|
fuzzy:
|
|
if useDrawSnapshot: maxDifference=0-22;totalPixels=0-76
|
|
if os == "mac": maxDifference=0-10;totalPixels=0-92
|