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

📄 s3c6410_disp.h

📁 SAMSUNG S3C6410 CPU BSP for winmobile6
💻 H
字号:
#ifndef __S3C6410_DISP_H__
#define __S3C6410_DISP_H__

class S3C6410Surf;

class FIMGSE2D;

#include "priv_context.h"
#include "fimgse2d.h"

class S3C6410Disp : public DDGPE
{

protected:

	volatile S3C6410_DISPLAY_REG	*m_pDispConReg;	// Display Controller SFR
	volatile S3C6410_GPIO_REG		*m_pGPIOReg;		// GPIO SFR
	volatile S3C6410_SPI_REG		*m_pSPIReg;		// SPI Controller SFR

	S3C6410Surf		*m_pVisibleSurface;
	GPEModeEx		m_ModeInfoEx;
	FIMGSE2D		*m_oG2D;

	/// for Cache Region Clean
	DWORD		m_dwSourceSurfacePA;
	HANDLE		m_hVideoDrv;
	CRITICAL_SECTION	m_csDevice;				// Critical Section for Display Device Control (FIMD/POST/TVSc/TVEnc)
	CRITICAL_SECTION	m_cs2D;				// Ciritcal Section for 2D

private:

	DWORD		m_dwDeviceScreenWidth;		// LCD Pannel Horizontal Resolution (Pixel Count)
	DWORD		m_dwDeviceScreenHeight;		// LCD Pannel Vertical Resolution (Pixel Count)

	DWORD		m_VideoMemoryPhysicalBase;
	DWORD		m_VideoMemoryVirtualBase;
	DWORD		m_VideoMemorySize;
	SurfaceHeap	*m_pVideoMemoryHeap;			// Video Memory Surface Heap

	UCHAR		m_CursorBackingStore[64*64*4];
	UCHAR		m_CursorXorShape[64*64];
	UCHAR		m_CursorAndShape[64*64];
	BOOL		m_CursorDisabled;
	BOOL		m_CursorVisible;
	BOOL		m_CursorForcedOff;
	RECTL		m_CursorRect;
	POINTL		m_CursorSize;
	POINTL		m_CursorHotspot;

	VIDEO_POWER_STATE		m_VideoPowerState;

	OUTPUT_INTERFACE		m_eOutputInterface;
	TV_DMA_MODE			m_eTVDMAMode;
	BOOL					m_bTVDMARunning;

	OverlayContext			m_OverlayCtxt;
	TVDMAContext			m_TVDMACtxt;

public:

	BOOL		m_InDDraw;
	ULONG_PTR	m_fpCurrentOverlay;
	ULONG_PTR	m_fpPreviousOverlay;

	S3C6410Disp();

	virtual
	~S3C6410Disp();

	virtual
	int
	NumModes();

	virtual
	SCODE
	SetMode(
		int			modeId,
		HPALETTE	* palette
		);

	virtual
	int
	InDisplay(void);

	virtual
	int
	InVBlank();

	virtual
	SCODE
	SetPalette(
		const PALETTEENTRY *source,
		USHORT		firstEntry,
		USHORT		numEntries
		);

	virtual
	SCODE
	GetModeInfo(
		GPEMode * pMode,
		int       modeNo
		);

	virtual
	SCODE
	GetModeInfoEx(
		GPEModeEx *pModeEx,
		int       modeNo
		);

	virtual
	SCODE
	SetPointerShape(
		GPESurf * mask,
		GPESurf * colorSurface,
		int       xHot,
		int       yHot,
		int       cX,
		int       cY
		);

	virtual
	SCODE
	MovePointer(
		int xPosition,
		int yPosition
		);

	virtual
	void
	WaitForNotBusy();

	virtual
	int
	IsBusy();

	virtual
	void
	GetPhysicalVideoMemory(
		unsigned long * physicalMemoryBase,
		unsigned long * videoMemorySize
		);

	void
	GetVirtualVideoMemory(
		unsigned long * virtualMemoryBase,
		unsigned long * videoMemorySize
		);

	virtual
	SCODE
	Line(
		GPELineParms * lineParameters,
		EGPEPhase      phase
		);

	// blt.cpp
	virtual
	SCODE
		BltPrepare(
		GPEBltParms * blitParameters
		);

	virtual
	SCODE
		BltComplete(
		GPEBltParms * blitParameters
		);

	virtual SCODE AcceleratedBltFill(GPEBltParms *pParms);
	BOOL HWBitBlt(GPEBltParms *pBltParms, PSURFACE_DESCRIPTOR, PSURFACE_DESCRIPTOR);
	virtual SCODE AcceleratedSrcCopyBlt(GPEBltParms *pBltParms);
	virtual SCODE AcceleratedBltSelect16(GPEBltParms *pBltParms);
	virtual SCODE AcceleratedDestInvert(GPEBltParms *pBltParms);
	virtual SCODE AcceleratedSolidLine(GPELineParms *pLineParms);
	virtual SCODE SourceRegionCacheClean(GPEBltParms *pBltParms);

	/// TODO: implementation
//	virtual SCODE AcceleratedBltRotate(GPEBltParms *pParms);	
	//

	virtual
	ULONG
	DrvEscape(
		SURFOBJ * pso,
		ULONG     iEsc,
		ULONG     cjIn,
		void    * pvIn,
		ULONG     cjOut,
		void    * pvOut
		);

	int
	GetGameXInfo(
		ULONG   iEsc,
		ULONG   cjIn,
		void  * pvIn,
		ULONG   cjOut,
		void  * pvOut
		);

