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

📄 slaveport.c

📁 Lido PXA270平台开发板的最新BSP,包括源代码
💻 C
字号:
/**************************************************************************
 * Name         : slaveport.c
 * Author       : BCB
 * Created      : 23/05/2003
 *
 * Copyright    : 2003 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.
 *
 * Platform     : ANSI
 *
 * $Date: 2004/10/26 11:20:30 $ $Revision: 1.5.1.1 $
 * $Log: slaveport.c $
 **************************************************************************/
#define MODULE_ID MODID_SLAVEPORT

#include "context.h"
#include "slaveport.h"

/***********************************************************************************
 Function Name      : StartTriangle[List/Strip/Fan]
 Inputs             : gc
 Outputs            : -
 Returns            : -
 Description        : Emits a triangle [list/strip/fan] block header.
************************************************************************************/

IMG_VOID StartTriangleList(GLESContext *gc)
{
	IMG_UINT32 ui32BlockHeader = MBX1_TAOBJTYPE_VERTEXFACELIST | gc->sHWContext.ui32PrimitiveHeader;

	WriteToSlavePort(gc, &ui32BlockHeader, 1);

#if defined(SUPPORT_VGP) || defined(SUPPORT_VGP_LITE)
	WriteToSlavePort(gc, &gc->sHWContext.ui32VGPClipControlWord, 1);
#endif
}

IMG_VOID StartTriangleStrip(GLESContext *gc)
{
	IMG_UINT32 ui32BlockHeader = MBX1_TAOBJTYPE_VERTEXFACESTRIP | gc->sHWContext.ui32PrimitiveHeader;

	WriteToSlavePort(gc, &ui32BlockHeader, 1);

#if defined(SUPPORT_VGP) || defined(SUPPORT_VGP_LITE)
	WriteToSlavePort(gc, &gc->sHWContext.ui32VGPClipControlWord, 1);
#endif
}

IMG_VOID StartTriangleFan(GLESContext *gc)
{
	IMG_UINT32 ui32BlockHeader = MBX1_TAOBJTYPE_VERTEXFACEFAN | gc->sHWContext.ui32PrimitiveHeader;

	WriteToSlavePort(gc, &ui32BlockHeader, 1);

#if defined(SUPPORT_VGP) || defined(SUPPORT_VGP_LITE)
	WriteToSlavePort(gc, &gc->sHWContext.ui32VGPClipControlWord, 1);
#endif
}

/***********************************************************************************
 Function Name      : StartLineStrip
 Inputs             : gc
 Outputs            : -
 Returns            : -
 Description        : Emits a line strip block header, with line width state
************************************************************************************/

IMG_VOID StartLineStrip(GLESContext *gc)
{
	IMG_UINT32 ui32BlockHeader = MBX1_TAOBJTYPE_VERTEXLINESTRIP | gc->sHWContext.ui32PrimitiveHeader;

	WriteToSlavePort(gc, &ui32BlockHeader, 1);
	WriteToSlavePort(gc, gc->sState.sLine.pfLineWidth, 1);

#if defined(SUPPORT_VGP) || defined(SUPPORT_VGP_LITE)
	WriteToSlavePort(gc, &gc->sHWContext.ui32VGPClipControlWord, 1);
#endif
}

/***********************************************************************************
 Function Name      : StartPointList
 Inputs             : gc
 Outputs            : -
 Returns            : -
 Description        : Emits a point list block header, with point size state
************************************************************************************/

IMG_VOID StartPointList(GLESContext *gc)
{
	IMG_UINT32 ui32BlockHeader = MBX1_TAOBJTYPE_POINTS | gc->sHWContext.ui32PrimitiveHeader;

	WriteToSlavePort(gc, &ui32BlockHeader, 1);
	WriteToSlavePort(gc, gc->sState.sPoint.pfPointSize, 1);

#if defined(SUPPORT_VGP) || defined(SUPPORT_VGP_LITE)
	WriteToSlavePort(gc, &gc->sHWContext.ui32VGPClipControlWord, 1);
#endif
}

/***********************************************************************************
 Function Name      : EndPrimitive
 Inputs             : gc
 Outputs            : -
 Returns            : -
 Description        : Emits a terminate to indicate end of strip/fan.
************************************************************************************/

IMG_VOID EndPrimitive(GLESContext *gc)
{
#ifdef USE_TERMINATE_WORD
	IMG_UINT32 ui32Terminate = 2;
#else
	IMG_UINT32 ui32Terminate = 0;
#endif

#ifdef USE_TERMINATE_WORD
	WriteToSlavePort(gc, &ui32Terminate, 1);
#else
	WriteToSlavePortTerminate(gc, ui32Terminate);
#endif
}

/***********************************************************************************
 Function Name      : EndPrimitive
 Inputs             : gc
 Outputs            : -
 Returns            : -
 Description        : Emits a terminate to indicate end primitive block
************************************************************************************/

IMG_VOID EndPrimitiveBlock(GLESContext *gc)
{
#ifdef USE_TERMINATE_WORD
	IMG_UINT32 ui32Terminate = 3;
#else
	IMG_UINT32 ui32Terminate = 1;
#endif

#ifdef USE_TERMINATE_WORD
	WriteToSlavePort(gc, &ui32Terminate, 1);
#else
	WriteToSlavePortTerminate(gc, ui32Terminate);
#endif
}

/***********************************************************************************
 Function Name      : EmitState
 Inputs             : gc, puState, uNumWords
 Outputs            : -
 Returns            : -
 Description        : Emits some state to the slaveport
************************************************************************************/

IMG_VOID EmitState(GLESContext *gc, IMG_UINT32 *pui32State, IMG_UINT32 ui32NumWords)
{
	GLES_INC_COUNT(GLES_TIMER_TOTAL_STATE_COUNT, ui32NumWords);

	WriteToSlavePort(gc, pui32State, ui32NumWords);
}

/***********************************************************************************
 Function Name      : OutputVerticesSpecialObject
 Inputs             : gc, pfVert, ui32NumVerts, ui32VertexSize
 Outputs            : -
 Returns            : -
 Description        : Emits some viewport vertex data to the slaveport
************************************************************************************/

IMG_VOID OutputVerticesSpecialObject(GLESContext *gc, IMG_FLOAT *pfVert, 
									 IMG_UINT32 ui32NumVerts, IMG_UINT32 ui32VertexSize)
{
#ifdef USE_TERMINATE_WORD
	IMG_UINT32 i;
	IMG_UINT32 ui32Terminate = 0;

	for(i=0; i< ui32NumVerts; i++)
	{
		WriteToSlavePort(gc, &ui32Terminate, 1);
		WriteToSlavePort(gc, &pfVert[i*ui32VertexSize], ui32VertexSize);
	}
#else
	WriteToSlavePort(gc, pfVert, ui32VertexSize*ui32NumVerts);
#endif
}


#if (defined(SUPPORT_VGP) || defined(SUPPORT_VGP_LITE)) && !defined(PASSTHROUGH_BUILD)

/***********************************************************************************
 Function Name      : OutputVertex
 Inputs             : gc, pvInput, ui32Count
 Outputs            : -
 Returns            : -
 Description        : Emits some vertex data to the slaveport
************************************************************************************/

IMG_VOID OutputVertex(GLESContext *gc, IMG_VOID *pvInput, IMG_UINT32 ui32Count)
{
#ifdef USE_TERMINATE_WORD
	IMG_UINT32 ui32Terminate = 0;
#endif

#ifdef USE_TERMINATE_WORD
	WriteToSlavePort(gc, &ui32Terminate, 1);
#endif
	WriteToSlavePort(gc, pvInput, ui32Count);
}

#else

#if !defined(USE_FIXED_POINT_VERTICES)

/***********************************************************************************
 Function Name      : OutputVertices[C/CF/CT0/CFT0/CT1/CFT1/CMT/CFMT]
 Inputs             : gc, psVertex, ui32Count
 Outputs            : -
 Returns            : -
 Description        : Emits some vertex data with different components to the slaveport
************************************************************************************/

