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

📄 pvr_pdump.c

📁 Lido PXA270平台开发板的最新BSP,包括源代码
💻 C
📖 第 1 页 / 共 4 页
字号:
	IMG_UINT32		ui32DataToWrite;
	IMG_HANDLE		*phFile = IMG_NULL;
	IMG_CHAR		szTmpStr[256];
	IMG_CHAR		*pszPostConfig;
	PDUMP_CONTEXT	*psPDContext = IMG_NULL;;
	
	VALIDATE_PDUMP_CONTEXT(psPDContext)

	if(!psPDContext->bVirtualContextEnabled)
	{
		return IMG_FALSE;
	}

	sprintf(szTmpStr, "%s\\%s", psPDContext->sz2DMemFilePath, psPDContext->sz2DMemFileName);
	phFile = fopen(szTmpStr, "wb");
	
	if(!phFile) return IMG_FALSE;

	/*
		Locate the end of the config data
	*/
	pszPostConfig =	strstr((IMG_CHAR*) psPDContext->pvMemFile, "\r\n-- Virtual File Start --");

	if(!pszPostConfig)
	{
		goto FV_Close;
	}

	/*
		Write config data
	*/
	ui32DataToWrite = pszPostConfig - (IMG_CHAR*) psPDContext->pvMemFile;
	if (ui32DataToWrite)
	{
		if(!fwrite(psPDContext->pvMemFile, ui32DataToWrite, 1, phFile))
		{
			goto FV_Close;
		}
	}

	/*
		Write prefix to file
	*/
	if (strlen(pszPrefix))
	{
		if(!fwrite(pszPrefix, strlen(pszPrefix), 1, phFile))
		{
			goto FV_Close;
		}
	}

	/*
		Write remainder of mem file to file
	*/ 
	pszPostConfig += strlen("\r\n-- Virtual File Start --");
	ui32DataToWrite = psPDContext->ui32MemFileIndex  - ui32DataToWrite - strlen("\r\n-- Virtual File Start --");

	if (ui32DataToWrite)
	{
		fwrite(pszPostConfig, ui32DataToWrite, 1, phFile);
	}

FV_Close:
	fclose(phFile);

	return PDumpDisableVirtual();
}

/***********************************************************************************
 Function Name      : PDumpClose
 Inputs             : psPDContext
 Outputs            : -
 Returns            : Success
 Description        : releases pdump resources
************************************************************************************/

IMG_BOOL PDumpClose(PDUMP_CONTEXT * psPDContext)
{
	if(psPDContext == IMG_NULL)
	{
		/*
			De-initialise global context
		*/
		SysReleasePDUMPData(gpsPDMMData);
		return IMG_TRUE;
	}

	/*
		Free up texture lists
	*/
	if(psPDContext->psRegisteredTextures != IMG_NULL)
	{
		PVRSRV_PDUMP_TEXTURE *psTexList;
		PVRSRV_PDUMP_TEXTURE *psTmp;

		psTexList = psPDContext->psRegisteredTextures;
		while(psTexList != IMG_NULL)
		{
			psTmp		= psTexList;
			psTexList	= psTexList->psNext;

			HostFreeMem(PVRSRV_HOST_PAGEABLE_HEAP, psTmp);
		}
	}

	psPDContext->psPDumpMemMap->ui32ActiveContexts--;

	if(psPDContext->psPDumpMemMap->ui32ActiveContexts == 1)
	{
		PDUMP_CONTEXT *psGlobalContext;

		psGlobalContext = psPDContext->psPDumpMemMap->psGlobalContext;
		/*
			The only active context is the global one created at boot and deleted at shut down
			, so close the global script, prim and tex files so the files can be manipulated
		*/
		if(psGlobalContext->fpPrim)
		{
			fclose(psGlobalContext->fpPrim);
			psGlobalContext->fpPrim				= IMG_NULL;
		}
		if(psGlobalContext->fpTex)
		{
			fclose(psGlobalContext->fpTex);
			psGlobalContext->fpTex = IMG_NULL;
		}
		if(psGlobalContext->fpScript)
		{
			fclose(psGlobalContext->fpScript);
			psGlobalContext->fpScript			= IMG_NULL;
			psGlobalContext->bScriptConfigured  = IMG_FALSE;
		}
	}
	if(psPDContext->psPDumpMemMap->ui32ActiveContexts == 0)
	{
		/*
			This is the global context so close 2D script
		*/
		if(psPDContext->fp2DScript)
		{
			fclose(psPDContext->fp2DScript);
			psPDContext->b2DScriptConfigured  = IMG_FALSE;
		}
	}

	/*
		Local context cleanup
	*/
	if(psPDContext->fpPrim)
		fclose(psPDContext->fpPrim);
	if(psPDContext->fpTex)
		fclose(psPDContext->fpTex);
	if(psPDContext->fpScript)
		fclose(psPDContext->fpScript);
	if(psPDContext->psPDumpMemMap)
		SysReleasePDUMPData(psPDContext->psPDumpMemMap);
	HostFreeMem	(PVRSRV_HOST_PAGEABLE_HEAP, psPDContext);

	return IMG_TRUE;
}

