gpu-gles from psx4m
[pcsx_rearmed.git] / plugins / gpu-gles / gpuExternals.h
1 /***************************************************************************\r
2                           external.h  -  description\r
3                              -------------------\r
4     begin                : Sun Mar 08 2009\r
5     copyright            : (C) 1999-2009 by Pete Bernert\r
6     web                  : www.pbernert.com   \r
7  ***************************************************************************/\r
8 \r
9 /***************************************************************************\r
10  *                                                                         *\r
11  *   This program is free software; you can redistribute it and/or modify  *\r
12  *   it under the terms of the GNU General Public License as published by  *\r
13  *   the Free Software Foundation; either version 2 of the License, or     *\r
14  *   (at your option) any later version. See also the license.txt file for *\r
15  *   additional informations.                                              *\r
16  *                                                                         *\r
17  ***************************************************************************/\r
18 \r
19 //*************************************************************************// \r
20 // History of changes:\r
21 //\r
22 // 2009/03/08 - Pete  \r
23 // - generic cleanup for the Peops release\r
24 //\r
25 //*************************************************************************// \r
26 \r
27 /////////////////////////////////////////////////////////////////////////////\r
28 \r
29 #ifndef __GPU_EX__\r
30 #define __GPU_EX__\r
31 \r
32 #ifdef __cplusplus\r
33 extern "C" {\r
34 #endif\r
35 #define _GPU_API_\r
36 #ifndef _WINDOWS\r
37 #ifdef __NANOGL__\r
38 #include <gl/gl.h>\r
39 #include <gl/egl.h>\r
40 #else\r
41 #ifdef SOFT_LINKAGE\r
42 #pragma softfp_linkage\r
43 #endif\r
44 #include <gles/gl.h> // for opengl es types \r
45 #ifdef SOFT_LINKAGE\r
46 #pragma no_softfp_linkage\r
47 #endif\r
48 #endif\r
49 #endif\r
50 \r
51 #ifdef MAEMO_CHANGES\r
52         #include "../psxCommon.h"\r
53 #else\r
54         #include "psxCommon.h"\r
55 #endif\r
56 \r
57 #ifdef __NANOGL__\r
58 #define glTexParameteri(x,y,z) glTexParameterf(x,y,z) \r
59 #define glAlphaFuncx(x,y) glAlphaFunc(x,y) \r
60 #ifndef APIENTRY\r
61 #define APIENTRY\r
62 #endif\r
63 extern  void ( APIENTRY * glPixelStorei )(GLenum pname, GLint param);\r
64 #endif\r
65 \r
66 \r
67 #define MIRROR_TEST 1\r
68 \r
69 /////////////////////////////////////////////////////////////////////////////\r
70 \r
71 #define SCISSOR_TEST 1\r
72          \r
73 /////////////////////////////////////////////////////////////////////////////\r
74 \r
75 // for own sow/tow scaling\r
76 #define OWNSCALE 1\r
77 \r
78 /////////////////////////////////////////////////////////////////////////////\r
79 \r
80 #define CLUTUSED     0x80000000\r
81 //glColor4ubv(x.c.col)\r
82 #define SETCOL(x)  if(x.c.lcol!=ulOLDCOL) {ulOLDCOL=x.c.lcol;glColor4ub(x.c.col[0],x.c.col[1],x.c.col[2],x.c.col[3]);} \r
83 //#define SETPCOL(x)  if(x->c.lcol!=ulOLDCOL) {ulOLDCOL=x->c.lcol;glColor4ub(x->c.col[0],x->c.col[1],x->c.col[2],x->c.col[3]);}\r
84 \r
85 #define INFO_TW        0\r
86 #define INFO_DRAWSTART 1\r
87 #define INFO_DRAWEND   2\r
88 #define INFO_DRAWOFF   3\r
89 \r
90 #define SIGNSHIFT 21\r
91 #define CHKMAX_X 1024\r
92 #define CHKMAX_Y 512\r
93 \r
94 /////////////////////////////////////////////////////////////////////////////\r
95 \r
96 // GPU STATUS REGISTER bit values (c) Lewpy\r
97 \r
98 #define DR_NORMAL 0\r
99 #define DR_VRAMTRANSFER 1\r
100 \r
101 #define GPUSTATUS_ODDLINES            0x80000000\r
102 #define GPUSTATUS_DMABITS             0x60000000 // Two bits\r
103 #define GPUSTATUS_READYFORCOMMANDS    0x10000000\r
104 #define GPUSTATUS_READYFORVRAM        0x08000000\r
105 #define GPUSTATUS_IDLE                0x04000000\r
106 #define GPUSTATUS_DISPLAYDISABLED     0x00800000\r
107 #define GPUSTATUS_INTERLACED          0x00400000\r
108 #define GPUSTATUS_RGB24               0x00200000\r
109 #define GPUSTATUS_PAL                 0x00100000\r
110 #define GPUSTATUS_DOUBLEHEIGHT        0x00080000\r
111 #define GPUSTATUS_WIDTHBITS           0x00070000 // Three bits\r
112 #define GPUSTATUS_MASKENABLED         0x00001000\r
113 #define GPUSTATUS_MASKDRAWN           0x00000800\r
114 #define GPUSTATUS_DRAWINGALLOWED      0x00000400\r
115 #define GPUSTATUS_DITHER              0x00000200\r
116 \r
117 #define STATUSREG lGPUstatusRet\r
118 \r
119 #define GPUIsBusy (STATUSREG &= ~GPUSTATUS_IDLE)\r
120 #define GPUIsIdle (STATUSREG |= GPUSTATUS_IDLE)\r
121 \r
122 #define GPUIsNotReadyForCommands (STATUSREG &= ~GPUSTATUS_READYFORCOMMANDS)\r
123 #define GPUIsReadyForCommands (STATUSREG |= GPUSTATUS_READYFORCOMMANDS)\r
124 \r
125 /////////////////////////////////////////////////////////////////////////////\r
126 \r
127 #define KEY_RESETTEXSTORE   1\r
128 #define KEY_SHOWFPS         2\r
129 #define KEY_RESETOPAQUE     4\r
130 #define KEY_RESETDITHER     8\r
131 #define KEY_RESETFILTER     16\r
132 #define KEY_RESETADVBLEND   32\r
133 #define KEY_BLACKWHITE      64\r
134 #define KEY_TOGGLEFBTEXTURE 128\r
135 #define KEY_STEPDOWN        256\r
136 #define KEY_TOGGLEFBREAD    512\r
137 \r
138 /////////////////////////////////////////////////////////////////////////////\r
139 // Linux is missing some stuff, eh? ;)\r
140 \r
141 #ifndef _WINDOWS\r
142 #ifndef FALSE\r
143 #define FALSE 0\r
144 #endif\r
145 #ifndef TRUE\r
146 #define TRUE  1\r
147 #endif\r
148 #ifndef BOOL\r
149 #define BOOL unsigned short\r
150 #endif\r
151 #ifndef bool\r
152 #define bool unsigned short\r
153 #endif\r
154 #define LOWORD(l)           ((unsigned short)(l))\r
155 #define HIWORD(l)           ((unsigned short)(((unsigned long)(l) >> 16) & 0xFFFF))\r
156 #define max(a,b)            (((a) > (b)) ? (a) : (b))\r
157 #define min(a,b)            (((a) < (b)) ? (a) : (b))\r
158 #define DWORD unsigned long\r
159 \r
160 typedef struct RECTTAG\r
161 {\r
162  int left;\r
163  int top;\r
164  int right;\r
165  int bottom;\r
166 }RECT;\r
167 \r
168 #endif\r
169 \r
170 /////////////////////////////////////////////////////////////////////////////\r
171 \r
172 typedef struct VRAMLOADTAG\r
173 {\r
174  short x;\r
175  short y;\r
176  short Width;\r
177  short Height;\r
178  short RowsRemaining;\r
179  short ColsRemaining;\r
180  unsigned short *ImagePtr;\r
181 } VRAMLoad_t;\r
182 \r
183 typedef struct PSXPOINTTAG\r
184 {\r
185  long x;\r
186  long y;\r
187 } PSXPoint_t;\r
188 \r
189 typedef struct PSXSPOINTTAG\r
190 {\r
191  short x;\r
192  short y;\r
193 } PSXSPoint_t;\r
194 \r
195 typedef struct PSXRECTTAG\r
196 {\r
197  short x0;\r
198  short x1;\r
199  short y0;\r
200  short y1;\r
201 } PSXRect_t;\r
202 \r
203 /////////////////////////////////////////////////////////////////////////////\r
204 \r
205 typedef struct TWINTAG\r
206 {\r
207  PSXRect_t  Position;\r
208  PSXRect_t  OPosition;\r
209  PSXPoint_t TextureSize;\r
210  float      UScaleFactor;\r
211  float      VScaleFactor;\r
212 } TWin_t;\r
213 \r
214 /////////////////////////////////////////////////////////////////////////////\r
215 \r
216 typedef struct PSXDISPLAYTAG\r
217 {\r
218  PSXPoint_t  DisplayModeNew;\r
219  PSXPoint_t  DisplayMode;\r
220  PSXPoint_t  DisplayPosition;\r
221  PSXPoint_t  DisplayEnd;\r
222  \r
223  long        Double;\r
224  long        Height;\r
225  long        PAL;\r
226  long        InterlacedNew;\r
227  long        Interlaced;\r
228  long        InterlacedTest;\r
229  long        RGB24New;\r
230  long        RGB24;\r
231  PSXSPoint_t DrawOffset;\r
232  PSXRect_t   DrawArea;\r
233  PSXPoint_t  GDrawOffset;\r
234  PSXPoint_t  CumulOffset;\r
235  long        Disabled;\r
236  PSXRect_t   Range;\r
237 } PSXDisplay_t;\r
238 \r
239 /////////////////////////////////////////////////////////////////////////////\r
240 \r
241 typedef struct OGLVertexTag \r
242 {\r
243  GLfloat x;\r
244  GLfloat y;\r
245  GLfloat z;\r
246 \r
247  GLfloat sow;\r
248  GLfloat tow;\r
249 \r
250  union\r
251 COLTAG\r
252   {\r
253    u8 col[4];\r
254    unsigned long lcol;\r
255   } c;\r
256 \r
257 } OGLVertex;\r
258 \r
259 typedef union EXShortTag\r
260 {\r
261  u8  c[2];\r
262  unsigned short s;\r
263 } EXShort;\r
264 \r
265 typedef union EXLongTag\r
266 {\r
267  u8 c[4];\r
268  unsigned long l;\r
269  EXShort       s[2];\r
270 } EXLong;\r
271 \r
272 \r
273 /////////////////////////////////////////////////////////////////////////////\r
274 \r
275 #ifdef _WINDOWS\r
276 \r
277 extern HINSTANCE hInst;\r
278 \r
279 #endif\r
280                                                       \r
281 //-----------------------------------------------------//\r
282 \r
283 #ifndef _IN_DRAW\r
284 \r
285 extern int            iResX;\r
286 extern int            iResY;\r
287 extern BOOL           bKeepRatio;\r
288 extern RECT           rRatioRect;\r
289 extern BOOL           bOpaquePass;\r
290 extern BOOL           bAdvancedBlend;\r
291 \r
292 //extern PFNGLBLENDEQU      glBlendEquationEXTEx;\r
293 //extern PFNGLCOLORTABLEEXT glColorTableEXTEx;\r
294 \r
295 extern u8  gl_ux[8];\r
296 extern u8  gl_vy[8];\r
297 extern OGLVertex      vertex[4];\r
298 extern short          sprtY,sprtX,sprtH,sprtW;\r
299 #ifdef _WINDOWS\r
300 extern HWND           hWWindow;\r
301 #endif\r
302 extern BOOL           bIsFirstFrame;\r
303 extern int            iWinSize;\r
304 extern int            iZBufferDepth;\r
305 extern GLbitfield     uiBufferBits;\r
306 extern int            iUseMask;\r
307 extern int            iSetMask;\r
308 extern int            iDepthFunc;\r
309 extern BOOL           bCheckMask;\r
310 extern unsigned short sSetMask;\r
311 extern unsigned long  lSetMask;\r
312 extern BOOL           bSetClip;\r
313 extern GLuint         gTexScanName;\r
314 \r
315 #endif\r
316 \r
317 //-----------------------------------------------------//\r
318 \r
319 #ifndef _IN_SOFT\r
320 \r
321 extern long           GlobalTextAddrX,GlobalTextAddrY,GlobalTextTP;\r
322 extern long           GlobalTextREST,GlobalTextABR,GlobalTextPAGE;\r
323 extern short          ly0,lx0,ly1,lx1,ly2,lx2,ly3,lx3;\r
324 extern short          g_m1;\r
325 extern short          g_m2;\r
326 extern short          g_m3;\r
327 extern short          DrawSemiTrans;\r
328 \r
329 #endif\r
330 \r
331 //-----------------------------------------------------//\r
332 \r
333 #ifndef _IN_PRIMDRAW\r
334 \r
335 extern BOOL          bNeedUploadTest;\r
336 extern BOOL          bNeedUploadAfter;\r
337 extern BOOL          bTexEnabled;\r
338 extern BOOL          bBlendEnable;\r
339 extern BOOL          bDrawDither;\r
340 extern int           iFilterType; \r
341 extern BOOL          bFullVRam;\r
342 extern BOOL          bUseMultiPass;\r
343 extern int           iOffscreenDrawing;\r
344 extern BOOL          bOldSmoothShaded;\r
345 extern BOOL          bUsingTWin;\r
346 extern BOOL          bUsingMovie;\r
347 extern PSXRect_t     xrMovieArea;\r
348 extern PSXRect_t     xrUploadArea;\r
349 extern PSXRect_t     xrUploadAreaIL;\r
350 extern PSXRect_t     xrUploadAreaRGB24;\r
351 extern GLuint        gTexName;\r
352 extern BOOL          bDrawNonShaded;\r
353 extern BOOL          bDrawMultiPass;\r
354 extern GLubyte       ubGloColAlpha;\r
355 extern GLubyte       ubGloAlpha;\r
356 extern short         sSprite_ux2;\r
357 extern short         sSprite_vy2;\r
358 extern BOOL          bRenderFrontBuffer;\r
359 extern unsigned long ulOLDCOL;\r
360 extern unsigned long ulClutID;\r
361 extern void (*primTableJ[256])(u8 *);\r
362 extern void (*primTableSkip[256])(u8 *);\r
363 extern unsigned short  usMirror;\r
364 extern unsigned long dwCfgFixes;\r
365 extern unsigned long dwActFixes;\r
366 extern unsigned long dwEmuFixes;\r
367 extern BOOL          bUseFixes;\r
368 extern int           iSpriteTex;\r
369 extern int           iDrawnSomething;\r
370 \r
371 extern long drawX;\r
372 extern long drawY;\r
373 extern long drawW;\r
374 extern long drawH;\r
375 extern short sxmin;\r
376 extern short sxmax;\r
377 extern short symin;\r
378 extern short symax;\r
379 \r
380 #endif\r
381 \r
382 //-----------------------------------------------------//\r
383 \r
384 #ifndef _IN_TEXTURE\r
385 \r
386 extern u8  ubOpaqueDraw;\r
387 extern GLint          giWantedRGBA;\r
388 extern GLint          giWantedFMT;\r
389 extern GLint          giWantedTYPE;\r
390 extern void           (*LoadSubTexFn) (int,int,short,short);\r
391 extern long           GlobalTexturePage;\r
392 extern unsigned long  (*TCF[]) (unsigned long);\r
393 extern unsigned short (*PTCF[]) (unsigned short);\r
394 extern unsigned long  (*PalTexturedColourFn) (unsigned long);\r
395 extern BOOL           bUseFastMdec;\r
396 extern BOOL           bUse15bitMdec;\r
397 extern int            iFrameTexType;\r
398 extern int            iFrameReadType;\r
399 extern int            iClampType;\r
400 extern int            iSortTexCnt;\r
401 extern BOOL           bFakeFrontBuffer; \r
402 extern GLuint         gTexFrameName;\r
403 extern GLuint         gTexBlurName;\r
404 extern int            iVRamSize;\r
405 extern int            iTexGarbageCollection;\r
406 extern int            iFTexA;\r
407 extern int            iFTexB;\r
408 extern BOOL           bIgnoreNextTile;\r
409 \r
410 \r
411 #endif\r
412 \r
413 //-----------------------------------------------------//\r
414 \r
415 #ifndef _IN_GPU\r
416 \r
417 extern VRAMLoad_t     VRAMWrite;\r
418 extern VRAMLoad_t     VRAMRead;\r
419 extern int            iDataWriteMode;\r
420 extern int            iDataReadMode;\r
421 extern int            iColDepth;\r
422 extern BOOL           bChangeRes;\r
423 extern BOOL           bWindowMode;\r
424 extern s8           szDispBuf[];\r
425 extern s8           szGPUKeys[];\r
426 extern PSXDisplay_t   PSXDisplay;\r
427 extern PSXDisplay_t   PreviousPSXDisplay;\r
428 //extern unsigned long  ulKeybits;\r
429 extern TWin_t         TWin;\r
430 extern BOOL           bDisplayNotSet;\r
431 extern long           lGPUstatusRet;\r
432 extern short          imageX0,imageX1;\r
433 extern short          imageY0,imageY1;\r
434 extern long           lClearOnSwap,lClearOnSwapColor;\r
435 extern u8  * psxVub;\r
436 extern s8    * psxVsb;\r
437 extern unsigned short * psxVuw;\r
438 extern signed short   * psxVsw;\r
439 extern unsigned long  * psxVul;\r
440 extern signed long    * psxVsl;\r
441 extern GLfloat        gl_z;\r
442 extern BOOL           bNeedRGB24Update;\r
443 extern BOOL           bChangeWinMode;\r
444 extern GLuint         uiScanLine;\r
445 extern int            iUseScanLines;\r
446 extern long           lSelectedSlot;\r
447 extern int            iScanBlend;\r
448 extern BOOL           bInitCap;\r
449 extern int            iBlurBuffer;\r
450 extern int            iLastRGB24;\r
451 extern int            iRenderFVR;\r
452 extern int            iNoScreenSaver;\r
453 extern unsigned long  ulGPUInfoVals[];\r
454 extern BOOL           bNeedInterlaceUpdate;\r
455 extern BOOL           bNeedWriteUpload;\r
456 extern BOOL           bSkipNextFrame;\r
457 \r
458 \r
459 #ifndef _WINDOWS\r
460 extern int bFullScreen;\r
461 #endif\r
462 \r
463 #endif\r
464 \r
465 //-----------------------------------------------------//\r
466 \r
467 #ifndef _IN_MENU\r
468 \r
469 //extern unsigned long  dwCoreFlags;\r
470 extern GLuint         gTexPicName;\r
471 //extern PSXPoint_t     ptCursorPoint[];\r
472 //extern unsigned short usCursorActive;\r
473 \r
474 #endif\r
475 \r
476 //-----------------------------------------------------//\r
477 \r
478 #ifndef _IN_CFG\r
479 \r
480 #ifndef _WINDOWS\r
481 extern s8 * pConfigFile;\r
482 #endif\r
483 \r
484 #endif\r
485 \r
486 //-----------------------------------------------------//\r
487 \r
488 #ifndef _IN_FPS\r
489 \r
490 extern BOOL           bUseFrameLimit;\r
491 extern BOOL           bUseFrameSkip;\r
492 extern float          fFrameRate;\r
493 extern float          fFrameRateHz;\r
494 extern int            iFrameLimit;\r
495 extern float          fps_skip;\r
496 extern float          fps_cur;\r
497 \r
498 #endif\r
499 \r
500 //-----------------------------------------------------//\r
501 \r
502 typedef struct {\r
503 u8 r;\r
504 u8 g;\r
505 u8 b;\r
506 u8 a;\r
507 } Vec4f;\r
508 \r
509 /**/\r
510 typedef struct {\r
511 float x;\r
512 float y;\r
513 float z;\r
514 } Vec3f;\r
515 \r
516 typedef struct {\r
517 float x;\r
518 float y;\r
519 } Vec2f;\r
520 \r
521 /*\r
522 typedef struct {\r
523 int x;\r
524 int y;\r
525 int z;\r
526 } Vec3f;\r
527 \r
528 typedef struct {\r
529 int x;\r
530 int y;\r
531 } Vec2f;\r
532 /**/\r
533 \r
534 typedef struct {\r
535   Vec3f xyz;\r
536   Vec2f st;\r
537 } Vertex;\r
538 \r
539 typedef struct {\r
540   Vec3f xyz;\r
541   Vec2f st;\r
542   Vec4f rgba;\r
543 } Vertex2;\r
544 \r
545 #ifndef _IN_KEY\r
546 \r
547 //extern unsigned long  ulKeybits;\r
548 \r
549 #endif\r
550 \r
551 //-----------------------------------------------------//\r
552 \r
553 #ifndef _IN_ZN\r
554 \r
555 extern unsigned long dwGPUVersion;\r
556 extern int           iGPUHeight;\r
557 extern int           iGPUHeightMask;\r
558 extern int           GlobalTextIL;\r
559 extern int           iTileCheat;\r
560 \r
561 #endif\r
562 \r
563 #ifdef __cplusplus\r
564 }\r
565 #endif\r
566 \r
567 \r
568 #endif\r
569 \r
570 //-----------------------------------------------------//\r