gpu-gles from psx4m
[pcsx_rearmed.git] / plugins / gpu-gles / gpuExternals.h
CommitLineData
ce879073 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
33extern "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
63extern 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
160typedef 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
172typedef 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
183typedef struct PSXPOINTTAG\r
184{\r
185 long x;\r
186 long y;\r
187} PSXPoint_t;\r
188\r
189typedef struct PSXSPOINTTAG\r
190{\r
191 short x;\r
192 short y;\r
193} PSXSPoint_t;\r
194\r
195typedef 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
205typedef 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
216typedef 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
241typedef 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
251COLTAG\r
252 {\r
253 u8 col[4];\r
254 unsigned long lcol;\r
255 } c;\r
256\r
257} OGLVertex;\r
258\r
259typedef union EXShortTag\r
260{\r
261 u8 c[2];\r
262 unsigned short s;\r
263} EXShort;\r
264\r
265typedef 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
277extern HINSTANCE hInst;\r
278\r
279#endif\r
280 \r
281//-----------------------------------------------------//\r
282\r
283#ifndef _IN_DRAW\r
284\r
285extern int iResX;\r
286extern int iResY;\r
287extern BOOL bKeepRatio;\r
288extern RECT rRatioRect;\r
289extern BOOL bOpaquePass;\r
290extern BOOL bAdvancedBlend;\r
291\r
292//extern PFNGLBLENDEQU glBlendEquationEXTEx;\r
293//extern PFNGLCOLORTABLEEXT glColorTableEXTEx;\r
294\r
295extern u8 gl_ux[8];\r
296extern u8 gl_vy[8];\r
297extern OGLVertex vertex[4];\r
298extern short sprtY,sprtX,sprtH,sprtW;\r
299#ifdef _WINDOWS\r
300extern HWND hWWindow;\r
301#endif\r
302extern BOOL bIsFirstFrame;\r
303extern int iWinSize;\r
304extern int iZBufferDepth;\r
305extern GLbitfield uiBufferBits;\r
306extern int iUseMask;\r
307extern int iSetMask;\r
308extern int iDepthFunc;\r
309extern BOOL bCheckMask;\r
310extern unsigned short sSetMask;\r
311extern unsigned long lSetMask;\r
312extern BOOL bSetClip;\r
313extern GLuint gTexScanName;\r
314\r
315#endif\r
316\r
317//-----------------------------------------------------//\r
318\r
319#ifndef _IN_SOFT\r
320\r
321extern long GlobalTextAddrX,GlobalTextAddrY,GlobalTextTP;\r
322extern long GlobalTextREST,GlobalTextABR,GlobalTextPAGE;\r
323extern short ly0,lx0,ly1,lx1,ly2,lx2,ly3,lx3;\r
324extern short g_m1;\r
325extern short g_m2;\r
326extern short g_m3;\r
327extern short DrawSemiTrans;\r
328\r
329#endif\r
330\r
331//-----------------------------------------------------//\r
332\r
333#ifndef _IN_PRIMDRAW\r
334\r
335extern BOOL bNeedUploadTest;\r
336extern BOOL bNeedUploadAfter;\r
337extern BOOL bTexEnabled;\r
338extern BOOL bBlendEnable;\r
339extern BOOL bDrawDither;\r
340extern int iFilterType; \r
341extern BOOL bFullVRam;\r
342extern BOOL bUseMultiPass;\r
343extern int iOffscreenDrawing;\r
344extern BOOL bOldSmoothShaded;\r
345extern BOOL bUsingTWin;\r
346extern BOOL bUsingMovie;\r
347extern PSXRect_t xrMovieArea;\r
348extern PSXRect_t xrUploadArea;\r
349extern PSXRect_t xrUploadAreaIL;\r
350extern PSXRect_t xrUploadAreaRGB24;\r
351extern GLuint gTexName;\r
352extern BOOL bDrawNonShaded;\r
353extern BOOL bDrawMultiPass;\r
354extern GLubyte ubGloColAlpha;\r
355extern GLubyte ubGloAlpha;\r
356extern short sSprite_ux2;\r
357extern short sSprite_vy2;\r
358extern BOOL bRenderFrontBuffer;\r
359extern unsigned long ulOLDCOL;\r
360extern unsigned long ulClutID;\r
361extern void (*primTableJ[256])(u8 *);\r
362extern void (*primTableSkip[256])(u8 *);\r
363extern unsigned short usMirror;\r
364extern unsigned long dwCfgFixes;\r
365extern unsigned long dwActFixes;\r
366extern unsigned long dwEmuFixes;\r
367extern BOOL bUseFixes;\r
368extern int iSpriteTex;\r
369extern int iDrawnSomething;\r
370\r
371extern long drawX;\r
372extern long drawY;\r
373extern long drawW;\r
374extern long drawH;\r
375extern short sxmin;\r
376extern short sxmax;\r
377extern short symin;\r
378extern short symax;\r
379\r
380#endif\r
381\r
382//-----------------------------------------------------//\r
383\r
384#ifndef _IN_TEXTURE\r
385\r
386extern u8 ubOpaqueDraw;\r
387extern GLint giWantedRGBA;\r
388extern GLint giWantedFMT;\r
389extern GLint giWantedTYPE;\r
390extern void (*LoadSubTexFn) (int,int,short,short);\r
391extern long GlobalTexturePage;\r
392extern unsigned long (*TCF[]) (unsigned long);\r
393extern unsigned short (*PTCF[]) (unsigned short);\r
394extern unsigned long (*PalTexturedColourFn) (unsigned long);\r
395extern BOOL bUseFastMdec;\r
396extern BOOL bUse15bitMdec;\r
397extern int iFrameTexType;\r
398extern int iFrameReadType;\r
399extern int iClampType;\r
400extern int iSortTexCnt;\r
401extern BOOL bFakeFrontBuffer; \r
402extern GLuint gTexFrameName;\r
403extern GLuint gTexBlurName;\r
404extern int iVRamSize;\r
405extern int iTexGarbageCollection;\r
406extern int iFTexA;\r
407extern int iFTexB;\r
408extern BOOL bIgnoreNextTile;\r
409\r
410\r
411#endif\r
412\r
413//-----------------------------------------------------//\r
414\r
415#ifndef _IN_GPU\r
416\r
417extern VRAMLoad_t VRAMWrite;\r
418extern VRAMLoad_t VRAMRead;\r
419extern int iDataWriteMode;\r
420extern int iDataReadMode;\r
421extern int iColDepth;\r
422extern BOOL bChangeRes;\r
423extern BOOL bWindowMode;\r
424extern s8 szDispBuf[];\r
425extern s8 szGPUKeys[];\r
426extern PSXDisplay_t PSXDisplay;\r
427extern PSXDisplay_t PreviousPSXDisplay;\r
428//extern unsigned long ulKeybits;\r
429extern TWin_t TWin;\r
430extern BOOL bDisplayNotSet;\r
431extern long lGPUstatusRet;\r
432extern short imageX0,imageX1;\r
433extern short imageY0,imageY1;\r
434extern long lClearOnSwap,lClearOnSwapColor;\r
435extern u8 * psxVub;\r
436extern s8 * psxVsb;\r
437extern unsigned short * psxVuw;\r
438extern signed short * psxVsw;\r
439extern unsigned long * psxVul;\r
440extern signed long * psxVsl;\r
441extern GLfloat gl_z;\r
442extern BOOL bNeedRGB24Update;\r
443extern BOOL bChangeWinMode;\r
444extern GLuint uiScanLine;\r
445extern int iUseScanLines;\r
446extern long lSelectedSlot;\r
447extern int iScanBlend;\r
448extern BOOL bInitCap;\r
449extern int iBlurBuffer;\r
450extern int iLastRGB24;\r
451extern int iRenderFVR;\r
452extern int iNoScreenSaver;\r
453extern unsigned long ulGPUInfoVals[];\r
454extern BOOL bNeedInterlaceUpdate;\r
455extern BOOL bNeedWriteUpload;\r
456extern BOOL bSkipNextFrame;\r
457\r
458\r
459#ifndef _WINDOWS\r
460extern 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
470extern 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
481extern s8 * pConfigFile;\r
482#endif\r
483\r
484#endif\r
485\r
486//-----------------------------------------------------//\r
487\r
488#ifndef _IN_FPS\r
489\r
490extern BOOL bUseFrameLimit;\r
491extern BOOL bUseFrameSkip;\r
492extern float fFrameRate;\r
493extern float fFrameRateHz;\r
494extern int iFrameLimit;\r
495extern float fps_skip;\r
496extern float fps_cur;\r
497\r
498#endif\r
499\r
500//-----------------------------------------------------//\r
501\r
502typedef struct {\r
503u8 r;\r
504u8 g;\r
505u8 b;\r
506u8 a;\r
507} Vec4f;\r
508\r
509/**/\r
510typedef struct {\r
511float x;\r
512float y;\r
513float z;\r
514} Vec3f;\r
515\r
516typedef struct {\r
517float x;\r
518float y;\r
519} Vec2f;\r
520\r
521/*\r
522typedef struct {\r
523int x;\r
524int y;\r
525int z;\r
526} Vec3f;\r
527\r
528typedef struct {\r
529int x;\r
530int y;\r
531} Vec2f;\r
532/**/\r
533\r
534typedef struct {\r
535 Vec3f xyz;\r
536 Vec2f st;\r
537} Vertex;\r
538\r
539typedef 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
555extern unsigned long dwGPUVersion;\r
556extern int iGPUHeight;\r
557extern int iGPUHeightMask;\r
558extern int GlobalTextIL;\r
559extern 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