📄 profile.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 + -