/*****************************************************************************
 FUNCTION	: 	PDumpEnable
 PURPOSE	:	Enables Dumping on the context passed in. Enables global 
				PDumping if psPDContext == NULL
 PARAMETERS	: 	psPDContext
 RETURNS	: 	
*****************************************************************************/

IMG_VOID PDumpEnable()
{
	PVRSRV_PDUMP_MEMMAP *psPDMemMap;

	psPDMemMap = SysGetPDUMPData();
	psPDMemMap->bPDumpingOn = IMG_TRUE;
	SysReleasePDUMPData(psPDMemMap);
}

/*****************************************************************************
 FUNCTION	: 	PDumpDisable
 PURPOSE	:	Disables Dumping on the context passed in. Disables global 
				PDumping if psPDContext == NULL
 PARAMETERS	: 	psPDContext
 RETURNS	: 	
*****************************************************************************/

IMG_VOID PDumpDisable()
{
	PVRSRV_PDUMP_MEMMAP *psPDMemMap;

	psPDMemMap = SysGetPDUMPData();
	psPDMemMap->bPDumpingOn = IMG_FALSE;
	SysReleasePDUMPData(psPDMemMap);
}

/*****************************************************************************
 FUNCTION	: 	PDumpDisable2D
 PURPOSE	:	Disables 2D PDumping on the context passed in and the global context 
 PARAMETERS	: 	psPDContext
 RETURNS	: 	
*****************************************************************************/

IMG_VOID PDumpDisable2D()
{
	PVRSRV_PDUMP_MEMMAP *psPDMemMap;

	psPDMemMap = SysGetPDUMPData();
	psPDMemMap->b2DEnabled = IMG_FALSE;
	SysReleasePDUMPData(psPDMemMap);
}

/*****************************************************************************
 FUNCTION	: 	PDumpEnableLocalScript
 PURPOSE	:	Enables Dumping on the context passed in. Enables global 
				PDumping if psPDContext == NULL
 PARAMETERS	: 	psPDContext
 RETURNS	: 	
*****************************************************************************/

IMG_VOID PDumpEnableLocalScript(PDUMP_CONTEXT *psPDContext)
{
	if(psPDContext)
		psPDContext->bLocalScriptDumpingOn = IMG_TRUE;
}

/*****************************************************************************
 FUNCTION	: 	PDumpPol
 PURPOSE	:	
 PARAMETERS	: 	
 RETURNS	: 	
*****************************************************************************/
IMG_BOOL PDumpPoll(PDUMP_CONTEXT *psPDContext,
				   IMG_UINT32	 ui32RegTag, 
				   IMG_UINT32 	 ui32Addr,
				   IMG_UINT32	 ui32Mask,
				   IMG_UINT32	 ui32Value,
				   IMG_UINT32	 ui32A,
				   IMG_UINT32	 ui32B,
				   IMG_UINT32	 ui32C)
{
	IMG_UINT32	ui32Frame;
	IMG_UINT32	bIs2DWrite;

	VALIDATE_PDUMP_CONTEXT(psPDContext)

	/*
		If were using the global context directly, then
		this is a 2d write
	*/
	bIs2DWrite		= psPDContext->bGlobalContext;
	ui32Frame		= psPDContext->ui32CurrentFrame;

	if(!psPDContext->psPDumpMemMap->bPDumpingOn)
	{
		return IMG_FALSE;
	}

	if(!ui32Frame ||
		((ui32Frame >= psPDContext->ui32StartFrame) &&
		(ui32Frame <= psPDContext->ui32StopFrame) &&
		!(ui32Frame%psPDContext->ui32SkipFrame)))
	{
		IMG_CHAR	szTmpStr[256];

		sprintf(szTmpStr, "POL :REG:%8.8lX %8.8lX %8.8lX %d %d %d\r\n",
					  ui32Addr,
					  ui32Mask,
					  ui32Value,
					  ui32A, ui32B, ui32C);
					  
		if(!DumpScriptLine (psPDContext, szTmpStr, strlen(szTmpStr), bIs2DWrite))
		{
			return IMG_FALSE;
		}
	}
	return IMG_TRUE;
}

