diff options
Diffstat (limited to 'include')
-rw-r--r-- | include/user/gxm/context.h | 19 | ||||
-rw-r--r-- | include/user/gxm/init.h | 12 | ||||
-rw-r--r-- | include/user/gxm/memory.h | 59 |
3 files changed, 90 insertions, 0 deletions
diff --git a/include/user/gxm/context.h b/include/user/gxm/context.h index 06a35fe..3897677 100644 --- a/include/user/gxm/context.h +++ b/include/user/gxm/context.h @@ -75,6 +75,25 @@ SceGxmErrorCode sceGxmSetFragmentJobVisibilityBuffer( void *bufferBase, uint32_t stridePerCore); +/** Allocates a VDM buffer for Razor GPU Capture. + + @param[in] context A pointer to the rendering context. + @param[in] size The size to allocate. + @param[out] mem Receives the buffer address. + + @retval + SCE_OK The operation was successful. + @retval + SCE_GXM_ERROR_RESERVE_FAILED The operation failed due to the VDM buffer callback + function failing to provide sufficient memory. + + @ingroup render +*/ +SceGxmErrorCode sceGxmRazorReplayReserveVdm( + SceGxmContext *context, + uint32_t size, + void **mem); + #ifdef __cplusplus } #endif // def __cplusplus diff --git a/include/user/gxm/init.h b/include/user/gxm/init.h index 6739e2a..8f27a79 100644 --- a/include/user/gxm/init.h +++ b/include/user/gxm/init.h @@ -10,6 +10,18 @@ extern "C" { #endif // def __cplusplus +/** Flags for libgxm initialization. + + @ingroup render +*/ +typedef enum SceGxmInitializeFlagsInternal +{ + SCE_GXM_INITIALIZE_FLAG_PB_USE_USER_MEMORY = 0x00000001U, ///< Use uncached main memory for the parameter buffer. + SCE_GXM_INITIALIZE_FLAG_PBDESCFLAGS_ZLS_OVERRIDE = 0x00000002U, + SCE_GXM_INITIALIZE_FLAG_PBDESCFLAGS_SHARED = 0x00000004U, ///< The parameter buffer can be shared between rendering contexts. + SCE_GXM_INITIALIZE_FLAG_DRIVER_MEM_SHARE = 0x00000008U ///< Use shared driver memory for the parameter buffer. +} SceGxmInitializeFlagsInternal; + /** Initializes the libgxm library for shared sync objects. Internally this function will prepare this process for rendering, creating diff --git a/include/user/gxm/memory.h b/include/user/gxm/memory.h index de0cb34..cc4125a 100644 --- a/include/user/gxm/memory.h +++ b/include/user/gxm/memory.h @@ -12,6 +12,29 @@ extern "C" { #endif // def __cplusplus +/** The device heap ID when allocating memory using #sceGxmAllocDeviceMemLinux(). + + @ingroup render +*/ +typedef enum SceGxmDeviceHeapId { + SCE_GXM_DEVICE_HEAP_ID_USER_NC, + SCE_GXM_DEVICE_HEAP_ID_CDRAM, + SCE_GXM_DEVICE_HEAP_ID_VERTEX_USSE, + SCE_GXM_DEVICE_HEAP_ID_FRAGMENT_USSE +} SceGxmDeviceHeapId; + +/** Memory info for memory allocated and mapped using #sceGxmAllocDeviceMemLinux(). + + @ingroup render +*/ +typedef struct SceGxmDeviceMemInfo { + SceUID memBlockId; ///< The UID of the allocated memory block. + void *mappedBase; ///< Base address of the allocated memory block. + uint32_t offset; ///< USSE offset for vertex and fragment USSE memory. + uint32_t size; ///< The size passed to #sceGxmAllocDeviceMemLinux(). + uint32_t heapId; ///< The device heap ID from #SceGxmDeviceHeapId. +} SceGxmDeviceMemInfo; + /** Checks if memory is mapped for GPU usage. If mapped, pointers within the region of memory described by <c><i>base</i></c> and <c><i>size</i></c> may be used with libgxm functions directly. @@ -123,6 +146,42 @@ SceGxmErrorCode sceGxmMapFragmentUsseMemoryInternal(void *base, uint32_t size, u */ SceGxmErrorCode sceGxmUnmapFragmentUsseMemoryInternal(void *base); +/** Allocates and maps memory for GPU usage. The storage for the memory info is + allocated by libgxm. + + @param[in] heapId Device memory heap ID from #SceGxmDeviceHeapId. + @param[in] flags Bitwise combined attributes from #SceGxmMemoryAttribFlags. + @param[in] size Size in bytes of the memory to allocate. + @param[in] alignment This parameter is unused. Specify 0 or a power of 2. + @param[out] memInfo Memory info of the allocated memory. + + @retval + SCE_OK The operation was completed successfully. + @retval + SCE_GXM_ERROR_OUT_OF_MEMORY There was no memory to perform the operation. + @retval + SCE_GXM_ERROR_INVALID_VALUE The operation failed because a parameter was invalid. + @retval + SCE_GXM_ERROR_INVALID_POINTER The operation failed because a pointer was invalid. + @retval + SCE_GXM_ERROR_INVALID_ALIGNMENT The operation failed due to invalid alignment. + + @ingroup render +*/ +SceGxmErrorCode sceGxmAllocDeviceMemLinux(uint32_t heapId, uint32_t flags, uint32_t size, uint32_t alignment, SceGxmDeviceMemInfo **memInfo); + +/** Unmaps and frees memory allocated with #sceGxmAllocDeviceMemLinux(). The + storage for the memory info is freed by libgxm. + + @param[in] memInfo Memory info of the allocated memory. + + @retval + SCE_OK The operation was completed successfully. + + @ingroup render +*/ +SceGxmErrorCode sceGxmFreeDeviceMemLinux(SceGxmDeviceMemInfo* memInfo); + #ifdef __cplusplus } #endif // def __cplusplus |