diff --git a/core/libs/prx/libSceFont-module/libSceFont-module.hpp b/core/libs/prx/libSceFont-module/libSceFont-module.hpp index 6f70f09bee..9bcb0ad7a8 100644 --- a/core/libs/prx/libSceFont-module/libSceFont-module.hpp +++ b/core/libs/prx/libSceFont-module/libSceFont-module.hpp @@ -1 +1,3 @@ #pragma once + +#include "prx/libSceFont/libSceFont.hpp" diff --git a/core/libs/prx/libSceFont.native/libSceFont.native.hpp b/core/libs/prx/libSceFont.native/libSceFont.native.hpp index 6f70f09bee..9bcb0ad7a8 100644 --- a/core/libs/prx/libSceFont.native/libSceFont.native.hpp +++ b/core/libs/prx/libSceFont.native/libSceFont.native.hpp @@ -1 +1,3 @@ #pragma once + +#include "prx/libSceFont/libSceFont.hpp" diff --git a/core/libs/prx/libSceFont/include/Api.hpp b/core/libs/prx/libSceFont/include/Api.hpp index 2e7d3d5ca6..d730794fbb 100644 --- a/core/libs/prx/libSceFont/include/Api.hpp +++ b/core/libs/prx/libSceFont/include/Api.hpp @@ -333,4 +333,49 @@ const FontWritingLineStep* APS5_VABI sceFontWritingLineRefersRenderStep(void* wr int APS5_VABI sceFontWritingLineGetRenderMetrics(void* writingLine, FontWritingMetrics* writingMetrics); int APS5_VABI sceFontWritingLineGetOrderingSpace(void* writingLine, float* advanceSpace, float* headSpace, float* inlineSpace, float* tailSpace); +int APS5_VABI sceFontGraphicsCanvasStartDrawing(); +int APS5_VABI sceFontGraphicsGetDrawingFrameHandle(); +int APS5_VABI sceFontGraphicsGetIndexedVertexesGlyph(); +int APS5_VABI sceFontGraphicsProcessWaitAllSequences(); +int APS5_VABI sceFontGraphicsStructureVertexesGlyph(); +int APS5_VABI sceFontGraphicsTextureRefersSurface(); +int APS5_VABI sceFontGraphicsUndefineIndexedVertexesGlyph(); +int APS5_VABI sceFontGraphicsAppendGradientSegment(); +int APS5_VABI sceFontSupportSystemUpdation(); +int APS5_VABI sceFontGraphicsCanvasRenewal(); +int APS5_VABI sceFontGraphicsDesignStartDrawing(); +int APS5_VABI sceFontGraphicsGetVertexesGlyphMetrics(); +int APS5_VABI sceFontGraphicsUpdateSlantShift(); +int APS5_VABI sceFontGraphicsTextureMakeFillTexture(); +int APS5_VABI sceFontGraphicsTextureMakeFillTextureImage(); +int APS5_VABI sceFontGraphicsCanvasSetSurfaceFill(); +int APS5_VABI sceFontGraphicsDrawVertexesGlyph(); +int APS5_VABI sceFontGraphicsDrawRegionShape(); +int APS5_VABI sceFontGraphicsProcessWaitSequence(); +int APS5_VABI sceFontGraphicsTextureGetSurface(); +int APS5_VABI sceFontGraphicsUndefineIndexedVertexesGlyphs(); +int APS5_VABI sceFontGetCharVariationGlyphCode(); +int APS5_VABI sceFontGraphicsSetupSlantShift(); +int APS5_VABI sceFontGraphicsAdjustFillRadialGradient(); +int APS5_VABI sceFontGraphicsDrawupFillFlatColor(); +int APS5_VABI sceFontGraphicsDrawupFillLinearGradient(); +int APS5_VABI sceFontGraphicsSetVertexesGlyphScale(); +int APS5_VABI sceFontGlyphGetOutlineVertexes(); +int APS5_VABI sceFontGraphicsDrawupFillRadialGradient(); +int APS5_VABI sceFontGraphicsAdjustGradientSpread(); +int APS5_VABI sceFontGraphicsCanvasSetSurfaceFillWithLayout(); +int APS5_VABI sceFontGraphicsCanvasGetPreprocess(); +int APS5_VABI sceFontGraphicsReportError(); +int APS5_VABI sceFontGraphicsDrawRectangleShape(); +int APS5_VABI sceFontGraphicsProcessSetSyncPolicy(); +int APS5_VABI sceFontGraphicsCanvasSetSurfaceFillWithMapping(); +int APS5_VABI sceFontGraphicsUndefineIndexedVertexesGlyphAll(); +int APS5_VABI sceFontGraphicsGetVertexesGlyphScale(); +int APS5_VABI sceFontGraphicsCanvasClearPreprocess(); +int APS5_VABI sceFontGraphicsFindIndexedVertexesGlyph(); +int APS5_VABI sceFontGraphicsDefineIndexedVertexesGlyph(); +int APS5_VABI sceFontGraphicsProcessRenderSequence(); +int APS5_VABI sceFontOutlineVertexesInterfaceInit(); +int APS5_VABI sceFontGraphicsSurfaceSetTargetView(); + } diff --git a/core/libs/prx/libSceFont/src/Unimplemented.cpp b/core/libs/prx/libSceFont/src/Unimplemented.cpp index fa5b689e1e..8616365996 100644 --- a/core/libs/prx/libSceFont/src/Unimplemented.cpp +++ b/core/libs/prx/libSceFont/src/Unimplemented.cpp @@ -368,6 +368,183 @@ int APS5_VABI sceFontGraphicsDrawupFillTexturePatternObject(FontGraphicsFrame* f return 0; } +int APS5_VABI sceFontGraphicsCanvasStartDrawing() { + NotImplemented_nid_no_patch(__func__); +} + +int APS5_VABI sceFontGraphicsGetDrawingFrameHandle() { + NotImplemented_nid_no_patch(__func__); +} + +int APS5_VABI sceFontGraphicsGetIndexedVertexesGlyph() { + NotImplemented_nid_no_patch(__func__); +} + +int APS5_VABI sceFontGraphicsProcessWaitAllSequences() { + NotImplemented_nid_no_patch(__func__); +} + +int APS5_VABI sceFontGraphicsStructureVertexesGlyph() { + NotImplemented_nid_no_patch(__func__); +} + +int APS5_VABI sceFontGraphicsTextureRefersSurface() { + NotImplemented_nid_no_patch(__func__); +} + +int APS5_VABI sceFontGraphicsUndefineIndexedVertexesGlyph() { + NotImplemented_nid_no_patch(__func__); +} + +int APS5_VABI sceFontGraphicsAppendGradientSegment() { + NotImplemented_nid_no_patch(__func__); +} + +int APS5_VABI sceFontSupportSystemUpdation() { + NotImplemented_nid_no_patch(__func__); +} + +int APS5_VABI sceFontGraphicsCanvasRenewal() { + NotImplemented_nid_no_patch(__func__); +} + +int APS5_VABI sceFontGraphicsDesignStartDrawing() { + NotImplemented_nid_no_patch(__func__); +} + +int APS5_VABI sceFontGraphicsGetVertexesGlyphMetrics() { + NotImplemented_nid_no_patch(__func__); +} + +int APS5_VABI sceFontGraphicsUpdateSlantShift() { + NotImplemented_nid_no_patch(__func__); +} + +int APS5_VABI sceFontGraphicsTextureMakeFillTexture() { + NotImplemented_nid_no_patch(__func__); +} + +int APS5_VABI sceFontGraphicsTextureMakeFillTextureImage() { + NotImplemented_nid_no_patch(__func__); +} + +int APS5_VABI sceFontGraphicsCanvasSetSurfaceFill() { + NotImplemented_nid_no_patch(__func__); +} + +int APS5_VABI sceFontGraphicsDrawVertexesGlyph() { + NotImplemented_nid_no_patch(__func__); +} + +int APS5_VABI sceFontGraphicsDrawRegionShape() { + NotImplemented_nid_no_patch(__func__); +} + +int APS5_VABI sceFontGraphicsProcessWaitSequence() { + NotImplemented_nid_no_patch(__func__); +} + +int APS5_VABI sceFontGraphicsTextureGetSurface() { + NotImplemented_nid_no_patch(__func__); +} + +int APS5_VABI sceFontGraphicsUndefineIndexedVertexesGlyphs() { + NotImplemented_nid_no_patch(__func__); +} + +int APS5_VABI sceFontGetCharVariationGlyphCode() { + NotImplemented_nid_no_patch(__func__); +} + +int APS5_VABI sceFontGraphicsSetupSlantShift() { + NotImplemented_nid_no_patch(__func__); +} + +int APS5_VABI sceFontGraphicsAdjustFillRadialGradient() { + NotImplemented_nid_no_patch(__func__); +} + +int APS5_VABI sceFontGraphicsDrawupFillFlatColor() { + NotImplemented_nid_no_patch(__func__); +} + +int APS5_VABI sceFontGraphicsDrawupFillLinearGradient() { + NotImplemented_nid_no_patch(__func__); +} + +int APS5_VABI sceFontGraphicsSetVertexesGlyphScale() { + NotImplemented_nid_no_patch(__func__); +} + +int APS5_VABI sceFontGlyphGetOutlineVertexes() { + NotImplemented_nid_no_patch(__func__); +} + +int APS5_VABI sceFontGraphicsDrawupFillRadialGradient() { + NotImplemented_nid_no_patch(__func__); +} + +int APS5_VABI sceFontGraphicsAdjustGradientSpread() { + NotImplemented_nid_no_patch(__func__); +} + +int APS5_VABI sceFontGraphicsCanvasSetSurfaceFillWithLayout() { + NotImplemented_nid_no_patch(__func__); +} + +int APS5_VABI sceFontGraphicsCanvasGetPreprocess() { + NotImplemented_nid_no_patch(__func__); +} + +int APS5_VABI sceFontGraphicsReportError() { + NotImplemented_nid_no_patch(__func__); +} + +int APS5_VABI sceFontGraphicsDrawRectangleShape() { + NotImplemented_nid_no_patch(__func__); +} + +int APS5_VABI sceFontGraphicsProcessSetSyncPolicy() { + NotImplemented_nid_no_patch(__func__); +} + +int APS5_VABI sceFontGraphicsCanvasSetSurfaceFillWithMapping() { + NotImplemented_nid_no_patch(__func__); +} + +int APS5_VABI sceFontGraphicsUndefineIndexedVertexesGlyphAll() { + NotImplemented_nid_no_patch(__func__); +} + +int APS5_VABI sceFontGraphicsGetVertexesGlyphScale() { + NotImplemented_nid_no_patch(__func__); +} + +int APS5_VABI sceFontGraphicsCanvasClearPreprocess() { + NotImplemented_nid_no_patch(__func__); +} + +int APS5_VABI sceFontGraphicsFindIndexedVertexesGlyph() { + NotImplemented_nid_no_patch(__func__); +} + +int APS5_VABI sceFontGraphicsDefineIndexedVertexesGlyph() { + NotImplemented_nid_no_patch(__func__); +} + +int APS5_VABI sceFontGraphicsProcessRenderSequence() { + NotImplemented_nid_no_patch(__func__); +} + +int APS5_VABI sceFontOutlineVertexesInterfaceInit() { + NotImplemented_nid_no_patch(__func__); +} + +int APS5_VABI sceFontGraphicsSurfaceSetTargetView() { + NotImplemented_nid_no_patch(__func__); +} + + } #pragma GCC visibility pop diff --git a/docs/dev/debt/libSceFont.md b/docs/dev/debt/libSceFont.md index a5b224d4f9..256cfb50d3 100644 --- a/docs/dev/debt/libSceFont.md +++ b/docs/dev/debt/libSceFont.md @@ -5,6 +5,18 @@ - [sceFontRenderCharGlyphImage, sceFontRenderCharGlyphImageHorizontal, sceFontRenderCharGlyphImageVertical](../../../core/libs/prx/libSceFont/src/Layout.cpp) (libSceFont) accept a surface whose width or height is 0, with any row stride, and return the glyph metrics and an empty update rectangle without writing to the surface. A negative width, height or stride, a zero stride on a surface with pixels, a null buffer and a pixel size other than 1 or 4 bytes still return `SCE_FONT_ERROR_NO_SUPPORT_SURFACE`; those cases and the exact console result for a zero-extent surface are not measured. The extent-0 behaviour is inferred from the Tekken Dark Resurrection PSP emulator which, to measure a string, initialises the surface with width 0 and height 31 and an unbound stride, renders each character and sums the returned advances. +The 44 additional exports below have unknown signatures and behavior. Their parameterless `int` declarations are import-resolution placeholders, not confirmed ABI signatures; every call throws through `NotImplemented_nid_no_patch`. Only names and NIDs are established by the [13.60 export inventory](https://github.com/xdCloudy/PS5-13.60-Function-Stub-Library/blob/bfec40deb4c47a17d7603ee2bc79aa6862c0c56b/data/firmware-13.60/libscefont-63ba420c2e.jsonl). They have not been measured on a console. + +- [sceFontGraphicsCanvasStartDrawing, sceFontGraphicsGetDrawingFrameHandle, sceFontGraphicsGetIndexedVertexesGlyph, sceFontGraphicsProcessWaitAllSequences, sceFontGraphicsStructureVertexesGlyph, sceFontGraphicsTextureRefersSurface](../../../core/libs/prx/libSceFont/src/Unimplemented.cpp) - unknown signatures and behavior; every call throws. +- [sceFontGraphicsUndefineIndexedVertexesGlyph, sceFontGraphicsAppendGradientSegment, sceFontSupportSystemUpdation, sceFontGraphicsCanvasRenewal, sceFontGraphicsDesignStartDrawing, sceFontGraphicsGetVertexesGlyphMetrics](../../../core/libs/prx/libSceFont/src/Unimplemented.cpp) - unknown signatures and behavior; every call throws. +- [sceFontGraphicsUpdateSlantShift, sceFontGraphicsTextureMakeFillTexture, sceFontGraphicsTextureMakeFillTextureImage, sceFontGraphicsCanvasSetSurfaceFill, sceFontGraphicsDrawVertexesGlyph, sceFontGraphicsDrawRegionShape](../../../core/libs/prx/libSceFont/src/Unimplemented.cpp) - unknown signatures and behavior; every call throws. +- [sceFontGraphicsProcessWaitSequence, sceFontGraphicsTextureGetSurface, sceFontGraphicsUndefineIndexedVertexesGlyphs, sceFontGetCharVariationGlyphCode, sceFontGraphicsSetupSlantShift, sceFontGraphicsAdjustFillRadialGradient](../../../core/libs/prx/libSceFont/src/Unimplemented.cpp) - unknown signatures and behavior; every call throws. +- [sceFontGraphicsDrawupFillFlatColor, sceFontGraphicsDrawupFillLinearGradient, sceFontGraphicsSetVertexesGlyphScale, sceFontGlyphGetOutlineVertexes, sceFontGraphicsDrawupFillRadialGradient, sceFontGraphicsAdjustGradientSpread](../../../core/libs/prx/libSceFont/src/Unimplemented.cpp) - unknown signatures and behavior; every call throws. +- [sceFontGraphicsCanvasSetSurfaceFillWithLayout, sceFontGraphicsCanvasGetPreprocess, sceFontGraphicsReportError, sceFontGraphicsDrawRectangleShape, sceFontGraphicsProcessSetSyncPolicy, sceFontGraphicsCanvasSetSurfaceFillWithMapping](../../../core/libs/prx/libSceFont/src/Unimplemented.cpp) - unknown signatures and behavior; every call throws. +- [sceFontGraphicsUndefineIndexedVertexesGlyphAll, sceFontGraphicsGetVertexesGlyphScale, sceFontGraphicsCanvasClearPreprocess, sceFontGraphicsFindIndexedVertexesGlyph, sceFontGraphicsDefineIndexedVertexesGlyph, sceFontGraphicsProcessRenderSequence](../../../core/libs/prx/libSceFont/src/Unimplemented.cpp) - unknown signatures and behavior; every call throws. +- [sceFontOutlineVertexesInterfaceInit, sceFontGraphicsSurfaceSetTargetView](../../../core/libs/prx/libSceFont/src/Unimplemented.cpp) - unknown signatures and behavior; every call throws. + + - [sceFontCreateString](../../../core/libs/prx/libSceFont/src/Text.cpp): a string created from a default-form (0x10) text source gets the direction of its first strong character, 0x11 for right to left and 0x12 for left to right, and 0x12 when there is none; explicit 0x11 and 0x12 sources keep their form and [sceFontStringGetWritingForm](../../../core/libs/prx/libSceFont/src/Text.cpp) returns the stored form. LRM and RLM count as strong, embeddings and overrides do not, and text between an isolate initiator and its PDI is skipped. The rule follows a run of the firmware 13.42 library in a harness reported on the pull request: for non-empty text it was checked before a later glyph-stage failure and only empty text completed, so it is not full native right-to-left rendering. Which characters are strong is decided here by Unicode block ranges, not by the full bidi class tables. - [sceFontRenderCharGlyphImage, sceFontRenderCharGlyphImageHorizontal, sceFontRenderCharGlyphImageVertical](../../../core/libs/prx/libSceFont/src/Layout.cpp) (libSceFont) - four titles disassembled for this entry import them: PPSA01530 (CharGlyphImage, 2 call sites), PPSA13356 (CharGlyphImage, 4), PPSA15246 (Horizontal, 3) and PPSA14421 (Horizontal, 1); none imports Vertical. PPSA13356 initialises two surfaces of 64 x 64 and 1920 x 1080 at 1 byte per pixel (0xba084, 0xba5e8) and calls again with the character '_' (0x5f) at 0xba111 when the first call (0xba0e2) returns nonzero; PPSA15246 (0x229413) and PPSA14421 (0x1054d8) do not test the result. The extents of the other surfaces are run-time values, so whether any title passes 0 is not shown.