⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 profile.h

📁 Lido PXA270平台开发板的最新BSP,包括源代码
💻 H
字号:
/******************************************************************************
<module>
* Name         : profile.h
* Title        : driver profiling functionality
* Author(s)    : Imagination Technologies
* Created      : 2 March 2004
*
* Copyright    : 2004 by Imagination Technologies Limited.
*                All rights reserved.  No part of this software, either
*                material or conceptual may be copied or distributed,
*                transmitted, transcribed, stored in a retrieval system
*                or translated into any human or computer language in any
*                form by any means, electronic, mechanical, manual or
*                other-wise, or disclosed to third parties without the
*                express written permission of Imagination Technologies
*                Limited, Unit 8, HomePark Industrial Estate,
*                King's Langley, Hertfordshire, WD4 8LZ, U.K.
*
* Description  : driver profiling functionality
*
* Platform     : Windows CE
*
</module>
********************************************************************************/
#if !defined(_PROFILE_H_)
#define _PROFILE_H_

/* 
	Prim function enumeration.
	Defined outside ENABLE_D3DM_PROFILING as its
	used by a hardware workaround
*/
typedef enum _D3DM_PRIM_FUNCTION_
{
	TRIANGLELIST	= 0,
	LINELIST,
	LINESTRIP,
	TRIANGLESTRIP,
	TRIANGLEFAN,
	POINTLIST,
	TRILISTLINE,
	TRISTRIPLINE,
	TRIFANLINE,
	INDEXEDTRIANGLELIST,
	INDEXEDTRIANGLESTRIP,
	INDEXEDTRIANGLEFAN,
	INDEXEDPOINTLIST,
	INDEXEDLINELIST,
	INDEXEDLINESTRIP,
	INDEXEDTRILISTLINE,
	INDEXEDTRISTRIPLINE,
	INDEXEDTRIFANLINE,
	MAX_PRIM_FUNCS

} D3DM_PRIM_FUNCTION;

extern IMG_UINT32   sPrimLookup[];
extern IMG_UINT32	sIndexedPrimLookup[];

#if defined ENABLE_D3DM_PROFILING

/* Other Function enumeration */
typedef enum _D3DM_FUNCTIONS_
{
	VALIDATE_VERTEX	=  0,
	CALC_RGB_COLOUR,
	DO_CLIP_TEST_AND_VP_TRANSFORM,
	HARDWARE_3D_BLIT,
	HARDWARE_2D_BLIT,
	SOFTWARE_BLIT,
	TWIDDLE_COPY,
	PVRD3DM_GET_ADAPTER_INFO,
	PVRD3DM_VALIDATE_DEVICE,
	SET_UP_NATIVE_VERTEX,
	CLIP_TO_PLANE,
	FAST_CLIP_TO_PLANE,
	DO_LINE_CLIP,
	DO_POLYGON_CLIP,
	OUTPUT_VERTICES,
	WRITE_BACK_VERTICES,
	PROCESS_VERTICES,
	D3DM_ACQUIRE_TA_RESOURCES,
	D3DM_RELEASE_TA_RESOURCES,
	D3DM_CONNECT_RENDER_TARGET,
	D3DM_DISCONNECT_RENDER_TARGET,
	D3DM_ALLOC_DEVICE_MEM,
	D3DM_FREE_DEVICE_MEM,
	D3DM_FLUSH_OPS_ON_SURFACE,
	D3DM_FLUSH_ALL_QUEUES,
	D3DM_QUEUE_RENDER,
	TA_START,
	TA_STOP,
	DO_BEGIN_SCENE,
	DO_MID_SCENE,
	DO_END_SCENE,
	FLUSH_GEOMETRY_ON_SURFACE,
	TACS_WRITE_TERM_DWORD,
	TACS_WRITE_DATA,
	D3DM_ACQUIRE_FIFO_SPACE,

	MAX_OTHER_FUNCS

} D3DM_FUNCTION;

#define MAX_DP_OP_COUNT			256
#define MAX_PRIM_FUNC_COUNT		MAX_PRIM_FUNCS
#define MAX_RENDERSTATE_COUNT	D3DM_MAXRENDERSTATES
#define MAX_TEXTURESTATE_COUNT	D3DMTSS_MAXTEXTURESTATES
#define MAX_OTHER_FUNC_COUNT	MAX_OTHER_FUNCS

