blob: d51a3f6bf55c21b12f7660d2360fa413a9582ea0 [file] [log] [blame]
Courtney Goeltzenleuchter2220a3b2014-07-24 08:36:15 -06001//
2// File: mantleDbg.h
3//
4// Copyright 2014 ADVANCED MICRO DEVICES, INC. All Rights Reserved.
5//
6// AMD is granting you permission to use this software for reference
7// purposes only and not for use in any software product.
8//
9// You agree that you will not reverse engineer or decompile the Materials,
10// in whole or in part, except as allowed by applicable law.
11//
12// WARRANTY DISCLAIMER: THE SOFTWARE IS PROVIDED "AS IS" WITHOUT WARRANTY OF
13// ANY KIND. AMD DISCLAIMS ALL WARRANTIES, EXPRESS, IMPLIED, OR STATUTORY,
14// INCLUDING BUT NOT LIMITED TO THE IMPLIED WARRANTIES OF MERCHANTABILITY,
15// FITNESS FOR A PARTICULAR PURPOSE, TITLE, NON-INFRINGEMENT, THAT THE SOFTWARE
16// WILL RUN UNINTERRUPTED OR ERROR-FREE OR WARRANTIES ARISING FROM CUSTOM OF
17// TRADE OR COURSE OF USAGE. THE ENTIRE RISK ASSOCIATED WITH THE USE OF THE
18// SOFTWARE IS ASSUMED BY YOU.
19// Some jurisdictions do not allow the exclusion of implied warranties, so
20// the above exclusion may not apply to You.
21//
22// LIMITATION OF LIABILITY AND INDEMNIFICATION: AMD AND ITS LICENSORS WILL
23// NOT, UNDER ANY CIRCUMSTANCES BE LIABLE TO YOU FOR ANY PUNITIVE, DIRECT,
24// INCIDENTAL, INDIRECT, SPECIAL OR CONSEQUENTIAL DAMAGES ARISING FROM USE OF
25// THE SOFTWARE OR THIS AGREEMENT EVEN IF AMD AND ITS LICENSORS HAVE BEEN
26// ADVISED OF THE POSSIBILITY OF SUCH DAMAGES.
27// In no event shall AMD's total liability to You for all damages, losses,
28// and causes of action (whether in contract, tort (including negligence) or
29// otherwise) exceed the amount of $100 USD. You agree to defend, indemnify
30// and hold harmless AMD and its licensors, and any of their directors,
31// officers, employees, affiliates or agents from and against any and all
32// loss, damage, liability and other expenses (including reasonable attorneys'
33// fees), resulting from Your use of the Software or violation of the terms and
34// conditions of this Agreement.
35//
36// U.S. GOVERNMENT RESTRICTED RIGHTS: The Materials are provided with "RESTRICTED
37// RIGHTS." Use, duplication, or disclosure by the Government is subject to the
38// restrictions as set forth in FAR 52.227-14 and DFAR252.227-7013, et seq., or
39// its successor. Use of the Materials by the Government constitutes
40// acknowledgement of AMD's proprietary rights in them.
41//
42// EXPORT RESTRICTIONS: The Materials may be subject to export restrictions as
43// stated in the Software License Agreement.
44//
45
46#ifndef __MANTLEDBG_H__
47#define __MANTLEDBG_H__
48
49#include "mantle.h"
50
51#ifdef __cplusplus
52extern "C"
53{
54#endif // __cplusplus
55
56/*
57***************************************************************************************************
58* Mantle debug and validation features
59***************************************************************************************************
60*/
61
62typedef enum _GR_DBG_MSG_TYPE
63{
64 GR_DBG_MSG_UNKNOWN = 0x00020000,
65 GR_DBG_MSG_ERROR = 0x00020001,
66 GR_DBG_MSG_WARNING = 0x00020002,
67 GR_DBG_MSG_PERF_WARNING = 0x00020003,
68
69 GR_DBG_MSG_TYPE_BEGIN_RANGE = GR_DBG_MSG_UNKNOWN,
70 GR_DBG_MSG_TYPE_END_RANGE = GR_DBG_MSG_PERF_WARNING,
71 GR_NUM_DBG_MSG_TYPE = (GR_DBG_MSG_TYPE_END_RANGE - GR_DBG_MSG_TYPE_BEGIN_RANGE + 1),
72} GR_DBG_MSG_TYPE;
73
74typedef enum _GR_DBG_GLOBAL_OPTION
75{
76 GR_DBG_OPTION_DEBUG_ECHO_ENABLE = 0x00020100,
77 GR_DBG_OPTION_BREAK_ON_ERROR = 0x00020101,
78 GR_DBG_OPTION_BREAK_ON_WARNING = 0x00020102,
79
80 GR_DBG_GLOBAL_OPTION_BEGIN_RANGE = GR_DBG_OPTION_DEBUG_ECHO_ENABLE,
81 GR_DBG_GLOBAL_OPTION_END_RANGE = GR_DBG_OPTION_BREAK_ON_WARNING,
82 GR_NUM_DBG_GLOBAL_OPTION = (GR_DBG_GLOBAL_OPTION_END_RANGE - GR_DBG_GLOBAL_OPTION_BEGIN_RANGE + 1),
83} GR_DBG_GLOBAL_OPTION;
84
85typedef enum _GR_DBG_DEVICE_OPTION
86{
87 GR_DBG_OPTION_DISABLE_PIPELINE_LOADS = 0x00020400,
88 GR_DBG_OPTION_FORCE_OBJECT_MEMORY_REQS = 0x00020401,
89 GR_DBG_OPTION_FORCE_LARGE_IMAGE_ALIGNMENT = 0x00020402,
90
91 GR_DBG_DEVICE_OPTION_BEGIN_RANGE = GR_DBG_OPTION_DISABLE_PIPELINE_LOADS,
92 GR_DBG_DEVICE_OPTION_END_RANGE = GR_DBG_OPTION_FORCE_LARGE_IMAGE_ALIGNMENT,
93 GR_NUM_DBG_DEVICE_OPTION = (GR_DBG_DEVICE_OPTION_END_RANGE - GR_DBG_DEVICE_OPTION_BEGIN_RANGE + 1),
94} GR_DBG_DEVICE_OPTION;
95
96typedef enum _GR_DBG_MSG_FILTER
97{
98 GR_DBG_MSG_FILTER_NONE = 0x00020800,
99 GR_DBG_MSG_FILTER_REPEATED = 0x00020801,
100 GR_DBG_MSG_FILTER_ALL = 0x00020802,
101
102 GR_DBG_MSG_FILTER_BEGIN_RANGE = GR_DBG_MSG_FILTER_NONE,
103 GR_DBG_MSG_FILTER_END_RANGE = GR_DBG_MSG_FILTER_ALL,
104 GR_NUM_DBG_MSG_FILTER = (GR_DBG_MSG_FILTER_END_RANGE - GR_DBG_MSG_FILTER_BEGIN_RANGE + 1),
105} GR_DBG_MSG_FILTER;
106
107typedef enum _GR_DBG_DATA_TYPE
108{
109 // Common object debug data
110 GR_DBG_DATA_OBJECT_TYPE = 0x00020a00,
111 GR_DBG_DATA_OBJECT_CREATE_INFO = 0x00020a01,
112 GR_DBG_DATA_OBJECT_TAG = 0x00020a02,
113 // Command buffer specific debug data
114 GR_DBG_DATA_CMD_BUFFER_API_TRACE = 0x00020b00,
115 // Memory object specific debug data
116 GR_DBG_DATA_MEMORY_OBJECT_LAYOUT = 0x00020c00,
117 GR_DBG_DATA_MEMORY_OBJECT_STATE = 0x00020c01,
118} GR_DBG_DATA_TYPE;
119
120typedef enum _GR_DBG_OBJECT_TYPE
121{
122 GR_DBG_OBJECT_UNKNOWN = 0x00020900,
123 GR_DBG_OBJECT_DEVICE = 0x00020901,
124 GR_DBG_OBJECT_QUEUE = 0x00020902,
125 GR_DBG_OBJECT_GPU_MEMORY = 0x00020903,
126 GR_DBG_OBJECT_IMAGE = 0x00020904,
127 GR_DBG_OBJECT_IMAGE_VIEW = 0x00020905,
128 GR_DBG_OBJECT_COLOR_TARGET_VIEW = 0x00020906,
129 GR_DBG_OBJECT_DEPTH_STENCIL_VIEW = 0x00020907,
130 GR_DBG_OBJECT_SHADER = 0x00020908,
131 GR_DBG_OBJECT_GRAPHICS_PIPELINE = 0x00020909,
132 GR_DBG_OBJECT_COMPUTE_PIPELINE = 0x0002090a,
133 GR_DBG_OBJECT_SAMPLER = 0x0002090b,
134 GR_DBG_OBJECT_DESCRIPTOR_SET = 0x0002090c,
135 GR_DBG_OBJECT_VIEWPORT_STATE = 0x0002090d,
136 GR_DBG_OBJECT_RASTER_STATE = 0x0002090e,
137 GR_DBG_OBJECT_MSAA_STATE = 0x0002090f,
138 GR_DBG_OBJECT_COLOR_BLEND_STATE = 0x00020910,
139 GR_DBG_OBJECT_DEPTH_STENCIL_STATE = 0x00020911,
140 GR_DBG_OBJECT_CMD_BUFFER = 0x00020912,
141 GR_DBG_OBJECT_FENCE = 0x00020913,
142 GR_DBG_OBJECT_QUEUE_SEMAPHORE = 0x00020914,
143 GR_DBG_OBJECT_EVENT = 0x00020915,
144 GR_DBG_OBJECT_QUERY_POOL = 0x00020916,
145 GR_DBG_OBJECT_SHARED_GPU_MEMORY = 0x00020917,
146 GR_DBG_OBJECT_SHARED_QUEUE_SEMAPHORE = 0x00020918,
147 GR_DBG_OBJECT_PEER_GPU_MEMORY = 0x00020919,
148 GR_DBG_OBJECT_PEER_IMAGE = 0x0002091a,
149 GR_DBG_OBJECT_PINNED_GPU_MEMORY = 0x0002091b,
150 GR_DBG_OBJECT_INTERNAL_GPU_MEMORY = 0x0002091c,
151
152 GR_DBG_OBJECT_TYPE_BEGIN_RANGE = GR_DBG_OBJECT_UNKNOWN,
153 GR_DBG_OBJECT_TYPE_END_RANGE = GR_DBG_OBJECT_INTERNAL_GPU_MEMORY,
154 GR_NUM_DBG_OBJECT_TYPE = (GR_DBG_OBJECT_TYPE_END_RANGE - GR_DBG_OBJECT_TYPE_BEGIN_RANGE + 1),
155} GR_DBG_OBJECT_TYPE;
156
157// ------------------------------------------------------------------------------------------------
158// Memory object layout reflection
159
160typedef struct _GR_DBG_MEMORY_OBJECT_LAYOUT_REGION
161{
162 GR_GPU_SIZE offset;
163 GR_GPU_SIZE regionSize;
164 GR_OBJECT boundObject;
165} GR_DBG_MEMORY_OBJECT_LAYOUT_REGION;
166
167typedef struct _GR_DBG_MEMORY_OBJECT_LAYOUT
168{
169 GR_UINT regionCount;
170 GR_DBG_MEMORY_OBJECT_LAYOUT_REGION regions[1];
171 // (regionCount-1) more GR_DBG_MEMORY_OBJECT_LAYOUT_REGION structures to follow...
172} GR_DBG_MEMORY_OBJECT_LAYOUT;
173
174typedef struct _GR_DBG_MEMORY_OBJECT_STATE_REGION
175{
176 GR_GPU_SIZE offset;
177 GR_GPU_SIZE regionSize;
178 GR_ENUM state; // GR_MEMORY_STATE
179} GR_DBG_MEMORY_OBJECT_STATE_REGION;
180
181typedef struct _GR_DBG_MEMORY_OBJECT_STATE
182{
183 GR_UINT regionCount;
184 GR_DBG_MEMORY_OBJECT_STATE_REGION regions[1];
185 // (regionCount-1) more GR_DBG_MEMORY_OBJECT_STATE_REGION structures to follow...
186} GR_DBG_MEMORY_OBJECT_STATE;
187
188// ------------------------------------------------------------------------------------------------
189// Command buffer packet reflection
190
191// Command buffer packet opcodes
192typedef enum _GR_DBG_CMD_BUFFER_OPCODE
193{
194 GR_DBG_OP_CMD_BUFFER_END = 0x00028000,
195 GR_DBG_OP_CMD_BIND_PIPELINE = 0x00028001,
196 GR_DBG_OP_CMD_BIND_STATE_OBJECT = 0x00028002,
197 GR_DBG_OP_CMD_BIND_DESCRIPTOR_SET = 0x00028003,
198 GR_DBG_OP_CMD_BIND_DYNAMIC_MEMORY_VIEW = 0x00028004,
199 GR_DBG_OP_CMD_BIND_INDEX_DATA = 0x00028005,
200 GR_DBG_OP_CMD_BIND_TARGETS = 0x00028006,
201 GR_DBG_OP_CMD_PREPARE_MEMORY_REGIONS = 0x00028007,
202 GR_DBG_OP_CMD_PREPARE_IMAGES = 0x00028008,
203 GR_DBG_OP_CMD_DRAW = 0x00028009,
204 GR_DBG_OP_CMD_DRAW_INDEXED = 0x0002800a,
205 GR_DBG_OP_CMD_DRAW_INDIRECT = 0x0002800b,
206 GR_DBG_OP_CMD_DRAW_INDEXED_INDIRECT = 0x0002800c,
207 GR_DBG_OP_CMD_DISPATCH = 0x0002800d,
208 GR_DBG_OP_CMD_DISPATCH_INDIRECT = 0x0002800e,
209 GR_DBG_OP_CMD_COPY_MEMORY = 0x0002800f,
210 GR_DBG_OP_CMD_COPY_IMAGE = 0x00028010,
211 GR_DBG_OP_CMD_COPY_MEMORY_TO_IMAGE = 0x00028011,
212 GR_DBG_OP_CMD_COPY_IMAGE_TO_MEMORY = 0x00028012,
213 GR_DBG_OP_CMD_CLONE_IMAGE_DATA = 0x00028013,
214 GR_DBG_OP_CMD_FILL_MEMORY = 0x00028014,
215 GR_DBG_OP_CMD_UPDATE_MEMORY = 0x00028015,
216 GR_DBG_OP_CMD_CLEAR_COLOR_IMAGE = 0x00028016,
217 GR_DBG_OP_CMD_CLEAR_COLOR_IMAGE_RAW = 0x00028017,
218 GR_DBG_OP_CMD_CLEAR_DEPTH_STENCIL = 0x00028018,
219 GR_DBG_OP_CMD_RESOLVE_IMAGE = 0x00028019,
220 GR_DBG_OP_CMD_SET_EVENT = 0x0002801a,
221 GR_DBG_OP_CMD_RESET_EVENT = 0x0002801b,
222 GR_DBG_OP_CMD_MEMORY_ATOMIC = 0x0002801c,
223 GR_DBG_OP_CMD_BEGIN_QUERY = 0x0002801d,
224 GR_DBG_OP_CMD_END_QUERY = 0x0002801e,
225 GR_DBG_OP_CMD_RESET_QUERY_POOL = 0x0002801f,
226 GR_DBG_OP_CMD_WRITE_TIMESTAMP = 0x00028020,
227 GR_DBG_OP_CMD_INIT_ATOMIC_COUNTERS = 0x00028021,
228 GR_DBG_OP_CMD_LOAD_ATOMIC_COUNTERS = 0x00028022,
229 GR_DBG_OP_CMD_SAVE_ATOMIC_COUNTERS = 0x00028023,
230 GR_DBG_OP_CMD_DBG_MARKER_BEGIN = 0x00028024,
231 GR_DBG_OP_CMD_DBG_MARKER_END = 0x00028025,
232
233 GR_DBG_CMD_BUFFER_OPCODE_BEGIN_RANGE = GR_DBG_OP_CMD_BUFFER_END,
234 GR_DBG_CMD_BUFFER_OPCODE_END_RANGE = GR_DBG_OP_CMD_DBG_MARKER_END,
235 GR_NUM_DBG_CMD_BUFFER_OPCODE = (GR_DBG_CMD_BUFFER_OPCODE_END_RANGE - GR_DBG_CMD_BUFFER_OPCODE_BEGIN_RANGE + 1),
236} GR_DBG_CMD_BUFFER_OPCODE;
237
238// Command buffer packet header
239typedef struct _GR_DBG_OP_HEADER
240{
241 GR_UINT recordSize;
242 GR_ENUM opCode; // GR_DBG_CMD_BUFFER_OPCODE
243 // Op-specific variable size data follows...
244} GR_DBG_OP_HEADER;
245
246// Memory binding reference for image objects at the time of command buffer recording
247typedef struct _GR_DBG_BOUND_MEMORY_REF
248{
249 GR_GPU_MEMORY mem;
250 GR_GPU_SIZE offset;
251} GR_DBG_BOUND_MEMORY_REF;
252
253typedef struct _GR_DBG_OBJECT_REF
254{
255 GR_OBJECT object;
256 GR_DBG_BOUND_MEMORY_REF memoryRef;
257} GR_DBG_OBJECT_REF;
258
259typedef struct _GR_DBG_VIEW_REF
260{
261 GR_DBG_OBJECT_REF view;
262 // Memory reference for image of the color target view
263 GR_DBG_BOUND_MEMORY_REF imageMemoryRef;
264} GR_DBG_VIEW_REF;
265
266// Command buffer payload packets
267typedef struct _GR_DBG_OP_DATA_CMD_BIND_PIPELINE
268{
269 GR_ENUM pipelineBindPoint; // GR_PIPELINE_BIND_POINT
270 GR_DBG_OBJECT_REF pipeline;
271} GR_DBG_OP_DATA_CMD_BIND_PIPELINE;
272
273typedef struct _GR_DBG_OP_DATA_CMD_BIND_STATE_OBJECT
274{
275 GR_ENUM stateBindPoint; // GR_STATE_BIND_POINT
276 GR_DBG_OBJECT_REF state;
277} GR_DBG_OP_DATA_CMD_BIND_STATE_OBJECT;
278
279typedef struct _GR_DBG_OP_DATA_CMD_BIND_DESCRIPTOR_SET
280{
281 GR_ENUM pipelineBindPoint; // GR_PIPELINE_BIND_POINT
282 GR_UINT index;
283 GR_DBG_OBJECT_REF descriptorSet;
284 GR_UINT slotOffset;
285} GR_DBG_OP_DATA_CMD_BIND_DESCRIPTOR_SET;
286
287typedef struct _GR_DBG_OP_DATA_CMD_BIND_DYNAMIC_MEMORY_VIEW
288{
289 GR_ENUM pipelineBindPoint; // GR_PIPELINE_BIND_POINT
290 GR_MEMORY_VIEW_ATTACH_INFO view;
291} GR_DBG_OP_DATA_CMD_BIND_DYNAMIC_MEMORY_VIEW;
292
293typedef struct _GR_DBG_OP_DATA_CMD_BIND_INDEX_DATA
294{
295 GR_GPU_MEMORY mem;
296 GR_GPU_SIZE offset;
297 GR_ENUM indexType; // GR_INDEX_TYPE
298} GR_DBG_OP_DATA_CMD_BIND_INDEX_DATA;
299
300typedef struct _GR_DBG_COLOR_TARGET_BIND_INFO
301{
302 GR_DBG_VIEW_REF view;
303 GR_ENUM colorTargetState; // GR_IMAGE_STATE
304} GR_DBG_COLOR_TARGET_BIND_INFO;
305
306typedef struct _GR_DBG_DEPTH_STENCIL_BIND_INFO
307{
308 GR_DBG_VIEW_REF view;
309 GR_ENUM depthState; // GR_IMAGE_STATE
310 GR_ENUM stencilState; // GR_IMAGE_STATE
311} GR_DBG_DEPTH_STENCIL_BIND_INFO;
312
313typedef struct _GR_DBG_OP_DATA_CMD_BIND_TARGETS
314{
315 GR_UINT colorTargetCount;
316 GR_DBG_COLOR_TARGET_BIND_INFO colorTargetData[GR_MAX_COLOR_TARGETS];
317 GR_DBG_DEPTH_STENCIL_BIND_INFO depthTargetData;
318} GR_DBG_OP_DATA_CMD_BIND_TARGETS;
319
320typedef struct _GR_DBG_OP_DATA_CMD_PREPARE_MEMORY_REGIONS
321{
322 GR_UINT transitionCount;
323 GR_MEMORY_STATE_TRANSITION stateTransitions[1];
324 // (transitionCount-1) more GR_MEMORY_STATE_TRANSITION structures to follow...
325} GR_DBG_OP_DATA_CMD_PREPARE_MEMORY_REGIONS;
326
327typedef struct _GR_DBG_IMAGE_STATE_TRANSITION
328{
329 GR_DBG_OBJECT_REF image;
330 GR_ENUM oldState; // GR_IMAGE_STATE
331 GR_ENUM newState; // GR_IMAGE_STATE
332 GR_IMAGE_SUBRESOURCE_RANGE subresourceRange;
333} GR_DBG_IMAGE_STATE_TRANSITION;
334
335typedef struct _GR_DBG_OP_DATA_CMD_PREPARE_IMAGES
336{
337 GR_UINT transitionCount;
338 GR_DBG_IMAGE_STATE_TRANSITION stateTransitions[1];
339 // (transitionCount-1) more GR_DBG_IMAGE_STATE_TRANSITION_DATA structures to follow...
340} GR_DBG_OP_DATA_CMD_PREPARE_IMAGES;
341
342typedef struct _GR_DBG_OP_DATA_CMD_DRAW
343{
344 GR_UINT firstVertex;
345 GR_UINT vertexCount;
346 GR_UINT firstInstance;
347 GR_UINT instanceCount;
348} GR_DBG_OP_DATA_CMD_DRAW;
349
350typedef struct _GR_DBG_OP_DATA_CMD_DRAW_INDEXED
351{
352 GR_UINT firstIndex;
353 GR_UINT indexCount;
354 GR_INT vertexOffset;
355 GR_UINT firstInstance;
356 GR_UINT instanceCount;
357} GR_DBG_OP_DATA_CMD_DRAW_INDEXED;
358
359typedef struct _GR_DBG_OP_DATA_CMD_DRAW_INDIRECT
360{
361 GR_GPU_MEMORY mem;
362 GR_GPU_SIZE offset;
363} GR_DBG_OP_DATA_CMD_DRAW_INDIRECT;
364
365typedef struct _GR_DBG_OP_DATA_CMD_DRAW_INDEXED_INDIRECT
366{
367 GR_GPU_MEMORY mem;
368 GR_GPU_SIZE offset;
369} GR_DBG_OP_DATA_CMD_DRAW_INDEXED_INDIRECT;
370
371typedef struct _GR_DBG_OP_DATA_CMD_DISPATCH
372{
373 GR_UINT x;
374 GR_UINT y;
375 GR_UINT z;
376} GR_DBG_OP_DATA_CMD_DISPATCH;
377
378typedef struct _GR_DBG_OP_DATA_CMD_DISPATCH_INDIRECT
379{
380 GR_GPU_MEMORY mem;
381 GR_GPU_SIZE offset;
382} GR_DBG_OP_DATA_CMD_DISPATCH_INDIRECT;
383
384typedef struct _GR_DBG_OP_DATA_CMD_COPY_MEMORY
385{
386 GR_GPU_MEMORY srcMem;
387 GR_GPU_MEMORY destMem;
388 GR_UINT regionCount;
389 GR_MEMORY_COPY regions[1];
390 // (regionCount-1) more GR_MEMORY_COPY structures to follow...
391} GR_DBG_OP_DATA_CMD_COPY_MEMORY;
392
393typedef struct _GR_DBG_OP_DATA_CMD_COPY_IMAGE
394{
395 GR_DBG_OBJECT_REF srcImage;
396 GR_DBG_OBJECT_REF destImage;
397 GR_UINT regionCount;
398 GR_IMAGE_COPY regions[1];
399 // (regionCount-1) more GR_IMAGE_COPY structures to follow...
400} GR_DBG_OP_DATA_CMD_COPY_IMAGE;
401
402typedef struct _GR_DBG_OP_DATA_CMD_COPY_MEMORY_TO_IMAGE
403{
404 GR_GPU_MEMORY srcMem;
405 GR_DBG_OBJECT_REF destImage;
406 GR_UINT regionCount;
407 GR_MEMORY_IMAGE_COPY regions[1];
408 // (regionCount-1) more GR_MEMORY_IMAGE_COPY structures to follow...
409} GR_DBG_OP_DATA_CMD_COPY_MEMORY_TO_IMAGE;
410
411typedef struct _GR_DBG_OP_DATA_CMD_COPY_IMAGE_TO_MEMORY
412{
413 GR_DBG_OBJECT_REF srcImage;
414 GR_GPU_MEMORY destMem;
415 GR_UINT regionCount;
416 GR_MEMORY_IMAGE_COPY regions[1];
417 // (regionCount-1) more GR_MEMORY_IMAGE_COPY structures to follow...
418} GR_DBG_OP_DATA_CMD_COPY_IMAGE_TO_MEMORY;
419
420typedef struct _GR_DBG_OP_DATA_CMD_CLONE_IMAGE_DATA
421{
422 GR_DBG_OBJECT_REF srcImage;
423 GR_ENUM srcImageState; // GR_IMAGE_STATE
424 GR_DBG_OBJECT_REF destImage;
425 GR_ENUM destImageState; // GR_IMAGE_STATE
426} GR_DBG_OP_DATA_CMD_CLONE_IMAGE_DATA;
427
428typedef struct _GR_DBG_OP_DATA_CMD_UPDATE_MEMORY
429{
430 GR_GPU_MEMORY destMem;
431 GR_GPU_SIZE destOffset;
432 GR_GPU_SIZE dataSize;
433 GR_UINT32 data[1];
434 // (dataSize-4) more bytes of data to follow...
435} GR_DBG_OP_DATA_CMD_UPDATE_MEMORY;
436
437typedef struct _GR_DBG_OP_DATA_CMD_FILL_MEMORY
438{
439 GR_GPU_MEMORY destMem;
440 GR_GPU_SIZE destOffset;
441 GR_GPU_SIZE fillSize;
442 GR_UINT32 data;
443} GR_DBG_OP_DATA_CMD_FILL_MEMORY;
444
445typedef struct _GR_DBG_OP_DATA_CMD_CLEAR_COLOR_IMAGE
446{
447 GR_DBG_OBJECT_REF image;
448 GR_FLOAT color[4];
449 GR_UINT rangeCount;
450 GR_IMAGE_SUBRESOURCE_RANGE ranges[1];
451 // (rangeCount-1) more GR_IMAGE_SUBRESOURCE_RANGE structures to follow...
452} GR_DBG_OP_DATA_CMD_CLEAR_COLOR_IMAGE;
453
454typedef struct _GR_DBG_OP_DATA_CMD_CLEAR_COLOR_IMAGE_RAW
455{
456 GR_DBG_OBJECT_REF image;
457 GR_UINT32 color[4];
458 GR_UINT rangeCount;
459 GR_IMAGE_SUBRESOURCE_RANGE ranges[1];
460 // (rangeCount-1) more GR_IMAGE_SUBRESOURCE_RANGE structures to follow...
461} GR_DBG_OP_DATA_CMD_CLEAR_COLOR_IMAGE_RAW;
462
463typedef struct _GR_DBG_OP_DATA_CMD_CLEAR_DEPTH_STENCIL
464{
465 GR_DBG_OBJECT_REF image;
466 GR_FLOAT depth;
467 GR_UINT8 stencil;
468 GR_UINT rangeCount;
469 GR_IMAGE_SUBRESOURCE_RANGE ranges[1];
470 // (rangeCount-1) more GR_IMAGE_SUBRESOURCE_RANGE structures to follow...
471} GR_DBG_OP_DATA_CMD_CLEAR_DEPTH_STENCIL;
472
473typedef struct _GR_DBG_OP_DATA_CMD_RESOLVE_IMAGE
474{
475 GR_DBG_OBJECT_REF srcImage;
476 GR_DBG_OBJECT_REF destImage;
477 GR_UINT rectCount;
478 GR_IMAGE_RESOLVE rects[1];
479 // (rectCount-1) more GR_IMAGE_RESOLVE structures to follow...
480} GR_DBG_OP_DATA_CMD_RESOLVE_IMAGE;
481
482typedef struct _GR_DBG_OP_DATA_CMD_SET_EVENT
483{
484 GR_DBG_OBJECT_REF event;
485} GR_DBG_OP_DATA_CMD_SET_EVENT;
486
487typedef struct _GR_DBG_OP_DATA_CMD_RESET_EVENT
488{
489 GR_DBG_OBJECT_REF event;
490} GR_DBG_OP_DATA_CMD_RESET_EVENT;
491
492typedef struct _GR_DBG_OP_DATA_CMD_MEMORY_ATOMIC
493{
494 GR_GPU_MEMORY destMem;
495 GR_GPU_SIZE destOffset;
496 GR_UINT64 srcData;
497 GR_ENUM atomicOp; // GR_ATOMIC_OP
498} GR_DBG_OP_DATA_CMD_MEMORY_ATOMIC;
499
500typedef struct _GR_DBG_OP_DATA_CMD_BEGIN_QUERY
501{
502 GR_DBG_OBJECT_REF queryPool;
503 GR_UINT slot;
504 GR_FLAGS flags;
505} GR_DBG_OP_DATA_CMD_BEGIN_QUERY;
506
507typedef struct _GR_DBG_OP_DATA_CMD_END_QUERY
508{
509 GR_DBG_OBJECT_REF queryPool;
510 GR_UINT slot;
511} GR_DBG_OP_DATA_CMD_END_QUERY;
512
513typedef struct _GR_DBG_OP_DATA_CMD_RESET_QUERY_POOL
514{
515 GR_DBG_OBJECT_REF queryPool;
516 GR_UINT startQuery;
517 GR_UINT queryCount;
518} GR_DBG_OP_DATA_CMD_RESET_QUERY_POOL;
519
520typedef struct _GR_DBG_OP_DATA_CMD_WRITE_TIMESTAMP
521{
522 GR_ENUM timestampType; // GR_TIMESTAMP_TYPE
523 GR_GPU_MEMORY destMem;
524 GR_GPU_SIZE destOffset;
525} GR_DBG_OP_DATA_CMD_WRITE_TIMESTAMP;
526
527typedef struct _GR_DBG_OP_DATA_CMD_INIT_ATOMIC_COUNTERS
528{
529 GR_ENUM pipelineBindPoint; // GR_PIPELINE_BIND_POINT
530 GR_UINT startCounter;
531 GR_UINT counterCount;
532 GR_UINT32 data[1];
533 // (counterCount-1) more DWORDs of data to follow...
534} GR_DBG_OP_DATA_CMD_INIT_ATOMIC_COUNTERS;
535
536typedef struct _GR_DBG_OP_DATA_CMD_LOAD_ATOMIC_COUNTERS
537{
538 GR_ENUM pipelineBindPoint; // GR_PIPELINE_BIND_POINT
539 GR_UINT startCounter;
540 GR_UINT counterCount;
541 GR_GPU_MEMORY srcMem;
542 GR_GPU_SIZE srcOffset;
543} GR_DBG_OP_DATA_CMD_LOAD_ATOMIC_COUNTERS;
544
545typedef struct _GR_DBG_OP_DATA_CMD_SAVE_ATOMIC_COUNTERS
546{
547 GR_ENUM pipelineBindPoint; // GR_PIPELINE_BIND_POINT
548 GR_UINT startCounter;
549 GR_UINT counterCount;
550 GR_GPU_MEMORY destMem;
551 GR_GPU_SIZE destOffset;
552} GR_DBG_OP_DATA_CMD_SAVE_ATOMIC_COUNTERS;
553
554typedef struct _GR_DBG_OP_DATA_CMD_DBG_MARKER_BEGIN
555{
556 GR_CHAR marker[1];
557 // The rest of null terminated string follows, up to the size of the packet...
558} GR_DBG_OP_DATA_CMD_DBG_MARKER_BEGIN;
559
560typedef struct _GR_DBG_OP_DATA_CMD_DBG_MARKER_END
561{
562 GR_UINT _reserved;
563} GR_DBG_OP_DATA_CMD_DBG_MARKER_END;
564
565// ------------------------------------------------------------------------------------------------
566// Debug message callback
567
568typedef GR_VOID (GR_STDCALL *GR_DBG_MSG_CALLBACK_FUNCTION)(
569 GR_ENUM msgType, // GR_DBG_MSG_TYPE
570 GR_ENUM validationLevel, // GR_VALIDATION_LEVEL
571 GR_BASE_OBJECT srcObject,
572 GR_SIZE location,
573 GR_ENUM msgCode, // GR_DBG_MSG_CODE
574 const GR_CHAR* pMsg,
575 GR_VOID* pUserData);
576
577// ------------------------------------------------------------------------------------------------
578// Debug functions
579
580GR_RESULT GR_STDCALL grDbgSetValidationLevel(
581 GR_DEVICE device,
582 GR_ENUM validationLevel); // GR_VALIDATION_LEVEL
583
584GR_RESULT GR_STDCALL grDbgRegisterMsgCallback(
585 GR_DBG_MSG_CALLBACK_FUNCTION pfnMsgCallback,
586 GR_VOID* pUserData);
587
588GR_RESULT GR_STDCALL grDbgUnregisterMsgCallback(
589 GR_DBG_MSG_CALLBACK_FUNCTION pfnMsgCallback);
590
591GR_RESULT GR_STDCALL grDbgSetMessageFilter(
592 GR_DEVICE device,
593 GR_ENUM msgCode, // GR_DBG_MSG_CODE
594 GR_ENUM filter); // GR_DBG_MSG_FILTER
595
596GR_RESULT GR_STDCALL grDbgSetObjectTag(
597 GR_BASE_OBJECT object,
598 GR_SIZE tagSize,
599 const GR_VOID* pTag);
600
601GR_RESULT GR_STDCALL grDbgSetGlobalOption(
602 GR_ENUM dbgOption, // GR_DBG_GLOBAL_OPTION
603 GR_SIZE dataSize,
604 const GR_VOID* pData);
605
606GR_RESULT GR_STDCALL grDbgSetDeviceOption(
607 GR_DEVICE device,
608 GR_ENUM dbgOption, // GR_DBG_DEVICE_OPTION
609 GR_SIZE dataSize,
610 const GR_VOID* pData);
611
612GR_VOID GR_STDCALL grCmdDbgMarkerBegin(
613 GR_CMD_BUFFER cmdBuffer,
614 const GR_CHAR* pMarker);
615
616GR_VOID GR_STDCALL grCmdDbgMarkerEnd(
617 GR_CMD_BUFFER cmdBuffer);
618
619#ifdef __cplusplus
620}; // extern "C"
621#endif // __cplusplus
622
623#endif // __MANTLEDBG_H__