gdsii follow-ups: balanced union tree, 2D layer union, import examples#394
Merged
Conversation
A real librelane-produced sky130 die (104k polygons) exposed that the bridge folded each layer's extrudes into a left-nested Union chain — tens of thousands deep, which overflows the stack of any recursive document consumer (vcad-render aborted). Union pairwise into a balanced tree instead (depth ~log2 n) and add a 1000-instance depth regression test. Also add the sky130_import example used to validate against real foundry GDS. Co-Authored-By: Claude Fable 5 <noreply@anthropic.com>
Each layer's raw polygons (tens of thousands of abutting rects on a real die) are now merged with pure-Rust geo BooleanOps before any extrusion: one sketch+extrude per connected island, interior holes as a Difference per island, islands unioned via the cheap disjoint path. The layer parts become topologically true solids — abutting cell geometry is genuinely one face — instead of 88k stacked prisms, and the 3D boolean pipeline only ever sees hole subtraction. Die-scale 2D union costs ~4.5 s at import; the document shrinks 183 MB → 105 MB. Adds merge-semantics tests: overlapping rects yield one extrude and zero unions; an abutting picture-frame ring yields exactly two extrudes and one Difference. Co-Authored-By: Claude Fable 5 <noreply@anthropic.com>
WINDOW="x0,y0,x1,y1" (µm) crops to a die region, clamping crossing polygons to the window edge (cleaved-die look) — how you get a usable detail render out of a 100k-polygon die. Co-Authored-By: Claude Fable 5 <noreply@anthropic.com>
|
The latest updates on your projects. Learn more about Vercel for GitHub.
|
What shippedThis is a purely internal change with no user-visible effect. It improves how chip layout files are processed behind the scenes — merging overlapping shapes before building the 3D model, fixing a crash risk on large designs, and adding developer tooling for validation — but does not change any feature, output, or behavior that users interact with directly. Plain-English summary generated by Choji from this pull request. |
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment
Add this suggestion to a batch that can be applied as a single commit.This suggestion is invalid because no changes were made to the code.Suggestions cannot be applied while the pull request is closed.Suggestions cannot be applied while viewing a subset of changes.Only one suggestion per line can be applied in a batch.Add this suggestion to a batch that can be applied as a single commit.Applying suggestions on deleted lines is not supported.You must change the existing code in this line in order to create a valid suggestion.Outdated suggestions cannot be applied.This suggestion has been applied or marked resolved.Suggestions cannot be applied from pending reviews.Suggestions cannot be applied on multi-line comments.Suggestions cannot be applied while the pull request is queued to merge.Suggestion cannot be applied right now. Please check back later.
#387's squash landed at the
as_chunkscommit and missed the last three commits on the branch. This recovers them, cherry-picked onto main:geoBooleanOps, optional dep behind the defaultvcad-irfeature): each layer becomes one solid per connected island, holes viaDifference, islands disjoint by construction. Merged-geometry semantics tests included. Die-scale union ≈ 4.5 s; document shrinks 183 → 105 MB.sky130_import/flat_importexamples — the harnesses used to validate against a real librelane die (104,663 polygons, 17 layers), with a µm window-crop mode for detail renders.41 → 43 tests, clippy
-D warningsclean on stable and nightly.🤖 Generated with Claude Code