blob: d51a3f6bf55c21b12f7660d2360fa413a9582ea0 [file] [log] [blame]
//
// File: mantleDbg.h
//
// Copyright 2014 ADVANCED MICRO DEVICES, INC. All Rights Reserved.
//
// AMD is granting you permission to use this software for reference
// purposes only and not for use in any software product.
//
// You agree that you will not reverse engineer or decompile the Materials,
// in whole or in part, except as allowed by applicable law.
//
// WARRANTY DISCLAIMER: THE SOFTWARE IS PROVIDED "AS IS" WITHOUT WARRANTY OF
// ANY KIND. AMD DISCLAIMS ALL WARRANTIES, EXPRESS, IMPLIED, OR STATUTORY,
// INCLUDING BUT NOT LIMITED TO THE IMPLIED WARRANTIES OF MERCHANTABILITY,
// FITNESS FOR A PARTICULAR PURPOSE, TITLE, NON-INFRINGEMENT, THAT THE SOFTWARE
// WILL RUN UNINTERRUPTED OR ERROR-FREE OR WARRANTIES ARISING FROM CUSTOM OF
// TRADE OR COURSE OF USAGE. THE ENTIRE RISK ASSOCIATED WITH THE USE OF THE
// SOFTWARE IS ASSUMED BY YOU.
// Some jurisdictions do not allow the exclusion of implied warranties, so
// the above exclusion may not apply to You.
//
// LIMITATION OF LIABILITY AND INDEMNIFICATION: AMD AND ITS LICENSORS WILL
// NOT, UNDER ANY CIRCUMSTANCES BE LIABLE TO YOU FOR ANY PUNITIVE, DIRECT,
// INCIDENTAL, INDIRECT, SPECIAL OR CONSEQUENTIAL DAMAGES ARISING FROM USE OF
// THE SOFTWARE OR THIS AGREEMENT EVEN IF AMD AND ITS LICENSORS HAVE BEEN
// ADVISED OF THE POSSIBILITY OF SUCH DAMAGES.
// In no event shall AMD's total liability to You for all damages, losses,
// and causes of action (whether in contract, tort (including negligence) or
// otherwise) exceed the amount of $100 USD. You agree to defend, indemnify
// and hold harmless AMD and its licensors, and any of their directors,
// officers, employees, affiliates or agents from and against any and all
// loss, damage, liability and other expenses (including reasonable attorneys'
// fees), resulting from Your use of the Software or violation of the terms and
// conditions of this Agreement.
//
// U.S. GOVERNMENT RESTRICTED RIGHTS: The Materials are provided with "RESTRICTED
// RIGHTS." Use, duplication, or disclosure by the Government is subject to the
// restrictions as set forth in FAR 52.227-14 and DFAR252.227-7013, et seq., or
// its successor. Use of the Materials by the Government constitutes
// acknowledgement of AMD's proprietary rights in them.
//
// EXPORT RESTRICTIONS: The Materials may be subject to export restrictions as
// stated in the Software License Agreement.
//
#ifndef __MANTLEDBG_H__
#define __MANTLEDBG_H__
#include "mantle.h"
#ifdef __cplusplus
extern "C"
{
#endif // __cplusplus
/*
***************************************************************************************************
* Mantle debug and validation features
***************************************************************************************************
*/
typedef enum _GR_DBG_MSG_TYPE
{
GR_DBG_MSG_UNKNOWN = 0x00020000,
GR_DBG_MSG_ERROR = 0x00020001,
GR_DBG_MSG_WARNING = 0x00020002,
GR_DBG_MSG_PERF_WARNING = 0x00020003,
GR_DBG_MSG_TYPE_BEGIN_RANGE = GR_DBG_MSG_UNKNOWN,
GR_DBG_MSG_TYPE_END_RANGE = GR_DBG_MSG_PERF_WARNING,
GR_NUM_DBG_MSG_TYPE = (GR_DBG_MSG_TYPE_END_RANGE - GR_DBG_MSG_TYPE_BEGIN_RANGE + 1),
} GR_DBG_MSG_TYPE;
typedef enum _GR_DBG_GLOBAL_OPTION
{
GR_DBG_OPTION_DEBUG_ECHO_ENABLE = 0x00020100,
GR_DBG_OPTION_BREAK_ON_ERROR = 0x00020101,
GR_DBG_OPTION_BREAK_ON_WARNING = 0x00020102,
GR_DBG_GLOBAL_OPTION_BEGIN_RANGE = GR_DBG_OPTION_DEBUG_ECHO_ENABLE,
GR_DBG_GLOBAL_OPTION_END_RANGE = GR_DBG_OPTION_BREAK_ON_WARNING,
GR_NUM_DBG_GLOBAL_OPTION = (GR_DBG_GLOBAL_OPTION_END_RANGE - GR_DBG_GLOBAL_OPTION_BEGIN_RANGE + 1),
} GR_DBG_GLOBAL_OPTION;
typedef enum _GR_DBG_DEVICE_OPTION
{
GR_DBG_OPTION_DISABLE_PIPELINE_LOADS = 0x00020400,
GR_DBG_OPTION_FORCE_OBJECT_MEMORY_REQS = 0x00020401,
GR_DBG_OPTION_FORCE_LARGE_IMAGE_ALIGNMENT = 0x00020402,
GR_DBG_DEVICE_OPTION_BEGIN_RANGE = GR_DBG_OPTION_DISABLE_PIPELINE_LOADS,
GR_DBG_DEVICE_OPTION_END_RANGE = GR_DBG_OPTION_FORCE_LARGE_IMAGE_ALIGNMENT,
GR_NUM_DBG_DEVICE_OPTION = (GR_DBG_DEVICE_OPTION_END_RANGE - GR_DBG_DEVICE_OPTION_BEGIN_RANGE + 1),
} GR_DBG_DEVICE_OPTION;
typedef enum _GR_DBG_MSG_FILTER
{
GR_DBG_MSG_FILTER_NONE = 0x00020800,
GR_DBG_MSG_FILTER_REPEATED = 0x00020801,
GR_DBG_MSG_FILTER_ALL = 0x00020802,
GR_DBG_MSG_FILTER_BEGIN_RANGE = GR_DBG_MSG_FILTER_NONE,
GR_DBG_MSG_FILTER_END_RANGE = GR_DBG_MSG_FILTER_ALL,
GR_NUM_DBG_MSG_FILTER = (GR_DBG_MSG_FILTER_END_RANGE - GR_DBG_MSG_FILTER_BEGIN_RANGE + 1),
} GR_DBG_MSG_FILTER;
typedef enum _GR_DBG_DATA_TYPE
{
// Common object debug data
GR_DBG_DATA_OBJECT_TYPE = 0x00020a00,
GR_DBG_DATA_OBJECT_CREATE_INFO = 0x00020a01,
GR_DBG_DATA_OBJECT_TAG = 0x00020a02,
// Command buffer specific debug data
GR_DBG_DATA_CMD_BUFFER_API_TRACE = 0x00020b00,
// Memory object specific debug data
GR_DBG_DATA_MEMORY_OBJECT_LAYOUT = 0x00020c00,
GR_DBG_DATA_MEMORY_OBJECT_STATE = 0x00020c01,
} GR_DBG_DATA_TYPE;
typedef enum _GR_DBG_OBJECT_TYPE
{
GR_DBG_OBJECT_UNKNOWN = 0x00020900,
GR_DBG_OBJECT_DEVICE = 0x00020901,
GR_DBG_OBJECT_QUEUE = 0x00020902,
GR_DBG_OBJECT_GPU_MEMORY = 0x00020903,
GR_DBG_OBJECT_IMAGE = 0x00020904,
GR_DBG_OBJECT_IMAGE_VIEW = 0x00020905,
GR_DBG_OBJECT_COLOR_TARGET_VIEW = 0x00020906,
GR_DBG_OBJECT_DEPTH_STENCIL_VIEW = 0x00020907,
GR_DBG_OBJECT_SHADER = 0x00020908,
GR_DBG_OBJECT_GRAPHICS_PIPELINE = 0x00020909,
GR_DBG_OBJECT_COMPUTE_PIPELINE = 0x0002090a,
GR_DBG_OBJECT_SAMPLER = 0x0002090b,
GR_DBG_OBJECT_DESCRIPTOR_SET = 0x0002090c,
GR_DBG_OBJECT_VIEWPORT_STATE = 0x0002090d,
GR_DBG_OBJECT_RASTER_STATE = 0x0002090e,
GR_DBG_OBJECT_MSAA_STATE = 0x0002090f,
GR_DBG_OBJECT_COLOR_BLEND_STATE = 0x00020910,
GR_DBG_OBJECT_DEPTH_STENCIL_STATE = 0x00020911,
GR_DBG_OBJECT_CMD_BUFFER = 0x00020912,
GR_DBG_OBJECT_FENCE = 0x00020913,
GR_DBG_OBJECT_QUEUE_SEMAPHORE = 0x00020914,
GR_DBG_OBJECT_EVENT = 0x00020915,
GR_DBG_OBJECT_QUERY_POOL = 0x00020916,
GR_DBG_OBJECT_SHARED_GPU_MEMORY = 0x00020917,
GR_DBG_OBJECT_SHARED_QUEUE_SEMAPHORE = 0x00020918,
GR_DBG_OBJECT_PEER_GPU_MEMORY = 0x00020919,
GR_DBG_OBJECT_PEER_IMAGE = 0x0002091a,
GR_DBG_OBJECT_PINNED_GPU_MEMORY = 0x0002091b,
GR_DBG_OBJECT_INTERNAL_GPU_MEMORY = 0x0002091c,
GR_DBG_OBJECT_TYPE_BEGIN_RANGE = GR_DBG_OBJECT_UNKNOWN,
GR_DBG_OBJECT_TYPE_END_RANGE = GR_DBG_OBJECT_INTERNAL_GPU_MEMORY,
GR_NUM_DBG_OBJECT_TYPE = (GR_DBG_OBJECT_TYPE_END_RANGE - GR_DBG_OBJECT_TYPE_BEGIN_RANGE + 1),
} GR_DBG_OBJECT_TYPE;
// ------------------------------------------------------------------------------------------------
// Memory object layout reflection
typedef struct _GR_DBG_MEMORY_OBJECT_LAYOUT_REGION
{
GR_GPU_SIZE offset;
GR_GPU_SIZE regionSize;
GR_OBJECT boundObject;
} GR_DBG_MEMORY_OBJECT_LAYOUT_REGION;
typedef struct _GR_DBG_MEMORY_OBJECT_LAYOUT
{
GR_UINT regionCount;
GR_DBG_MEMORY_OBJECT_LAYOUT_REGION regions[1];
// (regionCount-1) more GR_DBG_MEMORY_OBJECT_LAYOUT_REGION structures to follow...
} GR_DBG_MEMORY_OBJECT_LAYOUT;
typedef struct _GR_DBG_MEMORY_OBJECT_STATE_REGION
{
GR_GPU_SIZE offset;
GR_GPU_SIZE regionSize;
GR_ENUM state; // GR_MEMORY_STATE
} GR_DBG_MEMORY_OBJECT_STATE_REGION;
typedef struct _GR_DBG_MEMORY_OBJECT_STATE
{
GR_UINT regionCount;
GR_DBG_MEMORY_OBJECT_STATE_REGION regions[1];
// (regionCount-1) more GR_DBG_MEMORY_OBJECT_STATE_REGION structures to follow...
} GR_DBG_MEMORY_OBJECT_STATE;
// ------------------------------------------------------------------------------------------------
// Command buffer packet reflection
// Command buffer packet opcodes
typedef enum _GR_DBG_CMD_BUFFER_OPCODE
{
GR_DBG_OP_CMD_BUFFER_END = 0x00028000,
GR_DBG_OP_CMD_BIND_PIPELINE = 0x00028001,
GR_DBG_OP_CMD_BIND_STATE_OBJECT = 0x00028002,
GR_DBG_OP_CMD_BIND_DESCRIPTOR_SET = 0x00028003,
GR_DBG_OP_CMD_BIND_DYNAMIC_MEMORY_VIEW = 0x00028004,
GR_DBG_OP_CMD_BIND_INDEX_DATA = 0x00028005,
GR_DBG_OP_CMD_BIND_TARGETS = 0x00028006,
GR_DBG_OP_CMD_PREPARE_MEMORY_REGIONS = 0x00028007,
GR_DBG_OP_CMD_PREPARE_IMAGES = 0x00028008,
GR_DBG_OP_CMD_DRAW = 0x00028009,
GR_DBG_OP_CMD_DRAW_INDEXED = 0x0002800a,
GR_DBG_OP_CMD_DRAW_INDIRECT = 0x0002800b,
GR_DBG_OP_CMD_DRAW_INDEXED_INDIRECT = 0x0002800c,
GR_DBG_OP_CMD_DISPATCH = 0x0002800d,
GR_DBG_OP_CMD_DISPATCH_INDIRECT = 0x0002800e,
GR_DBG_OP_CMD_COPY_MEMORY = 0x0002800f,
GR_DBG_OP_CMD_COPY_IMAGE = 0x00028010,
GR_DBG_OP_CMD_COPY_MEMORY_TO_IMAGE = 0x00028011,
GR_DBG_OP_CMD_COPY_IMAGE_TO_MEMORY = 0x00028012,
GR_DBG_OP_CMD_CLONE_IMAGE_DATA = 0x00028013,
GR_DBG_OP_CMD_FILL_MEMORY = 0x00028014,
GR_DBG_OP_CMD_UPDATE_MEMORY = 0x00028015,
GR_DBG_OP_CMD_CLEAR_COLOR_IMAGE = 0x00028016,
GR_DBG_OP_CMD_CLEAR_COLOR_IMAGE_RAW = 0x00028017,
GR_DBG_OP_CMD_CLEAR_DEPTH_STENCIL = 0x00028018,
GR_DBG_OP_CMD_RESOLVE_IMAGE = 0x00028019,
GR_DBG_OP_CMD_SET_EVENT = 0x0002801a,
GR_DBG_OP_CMD_RESET_EVENT = 0x0002801b,
GR_DBG_OP_CMD_MEMORY_ATOMIC = 0x0002801c,
GR_DBG_OP_CMD_BEGIN_QUERY = 0x0002801d,
GR_DBG_OP_CMD_END_QUERY = 0x0002801e,
GR_DBG_OP_CMD_RESET_QUERY_POOL = 0x0002801f,
GR_DBG_OP_CMD_WRITE_TIMESTAMP = 0x00028020,
GR_DBG_OP_CMD_INIT_ATOMIC_COUNTERS = 0x00028021,
GR_DBG_OP_CMD_LOAD_ATOMIC_COUNTERS = 0x00028022,
GR_DBG_OP_CMD_SAVE_ATOMIC_COUNTERS = 0x00028023,
GR_DBG_OP_CMD_DBG_MARKER_BEGIN = 0x00028024,
GR_DBG_OP_CMD_DBG_MARKER_END = 0x00028025,
GR_DBG_CMD_BUFFER_OPCODE_BEGIN_RANGE = GR_DBG_OP_CMD_BUFFER_END,
GR_DBG_CMD_BUFFER_OPCODE_END_RANGE = GR_DBG_OP_CMD_DBG_MARKER_END,
GR_NUM_DBG_CMD_BUFFER_OPCODE = (GR_DBG_CMD_BUFFER_OPCODE_END_RANGE - GR_DBG_CMD_BUFFER_OPCODE_BEGIN_RANGE + 1),
} GR_DBG_CMD_BUFFER_OPCODE;
// Command buffer packet header
typedef struct _GR_DBG_OP_HEADER
{
GR_UINT recordSize;
GR_ENUM opCode; // GR_DBG_CMD_BUFFER_OPCODE
// Op-specific variable size data follows...
} GR_DBG_OP_HEADER;
// Memory binding reference for image objects at the time of command buffer recording
typedef struct _GR_DBG_BOUND_MEMORY_REF
{
GR_GPU_MEMORY mem;
GR_GPU_SIZE offset;
} GR_DBG_BOUND_MEMORY_REF;
typedef struct _GR_DBG_OBJECT_REF
{
GR_OBJECT object;
GR_DBG_BOUND_MEMORY_REF memoryRef;
} GR_DBG_OBJECT_REF;
typedef struct _GR_DBG_VIEW_REF
{
GR_DBG_OBJECT_REF view;
// Memory reference for image of the color target view
GR_DBG_BOUND_MEMORY_REF imageMemoryRef;
} GR_DBG_VIEW_REF;
// Command buffer payload packets
typedef struct _GR_DBG_OP_DATA_CMD_BIND_PIPELINE
{
GR_ENUM pipelineBindPoint; // GR_PIPELINE_BIND_POINT
GR_DBG_OBJECT_REF pipeline;
} GR_DBG_OP_DATA_CMD_BIND_PIPELINE;
typedef struct _GR_DBG_OP_DATA_CMD_BIND_STATE_OBJECT
{
GR_ENUM stateBindPoint; // GR_STATE_BIND_POINT
GR_DBG_OBJECT_REF state;
} GR_DBG_OP_DATA_CMD_BIND_STATE_OBJECT;
typedef struct _GR_DBG_OP_DATA_CMD_BIND_DESCRIPTOR_SET
{
GR_ENUM pipelineBindPoint; // GR_PIPELINE_BIND_POINT
GR_UINT index;
GR_DBG_OBJECT_REF descriptorSet;
GR_UINT slotOffset;
} GR_DBG_OP_DATA_CMD_BIND_DESCRIPTOR_SET;
typedef struct _GR_DBG_OP_DATA_CMD_BIND_DYNAMIC_MEMORY_VIEW
{
GR_ENUM pipelineBindPoint; // GR_PIPELINE_BIND_POINT
GR_MEMORY_VIEW_ATTACH_INFO view;
} GR_DBG_OP_DATA_CMD_BIND_DYNAMIC_MEMORY_VIEW;
typedef struct _GR_DBG_OP_DATA_CMD_BIND_INDEX_DATA
{
GR_GPU_MEMORY mem;
GR_GPU_SIZE offset;
GR_ENUM indexType; // GR_INDEX_TYPE
} GR_DBG_OP_DATA_CMD_BIND_INDEX_DATA;
typedef struct _GR_DBG_COLOR_TARGET_BIND_INFO
{
GR_DBG_VIEW_REF view;
GR_ENUM colorTargetState; // GR_IMAGE_STATE
} GR_DBG_COLOR_TARGET_BIND_INFO;
typedef struct _GR_DBG_DEPTH_STENCIL_BIND_INFO
{
GR_DBG_VIEW_REF view;
GR_ENUM depthState; // GR_IMAGE_STATE
GR_ENUM stencilState; // GR_IMAGE_STATE
} GR_DBG_DEPTH_STENCIL_BIND_INFO;
typedef struct _GR_DBG_OP_DATA_CMD_BIND_TARGETS
{
GR_UINT colorTargetCount;
GR_DBG_COLOR_TARGET_BIND_INFO colorTargetData[GR_MAX_COLOR_TARGETS];
GR_DBG_DEPTH_STENCIL_BIND_INFO depthTargetData;
} GR_DBG_OP_DATA_CMD_BIND_TARGETS;
typedef struct _GR_DBG_OP_DATA_CMD_PREPARE_MEMORY_REGIONS
{
GR_UINT transitionCount;
GR_MEMORY_STATE_TRANSITION stateTransitions[1];
// (transitionCount-1) more GR_MEMORY_STATE_TRANSITION structures to follow...
} GR_DBG_OP_DATA_CMD_PREPARE_MEMORY_REGIONS;
typedef struct _GR_DBG_IMAGE_STATE_TRANSITION
{
GR_DBG_OBJECT_REF image;
GR_ENUM oldState; // GR_IMAGE_STATE
GR_ENUM newState; // GR_IMAGE_STATE
GR_IMAGE_SUBRESOURCE_RANGE subresourceRange;
} GR_DBG_IMAGE_STATE_TRANSITION;
typedef struct _GR_DBG_OP_DATA_CMD_PREPARE_IMAGES
{
GR_UINT transitionCount;
GR_DBG_IMAGE_STATE_TRANSITION stateTransitions[1];
// (transitionCount-1) more GR_DBG_IMAGE_STATE_TRANSITION_DATA structures to follow...
} GR_DBG_OP_DATA_CMD_PREPARE_IMAGES;
typedef struct _GR_DBG_OP_DATA_CMD_DRAW
{
GR_UINT firstVertex;
GR_UINT vertexCount;
GR_UINT firstInstance;
GR_UINT instanceCount;
} GR_DBG_OP_DATA_CMD_DRAW;
typedef struct _GR_DBG_OP_DATA_CMD_DRAW_INDEXED
{
GR_UINT firstIndex;
GR_UINT indexCount;
GR_INT vertexOffset;
GR_UINT firstInstance;
GR_UINT instanceCount;
} GR_DBG_OP_DATA_CMD_DRAW_INDEXED;
typedef struct _GR_DBG_OP_DATA_CMD_DRAW_INDIRECT
{
GR_GPU_MEMORY mem;
GR_GPU_SIZE offset;
} GR_DBG_OP_DATA_CMD_DRAW_INDIRECT;
typedef struct _GR_DBG_OP_DATA_CMD_DRAW_INDEXED_INDIRECT
{
GR_GPU_MEMORY mem;
GR_GPU_SIZE offset;
} GR_DBG_OP_DATA_CMD_DRAW_INDEXED_INDIRECT;
typedef struct _GR_DBG_OP_DATA_CMD_DISPATCH
{
GR_UINT x;
GR_UINT y;
GR_UINT z;
} GR_DBG_OP_DATA_CMD_DISPATCH;
typedef struct _GR_DBG_OP_DATA_CMD_DISPATCH_INDIRECT
{
GR_GPU_MEMORY mem;
GR_GPU_SIZE offset;
} GR_DBG_OP_DATA_CMD_DISPATCH_INDIRECT;
typedef struct _GR_DBG_OP_DATA_CMD_COPY_MEMORY
{
GR_GPU_MEMORY srcMem;
GR_GPU_MEMORY destMem;
GR_UINT regionCount;
GR_MEMORY_COPY regions[1];
// (regionCount-1) more GR_MEMORY_COPY structures to follow...
} GR_DBG_OP_DATA_CMD_COPY_MEMORY;
typedef struct _GR_DBG_OP_DATA_CMD_COPY_IMAGE
{
GR_DBG_OBJECT_REF srcImage;
GR_DBG_OBJECT_REF destImage;
GR_UINT regionCount;
GR_IMAGE_COPY regions[1];
// (regionCount-1) more GR_IMAGE_COPY structures to follow...
} GR_DBG_OP_DATA_CMD_COPY_IMAGE;
typedef struct _GR_DBG_OP_DATA_CMD_COPY_MEMORY_TO_IMAGE
{
GR_GPU_MEMORY srcMem;
GR_DBG_OBJECT_REF destImage;
GR_UINT regionCount;
GR_MEMORY_IMAGE_COPY regions[1];
// (regionCount-1) more GR_MEMORY_IMAGE_COPY structures to follow...
} GR_DBG_OP_DATA_CMD_COPY_MEMORY_TO_IMAGE;
typedef struct _GR_DBG_OP_DATA_CMD_COPY_IMAGE_TO_MEMORY
{
GR_DBG_OBJECT_REF srcImage;
GR_GPU_MEMORY destMem;
GR_UINT regionCount;
GR_MEMORY_IMAGE_COPY regions[1];
// (regionCount-1) more GR_MEMORY_IMAGE_COPY structures to follow...
} GR_DBG_OP_DATA_CMD_COPY_IMAGE_TO_MEMORY;
typedef struct _GR_DBG_OP_DATA_CMD_CLONE_IMAGE_DATA
{
GR_DBG_OBJECT_REF srcImage;
GR_ENUM srcImageState; // GR_IMAGE_STATE
GR_DBG_OBJECT_REF destImage;
GR_ENUM destImageState; // GR_IMAGE_STATE
} GR_DBG_OP_DATA_CMD_CLONE_IMAGE_DATA;
typedef struct _GR_DBG_OP_DATA_CMD_UPDATE_MEMORY
{
GR_GPU_MEMORY destMem;
GR_GPU_SIZE destOffset;
GR_GPU_SIZE dataSize;
GR_UINT32 data[1];
// (dataSize-4) more bytes of data to follow...
} GR_DBG_OP_DATA_CMD_UPDATE_MEMORY;
typedef struct _GR_DBG_OP_DATA_CMD_FILL_MEMORY
{
GR_GPU_MEMORY destMem;
GR_GPU_SIZE destOffset;
GR_GPU_SIZE fillSize;
GR_UINT32 data;
} GR_DBG_OP_DATA_CMD_FILL_MEMORY;
typedef struct _GR_DBG_OP_DATA_CMD_CLEAR_COLOR_IMAGE
{
GR_DBG_OBJECT_REF image;
GR_FLOAT color[4];
GR_UINT rangeCount;
GR_IMAGE_SUBRESOURCE_RANGE ranges[1];
// (rangeCount-1) more GR_IMAGE_SUBRESOURCE_RANGE structures to follow...
} GR_DBG_OP_DATA_CMD_CLEAR_COLOR_IMAGE;
typedef struct _GR_DBG_OP_DATA_CMD_CLEAR_COLOR_IMAGE_RAW
{
GR_DBG_OBJECT_REF image;
GR_UINT32 color[4];
GR_UINT rangeCount;
GR_IMAGE_SUBRESOURCE_RANGE ranges[1];
// (rangeCount-1) more GR_IMAGE_SUBRESOURCE_RANGE structures to follow...
} GR_DBG_OP_DATA_CMD_CLEAR_COLOR_IMAGE_RAW;
typedef struct _GR_DBG_OP_DATA_CMD_CLEAR_DEPTH_STENCIL
{
GR_DBG_OBJECT_REF image;
GR_FLOAT depth;
GR_UINT8 stencil;
GR_UINT rangeCount;
GR_IMAGE_SUBRESOURCE_RANGE ranges[1];
// (rangeCount-1) more GR_IMAGE_SUBRESOURCE_RANGE structures to follow...
} GR_DBG_OP_DATA_CMD_CLEAR_DEPTH_STENCIL;
typedef struct _GR_DBG_OP_DATA_CMD_RESOLVE_IMAGE
{
GR_DBG_OBJECT_REF srcImage;
GR_DBG_OBJECT_REF destImage;
GR_UINT rectCount;
GR_IMAGE_RESOLVE rects[1];
// (rectCount-1) more GR_IMAGE_RESOLVE structures to follow...
} GR_DBG_OP_DATA_CMD_RESOLVE_IMAGE;
typedef struct _GR_DBG_OP_DATA_CMD_SET_EVENT
{
GR_DBG_OBJECT_REF event;
} GR_DBG_OP_DATA_CMD_SET_EVENT;
typedef struct _GR_DBG_OP_DATA_CMD_RESET_EVENT
{
GR_DBG_OBJECT_REF event;
} GR_DBG_OP_DATA_CMD_RESET_EVENT;
typedef struct _GR_DBG_OP_DATA_CMD_MEMORY_ATOMIC
{
GR_GPU_MEMORY destMem;
GR_GPU_SIZE destOffset;
GR_UINT64 srcData;
GR_ENUM atomicOp; // GR_ATOMIC_OP
} GR_DBG_OP_DATA_CMD_MEMORY_ATOMIC;
typedef struct _GR_DBG_OP_DATA_CMD_BEGIN_QUERY
{
GR_DBG_OBJECT_REF queryPool;
GR_UINT slot;
GR_FLAGS flags;
} GR_DBG_OP_DATA_CMD_BEGIN_QUERY;
typedef struct _GR_DBG_OP_DATA_CMD_END_QUERY
{
GR_DBG_OBJECT_REF queryPool;
GR_UINT slot;
} GR_DBG_OP_DATA_CMD_END_QUERY;
typedef struct _GR_DBG_OP_DATA_CMD_RESET_QUERY_POOL
{
GR_DBG_OBJECT_REF queryPool;
GR_UINT startQuery;
GR_UINT queryCount;
} GR_DBG_OP_DATA_CMD_RESET_QUERY_POOL;
typedef struct _GR_DBG_OP_DATA_CMD_WRITE_TIMESTAMP
{
GR_ENUM timestampType; // GR_TIMESTAMP_TYPE
GR_GPU_MEMORY destMem;
GR_GPU_SIZE destOffset;
} GR_DBG_OP_DATA_CMD_WRITE_TIMESTAMP;
typedef struct _GR_DBG_OP_DATA_CMD_INIT_ATOMIC_COUNTERS
{
GR_ENUM pipelineBindPoint; // GR_PIPELINE_BIND_POINT
GR_UINT startCounter;
GR_UINT counterCount;
GR_UINT32 data[1];
// (counterCount-1) more DWORDs of data to follow...
} GR_DBG_OP_DATA_CMD_INIT_ATOMIC_COUNTERS;
typedef struct _GR_DBG_OP_DATA_CMD_LOAD_ATOMIC_COUNTERS
{
GR_ENUM pipelineBindPoint; // GR_PIPELINE_BIND_POINT
GR_UINT startCounter;
GR_UINT counterCount;
GR_GPU_MEMORY srcMem;
GR_GPU_SIZE srcOffset;
} GR_DBG_OP_DATA_CMD_LOAD_ATOMIC_COUNTERS;
typedef struct _GR_DBG_OP_DATA_CMD_SAVE_ATOMIC_COUNTERS
{
GR_ENUM pipelineBindPoint; // GR_PIPELINE_BIND_POINT
GR_UINT startCounter;
GR_UINT counterCount;
GR_GPU_MEMORY destMem;
GR_GPU_SIZE destOffset;
} GR_DBG_OP_DATA_CMD_SAVE_ATOMIC_COUNTERS;
typedef struct _GR_DBG_OP_DATA_CMD_DBG_MARKER_BEGIN
{
GR_CHAR marker[1];
// The rest of null terminated string follows, up to the size of the packet...
} GR_DBG_OP_DATA_CMD_DBG_MARKER_BEGIN;
typedef struct _GR_DBG_OP_DATA_CMD_DBG_MARKER_END
{
GR_UINT _reserved;
} GR_DBG_OP_DATA_CMD_DBG_MARKER_END;
// ------------------------------------------------------------------------------------------------
// Debug message callback
typedef GR_VOID (GR_STDCALL *GR_DBG_MSG_CALLBACK_FUNCTION)(
GR_ENUM msgType, // GR_DBG_MSG_TYPE
GR_ENUM validationLevel, // GR_VALIDATION_LEVEL
GR_BASE_OBJECT srcObject,
GR_SIZE location,
GR_ENUM msgCode, // GR_DBG_MSG_CODE
const GR_CHAR* pMsg,
GR_VOID* pUserData);
// ------------------------------------------------------------------------------------------------
// Debug functions
GR_RESULT GR_STDCALL grDbgSetValidationLevel(
GR_DEVICE device,
GR_ENUM validationLevel); // GR_VALIDATION_LEVEL
GR_RESULT GR_STDCALL grDbgRegisterMsgCallback(
GR_DBG_MSG_CALLBACK_FUNCTION pfnMsgCallback,
GR_VOID* pUserData);
GR_RESULT GR_STDCALL grDbgUnregisterMsgCallback(
GR_DBG_MSG_CALLBACK_FUNCTION pfnMsgCallback);
GR_RESULT GR_STDCALL grDbgSetMessageFilter(
GR_DEVICE device,
GR_ENUM msgCode, // GR_DBG_MSG_CODE
GR_ENUM filter); // GR_DBG_MSG_FILTER
GR_RESULT GR_STDCALL grDbgSetObjectTag(
GR_BASE_OBJECT object,
GR_SIZE tagSize,
const GR_VOID* pTag);
GR_RESULT GR_STDCALL grDbgSetGlobalOption(
GR_ENUM dbgOption, // GR_DBG_GLOBAL_OPTION
GR_SIZE dataSize,
const GR_VOID* pData);
GR_RESULT GR_STDCALL grDbgSetDeviceOption(
GR_DEVICE device,
GR_ENUM dbgOption, // GR_DBG_DEVICE_OPTION
GR_SIZE dataSize,
const GR_VOID* pData);
GR_VOID GR_STDCALL grCmdDbgMarkerBegin(
GR_CMD_BUFFER cmdBuffer,
const GR_CHAR* pMarker);
GR_VOID GR_STDCALL grCmdDbgMarkerEnd(
GR_CMD_BUFFER cmdBuffer);
#ifdef __cplusplus
}; // extern "C"
#endif // __cplusplus
#endif // __MANTLEDBG_H__