mirror of
https://github.com/wiiu-env/wut.git
synced 2025-01-07 15:48:13 +01:00
gx2: Add GX2DebugCapture functions.
This commit is contained in:
parent
ba24b4a5f5
commit
96bddc5a69
152
include/gx2/debug.h
Normal file
152
include/gx2/debug.h
Normal file
@ -0,0 +1,152 @@
|
||||
#pragma once
|
||||
#include <wut.h>
|
||||
#include "surface.h"
|
||||
|
||||
/**
|
||||
* \defgroup gx2_debug Debug
|
||||
* \ingroup gx2
|
||||
* @{
|
||||
*/
|
||||
|
||||
#ifdef __cplusplus
|
||||
extern "C" {
|
||||
#endif
|
||||
|
||||
typedef struct GX2DebugCaptureInterface GX2DebugCaptureInterface;
|
||||
|
||||
typedef enum GX2DebugCaptureInterfaceVersion
|
||||
{
|
||||
GX2_DEBUG_CAPTURE_INTERFACE_VERSION = 1,
|
||||
} GX2DebugCaptureInterfaceVersion;
|
||||
|
||||
typedef enum GX2DebugCaptureStartFlags
|
||||
{
|
||||
GX2_DEBUG_CAPTURE_START_FLAGS_NONE = 0,
|
||||
|
||||
//! When set GX2DebugCaptureEnd will NOT call GX2DrawDone.
|
||||
GX2_DEBUG_CAPTURE_START_FLAGS_DISABLE_GX2DRAWDONE = 1,
|
||||
} GX2DebugCaptureStartFlags;
|
||||
|
||||
typedef enum GX2DebugCaptureEndFlags
|
||||
{
|
||||
GX2_DEBUG_CAPTURE_END_FLAGS_NONE = 0,
|
||||
|
||||
//! When set GX2DebugCaptureEnd will NOT call GX2Flush.
|
||||
GX2_DEBUG_CAPTURE_END_FLAGS_DISABLE_GX2FLUSH = 1,
|
||||
} GX2DebugCaptureEndFlags;
|
||||
|
||||
struct GX2DebugCaptureInterface
|
||||
{
|
||||
//! Must be set to GX2_DEBUG_CAPTURE_INTERFACE_VERSION
|
||||
uint32_t version;
|
||||
|
||||
//! Called from GX2Shutdown.
|
||||
void (*onShutdown)();
|
||||
|
||||
//! Called from GX2DebugSetCaptureInterface with the default gx2 allocators.
|
||||
void (*setAllocator)();
|
||||
|
||||
//! Called from GX2DebugCaptureStart, the filename is first argument passed
|
||||
//! in to GX2DebugCaptureStart.
|
||||
void (*onCaptureStart)(const char *filename);
|
||||
|
||||
//! Called from GX2DebugCaptureEnd.
|
||||
void (*onCaptureEnd)();
|
||||
|
||||
//! Check if capture is enabled.
|
||||
BOOL (*isCaptureEnabled)();
|
||||
|
||||
//! Called when GX2 memory is allocated.
|
||||
void (*onAlloc)(void *ptr, uint32_t size, uint32_t align);
|
||||
|
||||
//! Called when GX2 memory is freed.
|
||||
void (*onFree)(void *ptr);
|
||||
|
||||
//! UNKNOWN: Called when something happens with some memory.
|
||||
void (*onUnknownMemory)(void *ptr, uint32_t size);
|
||||
|
||||
//! Called from GX2DebugCaptureStart with the TV scan buffer.
|
||||
void (*setOutputSurface)(GX2Surface *surface);
|
||||
|
||||
//! Called from GX2SwapScanBuffers with the TV scan buffer.
|
||||
void (*onSwapScanBuffers)(GX2Surface *surface);
|
||||
|
||||
//! Called when a command buffer is ready to be submitted to ring buffer.
|
||||
//! Note that it seems we must call TCLSubmitToRing from this callback
|
||||
//! because gx2 will not do it when capturing.
|
||||
void (*submitToRing)(void *unk1,
|
||||
uint32_t unk2,
|
||||
uint32_t *unk3,
|
||||
uint64_t *outSubmitTimestamp);
|
||||
};
|
||||
WUT_CHECK_OFFSET(GX2DebugCaptureInterface, 0x00, version);
|
||||
WUT_CHECK_OFFSET(GX2DebugCaptureInterface, 0x04, onShutdown);
|
||||
WUT_CHECK_OFFSET(GX2DebugCaptureInterface, 0x08, setAllocator);
|
||||
WUT_CHECK_OFFSET(GX2DebugCaptureInterface, 0x0C, onCaptureStart);
|
||||
WUT_CHECK_OFFSET(GX2DebugCaptureInterface, 0x10, onCaptureEnd);
|
||||
WUT_CHECK_OFFSET(GX2DebugCaptureInterface, 0x14, isCaptureEnabled);
|
||||
WUT_CHECK_OFFSET(GX2DebugCaptureInterface, 0x18, onAlloc);
|
||||
WUT_CHECK_OFFSET(GX2DebugCaptureInterface, 0x1C, onFree);
|
||||
WUT_CHECK_OFFSET(GX2DebugCaptureInterface, 0x20, onUnknownMemory);
|
||||
WUT_CHECK_OFFSET(GX2DebugCaptureInterface, 0x24, setOutputSurface);
|
||||
WUT_CHECK_OFFSET(GX2DebugCaptureInterface, 0x28, onSwapScanBuffers);
|
||||
WUT_CHECK_OFFSET(GX2DebugCaptureInterface, 0x2C, submitToRing);
|
||||
WUT_CHECK_SIZE(GX2DebugCaptureInterface, 0x30);
|
||||
|
||||
BOOL
|
||||
_GX2DebugSetCaptureInterface(GX2DebugCaptureInterface *interface);
|
||||
|
||||
|
||||
/**
|
||||
* Starts a debug capture.
|
||||
*
|
||||
* User must have set interface first via _GX2DebugSetCaptureInterface.
|
||||
*
|
||||
* Note this doesn't write to filename, that is up to the implementor of the
|
||||
* GX2DebugCaptureInterface. This argument might not even be filename but I at
|
||||
* least know it is a string because GX2DebugCaptureFrame does a strncpy on it.
|
||||
*
|
||||
* \param filename
|
||||
* This is passed as first argument to GX2DebugCaptureInterface.onCaptureStart
|
||||
*/
|
||||
void
|
||||
GX2DebugCaptureStart(const char *filename,
|
||||
GX2DebugCaptureStartFlags flags);
|
||||
|
||||
|
||||
/**
|
||||
* Ends a debug capture.
|
||||
*/
|
||||
void
|
||||
GX2DebugCaptureEnd(GX2DebugCaptureEndFlags flags);
|
||||
|
||||
|
||||
/**
|
||||
* Will capture the next frame.
|
||||
*
|
||||
* Capture begins during the next call to GX2SwapScanBuffers, and will end
|
||||
* at the next GX2SwapScanBuffers.
|
||||
*
|
||||
* Equivalent to calling GX2DebugCaptureFrames(filename, 1)
|
||||
*/
|
||||
void
|
||||
GX2DebugCaptureFrame(const char* filename);
|
||||
|
||||
|
||||
/**
|
||||
* Will capture count frames.
|
||||
*
|
||||
* Capture begins during the next call to GX2SwapScanBuffers, and will end
|
||||
* after count frames have been swapped in GX2SwapScanBuffers.
|
||||
*
|
||||
* Capture begins and ends during GX2SwapScanBuffers.
|
||||
*/
|
||||
void
|
||||
GX2DebugCaptureFrames(const char* filename,
|
||||
uint32_t count);
|
||||
|
||||
#ifdef __cplusplus
|
||||
}
|
||||
#endif
|
||||
|
||||
/** @} */
|
@ -42,6 +42,7 @@
|
||||
#include <coreinit/title.h>
|
||||
#include <gx2/clear.h>
|
||||
#include <gx2/context.h>
|
||||
#include <gx2/debug.h>
|
||||
#include <gx2/display.h>
|
||||
#include <gx2/displaylist.h>
|
||||
#include <gx2/draw.h>
|
||||
|
@ -42,6 +42,7 @@
|
||||
#include <coreinit/title.h>
|
||||
#include <gx2/clear.h>
|
||||
#include <gx2/context.h>
|
||||
#include <gx2/debug.h>
|
||||
#include <gx2/display.h>
|
||||
#include <gx2/displaylist.h>
|
||||
#include <gx2/draw.h>
|
||||
|
Loading…
Reference in New Issue
Block a user