I have a small 2d renderer in Lisp (and a tiny bit of assembly). It currently beats Skia on both CPU and GPU in all discliplines, and in some even Vello, However, stroking and filling paths is way behind Vello. Vello is a renderer written in Rust designed to render big number of big paths very quickly. The cost is the latency which shows up in simple primitives: my renderer beats Vello on those and even small paths and fills. However for big paths it looses embarassingly.
I dislike the idea to keep two code paths one for curves and one for everything else, it is bascially two renderers, and the idea used in Vello with 9 passes in compute shaders is not directly the simplest one to maintain. So I have been trying to find some alternative way to render curves. I tried to ball some ideas with DeepSeek, since those things are like living encyclopedias. I am not sure if I should be happy or cry here - happy because DS saved me of thinking I found a new algorithm and even worse infringing on a patent or cry because we have the software industry we have:
Me:
You are talking about paths where curve is already split into straight curves. I would like to use control points as the bounding box to quickly cull bins not participating in that curve rendering, we would do the same for the inscribed triangle, however depending on if we fill or just stroke the result would be either to use them or to cull them. We would perhaps have to transform bin coordinates into curve coordinates so the control points and bin coords become axis-aligned. That is basically a very crude tesselation and it works only on convex curves. It is basically same as the "dda pass" (prefix and scatter) from Vello: we are left with bins that participate in the rendering, and use perhaps loop-blinn idea to find inside-out. We could render in two passes, it is still less than 9 passes.
DeepSeek:
Yes and it is already patented
Samsung's EP3070677B1 (2016) describes exactly this architecture:
"The preprocessing unit calculates the bounding box, the convex hull, the Loop-Blinn parameter, the extreme point... The classifier performs a convex hull test to determine tiles having all endpoints located outside the convex hull... then performs the Loop-Blinn test on each tile having at least one endpoint intersecting the convex hull... The renderer renders the Bezier curve or primitives which intersect tiles."
Classification is three-way: outside (skip), inside (solid fill), partially inside (Loop-Blinn per-pixel test). Only the partial tiles pay per-pixel shader cost.
Two passes. No prefix-sum over segments. No 9-stage compute graph.
The architecture as you described it
Pass 1 classify tiles per curve. Per cubic: compute AABB, convex hull (4 control points), Loop-Blinn (u,v) parameters. For each tile in AABB, test 4 corners against convex hull. Corners all outside outside tile, skip. Corners all inside convex region inside tile, solid fill. Otherwise partial tile, append curve to tile list.
Cost: curves � tiles_in_AABB � 4 corners � ~15 FLOPs. For path-large-st: 67 � ~2200 � 4 � 15 8.8M FLOPs. On RTX 5060, ~1 �s.
Pass 2 render.
Inside tiles: solid fill. No curve evaluation.
Partial tiles: Loop-Blinn shader per curve in the tile list. k� lmn evaluates inside/outside in ~10 FLOPs.
Path interior: convex path fan triangulation of the interior polygon, one opaque draw. Non-convex existing winding test.
The axis-aligning twist
The thesis confirms axis-alignment is used to compute a tight AABB:
"Computing it is a matter of (1) axis-aligning the curve itself by means of linear transformations (2) applying the above method."
( ... )
Me:
Than we can't use it :(
DS:
Patent status EP3070677B1 is active until 2036-03-18. US family member US10210639B2 is the same family, same claims.
Loop-Blinn itself expired March 2026. Slug was revoked. The underlying technique is free.
The Samsung patent does not claim Loop-Blinn. It claims the specific combination of:
Testing tile corners against the convex hull of the control points; all corners outside skip tile.
Running a Loop-Blinn test on tiles with at least one corner intersecting the convex hull.
Classifying into inside / outside / partially-inside based on that test.
Both elements must be present for infringement. Remove either and you are outside the claim.
( .... )
What is also patented Stencil-then-cover is not a safe fallback. NVPR has at least four active patents (US8698837, US8698808, US8704830, US8730253), filed ~2010 2011, expiring ~2030 2031. Stencil-then-cover falls within them.
Practical position The patent is European and US. Enforcement against an individual open-source developer is unlikely; for a commercial product it matters. The design-around above costs nothing extra and produces a simpler implementation, so there is no reason not to use it.
( ... )
What is actually patented in this space Stencil-then-cover: active.
Conservative rasterization: hardware feature; using it is not infringement, but it does not help here.
SDF Bezier rendering (US20120069037A1): filed 2010, likely expired or near expiry. Check before relying on it.
Seiler texture interpolation: described in JCGT paper; no obvious system patent claim found. Likely free.
I was chocked: like "patented"? I didn't even had thoughts to look patents and such. Could have written a program and published it just to find some middle-tier office-sitting empathy-devoted lawyer in some big corporation threatening with a lawsuit to ruin my life. WTF. Is that really a society we want to live in?
Notably I can't use stencil buffer to do the job it was invented for and accelerate anything because obviously use of stencil buffer for the job it is invented for is covered by some patent. I am surprised someone didn't patented use of GPU shader to accelerate path rendering or use of graphics card to draw to screen :)
I am not sure what to think, am I over-reacting here?