DescriptionThe bug this delivery fixes is that for some cases where the gpu clip mask generation path combines gpu-drawn and SW-drawn clip masks the final mask would be incorrect. The problematic behavior was in the SW path renderer which has 3 issues (when it comes to clip mask rendering)
1) It uses the context's matrix to draw. This can/did lead to double application of the transforms. (This can be worked around by setting the Context's matrix to I - but that is rather side-effecty).
2) It uses the current clip to bound the size of the drawn area. During clip mask generation we are in the process of creating the clip mask and when we move the mask to the UL corner of the texture this bounding process can clip off part of the result.
3) The SW path renderer doesn't use the draw state's matrix. The clip mask manager alters the draw state's matrix to offset the mask (to the UL corner). Because the other path renderers respect the matrix but the SW path renderer does not this lead to mis-registration of SW path rendered masks.
The solution implemented here (rather than passing special purpose flags to the SW path renderer) is to bypass the SW path renderer and directly call the SWMaskHelper (like the full SW path does). This avoids monkeying with get_path_and_clip_bounds (which performs the intersection with the current clip bound) and messing with the translate passed to the old sw_draw_path_to_mask_texture method.
Patch Set 1 #
Total comments: 10
Patch Set 2 : Addressed code review issues #Patch Set 3 : Removed incorrect upload #
Total comments: 4
MessagesTotal messages: 5
|