static IMG_VOID OutputVerticesC(GLESContext *gc, GLESvertex *psVertex, IMG_UINT32 ui32Count)
{
	IMG_UINT32 i;
#ifdef USE_TERMINATE_WORD
	IMG_UINT32 ui32Terminate = 0;
#endif

	for(i=0; i< ui32Count; i++)
	{
		IMG_UINT32 ui32Color = ColorConvertToHWFormat(&psVertex[i].sColor);

#ifdef USE_TERMINATE_WORD
		WriteToSlavePort(gc, &ui32Terminate, 1);
#endif
		WriteToSlavePort(gc, &psVertex[i].sWindow.fX, 4);
		WriteToSlavePort(gc, &ui32Color, 1);

	}
}

static IMG_VOID OutputVerticesCF(GLESContext *gc, GLESvertex *psVertex, IMG_UINT32 ui32Count)
{
	IMG_UINT32 i;
#ifdef USE_TERMINATE_WORD
	IMG_UINT32 ui32Terminate = 0;
#endif

	for(i=0; i< ui32Count; i++)
	{
		IMG_UINT32 ui32Color = ColorConvertToHWFormat(&psVertex[i].sColor);
		IMG_UINT32 ui32Fog = FogConvert(psVertex[i].fFog);

#ifdef USE_TERMINATE_WORD
		WriteToSlavePort(gc, &ui32Terminate, 1);
#endif

		WriteToSlavePort(gc, &psVertex[i].sWindow.fX, 4);
		WriteToSlavePort(gc, &ui32Color, 1);
		WriteToSlavePort(gc, &ui32Fog, 1);


	}

}

static IMG_VOID OutputVerticesCT0(GLESContext *gc, GLESvertex *psVertex, IMG_UINT32 ui32Count)
{
	IMG_UINT32 i;
#ifdef USE_TERMINATE_WORD
	IMG_UINT32 ui32Terminate = 0;
#endif

	for(i=0; i< ui32Count; i++)
	{
		IMG_UINT32 ui32Color = ColorConvertToHWFormat(&psVertex[i].sColor);

#ifdef USE_TERMINATE_WORD
		WriteToSlavePort(gc, &ui32Terminate, 1);
#endif
		WriteToSlavePort(gc, &psVertex[i].sWindow.fX, 4);
		WriteToSlavePort(gc, &ui32Color, 1);
		WriteToSlavePort(gc, &psVertex[i].asTexture[0].fX, 2);

	}
}

static IMG_VOID OutputVerticesCFT0(GLESContext *gc, GLESvertex *psVertex, IMG_UINT32 ui32Count)
{
	IMG_UINT32 i;
#ifdef USE_TERMINATE_WORD
	IMG_UINT32 ui32Terminate = 0;
#endif

	for(i=0; i< ui32Count; i++)
	{
		IMG_UINT32 ui32Color = ColorConvertToHWFormat(&psVertex[i].sColor);
		IMG_UINT32 ui32Fog = FogConvert(psVertex[i].fFog);


#ifdef USE_TERMINATE_WORD
		WriteToSlavePort(gc, &ui32Terminate, 1);
#endif
		WriteToSlavePort(gc, &psVertex[i].sWindow.fX, 4);
		WriteToSlavePort(gc, &ui32Color, 1);
		WriteToSlavePort(gc, &ui32Fog, 1);
		WriteToSlavePort(gc, &psVertex[i].asTexture[0].fX, 2);

	}

}

static IMG_VOID OutputVerticesCT1(GLESContext *gc, GLESvertex *psVertex, IMG_UINT32 ui32Count)
{
	IMG_UINT32 i;
#ifdef USE_TERMINATE_WORD
	IMG_UINT32 ui32Terminate = 0;
#endif

	for(i=0; i< ui32Count; i++)
	{
		IMG_UINT32 ui32Color = ColorConvertToHWFormat(&psVertex[i].sColor);

#ifdef USE_TERMINATE_WORD
		WriteToSlavePort(gc, &ui32Terminate, 1);
#endif
		WriteToSlavePort(gc, &psVertex[i].sWindow.fX, 4);
		WriteToSlavePort(gc, &ui32Color, 1);
		WriteToSlavePort(gc, &psVertex[i].asTexture[1].fX, 2);

	}
}

static IMG_VOID OutputVerticesCFT1(GLESContext *gc, GLESvertex *psVertex, IMG_UINT32 ui32Count)
{
	IMG_UINT32 i;
#ifdef USE_TERMINATE_WORD
	IMG_UINT32 ui32Terminate = 0;
#endif

	for(i=0; i< ui32Count; i++)
	{
		IMG_UINT32 ui32Color = ColorConvertToHWFormat(&psVertex[i].sColor);
		IMG_UINT32 ui32Fog = FogConvert(psVertex[i].fFog);

#ifdef USE_TERMINATE_WORD
		WriteToSlavePort(gc, &ui32Terminate, 1);
#endif

		WriteToSlavePort(gc, &psVertex[i].sWindow.fX, 4);
		WriteToSlavePort(gc, &ui32Color, 1);
		WriteToSlavePort(gc, &ui32Fog, 1);
		WriteToSlavePort(gc, &psVertex[i].asTexture[1].fX, 2);

	}

}

static IMG_VOID OutputVerticesCMT(GLESContext *gc, GLESvertex *psVertex, IMG_UINT32 ui32Count)
{
	IMG_UINT32 i;
#ifdef USE_TERMINATE_WORD
	IMG_UINT32 ui32Terminate = 0;
#endif

	for(i=0; i< ui32Count; i++)
	{
		IMG_UINT32 ui32Color = ColorConvertToHWFormat(&psVertex[i].sColor);

#ifdef USE_TERMINATE_WORD
		WriteToSlavePort(gc, &ui32Terminate, 1);
#endif
		WriteToSlavePort(gc, &psVertex[i].sWindow.fX, 4);
		WriteToSlavePort(gc, &ui32Color, 1);
		WriteToSlavePort(gc, &psVertex[i].asTexture[0].fX, 2);
		WriteToSlavePort(gc, &psVertex[i].asTexture[1].fX, 2);

	}

}

static IMG_VOID OutputVerticesCFMT(GLESContext *gc, GLESvertex *psVertex, IMG_UINT32 ui32Count)
{
	IMG_UINT32 i;
#ifdef USE_TERMINATE_WORD
	IMG_UINT32 ui32Terminate = 0;
#endif

	for(i=0; i< ui32Count; i++)
	{
		IMG_UINT32 ui32Color = ColorConvertToHWFormat(&psVertex[i].sColor);
		IMG_UINT32 ui32Fog = FogConvert(psVertex[i].fFog);

#ifdef USE_TERMINATE_WORD
		WriteToSlavePort(gc, &ui32Terminate, 1);
#endif
		WriteToSlavePort(gc, &psVertex[i].sWindow.fX, 4);
		WriteToSlavePort(gc, &ui32Color, 1);
		WriteToSlavePort(gc, &ui32Fog, 1);
		WriteToSlavePort(gc, &psVertex[i].asTexture[0].fX, 2);
		WriteToSlavePort(gc, &psVertex[i].asTexture[1].fX, 2);

	}
}

/* Function table with outputvertices procs. Picked based on vertex format */
IMG_VOID (*apfnOutputVertexProcs[8])(GLESContext *gc, GLESvertex *psVertex, IMG_UINT32 ui32Count) =
{
    OutputVerticesC, OutputVerticesCF, OutputVerticesCT0, OutputVerticesCFT0, 
	OutputVerticesCT1, OutputVerticesCFT1, OutputVerticesCMT, OutputVerticesCFMT
};

#endif /* !USE_FIXED_POINT_VERTICES */

#endif /* !SUPPORT_VGP */

⌨️ 快捷键说明

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