/* DP OP Name structure */
typedef struct _DP_OP_NAME_
{
	IMG_UINT32	ui32OP;
	char		*pszName;
}DP_OP_NAME;

/* Function profile structure */
typedef struct _D3DM_FUNCTION_PROFILE_
{
	IMG_UINT32			ui32Calls;
	__int64				i64TotalCallTime;
	__int64				i64LastStart;

} D3DM_FUNCTION_PROFILE;

/* Profile structure */
typedef struct _D3DM_PROFILE_
{
	/* D3DM DP ops */
	D3DM_FUNCTION_PROFILE	sDPOperations[MAX_DP_OP_COUNT];

	/* D3DM Render State functions */
	D3DM_FUNCTION_PROFILE	sRenderStates[MAX_RENDERSTATE_COUNT];

	/* D3DM texture stage functions */
	D3DM_FUNCTION_PROFILE	sTextureStageState[MAX_TEXTURESTATE_COUNT];

	/* D3DM Primitive funcs */
	D3DM_FUNCTION_PROFILE	sPrimitiveFuncs[MAX_PRIM_FUNC_COUNT];

	/* D3DM Other funcs */
	D3DM_FUNCTION_PROFILE	sOtherFuncs[MAX_OTHER_FUNC_COUNT];

	/* Scene counter */
	IMG_UINT32	ui32SceneCount;

	/* Scene Start Time */
	__int64		i64LastSceneStart;

	/* Scene Start Time */
	__int64		i64TotalSceneTime;

	/* Driver Start Time */
	__int64		i64DriverStart;

	/* Driver Start Time */
	__int64		i64DriverStop;

} D3DM_PROFILE;

extern D3DM_PROFILE sDriverProfile;

/*******************************************************************
*	Time Function
********************************************************************/
__inline __int64 GetTicks()
{
	LARGE_INTEGER Count;

	QueryPerformanceCounter(&Count);
	return Count.QuadPart;
}
/*******************************************************************
*	Common profiling
********************************************************************/
#define PROFILE_START(x) x->ui32Calls++; x->i64LastStart = GetTicks()
#define PROFILE_STOP(x)  x->i64TotalCallTime += (GetTicks() - (x->i64LastStart))

/*******************************************************************
*	Initialise and Printout/Profile processing
********************************************************************/
__inline IMG_VOID PROFILE_INIT()
{
	ZeroMemory(&sDriverProfile, sizeof(sDriverProfile));
	sDriverProfile.i64DriverStart = GetTicks();
}

IMG_VOID PROFILE_PROCESS();
/*******************************************************************
*	DP_OP profiling
********************************************************************/
__inline IMG_VOID PROFILE_START_DP_OP(IMG_UINT32 ui32Index)
{
	D3DM_FUNCTION_PROFILE *psFunc = &sDriverProfile.sDPOperations[ui32Index];
	PROFILE_START(psFunc);
}

__inline IMG_VOID PROFILE_STOP_DP_OP(IMG_UINT32 ui32Index)
{
	D3DM_FUNCTION_PROFILE *psFunc = &sDriverProfile.sDPOperations[ui32Index];
	PROFILE_STOP(psFunc);
}
/*******************************************************************
*	Primitive function profiling
********************************************************************/
__inline IMG_VOID PROFILE_START_PRIM(D3DMPRIMITIVETYPE ePrimFunc, PRIM_FILLMODE eFillMode)
{
	D3DM_FUNCTION_PROFILE *psFunc = &sDriverProfile.sPrimitiveFuncs[sPrimLookup[(ePrimFunc * 3) + eFillMode]];
	PROFILE_START(psFunc);
}

__inline IMG_VOID PROFILE_STOP_PRIM(D3DMPRIMITIVETYPE ePrimFunc, PRIM_FILLMODE eFillMode)
{
	D3DM_FUNCTION_PROFILE *psFunc = &sDriverProfile.sPrimitiveFuncs[sPrimLookup[(ePrimFunc * 3) + eFillMode]];
	PROFILE_STOP(psFunc);
}
/*******************************************************************
*	Indexed Primitive function profiling
********************************************************************/
__inline IMG_VOID PROFILE_START_PRIM_INDEXED(D3DMPRIMITIVETYPE ePrimFunc, PRIM_FILLMODE eFillMode)
{
	D3DM_FUNCTION_PROFILE *psFunc = &sDriverProfile.sPrimitiveFuncs[sIndexedPrimLookup[(ePrimFunc * 3) + eFillMode]];
	PROFILE_START(psFunc);
}

