src/OT

Branch


Log

Author Commit Date CI Message
Garret Rieger 07ee609f 2025-10-20T20:06:43 Fix invalid pointer conversions in graph Coverage. (#5622) For #5604.
Behdad Esfahbod 4a26e289 2025-09-30T15:31:04 Add `hb_ot_layout_lookup_collect_glyph_alternates()` (#5367) * [map] Massage operator << overloads * [ot-layout] Add +hb_ot_layout_lookup_collect_glyph_alternates To collect all glyph mapping from SingleSubst or AlternateSubst lookups in one call. Needed by FreeType autohinter for performance. New API: +hb_ot_layout_lookup_collect_glyph_alternates() * [layout] Change hb_ot_layout_lookup_collect_glyph_alternates() API https://github.com/harfbuzz/harfbuzz/pull/5367#discussion_r2149019638
Behdad Esfahbod af286b8f 2025-09-30T12:59:34 [Coverage] Simplify initialization
Behdad Esfahbod fc761725 2025-09-24T12:42:53 [ValueFormat] comment
Behdad Esfahbod d350cb83 2025-09-23T19:47:01 Speed up ValueFormat len() calc
Behdad Esfahbod 82370913 2025-09-15T20:16:52 [vector] Simplify resize()
Behdad Esfahbod a89c36e0 2025-09-02T13:05:11 [GPOS/kerx] Support attaching marks to bases after them (#5520) See comments. Fuzzer found. I'm surprised this was not discovered before though. I hope I have not missed anything. Fixes https://oss-fuzz.com/testcase-detail/6399443634290688
Behdad Esfahbod c61a4f26 2025-08-29T02:11:52 [GPOS] Micro-optimize offset propagation
Behdad Esfahbod bc6eba94 2025-08-27T13:29:15 Fix kerx attachment shaping issues (#5515) * [ot-shape] Don't zero offsets of default-ignorables Part of fixing https://github.com/harfbuzz/harfbuzz/issues/5514 * [ot-shape] Propagate chain offsets in opposite direction if RTL Part of fixing https://github.com/harfbuzz/harfbuzz/issues/5514
Behdad Esfahbod 6b62d367 2025-08-25T14:02:59 [ligature-cache] Handle case of ligature with no components (#5500) In the cache with "seconds" set-digest.
Behdad Esfahbod 8bdedb3b 2025-08-20T00:27:41 Limit external caches (#5483) * Revert "[external_cache] Remove a conditional (#5471)" This reverts commit 9794ad9e00ff66741c36ec9511e3e968663b74a7. * Limit external_cache to 8 subtables per lookup
Behdad Esfahbod 22545743 2025-08-20T00:06:00 Match positions no malloc (#5481) * Reduce allocation of match_positions by caching one in ctx * Use a stack-array for small match-positions This surgically enables stack-backed storage in vector. * Handle match-positions alloc failure And make allocations unchecked. * Clean up CFF hack to use static storage in vector * Fixup for match_positions allocations * Fix vector handling of foreign arrays memory management
Behdad Esfahbod 9794ad9e 2025-08-16T15:51:05 [external_cache] Remove a conditional (#5471)
Behdad Esfahbod 368598b5 2025-08-16T00:38:42 Increase match_positions stack allocation from 4 to 8 (#5468) Slight speedup on NotoNastaliq.
Behdad Esfahbod dae2c8bb 2025-08-14T22:26:40 [ligature] Add a set-digest on the second component (#5464)
Behdad Esfahbod 8268473a 2025-08-14T21:57:19 Add external_cache_create separate from cache_func (#5463) * Add external_cache_create separate from cache_func * Simplify cache_func_t signature * Rename a cache type * Rename another cache type
Behdad Esfahbod cf614fc8 2025-08-14T16:23:45 [LigatureSet] Use slow path only if <= 1 ligatures (#5462)
Behdad Esfahbod 4aa7dcba 2025-08-12T03:18:38 [Coverage cache] Micro-optimize
Behdad Esfahbod a4dbb7d4 2025-08-12T02:34:49 [Coverage] Cache NOT_COVERED effectively (#5453) Before, our cache.set was always failing for NOT_COVERED, making the cache ineffective for uncovered glyphs. Fix that. Some nice speedups in Latin fonts.
Behdad Esfahbod 6ec1b279 2025-08-11T01:14:19 [lookup] Give each subtable an external-cache opportunity (#5449) * [lookup] Give each subtable an external-cache opportunity * [subtable-cache] Fixups
Qunxin Liu cd49b14b 2025-07-29T14:32:26 [subset] add more aggressive pruning for MarkLigPos and MarkMarkPos (#5434) Remove lig/mark glyphs without defined anchor points after subsetting
Behdad Esfahbod 7af1df67 2025-07-28T10:24:45 Revert "Merge branch 'main' into HVF" This reverts commit 3a64fce9b73bc601e257d13d1ea8ac7f32ce60b6, reversing changes made to f63d960c4eda79514c060ddce796df9e607b5bae.
Behdad Esfahbod 11daf566 2025-07-26T06:31:48 [GDEF] Rename a var
Behdad Esfahbod 7b56d3a1 2025-07-26T05:35:57 [ot-layout] s/hb_ot_lookup_cache_t/hb_ot_layout_mapping_cache_t/g
Behdad Esfahbod 09978fc5 2025-07-26T04:20:59 [ot] Rename hb_ot_lookup_cache_op_t, and cache to subtable_cache
Behdad Esfahbod a220479f 2025-07-26T06:10:31 Remove std::forward inside loops (#5424) * [iter,cff] Remove std::forward from inside loops Was moving multiple times, if args were movable. * [CPAL] Handle an error * [serialize] Remove another std::forward in a loop * [bit-page] Fix a static-analysis out-of-range warning Code was safe. Just rewrite. * [ot-layout] Remove another std::forward from inside a loop
Behdad Esfahbod 786f8381 2025-07-25T04:00:37 [GDEF] Use bit-set instead of set-digest for mark glyph classes Most fonts don't even have these. Some, like NotoSansDuployan have huge ones. This speeds it up by 25%.
Qunxin Liu 879c4ac7 2025-07-24T14:13:16 [subset] MarkBasePos: remove base glyphs with empty base record BaseRecord could become empty if all anchor offsets for retained mark classes are null
Behdad Esfahbod f5acbb5c 2025-07-23T17:48:13 [VARC] Fix HB_NO_DRAW build
Garret Rieger dd347eb4 2025-07-23T19:22:19 [VARC] fix potential unitialized value use in get_extents_without_var_scaled. Callers of get_extents_without_var_scaled assume it will set extents if it has returned true.
Qunxin Liu 4b00cec0 2025-07-15T11:25:49 [subset] bug fix for COLRv1 layer index closure
Behdad Esfahbod 3a64fce9 2025-07-23T00:29:55 Merge branch 'main' into HVF
Behdad Esfahbod de2efbf3 2025-07-21T22:40:57 [glyf] Another OOM fix
Behdad Esfahbod c0052d17 2025-07-21T19:19:05 [ot-font] Handle scratch alloc failures Might fix https://issues.oss-fuzz.com/issues/433311403
Behdad Esfahbod 307a19f2 2025-07-20T00:32:45 [glyf] Minor micro-optimize
Behdad Esfahbod 4fd6345a 2025-07-19T14:42:40 [ot-font] Clean up cache invalidation Also, cache is_synthetic on font.
Behdad Esfahbod abcefb69 2025-07-19T06:57:03 [glyf] Remove dead code
Behdad Esfahbod 7a41150f 2025-07-19T06:36:13 [ot-font] Use glyf scratch in v-advances
Behdad Esfahbod a40f85af 2025-07-19T06:18:06 [font] Acquire a scratch for v-origins Still too slow.
Behdad Esfahbod 76357479 2025-07-19T06:15:29 [glyf] Non-var-optimize a method
Behdad Esfahbod 0dc5f8a2 2025-07-19T06:07:37 [ot-font] Finish caching of v-origins On to benchmarking...
Behdad Esfahbod e697e4d3 2025-07-19T05:48:08 [ot-font] More baby steps towards caching v-origins
Behdad Esfahbod fdf4c759 2025-07-17T23:40:41 [hmtx] Simplify get-leading code Can't return false. The false was being used before to mean "table not present". Handle that instead.
Behdad Esfahbod b359c83c 2025-07-17T23:27:27 [ot-font] Rewrite h/v-advance code Faster, better cached... 24% faster across the benchmarks for hmtx-only path. Comparing before to after Benchmark Time CPU Time Old Time New CPU Old CPU New ------------------------------------------------------------------------------------------------------------------------------------------------------------ BM_Font/glyph_h_advances/Roboto-Regular.ttf/ot -0.2410 -0.2411 2 1 2 1 BM_Font/glyph_h_advances/RobotoFlex-Variable.ttf/ot -0.2482 -0.2484 1 1 1 1 BM_Font/glyph_h_advances/RobotoFlex-Variable.ttf/var/ot -0.0296 -0.0296 48 47 48 47 BM_Font/glyph_h_advances/SourceSansPro-Regular.otf/ot -0.2412 -0.2416 2 2 2 2 BM_Font/glyph_h_advances/SourceSansPro-Regular.otf/var/ot -0.2381 -0.2384 2 2 2 2 BM_Font/glyph_h_advances/AdobeVFPrototype.otf/ot -0.2347 -0.2349 0 0 0 0 BM_Font/glyph_h_advances/AdobeVFPrototype.otf/var/ot -0.0343 -0.0346 2 2 2 2 BM_Font/glyph_h_advances/SourceSerifVariable-Roman.ttf/ot -0.2623 -0.2621 2 1 2 1 BM_Font/glyph_h_advances/SourceSerifVariable-Roman.ttf/var/ot -0.0388 -0.0401 24 23 24 23 BM_Font/glyph_h_advances/Comfortaa-Regular-new.ttf/ot -0.2396 -0.2394 1 1 1 1 BM_Font/glyph_h_advances/NotoNastaliqUrdu-Regular.ttf/ot -0.2344 -0.2346 2 1 2 1 BM_Font/glyph_h_advances/NotoSerifMyanmar-Regular.otf/ot -0.2366 -0.2367 1 1 1 1 OVERALL_GEOMEAN -0.1945 -0.1948 0 0 0 0
Behdad Esfahbod 3d154bc6 2025-07-14T13:53:27 [buffer-message] Fix potential buffer overflow... ...when buffer messaging is enabled and with malicious font. Fixes https://github.com/harfbuzz/harfbuzz/security/advisories/GHSA-p965-5rr7-9mhq
Qunxin Liu 5dbb8141 2025-07-11T08:58:01 [subset] AnchorFormat3: better check for when should downgrade to format1
Behdad Esfahbod e81efe3a 2025-07-11T01:40:23 [glyf] Add TODO
Behdad Esfahbod 0855d33a 2025-07-11T01:00:43 Merge branch 'main' into HVF
Behdad Esfahbod 6ed598e1 2025-07-10T13:03:44 Merge pull request #5382 from harfbuzz/lig_split [repacker] Implement table splitting for LigatureSubst
Qunxin Liu 95dc1109 2025-07-10T09:52:07 [subset] bug fix Don't downgrade to format1 when subsetting
Garret Rieger 38ab13c6 2025-07-04T22:31:04 [repacker] add support for splitting GSUB Ligature lookups.
Behdad Esfahbod 47089fe7 2025-05-28T17:10:22 Big misc changes - Make geometry types into templates taking float or double. - Changes to paint() transform elimination. - Add font->has_nonzero_coords and use it across. - Extensions to avar processing for otherwise invalid mappings.
Behdad Esfahbod c124252d 2025-05-31T16:32:58 [algs] Add support for little-endian int types As well as 64bit-int, and float types. Add Align type.
Behdad Esfahbod 8eb2f07c 2025-05-26T13:21:25 Merge branch 'main' into HVF
Behdad Esfahbod e1dcc454 2025-05-21T16:00:08 [gvar] Use cached scratch in get_extents Makes it alloc-free. 15% faster on benchmark-font glyph_extents RobotoFlex var benchmark.
Behdad Esfahbod a13fd9ae 2025-05-21T12:23:19 Merge branch 'main' into HVF
Behdad Esfahbod c6097698 2025-05-16T01:10:43 [ot-font/draw] Use a gvar shared-tuple scalar cache for calculate_scalar Massive saving on massively variable fonts. Over 30% on a tested font.
Behdad Esfahbod f50490d6 2025-05-15T18:28:44 Add hb_scalar_cache_t
Behdad Esfahbod 89e28a23 2025-05-10T16:30:35 [skippy-iter] Use auto for type deduction
Behdad Esfahbod d92106df 2025-04-24T21:42:20 Merge branch 'main' into HVF
Behdad Esfahbod 59334682 2025-04-23T20:56:32 [shape] Only apply slant to shaping results if horizontal
Behdad Esfahbod e71a88d3 2025-04-23T19:17:31 [paint] Fix crash
Behdad Esfahbod 6688a03c 2025-04-23T19:06:52 [sbix/CBDT] Fix memory leaks in error case
Behdad Esfahbod 17238eae 2025-04-23T18:15:56 [ot/ft/fontations] Port to new _or_fail of draw/paint APIs
Behdad Esfahbod a23021e1 2025-04-23T00:43:56 [COLRv1] Simplify paint_glyph() Pass a non-synthetic font to the client, so they don't have to worry about it. The only issue left, is that now when paint_glyph() paints an outline glyph (not color glyph), it would be double-slanted. I'm leaning towards removing painting of outline glyphs from the paint API and change the paint API to return a boolean.
Behdad Esfahbod 01e9c77e 2025-04-22T21:57:02 [COLR] Fix clip-box Was slanting it. Was wrong with new code.
Behdad Esfahbod a69713b5 2025-04-22T21:01:04 [color] Move slanting to font layer COLRv1 is still being double-slanted. Investigating.
Behdad Esfahbod 66b357b9 2025-04-20T05:11:17 Merge branch 'main' into HVF
Behdad Esfahbod 05362548 2025-04-20T05:06:54 Merge pull request #5294 from harfbuzz/paint-bounds [COLRv1] `paint-bounds`
Behdad Esfahbod a9ed7515 2025-04-20T04:35:44 Merge branch 'main' into HVF
Behdad Esfahbod 27b2e16a 2025-04-20T04:34:40 [atomic] Make cmpexch() non-const Was a mistake. Make the affected members mutable instead.
Behdad Esfahbod 78822b63 2025-04-20T04:23:35 Revert "[COLRv1] Move paint boundedness check to font layer" This reverts commit c9a26fbf47f01fdd55df1a0ccc81111cb07bf108.
Behdad Esfahbod c9a26fbf 2025-04-20T04:22:32 [COLRv1] Move paint boundedness check to font layer This way it will apply to fontations and future implementations as well. But this slows down things apparently, specially if the font does use clipboxes. So I'm going to revert.
Behdad Esfahbod 8aa88aa4 2025-04-20T04:08:41 [COLRv1:ot/ft] Use paint-bounded instead of paint-extents Faster. Note that this also means that if there is no clip-box, we don't compute the bounds and emit an initial clip anymore. That was totally unnecessary and against the COLRv1 rendering algorithm. This makes painting of COLRv1 fonts without clipboxes *much* faster, as previously we were computing bounds using all subglyph outlines. Not anymore. Before: BM_Font/paint_glyph/Nupuram-Color.colrv1.ttf/ot 1.78 ms After: BM_Font/paint_glyph/Nupuram-Color.colrv1.ttf/ot 0.155 ms
Behdad Esfahbod aef3df50 2025-04-20T00:37:24 Merge branch 'main' into HVF
jfkthame 2602f729 2025-04-17T15:02:59 Avoid unannotated-fallthrough warning in COLR.hh
Behdad Esfahbod fd9a2f23 2025-04-07T17:44:45 [GPOS] Regain speed
Behdad Esfahbod 178364ce 2025-04-03T22:51:11 Merge branch 'main' into HVF
Behdad Esfahbod 9cae040b 2025-04-03T22:18:14 [ItemVariationStore] Make cache atomic floats Doesn't work with intrinsic atomic implementations. Disabled that. Going through the C++11 atomics path now. Will fix in next commit.
Behdad Esfahbod e3c2910f 2025-04-02T01:48:12 Merge branch 'main' into HVF
Behdad Esfahbod 7f5fafec 2025-04-01T21:35:28 [GDEF] Simplify cache declaration
Behdad Esfahbod 14ecea57 2025-03-27T15:44:49 Merge branch 'main' into HVF
Qunxin Liu 5ebe36e1 2025-03-27T13:09:18 [subset] bug fix for CaretValueFormat3 Don't return false in case of a Hinting Device table
Qunxin Liu 192d264a 2025-03-25T13:32:01 [subset] remove divisions when computing the cost of binary search
Behdad Esfahbod b1258cdd 2025-03-16T16:22:52 Merge branch 'main' into HVF
Behdad Esfahbod 14e5a046 2025-03-16T00:36:11 [font] Move synthetic glyph extents into font layer So it applies to all font-funcs.
Behdad Esfahbod 000a0ad7 2025-03-15T14:37:44 [paint] Add push_font_transform() / push_inverse_font_transform() Fixes https://github.com/harfbuzz/harfbuzz/issues/5146
Behdad Esfahbod 5402fe24 2025-03-12T23:06:11 Merge branch 'main' into HVF
Behdad Esfahbod 4807a021 2025-03-12T18:27:27 [atomic] Kill hb_atomic_ptr_t<T> Use hb_atomic_t<T *> instead.
Behdad Esfahbod a0419a89 2025-03-09T05:36:00 Merge branch 'main' into HVF
Behdad Esfahbod 4e5358a2 2025-03-07T15:18:28 [COLRv1] Fix comments Fixes https://github.com/harfbuzz/harfbuzz/issues/5116
Behdad Esfahbod 575e70b0 2025-03-07T12:51:44 [COLR] Use palette 0 if palette index out of range Fixes https://github.com/harfbuzz/harfbuzz/issues/5112
Behdad Esfahbod 6506bd7e 2025-03-06T20:00:54 Merge pull request #4498 from harfbuzz/PaintColrLayers [COLRv1] Optimize PaintColrLayers instead of PaintComposite
Behdad Esfahbod 6afcd7f6 2025-03-03T16:33:21 Merge branch 'main' into HVF
Behdad Esfahbod 50fe45f4 2025-03-03T16:31:41 [COLR] Fix memory leak
Behdad Esfahbod 9c6b6998 2025-03-03T11:46:22 [VARC] Fix sign of returned extents
Behdad Esfahbod 2591fb98 2025-03-03T11:47:54 Merge branch 'main' into HVF
Behdad Esfahbod 302302d9 2025-03-03T11:46:22 [VARC] Fix sign of returned extents
Behdad Esfahbod 004d0799 2025-03-03T02:21:05 Merge branch 'main' into HVF
Behdad Esfahbod e9134c8c 2025-03-03T02:04:34 [COLR] Reduce malloc pressure By caching paint-extents.