|
|
|
@ -7,7 +7,7 @@ |
|
|
|
/****************************************************************************** |
|
|
|
* The MIT License (MIT) |
|
|
|
* |
|
|
|
* Copyright (c) 2019-2025 Baldur Karlsson |
|
|
|
* Copyright (c) 2015-2026 Baldur Karlsson |
|
|
|
* |
|
|
|
* Permission is hereby granted, free of charge, to any person obtaining a copy |
|
|
|
* of this software and associated documentation files (the "Software"), to deal |
|
|
|
@ -72,6 +72,10 @@ extern "C" { |
|
|
|
// truncated version when only a uint64_t is available (e.g. Vulkan tags): |
|
|
|
#define RENDERDOC_ShaderDebugMagicValue_truncated 0x48656670eab25520ULL |
|
|
|
|
|
|
|
// this is a magic value for vulkan user tags to indicate which dispatchable API objects are which |
|
|
|
// for object annotations |
|
|
|
#define RENDERDOC_APIObjectAnnotationHelper 0xfbb3b337b664d0adULL |
|
|
|
|
|
|
|
////////////////////////////////////////////////////////////////////////////////////////////////// |
|
|
|
// RenderDoc capture options |
|
|
|
// |
|
|
|
@ -564,6 +568,128 @@ typedef uint32_t(RENDERDOC_CC *pRENDERDOC_DiscardFrameCapture)(RENDERDOC_DeviceP |
|
|
|
// multiple times only the last title will be used. |
|
|
|
typedef void(RENDERDOC_CC *pRENDERDOC_SetCaptureTitle)(const char *title); |
|
|
|
|
|
|
|
// Annotations API: |
|
|
|
// |
|
|
|
// These functions allow you to specify annotations either on a per-command level, or a per-object |
|
|
|
// level. |
|
|
|
// |
|
|
|
// Basic types of annotations are supported, as well as vector versions and references to API objects. |
|
|
|
// |
|
|
|
// The annotations are stored as keys, with the key being a dot-separated path allowing arbitrary |
|
|
|
// nesting and user organisation. The keys are sorted in human order so `foo.2.bar` will be displayed |
|
|
|
// before `foo.10.bar` to allow creation of arrays if desired. |
|
|
|
// |
|
|
|
// Deleting an annotation can be done by assigning an empty value to it. |
|
|
|
|
|
|
|
// the type of an annotation value, or Empty to delete an annotation |
|
|
|
typedef enum RENDERDOC_AnnotationType |
|
|
|
{ |
|
|
|
eRENDERDOC_Empty, |
|
|
|
eRENDERDOC_Bool, |
|
|
|
eRENDERDOC_Int32, |
|
|
|
eRENDERDOC_UInt32, |
|
|
|
eRENDERDOC_Int64, |
|
|
|
eRENDERDOC_UInt64, |
|
|
|
eRENDERDOC_Float, |
|
|
|
eRENDERDOC_Double, |
|
|
|
eRENDERDOC_String, |
|
|
|
eRENDERDOC_APIObject, |
|
|
|
eRENDERDOC_AnnotationMax = 0x7FFFFFFF, |
|
|
|
} RENDERDOC_AnnotationType; |
|
|
|
|
|
|
|
// a union with vector annotation value data |
|
|
|
typedef union RENDERDOC_AnnotationVectorValue |
|
|
|
{ |
|
|
|
bool boolean[4]; |
|
|
|
int32_t int32[4]; |
|
|
|
int64_t int64[4]; |
|
|
|
uint32_t uint32[4]; |
|
|
|
uint64_t uint64[4]; |
|
|
|
float float32[4]; |
|
|
|
double float64[4]; |
|
|
|
} RENDERDOC_AnnotationVectorValue; |
|
|
|
|
|
|
|
// a union with scalar annotation value data |
|
|
|
typedef union RENDERDOC_AnnotationValue |
|
|
|
{ |
|
|
|
bool boolean; |
|
|
|
int32_t int32; |
|
|
|
int64_t int64; |
|
|
|
uint32_t uint32; |
|
|
|
uint64_t uint64; |
|
|
|
float float32; |
|
|
|
double float64; |
|
|
|
|
|
|
|
RENDERDOC_AnnotationVectorValue vector; |
|
|
|
|
|
|
|
const char *string; |
|
|
|
void *apiObject; |
|
|
|
} RENDERDOC_AnnotationValue; |
|
|
|
|
|
|
|
// a struct for specifying a GL object, as we don't have pointers we can use so instead we specify a |
|
|
|
// pointer to this struct giving both the type and the name |
|
|
|
typedef struct RENDERDOC_GLResourceReference |
|
|
|
{ |
|
|
|
// this is the same GLenum identifier as passed to glObjectLabel |
|
|
|
uint32_t identifier; |
|
|
|
uint32_t name; |
|
|
|
} GLResourceReference; |
|
|
|
|
|
|
|
// simple C++ helpers to avoid the need for a temporary objects for value passing and GL object specification |
|
|
|
#ifdef __cplusplus |
|
|
|
struct RDGLObjectHelper |
|
|
|
{ |
|
|
|
RENDERDOC_GLResourceReference gl; |
|
|
|
|
|
|
|
RDGLObjectHelper(uint32_t identifier, uint32_t name) |
|
|
|
{ |
|
|
|
gl.identifier = identifier; |
|
|
|
gl.name = name; |
|
|
|
} |
|
|
|
|
|
|
|
operator RENDERDOC_GLResourceReference *() { return ≷ } |
|
|
|
}; |
|
|
|
|
|
|
|
struct RDAnnotationHelper |
|
|
|
{ |
|
|
|
RENDERDOC_AnnotationValue val; |
|
|
|
|
|
|
|
RDAnnotationHelper(bool b) { val.boolean = b; } |
|
|
|
RDAnnotationHelper(int32_t i) { val.int32 = i; } |
|
|
|
RDAnnotationHelper(int64_t i) { val.int64 = i; } |
|
|
|
RDAnnotationHelper(uint32_t i) { val.uint32 = i; } |
|
|
|
RDAnnotationHelper(uint64_t i) { val.uint64 = i; } |
|
|
|
RDAnnotationHelper(float f) { val.float32 = f; } |
|
|
|
RDAnnotationHelper(double d) { val.float64 = d; } |
|
|
|
RDAnnotationHelper(const char *s) { val.string = s; } |
|
|
|
|
|
|
|
operator RENDERDOC_AnnotationValue *() { return &val; } |
|
|
|
}; |
|
|
|
#endif |
|
|
|
|
|
|
|
// The device is specified in the same way as other API calls that take a RENDERDOC_DevicePointer |
|
|
|
// to specify the device. |
|
|
|
// |
|
|
|
// The object or queue/commandbuffer will depend on the graphics API in question. |
|
|
|
// |
|
|
|
// Return value: |
|
|
|
// 0 - The annotation was applied successfully. |
|
|
|
// 1 - The device is unknown/invalid |
|
|
|
// 2 - The device is valid but the annotation is not supported for API-specific reasons, such as an |
|
|
|
// unrecognised or invalid object or queue/commandbuffer |
|
|
|
// 3 - The call is ill-formed or invalid e.g. empty is specified with a value pointer, or non-empty |
|
|
|
// is specified with a NULL value pointer |
|
|
|
typedef uint32_t(RENDERDOC_CC *pRENDERDOC_SetObjectAnnotation)(RENDERDOC_DevicePointer device, |
|
|
|
void *object, const char *key, |
|
|
|
RENDERDOC_AnnotationType valueType, |
|
|
|
uint32_t valueVectorWidth, |
|
|
|
const RENDERDOC_AnnotationValue *value); |
|
|
|
|
|
|
|
typedef uint32_t(RENDERDOC_CC *pRENDERDOC_SetCommandAnnotation)( |
|
|
|
RENDERDOC_DevicePointer device, void *queueOrCommandBuffer, const char *key, |
|
|
|
RENDERDOC_AnnotationType valueType, uint32_t valueVectorWidth, |
|
|
|
const RENDERDOC_AnnotationValue *value); |
|
|
|
|
|
|
|
////////////////////////////////////////////////////////////////////////////////////////////////// |
|
|
|
// RenderDoc API versions |
|
|
|
// |
|
|
|
@ -592,6 +718,7 @@ typedef enum RENDERDOC_Version |
|
|
|
eRENDERDOC_API_Version_1_4_2 = 10402, // RENDERDOC_API_1_4_2 = 1 04 02 |
|
|
|
eRENDERDOC_API_Version_1_5_0 = 10500, // RENDERDOC_API_1_5_0 = 1 05 00 |
|
|
|
eRENDERDOC_API_Version_1_6_0 = 10600, // RENDERDOC_API_1_6_0 = 1 06 00 |
|
|
|
eRENDERDOC_API_Version_1_7_0 = 10700, // RENDERDOC_API_1_7_0 = 1 07 00 |
|
|
|
} RENDERDOC_Version; |
|
|
|
|
|
|
|
// API version changelog: |
|
|
|
@ -622,8 +749,10 @@ typedef enum RENDERDOC_Version |
|
|
|
// 1.5.0 - Added feature: ShowReplayUI() to request that the replay UI show itself if connected |
|
|
|
// 1.6.0 - Added feature: SetCaptureTitle() which can be used to set a title for a |
|
|
|
// capture made with StartFrameCapture() or EndFrameCapture() |
|
|
|
// 1.7.0 - Added feature: SetObjectAnnotation() / SetCommandAnnotation() for adding rich |
|
|
|
// annotations to objects and command streams |
|
|
|
|
|
|
|
typedef struct RENDERDOC_API_1_6_0 |
|
|
|
typedef struct RENDERDOC_API_1_7_0 |
|
|
|
{ |
|
|
|
pRENDERDOC_GetAPIVersion GetAPIVersion; |
|
|
|
|
|
|
|
@ -701,20 +830,25 @@ typedef struct RENDERDOC_API_1_6_0 |
|
|
|
|
|
|
|
// new function in 1.6.0 |
|
|
|
pRENDERDOC_SetCaptureTitle SetCaptureTitle; |
|
|
|
} RENDERDOC_API_1_6_0; |
|
|
|
|
|
|
|
typedef RENDERDOC_API_1_6_0 RENDERDOC_API_1_0_0; |
|
|
|
typedef RENDERDOC_API_1_6_0 RENDERDOC_API_1_0_1; |
|
|
|
typedef RENDERDOC_API_1_6_0 RENDERDOC_API_1_0_2; |
|
|
|
typedef RENDERDOC_API_1_6_0 RENDERDOC_API_1_1_0; |
|
|
|
typedef RENDERDOC_API_1_6_0 RENDERDOC_API_1_1_1; |
|
|
|
typedef RENDERDOC_API_1_6_0 RENDERDOC_API_1_1_2; |
|
|
|
typedef RENDERDOC_API_1_6_0 RENDERDOC_API_1_2_0; |
|
|
|
typedef RENDERDOC_API_1_6_0 RENDERDOC_API_1_3_0; |
|
|
|
typedef RENDERDOC_API_1_6_0 RENDERDOC_API_1_4_0; |
|
|
|
typedef RENDERDOC_API_1_6_0 RENDERDOC_API_1_4_1; |
|
|
|
typedef RENDERDOC_API_1_6_0 RENDERDOC_API_1_4_2; |
|
|
|
typedef RENDERDOC_API_1_6_0 RENDERDOC_API_1_5_0; |
|
|
|
|
|
|
|
// new functions in 1.7.0 |
|
|
|
pRENDERDOC_SetObjectAnnotation SetObjectAnnotation; |
|
|
|
pRENDERDOC_SetCommandAnnotation SetCommandAnnotation; |
|
|
|
} RENDERDOC_API_1_7_0; |
|
|
|
|
|
|
|
typedef RENDERDOC_API_1_7_0 RENDERDOC_API_1_0_0; |
|
|
|
typedef RENDERDOC_API_1_7_0 RENDERDOC_API_1_0_1; |
|
|
|
typedef RENDERDOC_API_1_7_0 RENDERDOC_API_1_0_2; |
|
|
|
typedef RENDERDOC_API_1_7_0 RENDERDOC_API_1_1_0; |
|
|
|
typedef RENDERDOC_API_1_7_0 RENDERDOC_API_1_1_1; |
|
|
|
typedef RENDERDOC_API_1_7_0 RENDERDOC_API_1_1_2; |
|
|
|
typedef RENDERDOC_API_1_7_0 RENDERDOC_API_1_2_0; |
|
|
|
typedef RENDERDOC_API_1_7_0 RENDERDOC_API_1_3_0; |
|
|
|
typedef RENDERDOC_API_1_7_0 RENDERDOC_API_1_4_0; |
|
|
|
typedef RENDERDOC_API_1_7_0 RENDERDOC_API_1_4_1; |
|
|
|
typedef RENDERDOC_API_1_7_0 RENDERDOC_API_1_4_2; |
|
|
|
typedef RENDERDOC_API_1_7_0 RENDERDOC_API_1_5_0; |
|
|
|
typedef RENDERDOC_API_1_7_0 RENDERDOC_API_1_6_0; |
|
|
|
|
|
|
|
////////////////////////////////////////////////////////////////////////////////////////////////// |
|
|
|
// RenderDoc API entry point |
|
|
|
|