From 8869b3bd4d3810d3c05b6b90793cac43ba0e08f1 Mon Sep 17 00:00:00 2001 From: GrapheneCt Date: Tue, 25 May 2021 17:11:47 -0400 Subject: Add GXM Razor callback definitions --- include/user/gxm/init.h | 102 ++++++++++++++++++++++++++++++++++++++++++++++++ nids/360/SceGxm.yml | 4 +- 2 files changed, 104 insertions(+), 2 deletions(-) diff --git a/include/user/gxm/init.h b/include/user/gxm/init.h index 961b7c2..402e96f 100644 --- a/include/user/gxm/init.h +++ b/include/user/gxm/init.h @@ -10,6 +10,9 @@ #include_next +#include +#include + #ifdef __cplusplus extern "C" { #endif // def __cplusplus @@ -71,6 +74,105 @@ bool sceGxmIsInitializedInternal(void); */ void *sceGxmGetDeviceData(void); +// Use for sceGxmSetRazorCallbacks +#define SCE_GXM_RAZOR_TRACE_CALLBACK_VERSION 0x00010005 +#define SCE_GXM_RAZOR_CAPTURE_CALLBACK_VERSION 0x00010005 + +// Flags are written to (kuIoGpuTraceBuffer + 0x20) +#define SCE_GXM_STATE_FLAG_BEGIN_SCENE 0x10000000 +#define SCE_GXM_STATE_FLAG_END_SCENE 0x11000000 +#define SCE_GXM_STATE_FLAG_MID_SCENE_FLUSH 0x12000000 +#define SCE_GXM_STATE_FLAG_FINISH_BEGIN 0x13000000 +#define SCE_GXM_STATE_FLAG_FINISH_END 0x14000000 +#define SCE_GXM_STATE_FLAG_DISPLAY_QUEUE_OP_WAIT_BEGIN 0x15000000 +#define SCE_GXM_STATE_FLAG_DISPLAY_QUEUE_OP_WAIT_END 0x16000000 +#define SCE_GXM_STATE_FLAG_DISPLAY_QUEUE_FINISH_OP_WAIT_BEGIN 0x17000000 +#define SCE_GXM_STATE_FLAG_DISPLAY_QUEUE_FINISH_OP_WAIT_END 0x17000000 +#define SCE_GXM_STATE_FLAG_TRANSFER_SUBMIT_BEGIN 0x19000000 +#define SCE_GXM_STATE_FLAG_TRANSFER_SUBMIT_END 0x1A000000 +#define SCE_GXM_STATE_FLAG_NOTIFICATION_WAIT_BEGIN 0x1B000000 +#define SCE_GXM_STATE_FLAG_NOTIFICATION_WAIT_END 0x1C000000 +#define SCE_GXM_STATE_FLAG_CONTEXT_KICK_BEGIN 0x1D000000 +#define SCE_GXM_STATE_FLAG_CONTEXT_KICK_END 0x1E000000 + +typedef void(*SceGxmVoid_CB)(void); + +typedef void(*SceGxmPadHeartbeat_CB)(const SceGxmColorSurface *displaySurface, SceGxmSyncObject *displaySyncObject); + +typedef void(*SceGxmBeginScene_CB)(uint32_t debugStateFlags); + +typedef void(*SceGxmDisplayQueueAddEntry_CB)(uint32_t zero); + +typedef void(*SceGxmMemoryAllocMapOp_CB)(uint32_t memType, void* memBase, uint32_t offset, uint32_t size); + +typedef void(*SceGxmMemoryFreeUnmapOp_CB)(uint32_t memType, void* memBase); + +typedef void(*SceGxmContextKickStage1DebugMid_CB)(int contextUnk1, void* contextUnk2, int contextUnk3, void* contextUnk4); + +typedef void(*SceGxmContextKickStage1DebugBegin_CB)(SceGxmContext **context); + +typedef void(*SceGxmInitStage2_CB)(uint32_t paramBufferSize, uint32_t usseBufferThreshold); + +typedef void(*SceGxmInitStage1_1ForTrace_CB)(uint32_t parameterBufferThresholdSize); + +typedef void(*SceGxmInitStage1_2ForTrace_CB)(uint32_t parameterBufferSize, uint32_t mgmtAndPartialRenderReserveSize); + +typedef void(*SceGxmContextKickStage2OKForTrace_CB)( + SceBool vdmRingBufferHighWaterWarning, + SceBool vertexRingBufferHighWaterWarning, + SceBool fragmentRingBufferHighWaterWarning, + SceBool fragmentUsseRingBufferHighWaterWarning); + +typedef void(*SceGxmBeginSceneDoneForTrace_CB)( + uint32_t vdmRingBufferSize, + uint32_t vertexRingBufferSize, + uint32_t fragmentRingBufferSize, + uint32_t fragmentUsseRingBufferSize); + +typedef void(*SceGxmRingBufferFillForTrace_CB)( + uint32_t vdmRingBufferUsageSize, + uint32_t vertexRingBufferUsageSize, + uint32_t fragmentRingBufferUsageSize, + uint32_t fragmentUsseRingBufferUsageSize); + +typedef struct SceGxmCallbacksForCapture { //size is 0x48 + SceGxmVoid_CB initStage1; + SceGxmVoid_CB term; + SceGxmVoid_CB endSceneDone; + SceGxmBeginScene_CB beginSceneDone; + SceGxmDisplayQueueAddEntry_CB displayQueueAddEntryDone; + SceGxmVoid_CB contextKickStage2OK; + SceGxmVoid_CB userMarkerPushNoHUD; + SceGxmMemoryAllocMapOp_CB memoryAllocMapOp; //Including internal allocations + SceGxmMemoryFreeUnmapOp_CB memoryFreeUnmapOp; + SceGxmVoid_CB commandListOp; //Called when operations on command list are performed. Return 1 to use user debug markers, 0 otherwise + SceGxmVoid_CB contextKickStage1; //Called before SGXKickTA(). Return 1 to enable some debug calls, 0 otherwise + SceGxmVoid_CB contextKickStage1DebugDone; //Only used if contextKickStage1() returns 1 + SceGxmVoid_CB contextKickStage2Fail; + SceGxmContextKickStage1DebugMid_CB contextKickStage1DebugMid; //Only used if contextKickStage1() returns 1 + SceGxmContextKickStage1DebugBegin_CB contextKickStage1DebugBegin; //Only used if contextKickStage1() returns 1 + SceGxmVoid_CB addRazorGpuCaptureBuffer; //Must return 1 for this GXM call to succeed + SceGxmVoid_CB removeRazorGpuCaptureBuffer; //Must return 1 for this GXM call to succeed + SceGxmInitStage2_CB initStage2; +} SceGxmCallbacksForCapture; + +void sceGxmSetRazorCallbacksForCapture(int callbackVersion, SceGxmCallbacksForCapture *pCallbacks); + +typedef struct SceGxmCallbacksForTrace { //size is 0x48 + SceGxmInitStage1_1ForTrace_CB initStage1_1; + SceGxmVoid_CB term; + SceGxmInitStage1_2ForTrace_CB initStage1_2; + SceGxmDisplayQueueAddEntry_CB displayQueueAddEntryDone; + SceGxmPadHeartbeat_CB padHeartbeat; + SceGxmContextKickStage2OKForTrace_CB contextKickStage2OK; + SceGxmBeginSceneDoneForTrace_CB beginSceneDone; + SceGxmRingBufferFillForTrace_CB ringBufferFill; + SceGxmVoid_CB unused_cb; + SceVoid **kuIoGpuTraceBuffer; +} SceGxmCallbacksForTrace; + +void sceGxmSetRazorCallbacksForTrace(int callbackVersion, SceGxmCallbacksForTrace *pCallbacks); + #ifdef __cplusplus } #endif // def __cplusplus diff --git a/nids/360/SceGxm.yml b/nids/360/SceGxm.yml index de471b5..4a3422f 100644 --- a/nids/360/SceGxm.yml +++ b/nids/360/SceGxm.yml @@ -271,8 +271,8 @@ modules: sceGxmIsWithinScene: 0xB56413BB sceGxmMapFragmentUsseMemoryInternal: 0xB9391D22 sceGxmMapVertexUsseMemoryInternal: 0x5694B569 - sceGxmSetRazorCallbacks1: 0x56CDD9AD - sceGxmSetRazorCallbacks2: 0x3FC5E110 + sceGxmSetRazorCallbacksForCapture: 0x3FC5E110 + sceGxmSetRazorCallbacksForTrace: 0x56CDD9AD sceGxmUnmapFragmentUsseMemoryInternal: 0xC29B9B82 sceGxmUnmapVertexUsseMemoryInternal: 0xD7506735 SceGxmInternalForGles: -- cgit v1.2.3