Skip to content

feat(libSceFreeType): expose raw SFNT name records - #9054

Merged
oneandonlydean merged 2 commits into
boykopovar:mainfrom
santhoshkumar-dev:codex/freetype-sfnt-names
Oct 22, 2026
Merged

oneandonlydean merged 2 commits into
boykopovar:mainfrom
santhoshkumar-dev:codex/freetype-sfnt-names

Conversation

@santhoshkumar-dev

@santhoshkumar-dev santhoshkumar-dev commented Oct 21, 2026 •

Copy link
Copy Markdown
Contributor

What

Implement FT_Get_Sfnt_Name_Count and FT_Get_Sfnt_Name through the existing guest face bridge. The output uses an explicit 24-byte guest record, preserves raw bytes and byte lengths, and borrows the native face's cached strings. Failed queries leave the caller's record untouched.

This follow-up builds on #9045's Names.cpp; merge #9045 first. Its dependency on #8286 also orders the shared debt edits. The two new exports are distinct from #9045's glyph/PostScript-name APIs and from #8558's kerning work. Open, closed and merged PR searches found no existing implementation of these two functions.

Names and NIDs come from the PS5 3.20 inventory. Behavior and ownership follow bundled FreeType 2.13.3 and its public record definition. Console signatures, layout and error compatibility remain unverified and are recorded in technical debt. FT_Get_Sfnt_LangTag is absent from that inventory and is not added here.

Tested

Windows 11 x64, WinLibs MinGW-w64 GCC 15.2.0 r7, Release, BUILD_TESTING=ON, based on upstream 0a5080477f plus #9045.

  • cmake --build build --target libs guest_freetype_sfnt_names_tests guest_freetype_names_tests guest_freetype_tests guest_freetype_charmap_tests -j6 passed, rebuilding all system libraries after the latest main changes.
  • ctest --test-dir build --output-on-failure -R '^guest_freetype(_charmap|_names|_sfnt_names)?$': 4 passed (0.08 / 0.07 / 0.07 / 0.06 s).
  • Generated TrueType fixtures check platform/encoding/language/name IDs, raw ASCII and UTF-16 bytes, embedded NULs, byte lengths, guarded output bounds, stable borrowed pointers across other queries and another face's destruction, absent name tables, null arguments and high unsigned indices. Failed queries preserve the complete output record.
  • Standalone runtime probe passed. Compiled mutations that overwrite output on an error or narrow the query index to 16 bits fail the regression.
  • Strict -Wall -Wextra -Werror source checks and repository conventions passed. The patched PRX contains B4-zPp0EATE and fbRv4M+XzL8.

Historical build limitation (2026-10-21): the default Windows build on the stated base failed at ImageArrayWindowPastLayerLimit.cpp because static alignment 65536 exceeded MinGW COFF's maximum 8192. Merged #8310 fixes that declaration; this is no longer a current-main blocker. The library/test results above retain their stated PR head and base.

No title, PS5 hardware or Linux runtime was tested.

Compatibility validation (2026-10-21): temporarily combined this PR with #8247, #8286, #8289, #9045, #9064 and the charmap-metadata follow-up on main 3e91c8edf5. All system libraries built and all seven FreeType tests passed. The C++ changes merged cleanly; temporary CMake/debt resolutions were used only for this local compatibility check and are not published.

Rebase audit (2026-10-21): rebased onto main d099bc6cd8, including the now-merged #8247 and #8289. All system libraries built. A temporary combination of the seven remaining FreeType branches passed all nine tests (0.07 / 0.07 / 0.06 / 0.06 / 0.16 / 0.04 / 0.06 / 0.06 / 0.05 s); all seven branches passed conventions. Temporary integration commits were not published.

Merge coordination update (2026-10-23): new #9848 shares the test-registration insertion, with distinct source and tests. Proposed order is #8286 -> #9045 -> #9054 before #9848, retaining all registrations and its Apple import tests. Author confirmation is pending; this is not an implementation dependency.

Agreed documentation order (2026-10-23): #9924 -> #9933 -> #9045 -> #9054, preserving all PostScript metadata and naming entries. The existing #8286 prerequisite is retained. These implementations build independently; this order resolves the shared debt insertion.

Checklist

@github-actions

github-actions Bot commented Oct 21, 2026 •

Copy link
Copy Markdown

Progress report (2f161d4 → 091dc1d)

📈 System libraries: 42.44% (+0.02%, +5 implemented functions)

✅ 5 implemented
Library Name
libSceFreeType FT_Get_Glyph_Name_nid_postfix
libSceFreeType FT_Get_Name_Index_nid_postfix
libSceFreeType FT_Get_Postscript_Name_nid_postfix
libSceFreeType FT_Get_Sfnt_Name_Count_nid_postfix
libSceFreeType FT_Get_Sfnt_Name_nid_postfix

@Ondra97

Ondra97 commented Oct 22, 2026

Copy link
Copy Markdown
Contributor

I opened #9560, which adds FT_Outline_Decompose. I declared #9054 for merge order because the patches add different source files at the same CMake source-list insertion. Retain both Names.cpp and OutlineDecompose.cpp. The implementations are independent.

@santhoshkumar-dev

Copy link
Copy Markdown
Contributor Author

Confirmed the merge order with #9560. This PR retains Names.cpp; the independent outline-decomposition implementation can retain OutlineDecompose.cpp alongside it when the shared source-list insertion is resolved. No export is being replaced or duplicated.

@github-actions

Copy link
Copy Markdown

Other open pull requests touch the same code. Merging one will break the other, or both implement the same thing. If this one builds on them, list them in Depends on.

Pull request Conflicting files (lines on main) Same exports Same new files
PR 9848 core/libs/prx/libSceFreeType/CMakeLists.txt L22-23

@oneandonlydean oneandonlydean self-assigned this Oct 22, 2026
@oneandonlydean
oneandonlydean merged commit fcd4558 into boykopovar:main Oct 22, 2026
20 checks passed
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Projects

None yet

Development

Successfully merging this pull request may close these issues.

3 participants