dfxvideo: massive cleanup
[pcsx_rearmed.git] / plugins / dfxvideo / gpu.h
CommitLineData
ef79bbde
P
1/***************************************************************************
2 gpu.h - description
3 -------------------
4 begin : Sun Oct 28 2001
5 copyright : (C) 2001 by Pete Bernert
6 email : BlackDove@addcom.de
7 ***************************************************************************/
8/***************************************************************************
9 * *
10 * This program is free software; you can redistribute it and/or modify *
11 * it under the terms of the GNU General Public License as published by *
12 * the Free Software Foundation; either version 2 of the License, or *
13 * (at your option) any later version. See also the license.txt file for *
14 * additional informations. *
15 * *
16 ***************************************************************************/
17
a96a5eb2 18#ifndef _PSX_GPU_
19#define _PSX_GPU_
20
21#define INFO_TW 0
22#define INFO_DRAWSTART 1
23#define INFO_DRAWEND 2
24#define INFO_DRAWOFF 3
25
26#define SHADETEXBIT(x) ((x>>24) & 0x1)
27#define SEMITRANSBIT(x) ((x>>25) & 0x1)
28#define PSXRGB(r,g,b) ((g<<10)|(b<<5)|r)
29
30#define DATAREGISTERMODES unsigned short
31
32#define DR_NORMAL 0
33#define DR_VRAMTRANSFER 1
34
35
36#define GPUSTATUS_ODDLINES 0x80000000
37#define GPUSTATUS_DMABITS 0x60000000 // Two bits
38#define GPUSTATUS_READYFORCOMMANDS 0x10000000
39#define GPUSTATUS_READYFORVRAM 0x08000000
40#define GPUSTATUS_IDLE 0x04000000
41#define GPUSTATUS_DISPLAYDISABLED 0x00800000
42#define GPUSTATUS_INTERLACED 0x00400000
43#define GPUSTATUS_RGB24 0x00200000
44#define GPUSTATUS_PAL 0x00100000
45#define GPUSTATUS_DOUBLEHEIGHT 0x00080000
46#define GPUSTATUS_WIDTHBITS 0x00070000 // Three bits
47#define GPUSTATUS_MASKENABLED 0x00001000
48#define GPUSTATUS_MASKDRAWN 0x00000800
49#define GPUSTATUS_DRAWINGALLOWED 0x00000400
50#define GPUSTATUS_DITHER 0x00000200
51
52#define GPUIsBusy (lGPUstatusRet &= ~GPUSTATUS_IDLE)
53#define GPUIsIdle (lGPUstatusRet |= GPUSTATUS_IDLE)
54
55#define GPUIsNotReadyForCommands (lGPUstatusRet &= ~GPUSTATUS_READYFORCOMMANDS)
56#define GPUIsReadyForCommands (lGPUstatusRet |= GPUSTATUS_READYFORCOMMANDS)
57
58#define CALLBACK
59
60#include <stdio.h>
61#include <stdlib.h>
62#include <string.h>
63#include <sys/time.h>
64#include <math.h>
65#include <stdint.h>
66#include <unistd.h>
67
68/////////////////////////////////////////////////////////////////////////////
69
70// byteswappings
71
72#define SWAP16(x) ({ uint16_t y=(x); (((y)>>8 & 0xff) | ((y)<<8 & 0xff00)); })
73#define SWAP32(x) ({ uint32_t y=(x); (((y)>>24 & 0xfful) | ((y)>>8 & 0xff00ul) | ((y)<<8 & 0xff0000ul) | ((y)<<24 & 0xff000000ul)); })
74
75#ifdef __BIG_ENDIAN__
76
77// big endian config
78#define HOST2LE32(x) SWAP32(x)
79#define HOST2BE32(x) (x)
80#define LE2HOST32(x) SWAP32(x)
81#define BE2HOST32(x) (x)
82
83#define HOST2LE16(x) SWAP16(x)
84#define HOST2BE16(x) (x)
85#define LE2HOST16(x) SWAP16(x)
86#define BE2HOST16(x) (x)
87
88#else
89
90// little endian config
91#define HOST2LE32(x) (x)
92#define HOST2BE32(x) SWAP32(x)
93#define LE2HOST32(x) (x)
94#define BE2HOST32(x) SWAP32(x)
95
96#define HOST2LE16(x) (x)
97#define HOST2BE16(x) SWAP16(x)
98#define LE2HOST16(x) (x)
99#define BE2HOST16(x) SWAP16(x)
100
101#endif
102
103#define GETLEs16(X) ((int16_t)GETLE16((uint16_t *)X))
104#define GETLEs32(X) ((int16_t)GETLE32((uint16_t *)X))
105
106#define GETLE16(X) LE2HOST16(*(uint16_t *)X)
107#define GETLE32(X) LE2HOST32(*(uint32_t *)X)
108#define GETLE16D(X) ({uint32_t val = GETLE32(X); (val<<16 | val >> 16);})
109#define PUTLE16(X, Y) do{*((uint16_t *)X)=HOST2LE16((uint16_t)Y);}while(0)
110#define PUTLE32(X, Y) do{*((uint32_t *)X)=HOST2LE16((uint32_t)Y);}while(0)
111
112/////////////////////////////////////////////////////////////////////////////
113
114typedef struct VRAMLOADTTAG
115{
116 short x;
117 short y;
118 short Width;
119 short Height;
120 short RowsRemaining;
121 short ColsRemaining;
122 unsigned short *ImagePtr;
123} VRAMLoad_t;
124
125/////////////////////////////////////////////////////////////////////////////
126
127typedef struct PSXPOINTTAG
128{
129 int32_t x;
130 int32_t y;
131} PSXPoint_t;
132
133typedef struct PSXSPOINTTAG
134{
135 short x;
136 short y;
137} PSXSPoint_t;
138
139typedef struct PSXRECTTAG
140{
141 short x0;
142 short x1;
143 short y0;
144 short y1;
145} PSXRect_t;
146
147// linux defines for some windows stuff
148
149#define FALSE 0
150#define TRUE 1
151#define BOOL unsigned short
152#define LOWORD(l) ((unsigned short)(l))
153#define HIWORD(l) ((unsigned short)(((uint32_t)(l) >> 16) & 0xFFFF))
154#define max(a,b) (((a) > (b)) ? (a) : (b))
155#define min(a,b) (((a) < (b)) ? (a) : (b))
156#define DWORD uint32_t
157#ifndef __int64
158#define __int64 long long int
159#endif
160
161typedef struct RECTTAG
162{
163 int left;
164 int top;
165 int right;
166 int bottom;
167}RECT;
168
169/////////////////////////////////////////////////////////////////////////////
170
171typedef struct TWINTAG
172{
173 PSXRect_t Position;
174} TWin_t;
175
176/////////////////////////////////////////////////////////////////////////////
177
178typedef struct PSXDISPLAYTAG
179{
180 PSXPoint_t DisplayModeNew;
181 PSXPoint_t DisplayMode;
182 PSXPoint_t DisplayPosition;
183 PSXPoint_t DisplayEnd;
184
185 int32_t Double;
186 int32_t Height;
187 int32_t PAL;
188 int32_t InterlacedNew;
189 int32_t Interlaced;
190 int32_t RGB24New;
191 int32_t RGB24;
192 PSXSPoint_t DrawOffset;
193 int32_t Disabled;
194 PSXRect_t Range;
195
196} PSXDisplay_t;
197
198/////////////////////////////////////////////////////////////////////////////
199
200// draw.c
201
202extern int32_t GlobalTextAddrX,GlobalTextAddrY,GlobalTextTP;
203extern int32_t GlobalTextREST,GlobalTextABR,GlobalTextPAGE;
204extern short ly0,lx0,ly1,lx1,ly2,lx2,ly3,lx3;
205extern long lLowerpart;
206extern BOOL bCheckMask;
207extern unsigned short sSetMask;
208extern unsigned long lSetMask;
209extern short g_m1;
210extern short g_m2;
211extern short g_m3;
212extern short DrawSemiTrans;
213
214// prim.c
215
216extern BOOL bUsingTWin;
217extern TWin_t TWin;
218extern void (*primTableJ[256])(unsigned char *);
219extern void (*primTableSkip[256])(unsigned char *);
220extern unsigned short usMirror;
221extern int iDither;
222extern uint32_t dwCfgFixes;
223extern uint32_t dwActFixes;
224extern int iUseFixes;
225extern int iUseDither;
226extern BOOL bDoVSyncUpdate;
227extern int32_t drawX;
228extern int32_t drawY;
229extern int32_t drawW;
230extern int32_t drawH;
231
232// gpu.h
ef79bbde
P
233
234#define OPAQUEON 10
235#define OPAQUEOFF 11
236
237#define KEY_RESETTEXSTORE 1
238#define KEY_SHOWFPS 2
239#define KEY_RESETOPAQUE 4
240#define KEY_RESETDITHER 8
241#define KEY_RESETFILTER 16
242#define KEY_RESETADVBLEND 32
ef79bbde
P
243#define KEY_BADTEXTURES 128
244#define KEY_CHECKTHISOUT 256
245
246#if !defined(__BIG_ENDIAN__) || defined(__x86_64__) || defined(__i386__)
247#ifndef __LITTLE_ENDIAN__
248#define __LITTLE_ENDIAN__
249#endif
250#endif
251
252#ifdef __LITTLE_ENDIAN__
253#define RED(x) (x & 0xff)
254#define BLUE(x) ((x>>16) & 0xff)
255#define GREEN(x) ((x>>8) & 0xff)
256#define COLOR(x) (x & 0xffffff)
257#elif defined __BIG_ENDIAN__
258#define RED(x) ((x>>24) & 0xff)
259#define BLUE(x) ((x>>8) & 0xff)
260#define GREEN(x) ((x>>16) & 0xff)
261#define COLOR(x) SWAP32(x & 0xffffff)
262#endif
263
a96a5eb2 264// gpu.c
ef79bbde 265
a96a5eb2 266extern VRAMLoad_t VRAMWrite;
267extern VRAMLoad_t VRAMRead;
268extern DATAREGISTERMODES DataWriteMode;
269extern DATAREGISTERMODES DataReadMode;
270extern short sDispWidths[];
271extern BOOL bDebugText;
272extern PSXDisplay_t PSXDisplay;
273extern PSXDisplay_t PreviousPSXDisplay;
274extern BOOL bSkipNextFrame;
275extern long lGPUstatusRet;
276extern unsigned char * psxVSecure;
277extern unsigned char * psxVub;
278extern signed char * psxVsb;
279extern unsigned short * psxVuw;
280extern signed short * psxVsw;
281extern uint32_t * psxVul;
282extern int32_t * psxVsl;
283extern unsigned short * psxVuw_eom;
284extern BOOL bChangeWinMode;
285extern long lSelectedSlot;
286extern BOOL bInitCap;
287extern DWORD dwLaceCnt;
288extern uint32_t lGPUInfoVals[];
289extern uint32_t ulStatusControl[];
ef79bbde 290
a96a5eb2 291// fps.c
292
293extern int UseFrameLimit;
294extern int UseFrameSkip;
295extern float fFrameRate;
296extern int iFrameLimit;
297extern float fFrameRateHz;
298extern float fps_skip;
299extern float fps_cur;
ef79bbde 300
a96a5eb2 301// draw.c
302
303void DoBufferSwap(void);
304void DoClearScreenBuffer(void);
305void DoClearFrontBuffer(void);
306unsigned long ulInitDisplay(void);
307void CloseDisplay(void);
308
309#endif