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
7 lines
212 B
INI
7 lines
212 B
INI
[box-shadow-multiple-001.html]
|
|
expected:
|
|
if not swgl and (os == "mac") and (version == "OS X 15.3"): FAIL
|
|
if swgl: FAIL
|
|
fuzzy:
|
|
if (os == "win") and not swgl: maxDifference=0-1;totalPixels=0-10000
|