__inline IMG_VOID PROFILE_STOP_PRIM_INDEXED(D3DMPRIMITIVETYPE ePrimFunc, PRIM_FILLMODE eFillMode)
{
	D3DM_FUNCTION_PROFILE *psFunc = &sDriverProfile.sPrimitiveFuncs[sIndexedPrimLookup[(ePrimFunc * 3) + eFillMode]];
	PROFILE_STOP(psFunc);
}
/*******************************************************************
*	Renderstate function profiling
********************************************************************/
__inline IMG_VOID PROFILE_START_RENDERSTATE(D3DMRENDERSTATETYPE eRState)
{
	D3DM_FUNCTION_PROFILE *psFunc = &sDriverProfile.sRenderStates[eRState];
	PROFILE_START(psFunc);
}

__inline IMG_VOID PROFILE_STOP_RENDERSTATE(D3DMRENDERSTATETYPE eRState)
{
	D3DM_FUNCTION_PROFILE *psFunc = &sDriverProfile.sRenderStates[eRState];
	PROFILE_STOP(psFunc);
}
/*******************************************************************
*	Texture stage state function profiling
********************************************************************/
__inline IMG_VOID PROFILE_START_TEXTURESTATE(IMG_UINT32 ui32TSState)
{
	D3DM_FUNCTION_PROFILE *psFunc = &sDriverProfile.sTextureStageState[ui32TSState];
	PROFILE_START(psFunc);
}

__inline IMG_VOID PROFILE_STOP_TEXTURESTATE(IMG_UINT32 ui32TSState)
{
	D3DM_FUNCTION_PROFILE *psFunc = &sDriverProfile.sTextureStageState[ui32TSState];
	PROFILE_STOP(psFunc);
}
/*******************************************************************
*	Other func profiling
********************************************************************/
__inline IMG_VOID PROFILE_START_FUNC(D3DM_FUNCTION eOtherFunc)
{
	D3DM_FUNCTION_PROFILE *psFunc = &sDriverProfile.sOtherFuncs[eOtherFunc];
	PROFILE_START(psFunc);
}

__inline IMG_VOID PROFILE_STOP_FUNC(D3DM_FUNCTION eOtherFunc)
{
	D3DM_FUNCTION_PROFILE *psFunc = &sDriverProfile.sOtherFuncs[eOtherFunc];
	PROFILE_STOP(psFunc);
}
/*******************************************************************
*	Scene profiling
********************************************************************/
__inline IMG_VOID PROFILE_START_SCENE()
{
	sDriverProfile.ui32SceneCount++;
	sDriverProfile.i64LastSceneStart = GetTicks();
}
__inline IMG_VOID PROFILE_STOP_SCENE()
{
	sDriverProfile.i64TotalSceneTime += (GetTicks() - (sDriverProfile.i64LastSceneStart));
}

#else /* ENABLE_D3DM_PROFILING */

#define PROFILE_START_DP_OP			 / ## /
#define PROFILE_STOP_DP_OP			 / ## /
#define PROFILE_START_PRIM			 / ## /
#define PROFILE_STOP_PRIM			 / ## /
#define PROFILE_START_PRIM_INDEXED	 / ## /
#define PROFILE_STOP_PRIM_INDEXED	 / ## /
#define PROFILE_START_RENDERSTATE	 / ## /
#define PROFILE_STOP_RENDERSTATE	 / ## /
#define PROFILE_START_TEXTURESTATE	 / ## /
#define PROFILE_STOP_TEXTURESTATE	 / ## /
#define PROFILE_START_FUNC			 / ## /
#define PROFILE_STOP_FUNC			 / ## /
#define PROFILE_START_SCENE			 / ## /
#define PROFILE_STOP_SCENE			 / ## /
#define PROFILE_INIT				 / ## /
#define PROFILE_PROCESS				 / ## /

#endif /* ENABLE_D3DM_PROFILING */


#endif /* #if !defined(_PROFILE_H_) */
/*****************************************************************************
 End of file (profile.h)
*****************************************************************************/

⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -