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

📄 simblt.h

📁 Lido PXA270平台开发板的最新BSP,包括源代码
💻 H
字号:
/*****************************************************************************
 * Name         : simblt.h
 * Title        : Blitter
 * Author       : Steve Johnson
 * Created      : 23/5/2002
 *
 * Copyright    : 2002 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  : 
 * Platform     : ANSI
 *
 * Modifications:
 * $Log: simblt.h $
 *
 *  --- Revision Logs Removed --- 
 *
 *  --- Revision Logs Removed --- 
 *
 *  --- Revision Logs Removed --- 
 *
 *  --- Revision Logs Removed --- 
 *
 *****************************************************************************/
#if !defined PMX2_BLT_SENTRY
#define PMX2_BLT_SENTRY

#ifdef __cplusplus
extern "C"
{
#endif

#ifdef DRIVER
/* Extract a value from an instruction word. */
#define F_EXTRACT(val,basename) (((val)&(F_MASK(basename)))>>(F_SHIFT(basename)))
#endif

#define BLT_BUFFER_SIZE	262144

#define PALLETE_SIZE	256

#define EXTRACT_BIT(d,s)	((d >> s) & 0x1)
#define EXTRACT_PIX(d,m,s)	(d & (m << s)) >> s
#define REPLICATE(d,m,s)	(d | ((d & m) >> s))
#define	INVERT(x)			if (x == 255) x = 256; x = 256 - x;
#define CLAMP(x)			if (x > 255) x = 255; else if (x < 0) x = 0;

/* Define out Mask and shift structures here - move to NPdefs later */

#define MASK_BLT_BH_TYPE			0xF0000000
#define SHIFT_BLT_BH_TYPE					28

#define MASK_BLT_SRC_CKEY_PRESENT	0x00000001
#define SHIFT_BLT_SRC_CKEY_PRESENT			0

#define MASK_BLT_DST_CKEY_PRESENT	0x00000002
#define SHIFT_BLT_DST_CKEY_PRESENT			1

#define MASK_BLT_ALPHA_PRESENT		0x00000004
#define SHIFT_BLT_ALPHA_PRESENT				2

#define MASK_BLT_ALPHA_DST_INV		0x08000000
#define SHIFT_BLT_ALPHA_DST_INV				27

#define MASK_BLT_ALPHA_SRC_INV		0x00800000
#define SHIFT_BLT_ALPHA_SRC_INV				23

#define MASK_BLT_DST_BLEND_OP		0x07000000
#define SHIFT_BLT_DST_BLEND_OP				24

#define MASK_BLT_SRC_BLEND_OP		0x00700000
#define SHIFT_BLT_SRC_BLEND_OP				20

#define MASK_BLT_ALPHA_GLOBAL		0x000FF000
#define SHIFT_BLT_ALPHA_GLOBAL				12

#define MASK_BLT_SURF_OFFSET_Y		0x00001FFF
#define SHIFT_BLT_SURF_OFFSET_Y				0

#define MASK_BLT_SURF_OFFSET_X		0x07FFC000
#define SHIFT_BLT_SURF_OFFSET_X				14

#define MASK_BLT_MASK_SIZE_Y		0x00000FFF
#define SHIFT_BLT_MASK_SIZE_Y				0

#define MASK_BLT_MASK_SIZE_X		0x03FFC000
#define SHIFT_BLT_MASK_SIZE_X				14

#define MASK_BLT_PAT_WIDTH			0x000007C0
#define SHIFT_BLT_PAT_WIDTH					6

#define MASK_BLT_PAT_HEIGHT			0x0000001F
#define SHIFT_BLT_PAT_HEIGHT				0

#define MASK_BLT_PAT_OFFSET_X		0x007C0000
#define SHIFT_BLT_PAT_OFFSET_X				18

#define MASK_BLT_PAT_OFFSET_Y		0x0001F000
#define SHIFT_BLT_PAT_OFFSET_Y				12

#define MASK_BLT_STRETCH_X			0x0FFC0000
#define SHIFT_BLT_STRETCH_X					18

#define MASK_BLT_STRETCH_Y			0x00003FF0
#define SHIFT_BLT_STRETCH_Y					4

#define MASK_BLT_CLIP_COUNT			0x00000007
#define SHIFT_BLT_CLIP_COUNT				0

#define MASK_BLT_CLIP_MIN_XY		0x00003FFF
#define SHIFT_BLT_CLIP_MIN_XY				0

#define MASK_BLT_CLIP_MAX_XY		0x3FFF0000
#define SHIFT_BLT_CLIP_MAX_XY				16

#define MASK_BLT_USE_DEST			0x08000000
#define SHIFT_BLT_USE_DEST					27

#define MASK_BLT_ROTATION			0x06000000
#define SHIFT_BLT_ROTATION					25

#define MASK_BLT_COPY_ORDER			0x01800000
#define SHIFT_BLT_COPY_ORDER				23

#define MASK_BLT_DST_CK_CTRL		0x00600000
#define SHIFT_BLT_DST_CK_CTRL				21

#define MASK_BLT_SRC_CK_CTRL		0x00180000
#define SHIFT_BLT_SRC_CK_CTRL				19

#define MASK_BLT_CLIP_CTRL			0x00040000
#define SHIFT_BLT_CLIP_CTRL					18

#define MASK_BLT_ALPHA_CTRL			0x00020000
#define SHIFT_BLT_ALPHA_CTRL				17

#define MASK_BLT_PATTERN_CTRL		0x00010000
#define SHIFT_BLT_PATTERN_CTRL				16

#define MASK_BLT_ROP3_A_CTRL		0x0000FF00
#define SHIFT_BLT_ROP3_A_CTRL				8

#define MASK_BLT_ROP3_B_CTRL		0x000000FF
#define SHIFT_BLT_ROP3_B_CTRL				0

#define MASK_BLT_SURFACE_MEM_TYPE	0x0C000000
#define SHIFT_BLT_SURFACE_MEM_TYPE			26

#define MASK_BLT_FORMAT				0x00078000
#define SHIFT_BLT_FORMAT					15

#define MASK_BLT_BASE_ADDRESS		0x01FFFFFF
#define SHIFT_BLT_BASE_ADDRESS				0

#define MASK_BLT_SURF_Y				0x00001FFF
#define SHIFT_BLT_SURF_Y					0

#define MASK_BLT_SURF_X				0x1FFF0000
#define SHIFT_BLT_SURF_X					16

#define MASK_BLT_STRIDE				0x00007FFF
#define SHIFT_BLT_STRIDE					0

#define MASK_BLT_PALLETE_OFFSET		0x0000007F
#define SHIFT_BLT_PALLETE_OFFSET			0

#define MASK_BLT_PALLETE_COUNT		0x0001FF00
#define SHIFT_BLT_PALLETE_COUNT				8

#define MASK_BLT_SURF_DATA_STRIDE	0xC0000000
#define SHIFT_BLT_SURF_DATA_STRIDE			30


#define SURFACE_TYPE_SYSTEM				0
#define SURFACE_TYPE_FB_EXISTING		1
#define SURFACE_TYPE_FB_DATA_FOLLOWS	2

#define DATA_STRIDE_DWORD				0
#define DATA_STRIDE_1BYTE				1
#define DATA_STRIDE_2BYTE				2
#define DATA_STRIDE_NEGBYTE				3

#define ROTATE_0						0
#define ROTATE_90						1
#define ROTATE_180						2
#define ROTATE_270						3

#define COPY_TOPLEFT_BOTTOMRIGHT		0
#define COPY_TOPRIGHT_BOTTOMLEFT		1
#define COPY_BOTTOMLEFT_TOPRIGHT		2	
#define COPY_BOTTOMRIGHT_TOPLEFT		3

#define ONE								0
#define SRC								1
#define DST								2
#define SRC_GLOBAL						3	
#define DST_GLOBAL						4	
#define GLOBAL							5
#define ZERO							6

typedef enum tagBLT_BH
{
	BLT_CLIP_CTRL		= 0,
	BLT_PATTERN_CTRL	= 1,
	BLT_2D_CONTROL		= 2,
	BLT_SRC_OFFSET		= 3,
	BLT_MASK_OFFSET		= 4,
	BLT_MASK_SIZE		= 5,
	BLT_STRETCH_CTRL	= 6,
	BLT_2D_FENCE		= 7,
	BLT_2D_BLT_RECT		= 8,
	BLT_2D_SRC_SURFACE	= 9,
	BLT_2D_DST_SURFACE	= 10,
	BLT_2D_PAT_SURFACE	= 11,
	BLT_2D_SRC_PALETTE	= 12,
	BLT_2D_PAT_PALETTE	= 13,
	BLT_2D_MASK_SURFACE	= 14,
	BLT_2D_FLUSH		= 15
} BLT_BH;

typedef enum tagBLT_FORMAT
{
	PALL_1_BIT		= 0,
	PALL_2_BIT		= 1,
	PALL_4_BIT		= 2,
	PALL_8_BIT		= 3,
	GREY_8_BIT		= 4,
	ALPHA_4_BIT		= 5,
	RGB_3_3_2		= 6,
	RGBA_4_4_4_4	= 7,
	RGB_5_5_5		= 8,
	RGBA_5_5_5_1	= 9,
	RGB_5_6_5		= 10,
	RGB_8_8_8		= 11,
	RGBA_8_8_8_8	= 12
} BLT_FORMAT;

typedef struct tagBLT_STATE
{
	/* Cyclic buffer control */
	UINT32	uReadIndex;
	UINT32	uWriteIndex;
	UINT32	uNumWords;						/* number of dwords in our cyclic buffer */
	UINT32	auSlavedData[BLT_BUFFER_SIZE];	/* stores data that has been slaved over from the host */


	/* State words -- just copies of the data that the slave port got */
	UINT32	uSrcCKey, uSrcCKeyMask;
	UINT32	uDstCKey, uDstCKeyMask;
	UINT32	uAlphaCtrl;
	UINT32	uSrcOffset;
	UINT32	uMaskOffset, uMaskSize;
	UINT32	uPatternCtrl;
	UINT32	uStretchCtrl;
	UINT32	uSrcSurface;
	UINT32	uSrcAddr;						/* only valid for frame buffer sources */
	UINT32	uSrcStart;
	UINT32	uSrcEnd;
	UINT32	uPatternSurface;
	UINT32	uPatternAddr;
	UINT32	uPatternSize;
	UINT32	uDstSurface;
	UINT32	uDstAddr;
	UINT32	uMaskSurface;
	UINT32	uMaskAddr;
	UINT32	uMaskStart;
	UINT32	uMaskEnd;
	UINT32	uClipCount;
	INT32	uClipRectX[8];
	INT32	uClipRectY[8];
	UINT32	uRectCtrl;
	INT32	uDestSizeX;
	INT32	uDestSizeY;
	UINT32	uFillColour;

	/* Pallettes */
	UINT32	auSrcPallete[PALLETE_SIZE];
	UINT32	auPatternPallete[PALLETE_SIZE];
	UINT32	uSrcPaletteAddr;
	UINT32	uPatternPaletteAddr;

	INT32	uMinXClip;
	INT32	uMinYClip;
	INT32	uMaxXClip;
	INT32	uMaxYClip;

	UINT32	uBmpAddress;

} BLT_STATE;

typedef struct tagSYS_DATA
{
	UINT32	Dword[32];
	UINT8	Index;
	UINT8	EndIndex;
} SYS_DATA;

typedef struct tagADDR_STRUCT
{
	INT32	x;
	INT32	y;

	INT32	uBltDirX;
	INT32	uBltDirY;

	UINT32	uDstAddress;
	UINT32	uDstBitAddr;
	UINT32	uDstPixPad;
	INT32	uDstStride;
	UINT32	uDstPosX;
	UINT32	uDstPosY;
	INT32	uDstStartX;
	INT32	uDstStartY;
	INT32	uDstEndX;
	INT32	uDstEndY;
	UINT32	uDstBpp;
	UINT32	uDstMask;

	UINT32	uSrcAddress;
	UINT32	uSrcScaledX;
	UINT32	uSrcScaledY;
	UINT32	uSrcBitAddr;
	UINT32	uSrcPixPad;
	INT32	uSrcStride;
	INT32	uSrcOffsetX;
	INT32	uSrcOffsetY;
	UINT32	uSrcPitchX;
	UINT32	uSrcPitchY;
	UINT32	uSrcScalePosX;
	UINT32	uSrcScalePosY;
	UINT32	uSrcBpp;
	UINT32	uSrcMask;
	UINT32	uSrcSizeX;
	UINT32	uSrcSizeY;

	UINT32	uPatAddress;
	UINT32	uPatBitAddr;
	UINT32	uPatPixPad;
	INT32	uPatStride;
	UINT32	uPatPosX;
	UINT32	uPatPosY;
	UINT32	uPatOffsetX;
	UINT32	uPatOffsetY;
	UINT32	uPatBpp;
	UINT32	uPatMask;
	UINT32	uPatSizeX;
	UINT32	uPatSizeY;

	UINT32	uMaskAddress;
	UINT32	uMaskBitAddr;
	UINT32	uMaskPixPad;
	INT32	uMaskStride;
	UINT32	uMaskPosX;
	UINT32	uMaskPosY;
	INT32	uMaskOffsetX;
	INT32	uMaskOffsetY;
	UINT32	uMaskSizeX;
	UINT32	uMaskSizeY;

	UINT32 uRectClipNum;

} ADDR_STRUCT;

void InitBlt();
void BltSlaveData(UINT32 uData);
void ProcessBltData(void);

#ifdef __cplusplus
}
#endif

#endif /* SENTRY */

⌨️ 快捷键说明

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