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