xref: /aosp_15_r20/external/mesa3d/include/renderdoc_app.h (revision 6104692788411f58d303aa86923a9ff6ecaded22)
1*61046927SAndroid Build Coastguard Worker /******************************************************************************
2*61046927SAndroid Build Coastguard Worker  * The MIT License (MIT)
3*61046927SAndroid Build Coastguard Worker  *
4*61046927SAndroid Build Coastguard Worker  * Copyright (c) 2015-2018 Baldur Karlsson
5*61046927SAndroid Build Coastguard Worker  *
6*61046927SAndroid Build Coastguard Worker  * Permission is hereby granted, free of charge, to any person obtaining a copy
7*61046927SAndroid Build Coastguard Worker  * of this software and associated documentation files (the "Software"), to deal
8*61046927SAndroid Build Coastguard Worker  * in the Software without restriction, including without limitation the rights
9*61046927SAndroid Build Coastguard Worker  * to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
10*61046927SAndroid Build Coastguard Worker  * copies of the Software, and to permit persons to whom the Software is
11*61046927SAndroid Build Coastguard Worker  * furnished to do so, subject to the following conditions:
12*61046927SAndroid Build Coastguard Worker  *
13*61046927SAndroid Build Coastguard Worker  * The above copyright notice and this permission notice shall be included in
14*61046927SAndroid Build Coastguard Worker  * all copies or substantial portions of the Software.
15*61046927SAndroid Build Coastguard Worker  *
16*61046927SAndroid Build Coastguard Worker  * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
17*61046927SAndroid Build Coastguard Worker  * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
18*61046927SAndroid Build Coastguard Worker  * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
19*61046927SAndroid Build Coastguard Worker  * AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
20*61046927SAndroid Build Coastguard Worker  * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
21*61046927SAndroid Build Coastguard Worker  * OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN
22*61046927SAndroid Build Coastguard Worker  * THE SOFTWARE.
23*61046927SAndroid Build Coastguard Worker  ******************************************************************************/
24*61046927SAndroid Build Coastguard Worker 
25*61046927SAndroid Build Coastguard Worker #pragma once
26*61046927SAndroid Build Coastguard Worker 
27*61046927SAndroid Build Coastguard Worker //////////////////////////////////////////////////////////////////////////////////////////////////
28*61046927SAndroid Build Coastguard Worker //
29*61046927SAndroid Build Coastguard Worker // Documentation for the API is available at https://renderdoc.org/docs/in_application_api.html
30*61046927SAndroid Build Coastguard Worker //
31*61046927SAndroid Build Coastguard Worker 
32*61046927SAndroid Build Coastguard Worker #if !defined(RENDERDOC_NO_STDINT)
33*61046927SAndroid Build Coastguard Worker #include <stdint.h>
34*61046927SAndroid Build Coastguard Worker #endif
35*61046927SAndroid Build Coastguard Worker 
36*61046927SAndroid Build Coastguard Worker #if defined(WIN32)
37*61046927SAndroid Build Coastguard Worker #define RENDERDOC_CC __cdecl
38*61046927SAndroid Build Coastguard Worker #elif defined(__linux__)
39*61046927SAndroid Build Coastguard Worker #define RENDERDOC_CC
40*61046927SAndroid Build Coastguard Worker #elif defined(__APPLE__)
41*61046927SAndroid Build Coastguard Worker #define RENDERDOC_CC
42*61046927SAndroid Build Coastguard Worker #else
43*61046927SAndroid Build Coastguard Worker #error "Unknown platform"
44*61046927SAndroid Build Coastguard Worker #endif
45*61046927SAndroid Build Coastguard Worker 
46*61046927SAndroid Build Coastguard Worker #ifdef __cplusplus
47*61046927SAndroid Build Coastguard Worker extern "C" {
48*61046927SAndroid Build Coastguard Worker #endif
49*61046927SAndroid Build Coastguard Worker 
50*61046927SAndroid Build Coastguard Worker //////////////////////////////////////////////////////////////////////////////////////////////////
51*61046927SAndroid Build Coastguard Worker // Constants not used directly in below API
52*61046927SAndroid Build Coastguard Worker 
53*61046927SAndroid Build Coastguard Worker // This is a GUID/magic value used for when applications pass a path where shader debug
54*61046927SAndroid Build Coastguard Worker // information can be found to match up with a stripped shader.
55*61046927SAndroid Build Coastguard Worker // the define can be used like so: const GUID RENDERDOC_ShaderDebugMagicValue =
56*61046927SAndroid Build Coastguard Worker // RENDERDOC_ShaderDebugMagicValue_value
57*61046927SAndroid Build Coastguard Worker #define RENDERDOC_ShaderDebugMagicValue_struct                                \
58*61046927SAndroid Build Coastguard Worker   {                                                                           \
59*61046927SAndroid Build Coastguard Worker     0xeab25520, 0x6670, 0x4865, 0x84, 0x29, 0x6c, 0x8, 0x51, 0x54, 0x00, 0xff \
60*61046927SAndroid Build Coastguard Worker   }
61*61046927SAndroid Build Coastguard Worker 
62*61046927SAndroid Build Coastguard Worker // as an alternative when you want a byte array (assuming x86 endianness):
63*61046927SAndroid Build Coastguard Worker #define RENDERDOC_ShaderDebugMagicValue_bytearray                                                 \
64*61046927SAndroid Build Coastguard Worker   {                                                                                               \
65*61046927SAndroid Build Coastguard Worker     0x20, 0x55, 0xb2, 0xea, 0x70, 0x66, 0x65, 0x48, 0x84, 0x29, 0x6c, 0x8, 0x51, 0x54, 0x00, 0xff \
66*61046927SAndroid Build Coastguard Worker   }
67*61046927SAndroid Build Coastguard Worker 
68*61046927SAndroid Build Coastguard Worker // truncated version when only a uint64_t is available (e.g. Vulkan tags):
69*61046927SAndroid Build Coastguard Worker #define RENDERDOC_ShaderDebugMagicValue_truncated 0x48656670eab25520ULL
70*61046927SAndroid Build Coastguard Worker 
71*61046927SAndroid Build Coastguard Worker //////////////////////////////////////////////////////////////////////////////////////////////////
72*61046927SAndroid Build Coastguard Worker // RenderDoc capture options
73*61046927SAndroid Build Coastguard Worker //
74*61046927SAndroid Build Coastguard Worker 
75*61046927SAndroid Build Coastguard Worker typedef enum {
76*61046927SAndroid Build Coastguard Worker   // Allow the application to enable vsync
77*61046927SAndroid Build Coastguard Worker   //
78*61046927SAndroid Build Coastguard Worker   // Default - enabled
79*61046927SAndroid Build Coastguard Worker   //
80*61046927SAndroid Build Coastguard Worker   // 1 - The application can enable or disable vsync at will
81*61046927SAndroid Build Coastguard Worker   // 0 - vsync is force disabled
82*61046927SAndroid Build Coastguard Worker   eRENDERDOC_Option_AllowVSync = 0,
83*61046927SAndroid Build Coastguard Worker 
84*61046927SAndroid Build Coastguard Worker   // Allow the application to enable fullscreen
85*61046927SAndroid Build Coastguard Worker   //
86*61046927SAndroid Build Coastguard Worker   // Default - enabled
87*61046927SAndroid Build Coastguard Worker   //
88*61046927SAndroid Build Coastguard Worker   // 1 - The application can enable or disable fullscreen at will
89*61046927SAndroid Build Coastguard Worker   // 0 - fullscreen is force disabled
90*61046927SAndroid Build Coastguard Worker   eRENDERDOC_Option_AllowFullscreen = 1,
91*61046927SAndroid Build Coastguard Worker 
92*61046927SAndroid Build Coastguard Worker   // Record API debugging events and messages
93*61046927SAndroid Build Coastguard Worker   //
94*61046927SAndroid Build Coastguard Worker   // Default - disabled
95*61046927SAndroid Build Coastguard Worker   //
96*61046927SAndroid Build Coastguard Worker   // 1 - Enable built-in API debugging features and records the results into
97*61046927SAndroid Build Coastguard Worker   //     the capture, which is matched up with events on replay
98*61046927SAndroid Build Coastguard Worker   // 0 - no API debugging is forcibly enabled
99*61046927SAndroid Build Coastguard Worker   eRENDERDOC_Option_APIValidation = 2,
100*61046927SAndroid Build Coastguard Worker   eRENDERDOC_Option_DebugDeviceMode = 2,    // deprecated name of this enum
101*61046927SAndroid Build Coastguard Worker 
102*61046927SAndroid Build Coastguard Worker   // Capture CPU callstacks for API events
103*61046927SAndroid Build Coastguard Worker   //
104*61046927SAndroid Build Coastguard Worker   // Default - disabled
105*61046927SAndroid Build Coastguard Worker   //
106*61046927SAndroid Build Coastguard Worker   // 1 - Enables capturing of callstacks
107*61046927SAndroid Build Coastguard Worker   // 0 - no callstacks are captured
108*61046927SAndroid Build Coastguard Worker   eRENDERDOC_Option_CaptureCallstacks = 3,
109*61046927SAndroid Build Coastguard Worker 
110*61046927SAndroid Build Coastguard Worker   // When capturing CPU callstacks, only capture them from drawcalls.
111*61046927SAndroid Build Coastguard Worker   // This option does nothing without the above option being enabled
112*61046927SAndroid Build Coastguard Worker   //
113*61046927SAndroid Build Coastguard Worker   // Default - disabled
114*61046927SAndroid Build Coastguard Worker   //
115*61046927SAndroid Build Coastguard Worker   // 1 - Only captures callstacks for drawcall type API events.
116*61046927SAndroid Build Coastguard Worker   //     Ignored if CaptureCallstacks is disabled
117*61046927SAndroid Build Coastguard Worker   // 0 - Callstacks, if enabled, are captured for every event.
118*61046927SAndroid Build Coastguard Worker   eRENDERDOC_Option_CaptureCallstacksOnlyDraws = 4,
119*61046927SAndroid Build Coastguard Worker 
120*61046927SAndroid Build Coastguard Worker   // Specify a delay in seconds to wait for a debugger to attach, after
121*61046927SAndroid Build Coastguard Worker   // creating or injecting into a process, before continuing to allow it to run.
122*61046927SAndroid Build Coastguard Worker   //
123*61046927SAndroid Build Coastguard Worker   // 0 indicates no delay, and the process will run immediately after injection
124*61046927SAndroid Build Coastguard Worker   //
125*61046927SAndroid Build Coastguard Worker   // Default - 0 seconds
126*61046927SAndroid Build Coastguard Worker   //
127*61046927SAndroid Build Coastguard Worker   eRENDERDOC_Option_DelayForDebugger = 5,
128*61046927SAndroid Build Coastguard Worker 
129*61046927SAndroid Build Coastguard Worker   // Verify any writes to mapped buffers, by checking the memory after the
130*61046927SAndroid Build Coastguard Worker   // bounds of the returned pointer to detect any modification.
131*61046927SAndroid Build Coastguard Worker   //
132*61046927SAndroid Build Coastguard Worker   // Default - disabled
133*61046927SAndroid Build Coastguard Worker   //
134*61046927SAndroid Build Coastguard Worker   // 1 - Verify any writes to mapped buffers
135*61046927SAndroid Build Coastguard Worker   // 0 - No verification is performed, and overwriting bounds may cause
136*61046927SAndroid Build Coastguard Worker   //     crashes or corruption in RenderDoc
137*61046927SAndroid Build Coastguard Worker   eRENDERDOC_Option_VerifyMapWrites = 6,
138*61046927SAndroid Build Coastguard Worker 
139*61046927SAndroid Build Coastguard Worker   // Hooks any system API calls that create child processes, and injects
140*61046927SAndroid Build Coastguard Worker   // RenderDoc into them recursively with the same options.
141*61046927SAndroid Build Coastguard Worker   //
142*61046927SAndroid Build Coastguard Worker   // Default - disabled
143*61046927SAndroid Build Coastguard Worker   //
144*61046927SAndroid Build Coastguard Worker   // 1 - Hooks into spawned child processes
145*61046927SAndroid Build Coastguard Worker   // 0 - Child processes are not hooked by RenderDoc
146*61046927SAndroid Build Coastguard Worker   eRENDERDOC_Option_HookIntoChildren = 7,
147*61046927SAndroid Build Coastguard Worker 
148*61046927SAndroid Build Coastguard Worker   // By default RenderDoc only includes resources in the final capture necessary
149*61046927SAndroid Build Coastguard Worker   // for that frame, this allows you to override that behaviour.
150*61046927SAndroid Build Coastguard Worker   //
151*61046927SAndroid Build Coastguard Worker   // Default - disabled
152*61046927SAndroid Build Coastguard Worker   //
153*61046927SAndroid Build Coastguard Worker   // 1 - all live resources at the time of capture are included in the capture
154*61046927SAndroid Build Coastguard Worker   //     and available for inspection
155*61046927SAndroid Build Coastguard Worker   // 0 - only the resources referenced by the captured frame are included
156*61046927SAndroid Build Coastguard Worker   eRENDERDOC_Option_RefAllResources = 8,
157*61046927SAndroid Build Coastguard Worker 
158*61046927SAndroid Build Coastguard Worker   // **NOTE**: As of RenderDoc v1.1 this option has been deprecated. Setting or
159*61046927SAndroid Build Coastguard Worker   // getting it will be ignored, to allow compatibility with older versions.
160*61046927SAndroid Build Coastguard Worker   // In v1.1 the option acts as if it's always enabled.
161*61046927SAndroid Build Coastguard Worker   //
162*61046927SAndroid Build Coastguard Worker   // By default RenderDoc skips saving initial states for resources where the
163*61046927SAndroid Build Coastguard Worker   // previous contents don't appear to be used, assuming that writes before
164*61046927SAndroid Build Coastguard Worker   // reads indicate previous contents aren't used.
165*61046927SAndroid Build Coastguard Worker   //
166*61046927SAndroid Build Coastguard Worker   // Default - disabled
167*61046927SAndroid Build Coastguard Worker   //
168*61046927SAndroid Build Coastguard Worker   // 1 - initial contents at the start of each captured frame are saved, even if
169*61046927SAndroid Build Coastguard Worker   //     they are later overwritten or cleared before being used.
170*61046927SAndroid Build Coastguard Worker   // 0 - unless a read is detected, initial contents will not be saved and will
171*61046927SAndroid Build Coastguard Worker   //     appear as black or empty data.
172*61046927SAndroid Build Coastguard Worker   eRENDERDOC_Option_SaveAllInitials = 9,
173*61046927SAndroid Build Coastguard Worker 
174*61046927SAndroid Build Coastguard Worker   // In APIs that allow for the recording of command lists to be replayed later,
175*61046927SAndroid Build Coastguard Worker   // RenderDoc may choose to not capture command lists before a frame capture is
176*61046927SAndroid Build Coastguard Worker   // triggered, to reduce overheads. This means any command lists recorded once
177*61046927SAndroid Build Coastguard Worker   // and replayed many times will not be available and may cause a failure to
178*61046927SAndroid Build Coastguard Worker   // capture.
179*61046927SAndroid Build Coastguard Worker   //
180*61046927SAndroid Build Coastguard Worker   // Note this is only true for APIs where multithreading is difficult or
181*61046927SAndroid Build Coastguard Worker   // discouraged. Newer APIs like Vulkan and D3D12 will ignore this option
182*61046927SAndroid Build Coastguard Worker   // and always capture all command lists since the API is heavily oriented
183*61046927SAndroid Build Coastguard Worker   // around it and the overheads have been reduced by API design.
184*61046927SAndroid Build Coastguard Worker   //
185*61046927SAndroid Build Coastguard Worker   // 1 - All command lists are captured from the start of the application
186*61046927SAndroid Build Coastguard Worker   // 0 - Command lists are only captured if their recording begins during
187*61046927SAndroid Build Coastguard Worker   //     the period when a frame capture is in progress.
188*61046927SAndroid Build Coastguard Worker   eRENDERDOC_Option_CaptureAllCmdLists = 10,
189*61046927SAndroid Build Coastguard Worker 
190*61046927SAndroid Build Coastguard Worker   // Mute API debugging output when the API validation mode option is enabled
191*61046927SAndroid Build Coastguard Worker   //
192*61046927SAndroid Build Coastguard Worker   // Default - enabled
193*61046927SAndroid Build Coastguard Worker   //
194*61046927SAndroid Build Coastguard Worker   // 1 - Mute any API debug messages from being displayed or passed through
195*61046927SAndroid Build Coastguard Worker   // 0 - API debugging is displayed as normal
196*61046927SAndroid Build Coastguard Worker   eRENDERDOC_Option_DebugOutputMute = 11,
197*61046927SAndroid Build Coastguard Worker 
198*61046927SAndroid Build Coastguard Worker } RENDERDOC_CaptureOption;
199*61046927SAndroid Build Coastguard Worker 
200*61046927SAndroid Build Coastguard Worker // Sets an option that controls how RenderDoc behaves on capture.
201*61046927SAndroid Build Coastguard Worker //
202*61046927SAndroid Build Coastguard Worker // Returns 1 if the option and value are valid
203*61046927SAndroid Build Coastguard Worker // Returns 0 if either is invalid and the option is unchanged
204*61046927SAndroid Build Coastguard Worker typedef int(RENDERDOC_CC *pRENDERDOC_SetCaptureOptionU32)(RENDERDOC_CaptureOption opt, uint32_t val);
205*61046927SAndroid Build Coastguard Worker typedef int(RENDERDOC_CC *pRENDERDOC_SetCaptureOptionF32)(RENDERDOC_CaptureOption opt, float val);
206*61046927SAndroid Build Coastguard Worker 
207*61046927SAndroid Build Coastguard Worker // Gets the current value of an option as a uint32_t
208*61046927SAndroid Build Coastguard Worker //
209*61046927SAndroid Build Coastguard Worker // If the option is invalid, 0xffffffff is returned
210*61046927SAndroid Build Coastguard Worker typedef uint32_t(RENDERDOC_CC *pRENDERDOC_GetCaptureOptionU32)(RENDERDOC_CaptureOption opt);
211*61046927SAndroid Build Coastguard Worker 
212*61046927SAndroid Build Coastguard Worker // Gets the current value of an option as a float
213*61046927SAndroid Build Coastguard Worker //
214*61046927SAndroid Build Coastguard Worker // If the option is invalid, -FLT_MAX is returned
215*61046927SAndroid Build Coastguard Worker typedef float(RENDERDOC_CC *pRENDERDOC_GetCaptureOptionF32)(RENDERDOC_CaptureOption opt);
216*61046927SAndroid Build Coastguard Worker 
217*61046927SAndroid Build Coastguard Worker typedef enum {
218*61046927SAndroid Build Coastguard Worker   // '0' - '9' matches ASCII values
219*61046927SAndroid Build Coastguard Worker   eRENDERDOC_Key_0 = 0x30,
220*61046927SAndroid Build Coastguard Worker   eRENDERDOC_Key_1 = 0x31,
221*61046927SAndroid Build Coastguard Worker   eRENDERDOC_Key_2 = 0x32,
222*61046927SAndroid Build Coastguard Worker   eRENDERDOC_Key_3 = 0x33,
223*61046927SAndroid Build Coastguard Worker   eRENDERDOC_Key_4 = 0x34,
224*61046927SAndroid Build Coastguard Worker   eRENDERDOC_Key_5 = 0x35,
225*61046927SAndroid Build Coastguard Worker   eRENDERDOC_Key_6 = 0x36,
226*61046927SAndroid Build Coastguard Worker   eRENDERDOC_Key_7 = 0x37,
227*61046927SAndroid Build Coastguard Worker   eRENDERDOC_Key_8 = 0x38,
228*61046927SAndroid Build Coastguard Worker   eRENDERDOC_Key_9 = 0x39,
229*61046927SAndroid Build Coastguard Worker 
230*61046927SAndroid Build Coastguard Worker   // 'A' - 'Z' matches ASCII values
231*61046927SAndroid Build Coastguard Worker   eRENDERDOC_Key_A = 0x41,
232*61046927SAndroid Build Coastguard Worker   eRENDERDOC_Key_B = 0x42,
233*61046927SAndroid Build Coastguard Worker   eRENDERDOC_Key_C = 0x43,
234*61046927SAndroid Build Coastguard Worker   eRENDERDOC_Key_D = 0x44,
235*61046927SAndroid Build Coastguard Worker   eRENDERDOC_Key_E = 0x45,
236*61046927SAndroid Build Coastguard Worker   eRENDERDOC_Key_F = 0x46,
237*61046927SAndroid Build Coastguard Worker   eRENDERDOC_Key_G = 0x47,
238*61046927SAndroid Build Coastguard Worker   eRENDERDOC_Key_H = 0x48,
239*61046927SAndroid Build Coastguard Worker   eRENDERDOC_Key_I = 0x49,
240*61046927SAndroid Build Coastguard Worker   eRENDERDOC_Key_J = 0x4A,
241*61046927SAndroid Build Coastguard Worker   eRENDERDOC_Key_K = 0x4B,
242*61046927SAndroid Build Coastguard Worker   eRENDERDOC_Key_L = 0x4C,
243*61046927SAndroid Build Coastguard Worker   eRENDERDOC_Key_M = 0x4D,
244*61046927SAndroid Build Coastguard Worker   eRENDERDOC_Key_N = 0x4E,
245*61046927SAndroid Build Coastguard Worker   eRENDERDOC_Key_O = 0x4F,
246*61046927SAndroid Build Coastguard Worker   eRENDERDOC_Key_P = 0x50,
247*61046927SAndroid Build Coastguard Worker   eRENDERDOC_Key_Q = 0x51,
248*61046927SAndroid Build Coastguard Worker   eRENDERDOC_Key_R = 0x52,
249*61046927SAndroid Build Coastguard Worker   eRENDERDOC_Key_S = 0x53,
250*61046927SAndroid Build Coastguard Worker   eRENDERDOC_Key_T = 0x54,
251*61046927SAndroid Build Coastguard Worker   eRENDERDOC_Key_U = 0x55,
252*61046927SAndroid Build Coastguard Worker   eRENDERDOC_Key_V = 0x56,
253*61046927SAndroid Build Coastguard Worker   eRENDERDOC_Key_W = 0x57,
254*61046927SAndroid Build Coastguard Worker   eRENDERDOC_Key_X = 0x58,
255*61046927SAndroid Build Coastguard Worker   eRENDERDOC_Key_Y = 0x59,
256*61046927SAndroid Build Coastguard Worker   eRENDERDOC_Key_Z = 0x5A,
257*61046927SAndroid Build Coastguard Worker 
258*61046927SAndroid Build Coastguard Worker   // leave the rest of the ASCII range free
259*61046927SAndroid Build Coastguard Worker   // in case we want to use it later
260*61046927SAndroid Build Coastguard Worker   eRENDERDOC_Key_NonPrintable = 0x100,
261*61046927SAndroid Build Coastguard Worker 
262*61046927SAndroid Build Coastguard Worker   eRENDERDOC_Key_Divide,
263*61046927SAndroid Build Coastguard Worker   eRENDERDOC_Key_Multiply,
264*61046927SAndroid Build Coastguard Worker   eRENDERDOC_Key_Subtract,
265*61046927SAndroid Build Coastguard Worker   eRENDERDOC_Key_Plus,
266*61046927SAndroid Build Coastguard Worker 
267*61046927SAndroid Build Coastguard Worker   eRENDERDOC_Key_F1,
268*61046927SAndroid Build Coastguard Worker   eRENDERDOC_Key_F2,
269*61046927SAndroid Build Coastguard Worker   eRENDERDOC_Key_F3,
270*61046927SAndroid Build Coastguard Worker   eRENDERDOC_Key_F4,
271*61046927SAndroid Build Coastguard Worker   eRENDERDOC_Key_F5,
272*61046927SAndroid Build Coastguard Worker   eRENDERDOC_Key_F6,
273*61046927SAndroid Build Coastguard Worker   eRENDERDOC_Key_F7,
274*61046927SAndroid Build Coastguard Worker   eRENDERDOC_Key_F8,
275*61046927SAndroid Build Coastguard Worker   eRENDERDOC_Key_F9,
276*61046927SAndroid Build Coastguard Worker   eRENDERDOC_Key_F10,
277*61046927SAndroid Build Coastguard Worker   eRENDERDOC_Key_F11,
278*61046927SAndroid Build Coastguard Worker   eRENDERDOC_Key_F12,
279*61046927SAndroid Build Coastguard Worker 
280*61046927SAndroid Build Coastguard Worker   eRENDERDOC_Key_Home,
281*61046927SAndroid Build Coastguard Worker   eRENDERDOC_Key_End,
282*61046927SAndroid Build Coastguard Worker   eRENDERDOC_Key_Insert,
283*61046927SAndroid Build Coastguard Worker   eRENDERDOC_Key_Delete,
284*61046927SAndroid Build Coastguard Worker   eRENDERDOC_Key_PageUp,
285*61046927SAndroid Build Coastguard Worker   eRENDERDOC_Key_PageDn,
286*61046927SAndroid Build Coastguard Worker 
287*61046927SAndroid Build Coastguard Worker   eRENDERDOC_Key_Backspace,
288*61046927SAndroid Build Coastguard Worker   eRENDERDOC_Key_Tab,
289*61046927SAndroid Build Coastguard Worker   eRENDERDOC_Key_PrtScrn,
290*61046927SAndroid Build Coastguard Worker   eRENDERDOC_Key_Pause,
291*61046927SAndroid Build Coastguard Worker 
292*61046927SAndroid Build Coastguard Worker   eRENDERDOC_Key_Max,
293*61046927SAndroid Build Coastguard Worker } RENDERDOC_InputButton;
294*61046927SAndroid Build Coastguard Worker 
295*61046927SAndroid Build Coastguard Worker // Sets which key or keys can be used to toggle focus between multiple windows
296*61046927SAndroid Build Coastguard Worker //
297*61046927SAndroid Build Coastguard Worker // If keys is NULL or num is 0, toggle keys will be disabled
298*61046927SAndroid Build Coastguard Worker typedef void(RENDERDOC_CC *pRENDERDOC_SetFocusToggleKeys)(RENDERDOC_InputButton *keys, int num);
299*61046927SAndroid Build Coastguard Worker 
300*61046927SAndroid Build Coastguard Worker // Sets which key or keys can be used to capture the next frame
301*61046927SAndroid Build Coastguard Worker //
302*61046927SAndroid Build Coastguard Worker // If keys is NULL or num is 0, captures keys will be disabled
303*61046927SAndroid Build Coastguard Worker typedef void(RENDERDOC_CC *pRENDERDOC_SetCaptureKeys)(RENDERDOC_InputButton *keys, int num);
304*61046927SAndroid Build Coastguard Worker 
305*61046927SAndroid Build Coastguard Worker typedef enum {
306*61046927SAndroid Build Coastguard Worker   // This single bit controls whether the overlay is enabled or disabled globally
307*61046927SAndroid Build Coastguard Worker   eRENDERDOC_Overlay_Enabled = 0x1,
308*61046927SAndroid Build Coastguard Worker 
309*61046927SAndroid Build Coastguard Worker   // Show the average framerate over several seconds as well as min/max
310*61046927SAndroid Build Coastguard Worker   eRENDERDOC_Overlay_FrameRate = 0x2,
311*61046927SAndroid Build Coastguard Worker 
312*61046927SAndroid Build Coastguard Worker   // Show the current frame number
313*61046927SAndroid Build Coastguard Worker   eRENDERDOC_Overlay_FrameNumber = 0x4,
314*61046927SAndroid Build Coastguard Worker 
315*61046927SAndroid Build Coastguard Worker   // Show a list of recent captures, and how many captures have been made
316*61046927SAndroid Build Coastguard Worker   eRENDERDOC_Overlay_CaptureList = 0x8,
317*61046927SAndroid Build Coastguard Worker 
318*61046927SAndroid Build Coastguard Worker   // Default values for the overlay mask
319*61046927SAndroid Build Coastguard Worker   eRENDERDOC_Overlay_Default = (eRENDERDOC_Overlay_Enabled | eRENDERDOC_Overlay_FrameRate |
320*61046927SAndroid Build Coastguard Worker                                 eRENDERDOC_Overlay_FrameNumber | eRENDERDOC_Overlay_CaptureList),
321*61046927SAndroid Build Coastguard Worker 
322*61046927SAndroid Build Coastguard Worker   // Enable all bits
323*61046927SAndroid Build Coastguard Worker   eRENDERDOC_Overlay_All = ~0U,
324*61046927SAndroid Build Coastguard Worker 
325*61046927SAndroid Build Coastguard Worker   // Disable all bits
326*61046927SAndroid Build Coastguard Worker   eRENDERDOC_Overlay_None = 0,
327*61046927SAndroid Build Coastguard Worker } RENDERDOC_OverlayBits;
328*61046927SAndroid Build Coastguard Worker 
329*61046927SAndroid Build Coastguard Worker // returns the overlay bits that have been set
330*61046927SAndroid Build Coastguard Worker typedef uint32_t(RENDERDOC_CC *pRENDERDOC_GetOverlayBits)();
331*61046927SAndroid Build Coastguard Worker // sets the overlay bits with an and & or mask
332*61046927SAndroid Build Coastguard Worker typedef void(RENDERDOC_CC *pRENDERDOC_MaskOverlayBits)(uint32_t And, uint32_t Or);
333*61046927SAndroid Build Coastguard Worker 
334*61046927SAndroid Build Coastguard Worker // this function will attempt to shut down RenderDoc.
335*61046927SAndroid Build Coastguard Worker //
336*61046927SAndroid Build Coastguard Worker // Note: that this will only work correctly if done immediately after
337*61046927SAndroid Build Coastguard Worker // the dll is loaded, before any API work happens. RenderDoc will remove its
338*61046927SAndroid Build Coastguard Worker // injected hooks and shut down. Behaviour is undefined if this is called
339*61046927SAndroid Build Coastguard Worker // after any API functions have been called.
340*61046927SAndroid Build Coastguard Worker typedef void(RENDERDOC_CC *pRENDERDOC_Shutdown)();
341*61046927SAndroid Build Coastguard Worker 
342*61046927SAndroid Build Coastguard Worker // This function will unload RenderDoc's crash handler.
343*61046927SAndroid Build Coastguard Worker //
344*61046927SAndroid Build Coastguard Worker // If you use your own crash handler and don't want RenderDoc's handler to
345*61046927SAndroid Build Coastguard Worker // intercede, you can call this function to unload it and any unhandled
346*61046927SAndroid Build Coastguard Worker // exceptions will pass to the next handler.
347*61046927SAndroid Build Coastguard Worker typedef void(RENDERDOC_CC *pRENDERDOC_UnloadCrashHandler)();
348*61046927SAndroid Build Coastguard Worker 
349*61046927SAndroid Build Coastguard Worker // Sets the capture file path template
350*61046927SAndroid Build Coastguard Worker //
351*61046927SAndroid Build Coastguard Worker // pathtemplate is a UTF-8 string that gives a template for how captures will be named
352*61046927SAndroid Build Coastguard Worker // and where they will be saved.
353*61046927SAndroid Build Coastguard Worker //
354*61046927SAndroid Build Coastguard Worker // Any extension is stripped off the path, and captures are saved in the directory
355*61046927SAndroid Build Coastguard Worker // specified, and named with the filename and the frame number appended. If the
356*61046927SAndroid Build Coastguard Worker // directory does not exist it will be created, including any parent directories.
357*61046927SAndroid Build Coastguard Worker //
358*61046927SAndroid Build Coastguard Worker // If pathtemplate is NULL, the template will remain unchanged
359*61046927SAndroid Build Coastguard Worker //
360*61046927SAndroid Build Coastguard Worker // Example:
361*61046927SAndroid Build Coastguard Worker //
362*61046927SAndroid Build Coastguard Worker // SetCaptureFilePathTemplate("my_captures/example");
363*61046927SAndroid Build Coastguard Worker //
364*61046927SAndroid Build Coastguard Worker // Capture #1 -> my_captures/example_frame123.rdc
365*61046927SAndroid Build Coastguard Worker // Capture #2 -> my_captures/example_frame456.rdc
366*61046927SAndroid Build Coastguard Worker typedef void(RENDERDOC_CC *pRENDERDOC_SetCaptureFilePathTemplate)(const char *pathtemplate);
367*61046927SAndroid Build Coastguard Worker 
368*61046927SAndroid Build Coastguard Worker // returns the current capture path template, see SetCaptureFileTemplate above, as a UTF-8 string
369*61046927SAndroid Build Coastguard Worker typedef const char *(RENDERDOC_CC *pRENDERDOC_GetCaptureFilePathTemplate)();
370*61046927SAndroid Build Coastguard Worker 
371*61046927SAndroid Build Coastguard Worker // DEPRECATED: compatibility for code compiled against pre-1.1.2 headers.
372*61046927SAndroid Build Coastguard Worker typedef void(RENDERDOC_CC *pRENDERDOC_SetLogFilePathTemplate)(const char *pathtemplate);
373*61046927SAndroid Build Coastguard Worker typedef const char *(RENDERDOC_CC *pRENDERDOC_GetLogFilePathTemplate)();
374*61046927SAndroid Build Coastguard Worker 
375*61046927SAndroid Build Coastguard Worker // returns the number of captures that have been made
376*61046927SAndroid Build Coastguard Worker typedef uint32_t(RENDERDOC_CC *pRENDERDOC_GetNumCaptures)();
377*61046927SAndroid Build Coastguard Worker 
378*61046927SAndroid Build Coastguard Worker // This function returns the details of a capture, by index. New captures are added
379*61046927SAndroid Build Coastguard Worker // to the end of the list.
380*61046927SAndroid Build Coastguard Worker //
381*61046927SAndroid Build Coastguard Worker // filename will be filled with the absolute path to the capture file, as a UTF-8 string
382*61046927SAndroid Build Coastguard Worker // pathlength will be written with the length in bytes of the filename string
383*61046927SAndroid Build Coastguard Worker // timestamp will be written with the time of the capture, in seconds since the Unix epoch
384*61046927SAndroid Build Coastguard Worker //
385*61046927SAndroid Build Coastguard Worker // Any of the parameters can be NULL and they'll be skipped.
386*61046927SAndroid Build Coastguard Worker //
387*61046927SAndroid Build Coastguard Worker // The function will return 1 if the capture index is valid, or 0 if the index is invalid
388*61046927SAndroid Build Coastguard Worker // If the index is invalid, the values will be unchanged
389*61046927SAndroid Build Coastguard Worker //
390*61046927SAndroid Build Coastguard Worker // Note: when captures are deleted in the UI they will remain in this list, so the
391*61046927SAndroid Build Coastguard Worker // capture path may not exist anymore.
392*61046927SAndroid Build Coastguard Worker typedef uint32_t(RENDERDOC_CC *pRENDERDOC_GetCapture)(uint32_t idx, char *filename,
393*61046927SAndroid Build Coastguard Worker                                                       uint32_t *pathlength, uint64_t *timestamp);
394*61046927SAndroid Build Coastguard Worker 
395*61046927SAndroid Build Coastguard Worker // returns 1 if the RenderDoc UI is connected to this application, 0 otherwise
396*61046927SAndroid Build Coastguard Worker typedef uint32_t(RENDERDOC_CC *pRENDERDOC_IsTargetControlConnected)();
397*61046927SAndroid Build Coastguard Worker 
398*61046927SAndroid Build Coastguard Worker // DEPRECATED: compatibility for code compiled against pre-1.1.1 headers.
399*61046927SAndroid Build Coastguard Worker // This was renamed to IsTargetControlConnected in API 1.1.1, the old typedef is kept here for
400*61046927SAndroid Build Coastguard Worker // backwards compatibility with old code, it is castable either way since it's ABI compatible
401*61046927SAndroid Build Coastguard Worker // as the same function pointer type.
402*61046927SAndroid Build Coastguard Worker typedef uint32_t(RENDERDOC_CC *pRENDERDOC_IsRemoteAccessConnected)();
403*61046927SAndroid Build Coastguard Worker 
404*61046927SAndroid Build Coastguard Worker // This function will launch the Replay UI associated with the RenderDoc library injected
405*61046927SAndroid Build Coastguard Worker // into the running application.
406*61046927SAndroid Build Coastguard Worker //
407*61046927SAndroid Build Coastguard Worker // if connectTargetControl is 1, the Replay UI will be launched with a command line parameter
408*61046927SAndroid Build Coastguard Worker // to connect to this application
409*61046927SAndroid Build Coastguard Worker // cmdline is the rest of the command line, as a UTF-8 string. E.g. a captures to open
410*61046927SAndroid Build Coastguard Worker // if cmdline is NULL, the command line will be empty.
411*61046927SAndroid Build Coastguard Worker //
412*61046927SAndroid Build Coastguard Worker // returns the PID of the replay UI if successful, 0 if not successful.
413*61046927SAndroid Build Coastguard Worker typedef uint32_t(RENDERDOC_CC *pRENDERDOC_LaunchReplayUI)(uint32_t connectTargetControl,
414*61046927SAndroid Build Coastguard Worker                                                           const char *cmdline);
415*61046927SAndroid Build Coastguard Worker 
416*61046927SAndroid Build Coastguard Worker // RenderDoc can return a higher version than requested if it's backwards compatible,
417*61046927SAndroid Build Coastguard Worker // this function returns the actual version returned. If a parameter is NULL, it will be
418*61046927SAndroid Build Coastguard Worker // ignored and the others will be filled out.
419*61046927SAndroid Build Coastguard Worker typedef void(RENDERDOC_CC *pRENDERDOC_GetAPIVersion)(int *major, int *minor, int *patch);
420*61046927SAndroid Build Coastguard Worker 
421*61046927SAndroid Build Coastguard Worker //////////////////////////////////////////////////////////////////////////
422*61046927SAndroid Build Coastguard Worker // Capturing functions
423*61046927SAndroid Build Coastguard Worker //
424*61046927SAndroid Build Coastguard Worker 
425*61046927SAndroid Build Coastguard Worker // A device pointer is a pointer to the API's root handle.
426*61046927SAndroid Build Coastguard Worker //
427*61046927SAndroid Build Coastguard Worker // This would be an ID3D11Device, HGLRC/GLXContext, ID3D12Device, etc
428*61046927SAndroid Build Coastguard Worker typedef void *RENDERDOC_DevicePointer;
429*61046927SAndroid Build Coastguard Worker 
430*61046927SAndroid Build Coastguard Worker // A window handle is the OS's native window handle
431*61046927SAndroid Build Coastguard Worker //
432*61046927SAndroid Build Coastguard Worker // This would be an HWND, GLXDrawable, etc
433*61046927SAndroid Build Coastguard Worker typedef void *RENDERDOC_WindowHandle;
434*61046927SAndroid Build Coastguard Worker 
435*61046927SAndroid Build Coastguard Worker // A helper macro for Vulkan, where the device handle cannot be used directly.
436*61046927SAndroid Build Coastguard Worker //
437*61046927SAndroid Build Coastguard Worker // Passing the VkInstance to this macro will return the RENDERDOC_DevicePointer to use.
438*61046927SAndroid Build Coastguard Worker //
439*61046927SAndroid Build Coastguard Worker // Specifically, the value needed is the dispatch table pointer, which sits as the first
440*61046927SAndroid Build Coastguard Worker // pointer-sized object in the memory pointed to by the VkInstance. Thus we cast to a void** and
441*61046927SAndroid Build Coastguard Worker // indirect once.
442*61046927SAndroid Build Coastguard Worker #define RENDERDOC_DEVICEPOINTER_FROM_VKINSTANCE(inst) (*((void **)(inst)))
443*61046927SAndroid Build Coastguard Worker 
444*61046927SAndroid Build Coastguard Worker // This sets the RenderDoc in-app overlay in the API/window pair as 'active' and it will
445*61046927SAndroid Build Coastguard Worker // respond to keypresses. Neither parameter can be NULL
446*61046927SAndroid Build Coastguard Worker typedef void(RENDERDOC_CC *pRENDERDOC_SetActiveWindow)(RENDERDOC_DevicePointer device,
447*61046927SAndroid Build Coastguard Worker                                                        RENDERDOC_WindowHandle wndHandle);
448*61046927SAndroid Build Coastguard Worker 
449*61046927SAndroid Build Coastguard Worker // capture the next frame on whichever window and API is currently considered active
450*61046927SAndroid Build Coastguard Worker typedef void(RENDERDOC_CC *pRENDERDOC_TriggerCapture)();
451*61046927SAndroid Build Coastguard Worker 
452*61046927SAndroid Build Coastguard Worker // capture the next N frames on whichever window and API is currently considered active
453*61046927SAndroid Build Coastguard Worker typedef void(RENDERDOC_CC *pRENDERDOC_TriggerMultiFrameCapture)(uint32_t numFrames);
454*61046927SAndroid Build Coastguard Worker 
455*61046927SAndroid Build Coastguard Worker // When choosing either a device pointer or a window handle to capture, you can pass NULL.
456*61046927SAndroid Build Coastguard Worker // Passing NULL specifies a 'wildcard' match against anything. This allows you to specify
457*61046927SAndroid Build Coastguard Worker // any API rendering to a specific window, or a specific API instance rendering to any window,
458*61046927SAndroid Build Coastguard Worker // or in the simplest case of one window and one API, you can just pass NULL for both.
459*61046927SAndroid Build Coastguard Worker //
460*61046927SAndroid Build Coastguard Worker // In either case, if there are two or more possible matching (device,window) pairs it
461*61046927SAndroid Build Coastguard Worker // is undefined which one will be captured.
462*61046927SAndroid Build Coastguard Worker //
463*61046927SAndroid Build Coastguard Worker // Note: for headless rendering you can pass NULL for the window handle and either specify
464*61046927SAndroid Build Coastguard Worker // a device pointer or leave it NULL as above.
465*61046927SAndroid Build Coastguard Worker 
466*61046927SAndroid Build Coastguard Worker // Immediately starts capturing API calls on the specified device pointer and window handle.
467*61046927SAndroid Build Coastguard Worker //
468*61046927SAndroid Build Coastguard Worker // If there is no matching thing to capture (e.g. no supported API has been initialised),
469*61046927SAndroid Build Coastguard Worker // this will do nothing.
470*61046927SAndroid Build Coastguard Worker //
471*61046927SAndroid Build Coastguard Worker // The results are undefined (including crashes) if two captures are started overlapping,
472*61046927SAndroid Build Coastguard Worker // even on separate devices and/oror windows.
473*61046927SAndroid Build Coastguard Worker typedef void(RENDERDOC_CC *pRENDERDOC_StartFrameCapture)(RENDERDOC_DevicePointer device,
474*61046927SAndroid Build Coastguard Worker                                                          RENDERDOC_WindowHandle wndHandle);
475*61046927SAndroid Build Coastguard Worker 
476*61046927SAndroid Build Coastguard Worker // Returns whether or not a frame capture is currently ongoing anywhere.
477*61046927SAndroid Build Coastguard Worker //
478*61046927SAndroid Build Coastguard Worker // This will return 1 if a capture is ongoing, and 0 if there is no capture running
479*61046927SAndroid Build Coastguard Worker typedef uint32_t(RENDERDOC_CC *pRENDERDOC_IsFrameCapturing)();
480*61046927SAndroid Build Coastguard Worker 
481*61046927SAndroid Build Coastguard Worker // Ends capturing immediately.
482*61046927SAndroid Build Coastguard Worker //
483*61046927SAndroid Build Coastguard Worker // This will return 1 if the capture succeeded, and 0 if there was an error capturing.
484*61046927SAndroid Build Coastguard Worker typedef uint32_t(RENDERDOC_CC *pRENDERDOC_EndFrameCapture)(RENDERDOC_DevicePointer device,
485*61046927SAndroid Build Coastguard Worker                                                            RENDERDOC_WindowHandle wndHandle);
486*61046927SAndroid Build Coastguard Worker 
487*61046927SAndroid Build Coastguard Worker //////////////////////////////////////////////////////////////////////////////////////////////////
488*61046927SAndroid Build Coastguard Worker // RenderDoc API versions
489*61046927SAndroid Build Coastguard Worker //
490*61046927SAndroid Build Coastguard Worker 
491*61046927SAndroid Build Coastguard Worker // RenderDoc uses semantic versioning (http://semver.org/).
492*61046927SAndroid Build Coastguard Worker //
493*61046927SAndroid Build Coastguard Worker // MAJOR version is incremented when incompatible API changes happen.
494*61046927SAndroid Build Coastguard Worker // MINOR version is incremented when functionality is added in a backwards-compatible manner.
495*61046927SAndroid Build Coastguard Worker // PATCH version is incremented when backwards-compatible bug fixes happen.
496*61046927SAndroid Build Coastguard Worker //
497*61046927SAndroid Build Coastguard Worker // Note that this means the API returned can be higher than the one you might have requested.
498*61046927SAndroid Build Coastguard Worker // e.g. if you are running against a newer RenderDoc that supports 1.0.1, it will be returned
499*61046927SAndroid Build Coastguard Worker // instead of 1.0.0. You can check this with the GetAPIVersion entry point
500*61046927SAndroid Build Coastguard Worker typedef enum {
501*61046927SAndroid Build Coastguard Worker   eRENDERDOC_API_Version_1_0_0 = 10000,    // RENDERDOC_API_1_0_0 = 1 00 00
502*61046927SAndroid Build Coastguard Worker   eRENDERDOC_API_Version_1_0_1 = 10001,    // RENDERDOC_API_1_0_1 = 1 00 01
503*61046927SAndroid Build Coastguard Worker   eRENDERDOC_API_Version_1_0_2 = 10002,    // RENDERDOC_API_1_0_2 = 1 00 02
504*61046927SAndroid Build Coastguard Worker   eRENDERDOC_API_Version_1_1_0 = 10100,    // RENDERDOC_API_1_1_0 = 1 01 00
505*61046927SAndroid Build Coastguard Worker   eRENDERDOC_API_Version_1_1_1 = 10101,    // RENDERDOC_API_1_1_1 = 1 01 01
506*61046927SAndroid Build Coastguard Worker   eRENDERDOC_API_Version_1_1_2 = 10102,    // RENDERDOC_API_1_1_2 = 1 01 02
507*61046927SAndroid Build Coastguard Worker } RENDERDOC_Version;
508*61046927SAndroid Build Coastguard Worker 
509*61046927SAndroid Build Coastguard Worker // API version changelog:
510*61046927SAndroid Build Coastguard Worker //
511*61046927SAndroid Build Coastguard Worker // 1.0.0 - initial release
512*61046927SAndroid Build Coastguard Worker // 1.0.1 - Bugfix: IsFrameCapturing() was returning false for captures that were triggered
513*61046927SAndroid Build Coastguard Worker //         by keypress or TriggerCapture, instead of Start/EndFrameCapture.
514*61046927SAndroid Build Coastguard Worker // 1.0.2 - Refactor: Renamed eRENDERDOC_Option_DebugDeviceMode to eRENDERDOC_Option_APIValidation
515*61046927SAndroid Build Coastguard Worker // 1.1.0 - Add feature: TriggerMultiFrameCapture(). Backwards compatible with 1.0.x since the new
516*61046927SAndroid Build Coastguard Worker //         function pointer is added to the end of the struct, the original layout is identical
517*61046927SAndroid Build Coastguard Worker // 1.1.1 - Refactor: Renamed remote access to target control (to better disambiguate from remote
518*61046927SAndroid Build Coastguard Worker //         replay/remote server concept in replay UI)
519*61046927SAndroid Build Coastguard Worker // 1.1.2 - Refactor: Renamed "log file" in function names to just capture, to clarify that these
520*61046927SAndroid Build Coastguard Worker //         are captures and not debug logging files. This is the first API version in the v1.0
521*61046927SAndroid Build Coastguard Worker //         branch.
522*61046927SAndroid Build Coastguard Worker 
523*61046927SAndroid Build Coastguard Worker // eRENDERDOC_API_Version_1_1_0
524*61046927SAndroid Build Coastguard Worker typedef struct
525*61046927SAndroid Build Coastguard Worker {
526*61046927SAndroid Build Coastguard Worker   pRENDERDOC_GetAPIVersion GetAPIVersion;
527*61046927SAndroid Build Coastguard Worker 
528*61046927SAndroid Build Coastguard Worker   pRENDERDOC_SetCaptureOptionU32 SetCaptureOptionU32;
529*61046927SAndroid Build Coastguard Worker   pRENDERDOC_SetCaptureOptionF32 SetCaptureOptionF32;
530*61046927SAndroid Build Coastguard Worker 
531*61046927SAndroid Build Coastguard Worker   pRENDERDOC_GetCaptureOptionU32 GetCaptureOptionU32;
532*61046927SAndroid Build Coastguard Worker   pRENDERDOC_GetCaptureOptionF32 GetCaptureOptionF32;
533*61046927SAndroid Build Coastguard Worker 
534*61046927SAndroid Build Coastguard Worker   pRENDERDOC_SetFocusToggleKeys SetFocusToggleKeys;
535*61046927SAndroid Build Coastguard Worker   pRENDERDOC_SetCaptureKeys SetCaptureKeys;
536*61046927SAndroid Build Coastguard Worker 
537*61046927SAndroid Build Coastguard Worker   pRENDERDOC_GetOverlayBits GetOverlayBits;
538*61046927SAndroid Build Coastguard Worker   pRENDERDOC_MaskOverlayBits MaskOverlayBits;
539*61046927SAndroid Build Coastguard Worker 
540*61046927SAndroid Build Coastguard Worker   pRENDERDOC_Shutdown Shutdown;
541*61046927SAndroid Build Coastguard Worker   pRENDERDOC_UnloadCrashHandler UnloadCrashHandler;
542*61046927SAndroid Build Coastguard Worker 
543*61046927SAndroid Build Coastguard Worker   pRENDERDOC_SetLogFilePathTemplate SetLogFilePathTemplate;
544*61046927SAndroid Build Coastguard Worker   pRENDERDOC_GetLogFilePathTemplate GetLogFilePathTemplate;
545*61046927SAndroid Build Coastguard Worker 
546*61046927SAndroid Build Coastguard Worker   pRENDERDOC_GetNumCaptures GetNumCaptures;
547*61046927SAndroid Build Coastguard Worker   pRENDERDOC_GetCapture GetCapture;
548*61046927SAndroid Build Coastguard Worker 
549*61046927SAndroid Build Coastguard Worker   pRENDERDOC_TriggerCapture TriggerCapture;
550*61046927SAndroid Build Coastguard Worker 
551*61046927SAndroid Build Coastguard Worker   pRENDERDOC_IsRemoteAccessConnected IsRemoteAccessConnected;
552*61046927SAndroid Build Coastguard Worker   pRENDERDOC_LaunchReplayUI LaunchReplayUI;
553*61046927SAndroid Build Coastguard Worker 
554*61046927SAndroid Build Coastguard Worker   pRENDERDOC_SetActiveWindow SetActiveWindow;
555*61046927SAndroid Build Coastguard Worker 
556*61046927SAndroid Build Coastguard Worker   pRENDERDOC_StartFrameCapture StartFrameCapture;
557*61046927SAndroid Build Coastguard Worker   pRENDERDOC_IsFrameCapturing IsFrameCapturing;
558*61046927SAndroid Build Coastguard Worker   pRENDERDOC_EndFrameCapture EndFrameCapture;
559*61046927SAndroid Build Coastguard Worker 
560*61046927SAndroid Build Coastguard Worker   pRENDERDOC_TriggerMultiFrameCapture TriggerMultiFrameCapture;
561*61046927SAndroid Build Coastguard Worker } RENDERDOC_API_1_1_0;
562*61046927SAndroid Build Coastguard Worker 
563*61046927SAndroid Build Coastguard Worker typedef RENDERDOC_API_1_1_0 RENDERDOC_API_1_0_0;
564*61046927SAndroid Build Coastguard Worker typedef RENDERDOC_API_1_1_0 RENDERDOC_API_1_0_1;
565*61046927SAndroid Build Coastguard Worker typedef RENDERDOC_API_1_1_0 RENDERDOC_API_1_0_2;
566*61046927SAndroid Build Coastguard Worker 
567*61046927SAndroid Build Coastguard Worker // although this structure is identical to RENDERDOC_API_1_1_0, the member
568*61046927SAndroid Build Coastguard Worker // IsRemoteAccessConnected was renamed to IsTargetControlConnected. So that
569*61046927SAndroid Build Coastguard Worker // old code can still compile with a new header, we must declare a new struct
570*61046927SAndroid Build Coastguard Worker // type. It can be casted back and forth though, so we will still return a
571*61046927SAndroid Build Coastguard Worker // pointer to this type for all previous API versions - the above struct is
572*61046927SAndroid Build Coastguard Worker // purely legacy for compilation compatibility
573*61046927SAndroid Build Coastguard Worker 
574*61046927SAndroid Build Coastguard Worker // eRENDERDOC_API_Version_1_1_1
575*61046927SAndroid Build Coastguard Worker typedef struct
576*61046927SAndroid Build Coastguard Worker {
577*61046927SAndroid Build Coastguard Worker   pRENDERDOC_GetAPIVersion GetAPIVersion;
578*61046927SAndroid Build Coastguard Worker 
579*61046927SAndroid Build Coastguard Worker   pRENDERDOC_SetCaptureOptionU32 SetCaptureOptionU32;
580*61046927SAndroid Build Coastguard Worker   pRENDERDOC_SetCaptureOptionF32 SetCaptureOptionF32;
581*61046927SAndroid Build Coastguard Worker 
582*61046927SAndroid Build Coastguard Worker   pRENDERDOC_GetCaptureOptionU32 GetCaptureOptionU32;
583*61046927SAndroid Build Coastguard Worker   pRENDERDOC_GetCaptureOptionF32 GetCaptureOptionF32;
584*61046927SAndroid Build Coastguard Worker 
585*61046927SAndroid Build Coastguard Worker   pRENDERDOC_SetFocusToggleKeys SetFocusToggleKeys;
586*61046927SAndroid Build Coastguard Worker   pRENDERDOC_SetCaptureKeys SetCaptureKeys;
587*61046927SAndroid Build Coastguard Worker 
588*61046927SAndroid Build Coastguard Worker   pRENDERDOC_GetOverlayBits GetOverlayBits;
589*61046927SAndroid Build Coastguard Worker   pRENDERDOC_MaskOverlayBits MaskOverlayBits;
590*61046927SAndroid Build Coastguard Worker 
591*61046927SAndroid Build Coastguard Worker   pRENDERDOC_Shutdown Shutdown;
592*61046927SAndroid Build Coastguard Worker   pRENDERDOC_UnloadCrashHandler UnloadCrashHandler;
593*61046927SAndroid Build Coastguard Worker 
594*61046927SAndroid Build Coastguard Worker   pRENDERDOC_SetLogFilePathTemplate SetLogFilePathTemplate;
595*61046927SAndroid Build Coastguard Worker   pRENDERDOC_GetLogFilePathTemplate GetLogFilePathTemplate;
596*61046927SAndroid Build Coastguard Worker 
597*61046927SAndroid Build Coastguard Worker   pRENDERDOC_GetNumCaptures GetNumCaptures;
598*61046927SAndroid Build Coastguard Worker   pRENDERDOC_GetCapture GetCapture;
599*61046927SAndroid Build Coastguard Worker 
600*61046927SAndroid Build Coastguard Worker   pRENDERDOC_TriggerCapture TriggerCapture;
601*61046927SAndroid Build Coastguard Worker 
602*61046927SAndroid Build Coastguard Worker   pRENDERDOC_IsTargetControlConnected IsTargetControlConnected;
603*61046927SAndroid Build Coastguard Worker   pRENDERDOC_LaunchReplayUI LaunchReplayUI;
604*61046927SAndroid Build Coastguard Worker 
605*61046927SAndroid Build Coastguard Worker   pRENDERDOC_SetActiveWindow SetActiveWindow;
606*61046927SAndroid Build Coastguard Worker 
607*61046927SAndroid Build Coastguard Worker   pRENDERDOC_StartFrameCapture StartFrameCapture;
608*61046927SAndroid Build Coastguard Worker   pRENDERDOC_IsFrameCapturing IsFrameCapturing;
609*61046927SAndroid Build Coastguard Worker   pRENDERDOC_EndFrameCapture EndFrameCapture;
610*61046927SAndroid Build Coastguard Worker 
611*61046927SAndroid Build Coastguard Worker   pRENDERDOC_TriggerMultiFrameCapture TriggerMultiFrameCapture;
612*61046927SAndroid Build Coastguard Worker } RENDERDOC_API_1_1_1;
613*61046927SAndroid Build Coastguard Worker 
614*61046927SAndroid Build Coastguard Worker // similarly to above, we renamed Get/SetLogFilePathTemplate to Get/SetCaptureFilePathTemplate.
615*61046927SAndroid Build Coastguard Worker // We thus declare a new struct so that code that was referencing the RENDERDOC_API_1_1_1 struct
616*61046927SAndroid Build Coastguard Worker // can still compile without changes, but new code will use the new struct members
617*61046927SAndroid Build Coastguard Worker 
618*61046927SAndroid Build Coastguard Worker // eRENDERDOC_API_Version_1_1_2
619*61046927SAndroid Build Coastguard Worker typedef struct
620*61046927SAndroid Build Coastguard Worker {
621*61046927SAndroid Build Coastguard Worker   pRENDERDOC_GetAPIVersion GetAPIVersion;
622*61046927SAndroid Build Coastguard Worker 
623*61046927SAndroid Build Coastguard Worker   pRENDERDOC_SetCaptureOptionU32 SetCaptureOptionU32;
624*61046927SAndroid Build Coastguard Worker   pRENDERDOC_SetCaptureOptionF32 SetCaptureOptionF32;
625*61046927SAndroid Build Coastguard Worker 
626*61046927SAndroid Build Coastguard Worker   pRENDERDOC_GetCaptureOptionU32 GetCaptureOptionU32;
627*61046927SAndroid Build Coastguard Worker   pRENDERDOC_GetCaptureOptionF32 GetCaptureOptionF32;
628*61046927SAndroid Build Coastguard Worker 
629*61046927SAndroid Build Coastguard Worker   pRENDERDOC_SetFocusToggleKeys SetFocusToggleKeys;
630*61046927SAndroid Build Coastguard Worker   pRENDERDOC_SetCaptureKeys SetCaptureKeys;
631*61046927SAndroid Build Coastguard Worker 
632*61046927SAndroid Build Coastguard Worker   pRENDERDOC_GetOverlayBits GetOverlayBits;
633*61046927SAndroid Build Coastguard Worker   pRENDERDOC_MaskOverlayBits MaskOverlayBits;
634*61046927SAndroid Build Coastguard Worker 
635*61046927SAndroid Build Coastguard Worker   pRENDERDOC_Shutdown Shutdown;
636*61046927SAndroid Build Coastguard Worker   pRENDERDOC_UnloadCrashHandler UnloadCrashHandler;
637*61046927SAndroid Build Coastguard Worker 
638*61046927SAndroid Build Coastguard Worker   pRENDERDOC_SetCaptureFilePathTemplate SetCaptureFilePathTemplate;
639*61046927SAndroid Build Coastguard Worker   pRENDERDOC_GetCaptureFilePathTemplate GetCaptureFilePathTemplate;
640*61046927SAndroid Build Coastguard Worker 
641*61046927SAndroid Build Coastguard Worker   pRENDERDOC_GetNumCaptures GetNumCaptures;
642*61046927SAndroid Build Coastguard Worker   pRENDERDOC_GetCapture GetCapture;
643*61046927SAndroid Build Coastguard Worker 
644*61046927SAndroid Build Coastguard Worker   pRENDERDOC_TriggerCapture TriggerCapture;
645*61046927SAndroid Build Coastguard Worker 
646*61046927SAndroid Build Coastguard Worker   pRENDERDOC_IsTargetControlConnected IsTargetControlConnected;
647*61046927SAndroid Build Coastguard Worker   pRENDERDOC_LaunchReplayUI LaunchReplayUI;
648*61046927SAndroid Build Coastguard Worker 
649*61046927SAndroid Build Coastguard Worker   pRENDERDOC_SetActiveWindow SetActiveWindow;
650*61046927SAndroid Build Coastguard Worker 
651*61046927SAndroid Build Coastguard Worker   pRENDERDOC_StartFrameCapture StartFrameCapture;
652*61046927SAndroid Build Coastguard Worker   pRENDERDOC_IsFrameCapturing IsFrameCapturing;
653*61046927SAndroid Build Coastguard Worker   pRENDERDOC_EndFrameCapture EndFrameCapture;
654*61046927SAndroid Build Coastguard Worker 
655*61046927SAndroid Build Coastguard Worker   pRENDERDOC_TriggerMultiFrameCapture TriggerMultiFrameCapture;
656*61046927SAndroid Build Coastguard Worker } RENDERDOC_API_1_1_2;
657*61046927SAndroid Build Coastguard Worker 
658*61046927SAndroid Build Coastguard Worker //////////////////////////////////////////////////////////////////////////////////////////////////
659*61046927SAndroid Build Coastguard Worker // RenderDoc API entry point
660*61046927SAndroid Build Coastguard Worker //
661*61046927SAndroid Build Coastguard Worker // This entry point can be obtained via GetProcAddress/dlsym if RenderDoc is available.
662*61046927SAndroid Build Coastguard Worker //
663*61046927SAndroid Build Coastguard Worker // The name is the same as the typedef - "RENDERDOC_GetAPI"
664*61046927SAndroid Build Coastguard Worker //
665*61046927SAndroid Build Coastguard Worker // This function is not thread safe, and should not be called on multiple threads at once.
666*61046927SAndroid Build Coastguard Worker // Ideally, call this once as early as possible in your application's startup, before doing
667*61046927SAndroid Build Coastguard Worker // any API work, since some configuration functionality etc has to be done also before
668*61046927SAndroid Build Coastguard Worker // initialising any APIs.
669*61046927SAndroid Build Coastguard Worker //
670*61046927SAndroid Build Coastguard Worker // Parameters:
671*61046927SAndroid Build Coastguard Worker //   version is a single value from the RENDERDOC_Version above.
672*61046927SAndroid Build Coastguard Worker //
673*61046927SAndroid Build Coastguard Worker //   outAPIPointers will be filled out with a pointer to the corresponding struct of function
674*61046927SAndroid Build Coastguard Worker //   pointers.
675*61046927SAndroid Build Coastguard Worker //
676*61046927SAndroid Build Coastguard Worker // Returns:
677*61046927SAndroid Build Coastguard Worker //   1 - if the outAPIPointers has been filled with a pointer to the API struct requested
678*61046927SAndroid Build Coastguard Worker //   0 - if the requested version is not supported or the arguments are invalid.
679*61046927SAndroid Build Coastguard Worker //
680*61046927SAndroid Build Coastguard Worker typedef int(RENDERDOC_CC *pRENDERDOC_GetAPI)(RENDERDOC_Version version, void **outAPIPointers);
681*61046927SAndroid Build Coastguard Worker 
682*61046927SAndroid Build Coastguard Worker #ifdef __cplusplus
683*61046927SAndroid Build Coastguard Worker }    // extern "C"
684*61046927SAndroid Build Coastguard Worker #endif
685