//========= Copyright © 1996-2007, Valve LLC, All rights reserved. ============
//
// Purpose: XBox VXConsole Common. Used for public remote access items.
//
//=============================================================================
#pragma once

// sent during connection, used to explicitly guarantee a binary compatibility
#define VXCONSOLE_PROTOCOL_VERSION	300

typedef struct
{
	char		labelString[128];
	COLORREF	color;
} xrProfile_t;

typedef struct
{
	char		messageString[256];
	float		time;
	float		deltaTime;
	size_t		memory;
	int			deltaMemory;
} xrTimeStamp_t;

typedef struct
{
	char		nameString[256];
	char		shaderString[256];
	int			refCount;
} xrMaterial_t;

enum cacheableState_e
{
	CS_STATIC = 0,	// texture is not lru managed
	CS_EVICTED,		// texture mip0 is not in memory
	CS_LOADING,		// texture mip0 is loading
	CS_VALID,		// texture mip0 is valid for rendering
	CS_MAX
};

typedef struct
{
	char		nameString[256];
	char		groupString[64];
	char		formatString[64];
	int			size;
	int			width;
	int			height;
	int			depth;
	int			numLevels;
	int			binds;
	int			refCount;
	int			sRGB;
	int			edram;
	int			procedural;
	int			cacheableState;
	int			cacheableSize : 31; // Packing avoids game-to-vxconsole protocol version conflict
	int			final : 1;
	int			failed;
	int			pwl;
	int			reduced;
} xrTexture_t;

typedef struct
{
	char		nameString[256];
	char		formatString[64];
	int			rate;
	int			bits;
	int			channels;
	int			looped;
	int			dataSize;
	int			numSamples;
	int			streamed;
	int			quality;
} xrSound_t;

typedef struct
{
	char		nameString[128];
	char		helpString[256];	
} xrCommand_t;

typedef struct
{
	float	position[3];
	float	angle[3];
	char	mapPath[256];
	char	savePath[256];
	int		build;
	int		skill;
	char	details[1024];
} xrMapInfo_t;

typedef struct
{
	int		BSPSize;
} xrBudgetInfo_t;

struct xrModel_t
{
	char		nameString[256];
	int			dataSize;
	int			numVertices;
	int			triCount;
	int			dataSizeLod0;
	int			numVerticesLod0;
	int			triCountLod0;
	int			numBones;
	int			numParts;
	int			numLODs;
	int			numMeshes;
};

struct xrDataCacheItem_t
{
	char			nameString[256];
	char			sectionString[64];
	int				size;
	int				lockCount;
	unsigned int	clientId;
	unsigned int	itemData;
	unsigned int	handle;	
};

struct xrVProfNodeItem_t
{
	char			nameString[128];
	char			budgetGroupString[128];
	unsigned int	budgetGroupColor;
	unsigned int	totalCalls;
	double			inclusiveTime;
	double			exclusiveTime;
};

// Types of action taken in response to an rc_Assert() message
enum AssertAction_t
{
	ASSERT_ACTION_BREAK = 0,		//	Break on this Assert
	ASSERT_ACTION_IGNORE_THIS,		//	Ignore this Assert once
	ASSERT_ACTION_IGNORE_ALWAYS,	//	Ignore this Assert from now on
	ASSERT_ACTION_IGNORE_FILE,		//	Ignore all Asserts from this file from now on
	ASSERT_ACTION_IGNORE_ALL,		//	Ignore all Asserts from now on
	ASSERT_ACTION_OTHER				//	A more complex response requiring additional data (e.g. "ignore this Assert 5 times")
};

//id's for dispatching binary notifications to proper handlers
enum XBX_DBGBinaryNotification_HandlerID_t
{
	XBX_DBG_BNH_STACKTRANSLATOR,

	XBX_DBG_BNH_END, 
};