Glide Plugin GLES2 port from mupen64plus-ae, but with special FrameSkip code
[mupen64plus-pandora.git] / source / gles2glide64 / src / GlideHQ / Ext_TxFilter.h
1 /*
2  * Texture Filtering
3  * Version:  1.0
4  *
5  * Copyright (C) 2007  Hiroshi Morii   All Rights Reserved.
6  * Email koolsmoky(at)users.sourceforge.net
7  * Web   http://www.3dfxzone.it/koolsmoky
8  *
9  * this is free software; you can redistribute it and/or modify
10  * it under the terms of the GNU General Public License as published by
11  * the Free Software Foundation; either version 2, or (at your option)
12  * any later version.
13  *
14  * this is distributed in the hope that it will be useful,
15  * but WITHOUT ANY WARRANTY; without even the implied warranty of
16  * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
17  * GNU General Public License for more details.
18  *
19  * You should have received a copy of the GNU General Public License
20  * along with GNU Make; see the file COPYING.  If not, write to
21  * the Free Software Foundation, 675 Mass Ave, Cambridge, MA 02139, USA.
22  */
23
24 #ifndef __EXT_TXFILTER_H__
25 #define __EXT_TXFILTER_H__
26
27 #ifdef WIN32
28 #include <windows.h>
29 #define TXHMODULE HMODULE
30 #define DLOPEN(a) LoadLibraryW(a)
31 #define DLCLOSE(a) FreeLibrary(a)
32 #define DLSYM(a, b) GetProcAddress(a, b)
33 #define GETCWD(a, b) GetCurrentDirectoryW(a, b)
34 #define CHDIR(a) SetCurrentDirectoryW(a)
35 #else
36 #include <iostream>
37 #include <dlfcn.h> 
38 #define MAX_PATH 4095
39 #define TXHMODULE void*
40 #define DLOPEN(a) dlopen(a, RTLD_LAZY|RTLD_GLOBAL)
41 #define DLCLOSE(a) dlclose(a)
42 #define DLSYM(a, b) dlsym(a, b)
43 #define GETCWD(a, b) getcwd(b, a)
44 #define CHDIR(a) chdir(a)
45 #endif
46
47 #ifdef __MSC__
48 typedef __int64 int64;
49 typedef unsigned __int64 uint64;
50 #else
51 #include <stdint.h>
52 typedef int64_t int64;
53 typedef uint64_t uint64;
54 typedef unsigned char boolean;
55 #endif
56
57 #define NO_OPTIONS          0x00000000
58
59 #define FILTER_MASK         0x000000ff
60 #define NO_FILTER           0x00000000
61 #define SMOOTH_FILTER_MASK  0x0000000f
62 #define NO_SMOOTH_FILTER    0x00000000
63 #define SMOOTH_FILTER_1     0x00000001
64 #define SMOOTH_FILTER_2     0x00000002
65 #define SMOOTH_FILTER_3     0x00000003
66 #define SMOOTH_FILTER_4     0x00000004
67 #define SHARP_FILTER_MASK   0x000000f0
68 #define NO_SHARP_FILTER     0x00000000
69 #define SHARP_FILTER_1      0x00000010
70 #define SHARP_FILTER_2      0x00000020
71
72 #define ENHANCEMENT_MASK    0x00000f00
73 #define NO_ENHANCEMENT      0x00000000
74 #define X2_ENHANCEMENT      0x00000100
75 #define X2SAI_ENHANCEMENT   0x00000200
76 #define HQ2X_ENHANCEMENT    0x00000300
77 #define LQ2X_ENHANCEMENT    0x00000400
78 #define HQ4X_ENHANCEMENT    0x00000500
79 #define HQ2XS_ENHANCEMENT   0x00000600
80 #define LQ2XS_ENHANCEMENT   0x00000700
81
82 #define COMPRESSION_MASK    0x0000f000
83 #define NO_COMPRESSION      0x00000000
84 #define FXT1_COMPRESSION    0x00001000
85 #define NCC_COMPRESSION     0x00002000
86 #define S3TC_COMPRESSION    0x00003000
87
88 #define HIRESTEXTURES_MASK  0x000f0000
89 #define NO_HIRESTEXTURES    0x00000000
90 #define GHQ_HIRESTEXTURES   0x00010000
91 #define RICE_HIRESTEXTURES  0x00020000
92 #define JABO_HIRESTEXTURES  0x00030000
93
94 #define COMPRESS_TEX        0x00100000
95 #define COMPRESS_HIRESTEX   0x00200000
96 #define GZ_TEXCACHE         0x00400000
97 #define GZ_HIRESTEXCACHE    0x00800000
98 #define DUMP_TEXCACHE       0x01000000
99 #define DUMP_HIRESTEXCACHE  0x02000000
100 #define TILE_HIRESTEX       0x04000000
101 #define UNDEFINED_0         0x08000000
102 #define FORCE16BPP_HIRESTEX 0x10000000
103 #define FORCE16BPP_TEX      0x20000000
104 #define LET_TEXARTISTS_FLY  0x40000000 /* a little freedom for texture artists */
105 #define DUMP_TEX            0x80000000
106
107 #ifndef __GLIDE_H__ /* GLIDE3 */
108 /* from 3Dfx Interactive Inc. glide.h */
109 #define GR_TEXFMT_ALPHA_8           0x2
110 #define GR_TEXFMT_INTENSITY_8       0x3
111
112 #define GR_TEXFMT_ALPHA_INTENSITY_44 0x4
113 #define GR_TEXFMT_P_8                0x5
114
115 #define GR_TEXFMT_RGB_565            0xa
116 #define GR_TEXFMT_ARGB_1555          0xb
117 #define GR_TEXFMT_ARGB_4444          0xc
118 #define GR_TEXFMT_ALPHA_INTENSITY_88 0xd
119
120 /* from 3Dfx Interactive Inc. g3ext.h */
121 #define GR_TEXFMT_ARGB_CMP_FXT1      0x11
122
123 #define GR_TEXFMT_ARGB_8888          0x12
124
125 #define GR_TEXFMT_ARGB_CMP_DXT1      0x16
126 #define GR_TEXFMT_ARGB_CMP_DXT3      0x18
127 #define GR_TEXFMT_ARGB_CMP_DXT5      0x1A
128 #endif /* GLIDE3 */
129
130 struct GHQTexInfo {
131
132   unsigned char *data;
133
134   int width;
135   int height;
136
137   int smallLodLog2;
138   int largeLodLog2;
139   int aspectRatioLog2;
140
141   int tiles;
142   int untiled_width;
143   int untiled_height;
144
145   unsigned short format;
146
147   unsigned char is_hires_tex;
148 };
149
150 /* Callback to display hires texture info.
151  * Gonetz <gonetz(at)ngs.ru>
152  *
153  * void DispInfo(const char *format, ...)
154  * {
155  *   va_list args;
156  *   char buf[INFO_BUF];
157  *
158  *   va_start(args, format);
159  *   vsprintf(buf, format, args);
160  *   va_end(args);
161  *
162  *   printf(buf);
163  * }
164  */
165 #define INFO_BUF 4095
166 typedef void (*dispInfoFuncExt)(const wchar_t *format, ...);
167
168 #ifndef TXFILTER_DLL
169 boolean ext_ghq_init(int maxwidth, /* maximum texture width supported by hardware */
170                      int maxheight,/* maximum texture height supported by hardware */
171                      int maxbpp,   /* maximum texture bpp supported by hardware */
172                      int options,  /* options */
173                      int cachesize,/* cache textures to system memory */
174                      wchar_t *datapath,   /* user data directory. must be smaller than MAX_PATH */
175                      wchar_t *cachepath,   /* user cache directory. must be smaller than MAX_PATH */
176                      wchar_t *ident,  /* name of ROM. must be no longer than 64 in character. */
177                      dispInfoFuncExt callback /* callback function to display info */
178                      );
179
180 void ext_ghq_shutdown(void);
181
182 boolean ext_ghq_txfilter(unsigned char *src,        /* input texture */
183                          int srcwidth,              /* width of input texture */
184                          int srcheight,             /* height of input texture */
185                          unsigned short srcformat,  /* format of input texture */
186                          uint64 g64crc,             /* glide64 crc */
187                          GHQTexInfo *info           /* output */
188                          );
189
190 boolean ext_ghq_hirestex(uint64 g64crc,             /* glide64 crc */
191                          uint64 r_crc64,            /* checksum hi:palette low:texture */
192                          unsigned short *palette,   /* palette for CI textures */
193                          GHQTexInfo *info           /* output */
194                          );
195
196 uint64 ext_ghq_checksum(unsigned char *src, /* input texture */
197                         int width,          /* width of texture */
198                         int height,         /* height of texture */
199                         int size,           /* type of texture pixel */
200                         int rowStride,      /* row stride in bytes */
201                         unsigned char *palette /* palette */
202                         );
203
204 boolean ext_ghq_dmptx(unsigned char *src,   /* input texture (must be in 3Dfx Glide format) */
205                       int width,            /* width of texture */
206                       int height,           /* height of texture */
207                       int rowStridePixel,   /* row stride of input texture in pixels */
208                       unsigned short gfmt,  /* glide format of input texture */
209                       unsigned short n64fmt,/* N64 format hi:format low:size */
210                       uint64 r_crc64        /* checksum hi:palette low:texture */
211                       );
212
213 boolean ext_ghq_reloadhirestex();
214 #endif /* TXFILTER_DLL */
215
216 #endif /* __EXT_TXFILTER_H__ */