	int
	GetRawFrameBuffer(
		ULONG   iEsc,
		ULONG   cjIn,
		void  * pvIn,
		ULONG   cjOut,
		void  * pvOut
		);

	SCODE
	WrappedEmulatedLine(
		GPELineParms * lineParameters
		);

	void
	CursorOn();

	void
	CursorOff();

	// surf.cpp
	SCODE
	AllocSurface(
		GPESurf    ** ppSurf,
		int           width,
		int           height,
		EGPEFormat    format,
		int           surfaceFlags
		);

	SCODE
	AllocSurface(
		DDGPESurf         ** ppSurf,
		int                  width,
		int                  height,
		EGPEFormat           format,
		EDDGPEPixelFormat    pixelFormat,
		int                  surfaceFlags
		);

	SCODE
	AllocSurfaceVideo(
		DDGPESurf		** ppSurf,
		int				width,
		int				height,
		int				stride,
		EGPEFormat           format,
		EDDGPEPixelFormat    pixelFormat
		);

	virtual
	void
	SetVisibleSurface(
		GPESurf * pSurf,
		BOOL      bWaitForVBlank
		);

	int
	GetRotateModeFromReg();

	void
	SetRotateParams();

	long
	DynRotate(
		int angle
		);

	virtual
	SCODE S3C6410Disp::DetectPixelFormat(
		DWORD				dwCaps,			// in: DDSCAPS_xxx flags
		DDPIXELFORMAT*		pDDPF,			// in: Explicit pixel format or current mode
		EGPEFormat*			pFormat,
		EDDGPEPixelFormat*	pPixelFormat
		);

	//---------------------------
	// Resource Alloc/Release Method
	//---------------------------
	BOOL AllocResource(void);
	void ReleaseResource(void);
	BOOL TVOutAllocResource(void);
	BOOL TVOutReleaseResource(void);

	//------------------------
	// Power Management Handler
	//------------------------
	void SetDisplayPowerState(VIDEO_POWER_STATE PowerState);
	VIDEO_POWER_STATE GetDisplayPowerState(void);

	//----------------------------------------
	// S3C6410 H/W Device Control Wrapper Method
	//----------------------------------------

	// Frame Interrupt / Status
	BOOL WaitForVerticalBlank(VB_STATUS Status);
	DWORD GetScanLine(void);

	// Overlay Control
	BOOL OverlayAllocResource(BOOL bLocalPath);
	BOOL OverlayReleaseResource(BOOL bLocalPath);
	BOOL OverlayInitialize(S3C6410Surf* pOverlaySurface, RECT *pSrc, RECT *pDest);
	void OverlaySetPosition(UINT32 uiOffsetX, UINT32 uiOffsetY);
	void OverlayEnable(void);
	void OverlayDisable(void);
	void OverlayBlendDisable(void);
	void OverlaySetColorKey(BOOL bSrcCKey, EDDGPEPixelFormat Format, DWORD ColorKey);
	void OverlaySetAlpha(BOOL bUsePixelBlend, DWORD Alpha);

	void InitalizeOverlayContext(void);
	S3C6410Surf * GetCurrentOverlaySurf(void);
	S3C6410Surf * GetPreviousOverlaySurf(void);

	//--------------------------------
	// S3C6410 H/W Device Control Method
	//--------------------------------

	// Initialize / Power Management
	BOOL DevInitialize(void);
	BOOL DevPowerOn(void);
	BOOL DevPowerOff(void);

	// Change Interface
	BOOL DevChangeOutputInterface(OUTPUT_INTERFACE eNewOutputIF);
	void DevOutputEnableRGBIF(void);
	void DevOutputDisableRGBIF(void);
	void DevOutputEnableTV(void);
	void DevOutputDisableTV(void);

	BOOL DevSetTVDMAMode(TV_DMA_MODE eType);
	void DevUpdateTVDMAContext(void);
	void DevOutputEnableTVDMA(void);
	void DevOutputDisableTVDMA(void);
	void DevSetTVDMABuffer(unsigned int uiAddrRGBY, unsigned int uiAddrCb, unsigned int uiAddrCr, BOOL bWaitForVBlank);

	// Frame Interrupt / Status
	BOOL DevWaitForVerticalBlank(void);
	int DevGetVerticalStatus(void);
	DWORD DevGetScanLine(void);

	// Change Frame Buffer
	void DevSetVisibleSurface(S3C6410Surf *pSurf, BOOL bWaitForVBlank);

	// Overlay Control
	void DevOverlayInitialize(void);
	void DevOverlaySetPosition(void);
	void DevOverlayEnable(void);
	void DevOverlayDisable(void);
	void DevOverlayBlendDisable(void);
	void DevOverlaySetColorKey(void);
	void DevOverlaySetAlpha(void);
	void DevRecoverOverlay(void);

friend
	void
	buildDDHALInfo(
		LPDDHALINFO lpddhi,
		DWORD       modeidx
		);
};

class S3C6410Surf : public DDGPESurf
{
private:
	SurfaceHeap*	m_pSurfHeap;

public:
	UINT32	m_uiOffsetCb;
	UINT32	m_uiOffsetCr;

	S3C6410Surf(int, int, DWORD, VOID*, int, EGPEFormat, EDDGPEPixelFormat pixelFormat, SurfaceHeap*);

	virtual
	~S3C6410Surf();

	//VOID  WriteBack();
	//VOID  Discard();
};

class PACSurf : public GPESurf
{
public:
	int m_fPLAllocated;
	DWORD	m_pPhysAddr;

	PACSurf(int, int, EGPEFormat);
	virtual ~PACSurf();
};

#endif __S3C6410_DISP_H__

⌨️ 快捷键说明

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