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