From 8400150f8053e64f8e43eb2f886785b10b115484 Mon Sep 17 00:00:00 2001 From: boykopovar Date: Thu, 10 Sep 2026 09:09:08 +0300 Subject: [PATCH] feat(libs): add new declarations to libSceAgc --- core/libs/prx/libSceAgc/Cb/Export.cpp | 14 +++++ core/libs/prx/libSceAgc/DcbDraw/Export.cpp | 38 +++++++++---- core/libs/prx/libSceAgc/DcbState/Export.cpp | 56 +++++++++++++++++-- core/libs/prx/libSceAgc/Misc/Export.cpp | 33 +++++++++++ core/libs/prx/libSceAgc/Patch/Export.cpp | 7 +++ core/libs/prx/libSceAgc/Shader/Export.cpp | 1 + core/libs/prx/libSceAgcVsh/Export.cpp | 8 --- .../prx/libc/include/general/ExportMacros.hpp | 9 +-- 8 files changed, 137 insertions(+), 29 deletions(-) diff --git a/core/libs/prx/libSceAgc/Cb/Export.cpp b/core/libs/prx/libSceAgc/Cb/Export.cpp index 93229e015..187954525 100644 --- a/core/libs/prx/libSceAgc/Cb/Export.cpp +++ b/core/libs/prx/libSceAgc/Cb/Export.cpp @@ -22,6 +22,20 @@ uint32_t* APS5_VABI sceAgcCbBranch(CommandBuffer* buf, uint8_t mode, uint8_t com return nullptr; } +uint32_t* APS5_VABI sceAgcCbSetUcRegisterRangeDirect(CommandBuffer* buf, uint32_t offset, const uint32_t* values, uint32_t num) { + (void)buf; + (void)offset; + (void)values; + (void)num; + NotImplemented_nid_no_patch(__func__); + return nullptr; +} + +uint32_t APS5_VABI sceAgcCbBranchGetSize() { + NotImplemented_nid_no_patch(__func__); + return 0; +} + uint32_t* APS5_VABI sceAgcCbDispatch(CommandBuffer* buf, uint32_t thread_group_x, uint32_t thread_group_y, uint32_t thread_group_z, uint32_t modifier) { (void)buf; (void)thread_group_x; diff --git a/core/libs/prx/libSceAgc/DcbDraw/Export.cpp b/core/libs/prx/libSceAgc/DcbDraw/Export.cpp index 6e98b9f4b..839bece38 100644 --- a/core/libs/prx/libSceAgc/DcbDraw/Export.cpp +++ b/core/libs/prx/libSceAgc/DcbDraw/Export.cpp @@ -14,6 +14,33 @@ uint32_t* APS5_VABI sceAgcDcbDrawIndex(CommandBuffer* buf, uint32_t index_count, return nullptr; } +uint32_t* APS5_VABI sceAgcDcbDrawIndirectMulti(CommandBuffer* buf, uint32_t data_offset_in_bytes, uint32_t count_indirect, uint32_t max_count_or_count, const volatile void* count_addr, uint32_t stride_in_bytes, uint64_t modifier) { + (void)buf; + (void)data_offset_in_bytes; + (void)count_indirect; + (void)max_count_or_count; + (void)count_addr; + (void)stride_in_bytes; + (void)modifier; + NotImplemented_nid_no_patch(__func__); + return nullptr; +} + +uint32_t APS5_VABI sceAgcDcbDrawIndirectMultiGetSize() { + NotImplemented_nid_no_patch(__func__); + return 0; +} + +uint32_t APS5_VABI sceAgcDcbDrawIndexIndirectMultiGetSize() { + NotImplemented_nid_no_patch(__func__); + return 0; +} + +uint32_t APS5_VABI sceAgcDcbDrawIndexIndirectGetSize() { + NotImplemented_nid_no_patch(__func__); + return 0; +} + uint32_t APS5_VABI sceAgcDcbDrawIndexGetSize(void) { NotImplemented_nid_no_patch(__func__); return 0; @@ -149,16 +176,5 @@ uint32_t* APS5_VABI sceAgcDcbGetLodStats(CommandBuffer* buf, uint8_t cache_polic NotImplemented_nid_no_patch(__func__); return nullptr; } -std::uint32_t* APS5_VABI sceAgcDcbDrawIndirectMulti(CommandBuffer* buf, std::uint32_t dataOffsetInBytes, std::uint32_t countIndirect, std::uint32_t maxCountOrCount, const volatile void* countAddr, std::uint32_t strideInBytes, std::uint64_t modifier) { - (void)buf; - (void)dataOffsetInBytes; - (void)countIndirect; - (void)maxCountOrCount; - (void)countAddr; - (void)strideInBytes; - (void)modifier; - NotImplemented_nid_no_patch(__func__); - return 0; -} } diff --git a/core/libs/prx/libSceAgc/DcbState/Export.cpp b/core/libs/prx/libSceAgc/DcbState/Export.cpp index 369faeb59..42c6d55b5 100644 --- a/core/libs/prx/libSceAgc/DcbState/Export.cpp +++ b/core/libs/prx/libSceAgc/DcbState/Export.cpp @@ -12,6 +12,38 @@ uint32_t* APS5_VABI sceAgcDcbSetCxRegisterDirect(CommandBuffer* buf, ShaderRegis return nullptr; } +uint32_t APS5_VABI sceAgcDcbSetBaseDispatchIndirectArgsGetSize() { + NotImplemented_nid_no_patch(__func__); + return 0; +} + +uint32_t APS5_VABI sceAgcDcbQueueEndOfShaderActionGetSize() { + NotImplemented_nid_no_patch(__func__); + return 0; +} + +uint32_t APS5_VABI sceAgcDcbGetLodStatsGetSize() { + NotImplemented_nid_no_patch(__func__); + return 0; +} + +uint32_t APS5_VABI sceAgcDcbSetShRegistersIndirectGetSize(uint32_t num_regs) { + (void)num_regs; + NotImplemented_nid_no_patch(__func__); + return 0; +} + +uint32_t APS5_VABI sceAgcDcbSetBaseDrawIndirectArgsGetSize() { + NotImplemented_nid_no_patch(__func__); + return 0; +} + +uint64_t APS5_VABI sceAgcDcbContextStateOpGetSize(uint32_t operation) { + (void)operation; + NotImplemented_nid_no_patch(__func__); + return 0; +} + uint32_t APS5_VABI sceAgcDcbSetCxRegisterDirectGetSize(void) { NotImplemented_nid_no_patch(__func__); return 0; @@ -62,12 +94,6 @@ uint32_t* APS5_VABI sceAgcDcbContextStateOp(CommandBuffer* buf, uint32_t operati return nullptr; } -uint64_t APS5_VABI sceAgcDcbContextStateOpGetSize(uint32_t operation) { - (void)operation; - NotImplemented_nid_no_patch(__func__); - return 0; -} - uint32_t* APS5_VABI sceAgcDcbSetFlip(CommandBuffer* buf, uint32_t video_out_handle, int32_t display_buffer_index, uint32_t flip_mode, int64_t flip_arg) { (void)buf; (void)video_out_handle; @@ -78,6 +104,24 @@ uint32_t* APS5_VABI sceAgcDcbSetFlip(CommandBuffer* buf, uint32_t video_out_hand return nullptr; } +APS5_EXPORT("23LRUSvYu1M", sceAgcInit); +int APS5_VABI sceAgcInit(uint32_t* state, uint32_t ver) { + (void)state; + (void)ver; + NotImplemented_nid_no_patch(__func__); + return 0; +} + + +APS5_EXPORT("qj7QZpgr9Uw", sceAgcDcbContextStateAnotherOp); +uint32_t* APS5_VABI sceAgcDcbContextStateAnotherOp(CommandBuffer* buf, uint32_t operation) { + (void)buf; + (void)operation; + NotImplemented_nid_no_patch(__func__); + return nullptr; +} + + uint32_t* APS5_VABI sceAgcDcbSetPredication(CommandBuffer* buf, uint8_t condition, uint8_t op, uint8_t wait_op, const volatile void* address, uint32_t count_in_dwords) { (void)buf; (void)condition; diff --git a/core/libs/prx/libSceAgc/Misc/Export.cpp b/core/libs/prx/libSceAgc/Misc/Export.cpp index 6d8994832..06ac20cc8 100644 --- a/core/libs/prx/libSceAgc/Misc/Export.cpp +++ b/core/libs/prx/libSceAgc/Misc/Export.cpp @@ -3,6 +3,11 @@ #include "SceTypes.hpp" #include "prx/libc/include/General.hpp" +struct SizeAlign { + uint64_t m_size; + size_t m_align; +}; + extern "C" { uint32_t APS5_VABI sceAgcGetPacketSize(uint32_t* packet) { @@ -17,6 +22,34 @@ void* APS5_VABI sceAgcGetRegisterDefaults2(uint32_t ver) { return nullptr; } +APS5_EXPORT("fd5Bp5tGTgo", sceAgcUnknownFuseShaderHalves); +int APS5_VABI sceAgcUnknownFuseShaderHalves(Shader* fused_result, const Shader* front, const Shader* back, void* scratch_mem) { + (void)fused_result; + (void)front; + (void)back; + (void)scratch_mem; + NotImplemented_nid_no_patch(__func__); + return 0; +} + +APS5_EXPORT("dolOmWH+huQ", sceAgcUnknownGetFusedShaderSize); +int APS5_VABI sceAgcUnknownGetFusedShaderSize(SizeAlign* dst, const Shader* front, const Shader* back) { + (void)dst; + (void)front; + (void)back; + NotImplemented_nid_no_patch(__func__); + return 0; +} + +APS5_EXPORT("V++UgBtQhn0", sceAgcGetDataPacketPayloadAnotherAddress); +int APS5_VABI sceAgcGetDataPacketPayloadAnotherAddress(uint32_t** addr, uint32_t* cmd, int type) { + (void)addr; + (void)cmd; + (void)type; + NotImplemented_nid_no_patch(__func__); + return 0; +} + void* APS5_VABI sceAgcGetRegisterDefaults2Internal(uint32_t ver) { (void)ver; NotImplemented_nid_no_patch(__func__); diff --git a/core/libs/prx/libSceAgc/Patch/Export.cpp b/core/libs/prx/libSceAgc/Patch/Export.cpp index 77bfa3055..77d3e923f 100644 --- a/core/libs/prx/libSceAgc/Patch/Export.cpp +++ b/core/libs/prx/libSceAgc/Patch/Export.cpp @@ -34,6 +34,13 @@ int APS5_VABI sceAgcQueueEndOfPipeActionPatchAddress(uint32_t* cmd, const volati return 0; } +uint32_t* APS5_VABI sceAgcSetNop(CommandBuffer* buf, uint32_t size_dw) { + (void)buf; + (void)size_dw; + NotImplemented_nid_no_patch(__func__); + return nullptr; +} + int APS5_VABI sceAgcQueueEndOfPipeActionPatchData(uint32_t* cmd, uint32_t context_id, uint32_t data_sel, uint64_t data) { (void)cmd; (void)context_id; diff --git a/core/libs/prx/libSceAgc/Shader/Export.cpp b/core/libs/prx/libSceAgc/Shader/Export.cpp index eecd91142..1c2959a59 100644 --- a/core/libs/prx/libSceAgc/Shader/Export.cpp +++ b/core/libs/prx/libSceAgc/Shader/Export.cpp @@ -117,6 +117,7 @@ int APS5_VABI sceAgcUpdatePrimState(ShaderRegister* cx_regs, ShaderRegister* uc_ return 0; } +APS5_EXPORT("HV4j+E0MBHE", sceAgcCreateInterpolantMapping); int APS5_VABI sceAgcCreateInterpolantMapping(ShaderRegister* regs, const Shader* gs, const Shader* ps) { constexpr auto fn = __func__; if (regs == nullptr) { diff --git a/core/libs/prx/libSceAgcVsh/Export.cpp b/core/libs/prx/libSceAgcVsh/Export.cpp index adec6147a..4d0a5e24c 100644 --- a/core/libs/prx/libSceAgcVsh/Export.cpp +++ b/core/libs/prx/libSceAgcVsh/Export.cpp @@ -242,14 +242,6 @@ int APS5_VABI sceAgcCondExecPatchSetEnd(uint32_t* cmd, const volatile uint32_t* return 0; } -int APS5_VABI sceAgcCreateInterpolantMapping(ShaderRegister* regs, const Shader* gs, const Shader* ps) { - (void)regs; - (void)gs; - (void)ps; - NotImplemented_nid_no_patch(__func__); - return 0; -} - int APS5_VABI sceAgcCreatePrimState(ShaderRegister* cx_regs, ShaderRegister* uc_regs, const Shader* hs, const Shader* gs, uint32_t prim_type) { (void)cx_regs; (void)uc_regs; diff --git a/core/libs/prx/libc/include/general/ExportMacros.hpp b/core/libs/prx/libc/include/general/ExportMacros.hpp index 911255953..933813634 100644 --- a/core/libs/prx/libc/include/general/ExportMacros.hpp +++ b/core/libs/prx/libc/include/general/ExportMacros.hpp @@ -2,13 +2,14 @@ #define CORE_LIBS_PRX_LIBC_INCLUDE_GENERAL_EXPORTMACROS_HPP #if defined(__GNUC__) || defined(__clang__) - #define APS_EXPORT(exportName, funcName) \ - __asm__(".globl " exportName "\n" exportName " = " #funcName "_nid_no_patch_cut") + #define APS5_EXPORT(exportName, funcName) \ + __asm__(".globl \"" exportName "\"\n\t" \ + ".set \"" exportName "\", " #funcName "_nid_no_patch_cut") #elif defined(_MSC_VER) - #define APS_EXPORT(exportName, funcName) \ + #define APS5_EXPORT(exportName, funcName) \ __pragma(comment(linker, "/export:" exportName "=" #funcName "_nid_no_patch_cut")) #else - #define APS_EXPORT(exportName, funcName) + #define APS5_EXPORT(exportName, funcName) #endif #endif