/*****************************************************************************
 FUNCTION	: PDumpRegArray
    
 PURPOSE	: 

 PARAMETERS	: 
			  
 RETURNS	: None
*****************************************************************************/
IMG_BOOL PDumpRegArray(PDUMP_CONTEXT	*psPDContext,
					   IMG_UINT32		ui32RegTag, 
					   PVRSRV_HWREG		*psRegs, 
					   IMG_UINT32		ui32RegCount)
{
	IMG_UINT32 ui32Frame;
	VALIDATE_PDUMP_CONTEXT(psPDContext)

	ui32Frame = psPDContext->ui32CurrentFrame;

	if(!psPDContext->psPDumpMemMap->bPDumpingOn)
	{
		return IMG_FALSE;
	}



	if(!ui32Frame ||
		((ui32Frame >= psPDContext->ui32StartFrame) &&
		(ui32Frame <= psPDContext->ui32StopFrame) &&
		!(ui32Frame%psPDContext->ui32SkipFrame)))
	{
		IMG_CHAR	szTmpStr[256];
		IMG_UINT32	ui32Cnt;

		for(ui32Cnt = 0; ui32Cnt<ui32RegCount; ui32Cnt++)
		{
			sprintf(szTmpStr, "WRW :REG:%8.8lX %8.8lX\r\n", psRegs[ui32Cnt].ui32RegAddr, psRegs[ui32Cnt].ui32RegVal);
			if(!DumpScriptLine(psPDContext, szTmpStr, strlen(szTmpStr), IMG_FALSE))
			{
				return IMG_FALSE;
			}
		}
	}
	return IMG_TRUE;
}

/***********************************************************************************
 Function Name      : PDumpSPBatch
 Inputs             : psPDContext, ui32Data
 Outputs            : -
 Returns            : Success
 Description        : Write 32 bits to the primitive file
************************************************************************************/

IMG_BOOL PDumpSPBatch(PDUMP_CONTEXT		*psPDContext,
					  IMG_UINT32		ui32SPTag,
					  IMG_UINT32		*pui32Data,
					  IMG_UINT32		ui32Count)
{
	IMG_UINT32 ui32Frame;

	VALIDATE_PDUMP_CONTEXT(psPDContext)

	ui32Frame = psPDContext->ui32CurrentFrame;

	if(!psPDContext->psPDumpMemMap->bPDumpingOn)
	{
		return IMG_FALSE;
	}
	
	if(!ui32Frame ||
		((ui32Frame >= psPDContext->ui32StartFrame) &&
		(ui32Frame <= psPDContext->ui32StopFrame) &&
		!(ui32Frame%psPDContext->ui32SkipFrame)))
	{
		IMG_CHAR szTmpStr[256];
		
		switch(ui32SPTag)
		{
			case PDUMPTAGS_SP_MBX_DATA:
			{
				if(*pui32Data == MBX1_TAOBJTYPE_STREAMEND)
				{
					IMG_CHAR	szTmpStr[256];
					/*
						Terminate the TA data stream
					*/
					sprintf(szTmpStr, "WRW :SP:%8.8lX %8.8lX\r\n",
								psPDContext->psPDumpMemMap->sMBX.ui32SPDataStart,
								*pui32Data);

					if(!DumpScriptLine(psPDContext, szTmpStr, strlen(szTmpStr), IMG_FALSE))
					{
						return IMG_FALSE;
					}
					break;
				}
				/*
					Dump primitive data to prim file
				*/
				VALIDATE_PDUMP_FILE(psPDContext->fpPrim, psPDContext->szPrimFilePath, psPDContext->szPrimFileName)

				if(!fwrite(pui32Data, 4, ui32Count, psPDContext->fpPrim))
				{
					return IMG_FALSE;
				}
				fflush(psPDContext->fpPrim);
				break;	
			}
			case PDUMPTAGS_SP_MBX_TERM:
			{	
				IMG_CHAR	szTmpStr[256];
				IMG_UINT32	ui32Pos;

				/*
					Write load prim instruction to Script file
				*/
				VALIDATE_PDUMP_FILE(psPDContext->fpPrim, psPDContext->szPrimFilePath, psPDContext->szPrimFileName)
				
				ui32Pos = ftell(psPDContext->fpPrim);

				sprintf(szTmpStr,"\r\nLDB :SP:%8.8lX %8.8lX %8.8lX %s\r\n",
					psPDContext->psPDumpMemMap->sMBX.ui32SPDataStart, 
					psPDContext->ui32PrmPos, 
					ui32Pos - psPDContext->ui32PrmPos,
					psPDContext->szPrimFileName);

				if(!DumpScriptLine(psPDContext, szTmpStr, strlen(szTmpStr), IMG_FALSE))

⌨️ 快捷键说明

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