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