X-Git-Url: https://notaz.gp2x.de/cgi-bin/gitweb.cgi?p=pcsx_rearmed.git;a=blobdiff_plain;f=plugins%2Fdfxvideo%2Fgpu.h;h=9ee5f3e6f7a4769e8cbdf70c0f49e9ad2db98dca;hp=e8730f27099a964dbc5e53aa1b3b4888632b89d9;hb=0507e4f1e5c28ea0e5214b32ed1f6f571f7b8066;hpb=ef79bbde537d6b9c745a7d86cb9df1d04c35590d diff --git a/plugins/dfxvideo/gpu.h b/plugins/dfxvideo/gpu.h index e8730f27..9ee5f3e6 100644 --- a/plugins/dfxvideo/gpu.h +++ b/plugins/dfxvideo/gpu.h @@ -15,8 +15,229 @@ * * ***************************************************************************/ -#ifndef _GPU_INTERNALS_H -#define _GPU_INTERNALS_H +#ifndef _PSX_GPU_ +#define _PSX_GPU_ + +#define INFO_TW 0 +#define INFO_DRAWSTART 1 +#define INFO_DRAWEND 2 +#define INFO_DRAWOFF 3 + +#define SHADETEXBIT(x) ((x>>24) & 0x1) +#define SEMITRANSBIT(x) ((x>>25) & 0x1) +#define PSXRGB(r,g,b) ((g<<10)|(b<<5)|r) + +#define DATAREGISTERMODES unsigned short + +#define DR_NORMAL 0 +#define DR_VRAMTRANSFER 1 + + +#define GPUSTATUS_ODDLINES 0x80000000 +#define GPUSTATUS_DMABITS 0x60000000 // Two bits +#define GPUSTATUS_READYFORCOMMANDS 0x10000000 +#define GPUSTATUS_READYFORVRAM 0x08000000 +#define GPUSTATUS_IDLE 0x04000000 +#define GPUSTATUS_DISPLAYDISABLED 0x00800000 +#define GPUSTATUS_INTERLACED 0x00400000 +#define GPUSTATUS_RGB24 0x00200000 +#define GPUSTATUS_PAL 0x00100000 +#define GPUSTATUS_DOUBLEHEIGHT 0x00080000 +#define GPUSTATUS_WIDTHBITS 0x00070000 // Three bits +#define GPUSTATUS_MASKENABLED 0x00001000 +#define GPUSTATUS_MASKDRAWN 0x00000800 +#define GPUSTATUS_DRAWINGALLOWED 0x00000400 +#define GPUSTATUS_DITHER 0x00000200 + +#define GPUIsBusy (lGPUstatusRet &= ~GPUSTATUS_IDLE) +#define GPUIsIdle (lGPUstatusRet |= GPUSTATUS_IDLE) + +#define GPUIsNotReadyForCommands (lGPUstatusRet &= ~GPUSTATUS_READYFORCOMMANDS) +#define GPUIsReadyForCommands (lGPUstatusRet |= GPUSTATUS_READYFORCOMMANDS) + +#define CALLBACK + +#include +#include +#include +#include +#include +#include +#include + +///////////////////////////////////////////////////////////////////////////// + +// byteswappings + +#define SWAP16(x) ({ uint16_t y=(x); (((y)>>8 & 0xff) | ((y)<<8 & 0xff00)); }) +#define SWAP32(x) ({ uint32_t y=(x); (((y)>>24 & 0xfful) | ((y)>>8 & 0xff00ul) | ((y)<<8 & 0xff0000ul) | ((y)<<24 & 0xff000000ul)); }) + +#ifdef __BIG_ENDIAN__ + +// big endian config +#define HOST2LE32(x) SWAP32(x) +#define HOST2BE32(x) (x) +#define LE2HOST32(x) SWAP32(x) +#define BE2HOST32(x) (x) + +#define HOST2LE16(x) SWAP16(x) +#define HOST2BE16(x) (x) +#define LE2HOST16(x) SWAP16(x) +#define BE2HOST16(x) (x) + +#else + +// little endian config +#define HOST2LE32(x) (x) +#define HOST2BE32(x) SWAP32(x) +#define LE2HOST32(x) (x) +#define BE2HOST32(x) SWAP32(x) + +#define HOST2LE16(x) (x) +#define HOST2BE16(x) SWAP16(x) +#define LE2HOST16(x) (x) +#define BE2HOST16(x) SWAP16(x) + +#endif + +#define GETLEs16(X) ((int16_t)GETLE16((uint16_t *)X)) +#define GETLEs32(X) ((int16_t)GETLE32((uint16_t *)X)) + +#define GETLE16(X) LE2HOST16(*(uint16_t *)X) +#define GETLE32_(X) LE2HOST32(*(uint32_t *)X) +#define GETLE16D(X) ({uint32_t val = GETLE32(X); (val<<16 | val >> 16);}) +#define PUTLE16(X, Y) do{*((uint16_t *)X)=HOST2LE16((uint16_t)Y);}while(0) +#define PUTLE32_(X, Y) do{*((uint32_t *)X)=HOST2LE16((uint32_t)Y);}while(0) +#ifdef __arm__ +#define GETLE32(X) (*(uint16_t *)(X)|(((uint16_t *)(X))[1]<<16)) +#define PUTLE32(X, Y) do{uint16_t *p_=(uint16_t *)(X);uint32_t y_=Y;p_[0]=y_;p_[1]=y_>>16;}while(0) +#else +#define GETLE32 GETLE32_ +#define PUTLE32 PUTLE32_ +#endif + +///////////////////////////////////////////////////////////////////////////// + +typedef struct VRAMLOADTTAG +{ + short x; + short y; + short Width; + short Height; + short RowsRemaining; + short ColsRemaining; + unsigned short *ImagePtr; +} VRAMLoad_t; + +///////////////////////////////////////////////////////////////////////////// + +typedef struct PSXPOINTTAG +{ + int32_t x; + int32_t y; +} PSXPoint_t; + +typedef struct PSXSPOINTTAG +{ + short x; + short y; +} PSXSPoint_t; + +typedef struct PSXRECTTAG +{ + short x0; + short x1; + short y0; + short y1; +} PSXRect_t; + +// linux defines for some windows stuff + +#define FALSE 0 +#define TRUE 1 +#define BOOL unsigned short +#define LOWORD(l) ((unsigned short)(l)) +#define HIWORD(l) ((unsigned short)(((uint32_t)(l) >> 16) & 0xFFFF)) +#define max(a,b) (((a) > (b)) ? (a) : (b)) +#define min(a,b) (((a) < (b)) ? (a) : (b)) +#define DWORD uint32_t +#ifndef __int64 +#define __int64 long long int +#endif + +typedef struct RECTTAG +{ + int left; + int top; + int right; + int bottom; +}RECT; + +///////////////////////////////////////////////////////////////////////////// + +typedef struct TWINTAG +{ + PSXRect_t Position; + int xmask, ymask; +} TWin_t; + +///////////////////////////////////////////////////////////////////////////// + +typedef struct PSXDISPLAYTAG +{ + PSXPoint_t DisplayModeNew; + PSXPoint_t DisplayMode; + PSXPoint_t DisplayPosition; + PSXPoint_t DisplayEnd; + + int32_t Double; + int32_t Height; + int32_t PAL; + int32_t InterlacedNew; + int32_t Interlaced; + int32_t RGB24New; + int32_t RGB24; + PSXSPoint_t DrawOffset; + int32_t Disabled; + PSXRect_t Range; + +} PSXDisplay_t; + +///////////////////////////////////////////////////////////////////////////// + +// draw.c + +extern int32_t GlobalTextAddrX,GlobalTextAddrY,GlobalTextTP; +extern int32_t GlobalTextABR,GlobalTextPAGE; +extern short ly0,lx0,ly1,lx1,ly2,lx2,ly3,lx3; +extern long lLowerpart; +extern BOOL bCheckMask; +extern unsigned short sSetMask; +extern unsigned long lSetMask; +extern short g_m1; +extern short g_m2; +extern short g_m3; +extern short DrawSemiTrans; + +// prim.c + +extern BOOL bUsingTWin; +extern TWin_t TWin; +extern void (*primTableJ[256])(unsigned char *); +extern void (*primTableSkip[256])(unsigned char *); +extern unsigned short usMirror; +extern int iDither; +extern uint32_t dwCfgFixes; +extern uint32_t dwActFixes; +extern int iUseFixes; +extern int iUseDither; +extern BOOL bDoVSyncUpdate; +extern int32_t drawX; +extern int32_t drawY; +extern int32_t drawW; +extern int32_t drawH; + +// gpu.h #define OPAQUEON 10 #define OPAQUEOFF 11 @@ -27,7 +248,6 @@ #define KEY_RESETDITHER 8 #define KEY_RESETFILTER 16 #define KEY_RESETADVBLEND 32 -//#define KEY_BLACKWHITE 64 #define KEY_BADTEXTURES 128 #define KEY_CHECKTHISOUT 256 @@ -49,12 +269,52 @@ #define COLOR(x) SWAP32(x & 0xffffff) #endif -///////////////////////////////////////////////////////////////////////////// +// gpu.c -void updateDisplay(void); -void SetAutoFrameCap(void); -void SetFixes(void); +extern VRAMLoad_t VRAMWrite; +extern VRAMLoad_t VRAMRead; +extern DATAREGISTERMODES DataWriteMode; +extern DATAREGISTERMODES DataReadMode; +extern short sDispWidths[]; +extern BOOL bDebugText; +extern PSXDisplay_t PSXDisplay; +extern PSXDisplay_t PreviousPSXDisplay; +extern BOOL bSkipNextFrame; +extern long lGPUstatusRet; +extern unsigned char * psxVSecure; +extern unsigned char * psxVub; +extern signed char * psxVsb; +extern unsigned short * psxVuw; +extern signed short * psxVsw; +extern uint32_t * psxVul; +extern int32_t * psxVsl; +extern unsigned short * psxVuw_eom; +extern BOOL bChangeWinMode; +extern long lSelectedSlot; +extern BOOL bInitCap; +extern DWORD dwLaceCnt; +extern uint32_t lGPUInfoVals[]; +extern uint32_t ulStatusControl[]; -///////////////////////////////////////////////////////////////////////////// +// fps.c + +extern int UseFrameLimit; +extern int UseFrameSkip; +extern float fFrameRate; +extern int iFrameLimit; +extern float fFrameRateHz; +extern float fps_skip; +extern float fps_cur; + +// draw.c -#endif // _GPU_INTERNALS_H +void DoBufferSwap(void); +void DoClearScreenBuffer(void); +void DoClearFrontBuffer(void); +unsigned long ulInitDisplay(void); +void CloseDisplay(void); + +struct rearmed_cbs; +extern const struct rearmed_cbs *rcbs; + +#endif