change SDL 1.2 to SDL 2.0
[platform/upstream/SDL.git] / src / render / opengles2 / SDL_shaders_gles2.c
1 /*
2   Simple DirectMedia Layer
3   Copyright (C) 1997-2016 Sam Lantinga <slouken@libsdl.org>
4
5   This software is provided 'as-is', without any express or implied
6   warranty.  In no event will the authors be held liable for any damages
7   arising from the use of this software.
8
9   Permission is granted to anyone to use this software for any purpose,
10   including commercial applications, and to alter it and redistribute it
11   freely, subject to the following restrictions:
12
13   1. The origin of this software must not be misrepresented; you must not
14      claim that you wrote the original software. If you use this software
15      in a product, an acknowledgment in the product documentation would be
16      appreciated but is not required.
17   2. Altered source versions must be plainly marked as such, and must not be
18      misrepresented as being the original software.
19   3. This notice may not be removed or altered from any source distribution.
20 */
21 #include "../../SDL_internal.h"
22
23 #if SDL_VIDEO_RENDER_OGL_ES2 && !SDL_RENDER_DISABLED
24
25 #include "SDL_video.h"
26 #include "SDL_opengles2.h"
27 #include "SDL_shaders_gles2.h"
28 #include "SDL_stdinc.h"
29
30 /*************************************************************************************************
31  * Vertex/fragment shader source                                                                 *
32  *************************************************************************************************/
33
34 static const Uint8 GLES2_VertexSrc_Default_[] = " \
35     uniform mat4 u_projection; \
36     attribute vec2 a_position; \
37     attribute vec2 a_texCoord; \
38     attribute float a_angle; \
39     attribute vec2 a_center; \
40     varying vec2 v_texCoord; \
41     \
42     void main() \
43     { \
44         float angle = radians(a_angle); \
45         float c = cos(angle); \
46         float s = sin(angle); \
47         mat2 rotationMatrix = mat2(c, -s, s, c); \
48         vec2 position = rotationMatrix * (a_position - a_center) + a_center; \
49         v_texCoord = a_texCoord; \
50         gl_Position = u_projection * vec4(position, 0.0, 1.0);\
51         gl_PointSize = 1.0; \
52     } \
53 ";
54
55 static const Uint8 GLES2_FragmentSrc_SolidSrc_[] = " \
56     precision mediump float; \
57     uniform vec4 u_color; \
58     \
59     void main() \
60     { \
61         gl_FragColor = u_color; \
62     } \
63 ";
64
65 static const Uint8 GLES2_FragmentSrc_TextureABGRSrc_[] = " \
66     precision mediump float; \
67     uniform sampler2D u_texture; \
68     uniform vec4 u_modulation; \
69     varying vec2 v_texCoord; \
70     \
71     void main() \
72     { \
73         gl_FragColor = texture2D(u_texture, v_texCoord); \
74         gl_FragColor *= u_modulation; \
75     } \
76 ";
77
78 /* ARGB to ABGR conversion */
79 static const Uint8 GLES2_FragmentSrc_TextureARGBSrc_[] = " \
80     precision mediump float; \
81     uniform sampler2D u_texture; \
82     uniform vec4 u_modulation; \
83     varying vec2 v_texCoord; \
84     \
85     void main() \
86     { \
87         vec4 abgr = texture2D(u_texture, v_texCoord); \
88         gl_FragColor = abgr; \
89         gl_FragColor.r = abgr.b; \
90         gl_FragColor.b = abgr.r; \
91         gl_FragColor *= u_modulation; \
92     } \
93 ";
94
95 /* RGB to ABGR conversion */
96 static const Uint8 GLES2_FragmentSrc_TextureRGBSrc_[] = " \
97     precision mediump float; \
98     uniform sampler2D u_texture; \
99     uniform vec4 u_modulation; \
100     varying vec2 v_texCoord; \
101     \
102     void main() \
103     { \
104         vec4 abgr = texture2D(u_texture, v_texCoord); \
105         gl_FragColor = abgr; \
106         gl_FragColor.r = abgr.b; \
107         gl_FragColor.b = abgr.r; \
108         gl_FragColor.a = 1.0; \
109         gl_FragColor *= u_modulation; \
110     } \
111 ";
112
113 /* BGR to ABGR conversion */
114 static const Uint8 GLES2_FragmentSrc_TextureBGRSrc_[] = " \
115     precision mediump float; \
116     uniform sampler2D u_texture; \
117     uniform vec4 u_modulation; \
118     varying vec2 v_texCoord; \
119     \
120     void main() \
121     { \
122         vec4 abgr = texture2D(u_texture, v_texCoord); \
123         gl_FragColor = abgr; \
124         gl_FragColor.a = 1.0; \
125         gl_FragColor *= u_modulation; \
126     } \
127 ";
128
129 /* YUV to ABGR conversion */
130 static const Uint8 GLES2_FragmentSrc_TextureYUVSrc_[] = " \
131     precision mediump float; \
132     uniform sampler2D u_texture; \
133     uniform sampler2D u_texture_u; \
134     uniform sampler2D u_texture_v; \
135     uniform vec4 u_modulation; \
136     varying vec2 v_texCoord; \
137     \
138     void main() \
139     { \
140         mediump vec3 yuv; \
141         lowp vec3 rgb; \
142         yuv.x = texture2D(u_texture,   v_texCoord).r; \
143         yuv.y = texture2D(u_texture_u, v_texCoord).r - 0.5; \
144         yuv.z = texture2D(u_texture_v, v_texCoord).r - 0.5; \
145         rgb = mat3( 1,        1,       1, \
146                     0,       -0.39465, 2.03211, \
147                     1.13983, -0.58060, 0) * yuv; \
148         gl_FragColor = vec4(rgb, 1); \
149         gl_FragColor *= u_modulation; \
150     } \
151 ";
152
153 /* NV12 to ABGR conversion */
154 static const Uint8 GLES2_FragmentSrc_TextureNV12Src_[] = " \
155     precision mediump float; \
156     uniform sampler2D u_texture; \
157     uniform sampler2D u_texture_u; \
158     uniform vec4 u_modulation; \
159     varying vec2 v_texCoord; \
160     \
161     void main() \
162     { \
163         mediump vec3 yuv; \
164         lowp vec3 rgb; \
165         yuv.x = texture2D(u_texture,   v_texCoord).r; \
166         yuv.yz = texture2D(u_texture_u, v_texCoord).ra - 0.5; \
167         rgb = mat3( 1,        1,       1, \
168                     0,       -0.39465, 2.03211, \
169                     1.13983, -0.58060, 0) * yuv; \
170         gl_FragColor = vec4(rgb, 1); \
171         gl_FragColor *= u_modulation; \
172     } \
173 ";
174
175 /* NV21 to ABGR conversion */
176 static const Uint8 GLES2_FragmentSrc_TextureNV21Src_[] = " \
177     precision mediump float; \
178     uniform sampler2D u_texture; \
179     uniform sampler2D u_texture_u; \
180     uniform vec4 u_modulation; \
181     varying vec2 v_texCoord; \
182     \
183     void main() \
184     { \
185         mediump vec3 yuv; \
186         lowp vec3 rgb; \
187         yuv.x = texture2D(u_texture,   v_texCoord).r; \
188         yuv.yz = texture2D(u_texture_u, v_texCoord).ar - 0.5; \
189         rgb = mat3( 1,        1,       1, \
190                     0,       -0.39465, 2.03211, \
191                     1.13983, -0.58060, 0) * yuv; \
192         gl_FragColor = vec4(rgb, 1); \
193         gl_FragColor *= u_modulation; \
194     } \
195 ";
196
197 static const GLES2_ShaderInstance GLES2_VertexSrc_Default = {
198     GL_VERTEX_SHADER,
199     GLES2_SOURCE_SHADER,
200     sizeof(GLES2_VertexSrc_Default_),
201     GLES2_VertexSrc_Default_
202 };
203
204 static const GLES2_ShaderInstance GLES2_FragmentSrc_SolidSrc = {
205     GL_FRAGMENT_SHADER,
206     GLES2_SOURCE_SHADER,
207     sizeof(GLES2_FragmentSrc_SolidSrc_),
208     GLES2_FragmentSrc_SolidSrc_
209 };
210
211 static const GLES2_ShaderInstance GLES2_FragmentSrc_TextureABGRSrc = {
212     GL_FRAGMENT_SHADER,
213     GLES2_SOURCE_SHADER,
214     sizeof(GLES2_FragmentSrc_TextureABGRSrc_),
215     GLES2_FragmentSrc_TextureABGRSrc_
216 };
217
218 static const GLES2_ShaderInstance GLES2_FragmentSrc_TextureARGBSrc = {
219     GL_FRAGMENT_SHADER,
220     GLES2_SOURCE_SHADER,
221     sizeof(GLES2_FragmentSrc_TextureARGBSrc_),
222     GLES2_FragmentSrc_TextureARGBSrc_
223 };
224
225 static const GLES2_ShaderInstance GLES2_FragmentSrc_TextureRGBSrc = {
226     GL_FRAGMENT_SHADER,
227     GLES2_SOURCE_SHADER,
228     sizeof(GLES2_FragmentSrc_TextureRGBSrc_),
229     GLES2_FragmentSrc_TextureRGBSrc_
230 };
231
232 static const GLES2_ShaderInstance GLES2_FragmentSrc_TextureBGRSrc = {
233     GL_FRAGMENT_SHADER,
234     GLES2_SOURCE_SHADER,
235     sizeof(GLES2_FragmentSrc_TextureBGRSrc_),
236     GLES2_FragmentSrc_TextureBGRSrc_
237 };
238
239 static const GLES2_ShaderInstance GLES2_FragmentSrc_TextureYUVSrc = {
240     GL_FRAGMENT_SHADER,
241     GLES2_SOURCE_SHADER,
242     sizeof(GLES2_FragmentSrc_TextureYUVSrc_),
243     GLES2_FragmentSrc_TextureYUVSrc_
244 };
245
246 static const GLES2_ShaderInstance GLES2_FragmentSrc_TextureNV12Src = {
247     GL_FRAGMENT_SHADER,
248     GLES2_SOURCE_SHADER,
249     sizeof(GLES2_FragmentSrc_TextureNV12Src_),
250     GLES2_FragmentSrc_TextureNV12Src_
251 };
252
253 static const GLES2_ShaderInstance GLES2_FragmentSrc_TextureNV21Src = {
254     GL_FRAGMENT_SHADER,
255     GLES2_SOURCE_SHADER,
256     sizeof(GLES2_FragmentSrc_TextureNV21Src_),
257     GLES2_FragmentSrc_TextureNV21Src_
258 };
259
260
261 /*************************************************************************************************
262  * Vertex/fragment shader binaries (NVIDIA Tegra 1/2)                                            *
263  *************************************************************************************************/
264
265 #if GLES2_INCLUDE_NVIDIA_SHADERS
266
267 #define GL_NVIDIA_PLATFORM_BINARY_NV 0x890B
268
269 static const Uint8 GLES2_VertexTegra_Default_[] = {
270     243, 193, 1, 142, 31, 109, 131, 38, 6, 0, 1, 0, 5, 0, 0, 0, 17, 0, 0, 0, 1, 0, 0, 0, 73, 0,
271     0, 0, 46, 0, 0, 0, 48, 0, 0, 0, 2, 0, 0, 0, 85, 0, 0, 0, 2, 0, 0, 0, 24, 0, 0, 0, 3, 0, 0, 0,
272     91, 0, 0, 0, 1, 0, 0, 0, 16, 0, 0, 0, 5, 0, 0, 0, 95, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
273     0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 8, 0, 0, 0, 95, 0, 0, 0, 1, 0, 0, 0, 28, 0, 0, 0,
274     13, 0, 0, 0, 102, 0, 0, 0, 2, 0, 0, 0, 8, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
275     0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
276     0, 0, 0, 16, 0, 0, 0, 104, 0, 0, 0, 1, 0, 0, 0, 32, 0, 0, 0, 17, 0, 0, 0, 112, 0, 0, 0, 0, 0,
277     0, 0, 0, 0, 0, 0, 18, 0, 0, 0, 112, 0, 0, 0, 80, 0, 0, 0, 80, 0, 0, 0, 19, 0, 0, 0, 132, 0,
278     0, 0, 104, 0, 0, 0, 104, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
279     0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 109, 97, 110, 70, 73, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 97,
280     95, 112, 111, 115, 105, 116, 105, 111, 110, 0, 97, 95, 116, 101, 120, 67, 111, 111, 114, 100,
281     0, 118, 95, 116, 101, 120, 67, 111, 111, 114, 100, 0, 117, 95, 112, 114, 111, 106, 101, 99,
282     116, 105, 111, 110, 0, 0, 0, 0, 0, 0, 0, 82, 139, 0, 0, 0, 0, 0, 0, 11, 0, 0, 0, 80, 139, 0,
283     0, 1, 0, 0, 0, 22, 0, 0, 0, 2, 0, 0, 0, 0, 0, 0, 0, 2, 0, 0, 0, 33, 0, 0, 0, 92, 139, 0, 0,
284     1, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 4, 240, 0, 0, 0, 0, 0, 0, 1, 0,
285     0, 0, 64, 0, 0, 0, 80, 0, 0, 0, 1, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 3, 0, 0, 0, 193, 0, 0, 0,
286     0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
287     0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
288     0, 0, 0, 0, 128, 63, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 5, 66, 24, 0, 6, 34, 108, 28,
289     0, 0, 42, 16, 128, 0, 195, 192, 6, 129, 252, 255, 65, 96, 108, 28, 0, 0, 0, 0, 0, 1, 195, 192,
290     6, 1, 252, 255, 33, 96, 108, 156, 31, 64, 8, 1, 64, 0, 131, 192, 6, 1, 156, 159, 65, 96, 108,
291     28, 0, 0, 85, 32, 0, 1, 195, 192, 6, 1, 252, 255, 33, 96, 108, 156, 31, 64, 0, 64, 64, 0, 131,
292     192, 134, 1, 152, 31, 65, 96, 108, 156, 31, 64, 127, 48, 0, 1, 195, 192, 6, 129, 129, 255, 33,
293     96
294 };
295
296 static const Uint8 GLES2_FragmentTegra_None_SolidSrc_[] = {
297     155, 191, 159, 1, 47, 109, 131, 38, 6, 0, 1, 0, 5, 0, 0, 0, 17, 0, 0, 0, 1, 0, 0, 0, 73, 0,
298     0, 0, 8, 0, 0, 0, 8, 0, 0, 0, 2, 0, 0, 0, 75, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 4, 0, 0, 0, 75,
299     0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 6, 0, 0, 0, 75, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 7, 0, 0, 0,
300     75, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 8, 0, 0, 0, 75, 0, 0, 0, 1, 0, 0, 0, 28, 0, 0, 0, 13, 0,
301     0, 0, 82, 0, 0, 0, 2, 0, 0, 0, 8, 0, 0, 0, 14, 0, 0, 0, 84, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
302     22, 0, 0, 0, 84, 0, 0, 0, 8, 0, 0, 0, 32, 0, 0, 0, 23, 0, 0, 0, 92, 0, 0, 0, 1, 0, 0, 0, 4,
303     0, 0, 0, 15, 0, 0, 0, 93, 0, 0, 0, 1, 0, 0, 0, 80, 0, 0, 0, 17, 0, 0, 0, 113, 0, 0, 0, 0, 0,
304     0, 0, 0, 0, 0, 0, 18, 0, 0, 0, 113, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 19, 0, 0, 0, 113, 0, 0,
305     0, 108, 0, 0, 0, 108, 0, 0, 0, 20, 0, 0, 0, 113, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 21, 0, 0,
306     0, 113, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 109, 97, 110, 70, 73, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
307     0, 117, 95, 99, 111, 108, 111, 114, 0, 0, 0, 0, 0, 82, 139, 0, 0, 1, 0, 0, 0, 1, 0, 0, 0, 0,
308     0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 5, 48, 0, 0, 0, 0, 0, 0, 0, 0, 0, 241, 0, 0, 0, 240, 0, 0,
309     0, 240, 0, 0, 0, 240, 0, 0, 0, 240, 0, 0, 0, 240, 0, 0, 0, 240, 0, 0, 0, 240, 0, 0, 0, 0, 0,
310     0, 0, 0, 1, 0, 0, 0, 7, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 1, 0, 0, 0, 21, 32, 0, 0, 0, 0, 0,
311     0, 0, 0, 0, 0, 20, 0, 0, 0, 16, 0, 0, 0, 16, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0,
312     0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 65, 82, 50, 48, 45, 66, 73, 78, 1,
313     0, 0, 0, 1, 0, 0, 0, 1, 0, 65, 37, 0, 0, 0, 0, 1, 0, 0, 21, 0, 0, 0, 0, 1, 0, 1, 38, 0, 0, 0,
314     0, 1, 0, 1, 39, 0, 0, 0, 0, 1, 0, 1, 40, 1, 0, 0, 0, 8, 0, 4, 40, 0, 40, 0, 0, 0, 242, 65, 63,
315     192, 200, 0, 0, 0, 242, 65, 63, 128, 168, 0, 0, 0, 242, 65, 63, 64, 72, 0, 0, 0, 242, 65, 63,
316     1, 0, 6, 40, 0, 0, 0, 0, 1, 0, 1, 41, 5, 0, 2, 0
317 };
318
319 static const Uint8 GLES2_FragmentTegra_Alpha_SolidSrc_[] = {
320     169, 153, 195, 28, 47, 109, 131, 38, 6, 0, 1, 0, 5, 0, 0, 0, 17, 0, 0, 0, 1, 0, 0, 0, 73, 0,
321     0, 0, 8, 0, 0, 0, 8, 0, 0, 0, 2, 0, 0, 0, 75, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 4, 0, 0, 0, 75,
322     0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 6, 0, 0, 0, 75, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 7, 0, 0, 0,
323     75, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 8, 0, 0, 0, 75, 0, 0, 0, 1, 0, 0, 0, 28, 0, 0, 0, 13, 0,
324     0, 0, 82, 0, 0, 0, 2, 0, 0, 0, 8, 0, 0, 0, 14, 0, 0, 0, 84, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
325     22, 0, 0, 0, 84, 0, 0, 0, 8, 0, 0, 0, 32, 0, 0, 0, 23, 0, 0, 0, 92, 0, 0, 0, 1, 0, 0, 0, 4,
326     0, 0, 0, 15, 0, 0, 0, 93, 0, 0, 0, 1, 0, 0, 0, 80, 0, 0, 0, 17, 0, 0, 0, 113, 0, 0, 0, 0, 0,
327     0, 0, 0, 0, 0, 0, 18, 0, 0, 0, 113, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 19, 0, 0, 0, 113, 0, 0,
328     0, 220, 0, 0, 0, 220, 0, 0, 0, 20, 0, 0, 0, 113, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 21, 0, 0,
329     0, 113, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 109, 97, 110, 70, 73, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
330     0, 117, 95, 99, 111, 108, 111, 114, 0, 0, 0, 0, 0, 82, 139, 0, 0, 1, 0, 0, 0, 1, 0, 0, 0, 0,
331     0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 5, 48, 0, 0, 0, 0, 0, 0, 118, 118, 17, 241, 0, 0, 0, 240, 0,
332     0, 0, 240, 0, 0, 0, 240, 0, 0, 0, 240, 0, 0, 0, 240, 0, 0, 0, 240, 0, 0, 0, 240, 0, 0, 0, 0,
333     0, 0, 0, 0, 1, 0, 0, 0, 7, 0, 0, 0, 2, 0, 0, 0, 1, 0, 0, 0, 3, 0, 0, 0, 21, 32, 0, 0, 0, 0,
334     0, 0, 0, 0, 0, 0, 20, 0, 0, 0, 16, 0, 0, 0, 16, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0,
335     0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 65, 82, 50, 48, 45, 66, 73, 78,
336     1, 0, 0, 0, 3, 0, 0, 0, 3, 0, 65, 37, 8, 0, 129, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 21, 0,
337     0, 0, 0, 3, 0, 1, 38, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 3, 0, 1, 39, 0, 0, 0, 0, 0, 0, 0,
338     0, 0, 0, 0, 0, 3, 0, 1, 40, 1, 0, 0, 0, 5, 0, 0, 0, 9, 0, 0, 0, 24, 0, 4, 40, 232, 231, 15,
339     0, 0, 242, 65, 62, 194, 72, 1, 0, 0, 250, 65, 63, 194, 40, 1, 0, 0, 250, 65, 63, 192, 168, 1,
340     0, 0, 242, 1, 64, 192, 168, 1, 0, 0, 242, 1, 68, 168, 32, 0, 0, 0, 50, 64, 0, 192, 168, 15,
341     0, 0, 242, 1, 66, 168, 64, 0, 16, 0, 242, 65, 1, 232, 231, 15, 0, 0, 242, 65, 62, 168, 160,
342     0, 0, 0, 50, 64, 2, 104, 192, 0, 0, 36, 48, 66, 4, 232, 231, 15, 0, 0, 242, 65, 62, 3, 0, 6,
343     40, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 3, 0, 1, 41, 0, 0, 0, 0, 0, 0, 0, 0, 5, 0, 2, 0
344 };
345
346 static const Uint8 GLES2_FragmentTegra_Additive_SolidSrc_[] = {
347     59, 71, 42, 17, 47, 109, 131, 38, 6, 0, 1, 0, 5, 0, 0, 0, 17, 0, 0, 0, 1, 0, 0, 0, 73, 0, 0,
348     0, 8, 0, 0, 0, 8, 0, 0, 0, 2, 0, 0, 0, 75, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 4, 0, 0, 0, 75,
349     0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 6, 0, 0, 0, 75, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 7, 0, 0, 0,
350     75, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 8, 0, 0, 0, 75, 0, 0, 0, 1, 0, 0, 0, 28, 0, 0, 0, 13, 0,
351     0, 0, 82, 0, 0, 0, 2, 0, 0, 0, 8, 0, 0, 0, 14, 0, 0, 0, 84, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
352     22, 0, 0, 0, 84, 0, 0, 0, 8, 0, 0, 0, 32, 0, 0, 0, 23, 0, 0, 0, 92, 0, 0, 0, 1, 0, 0, 0, 4,
353     0, 0, 0, 15, 0, 0, 0, 93, 0, 0, 0, 1, 0, 0, 0, 80, 0, 0, 0, 17, 0, 0, 0, 113, 0, 0, 0, 0, 0,
354     0, 0, 0, 0, 0, 0, 18, 0, 0, 0, 113, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 19, 0, 0, 0, 113, 0, 0,
355     0, 108, 0, 0, 0, 108, 0, 0, 0, 20, 0, 0, 0, 113, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 21, 0, 0,
356     0, 113, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 109, 97, 110, 70, 73, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
357     0, 117, 95, 99, 111, 108, 111, 114, 0, 0, 0, 0, 0, 82, 139, 0, 0, 1, 0, 0, 0, 1, 0, 0, 0, 0,
358     0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 5, 48, 0, 0, 0, 0, 0, 0, 22, 22, 17, 241, 0, 0, 0, 240, 0,
359     0, 0, 240, 0, 0, 0, 240, 0, 0, 0, 240, 0, 0, 0, 240, 0, 0, 0, 240, 0, 0, 0, 240, 0, 0, 0, 0,
360     0, 0, 0, 0, 1, 0, 0, 0, 7, 0, 0, 0, 2, 0, 0, 0, 1, 0, 0, 0, 1, 0, 0, 0, 21, 32, 0, 0, 0, 0,
361     0, 0, 0, 0, 0, 0, 20, 0, 0, 0, 16, 0, 0, 0, 16, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0,
362     0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 65, 82, 50, 48, 45, 66, 73, 78,
363     1, 0, 0, 0, 1, 0, 0, 0, 1, 0, 65, 37, 8, 0, 129, 0, 1, 0, 0, 21, 0, 0, 0, 0, 1, 0, 1, 38, 0,
364     0, 0, 0, 1, 0, 1, 39, 0, 0, 0, 0, 1, 0, 1, 40, 1, 0, 0, 0, 8, 0, 4, 40, 192, 200, 0, 0, 0, 26,
365     0, 70, 192, 40, 0, 0, 0, 2, 0, 64, 192, 72, 0, 0, 0, 10, 0, 66, 192, 168, 0, 0, 0, 18, 0, 68,
366     1, 0, 6, 40, 0, 0, 0, 0, 1, 0, 1, 41, 5, 0, 2, 0
367 };
368
369 static const Uint8 GLES2_FragmentTegra_Modulated_SolidSrc_[] = {
370     37, 191, 49, 17, 47, 109, 131, 38, 6, 0, 1, 0, 5, 0, 0, 0, 17, 0, 0, 0, 1, 0, 0, 0, 73, 0, 0,
371     0, 8, 0, 0, 0, 8, 0, 0, 0, 2, 0, 0, 0, 75, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 4, 0, 0, 0, 75,
372     0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 6, 0, 0, 0, 75, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 7, 0, 0, 0,
373     75, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 8, 0, 0, 0, 75, 0, 0, 0, 1, 0, 0, 0, 28, 0, 0, 0, 13, 0,
374     0, 0, 82, 0, 0, 0, 2, 0, 0, 0, 8, 0, 0, 0, 14, 0, 0, 0, 84, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
375     22, 0, 0, 0, 84, 0, 0, 0, 8, 0, 0, 0, 32, 0, 0, 0, 23, 0, 0, 0, 92, 0, 0, 0, 1, 0, 0, 0, 4,
376     0, 0, 0, 15, 0, 0, 0, 93, 0, 0, 0, 1, 0, 0, 0, 80, 0, 0, 0, 17, 0, 0, 0, 113, 0, 0, 0, 0, 0,
377     0, 0, 0, 0, 0, 0, 18, 0, 0, 0, 113, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 19, 0, 0, 0, 113, 0, 0,
378     0, 108, 0, 0, 0, 108, 0, 0, 0, 20, 0, 0, 0, 113, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 21, 0, 0,
379     0, 113, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 109, 97, 110, 70, 73, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
380     0, 117, 95, 99, 111, 108, 111, 114, 0, 0, 0, 0, 0, 82, 139, 0, 0, 1, 0, 0, 0, 1, 0, 0, 0, 0,
381     0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 5, 48, 0, 0, 0, 0, 0, 0, 32, 32, 17, 241, 0, 0, 0, 240, 0,
382     0, 0, 240, 0, 0, 0, 240, 0, 0, 0, 240, 0, 0, 0, 240, 0, 0, 0, 240, 0, 0, 0, 240, 0, 0, 0, 0,
383     0, 0, 0, 0, 1, 0, 0, 0, 7, 0, 0, 0, 2, 0, 0, 0, 1, 0, 0, 0, 1, 0, 0, 0, 21, 32, 0, 0, 0, 0,
384     0, 0, 0, 0, 0, 0, 20, 0, 0, 0, 16, 0, 0, 0, 16, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0,
385     0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 65, 82, 50, 48, 45, 66, 73, 78,
386     1, 0, 0, 0, 1, 0, 0, 0, 1, 0, 65, 37, 8, 0, 129, 0, 1, 0, 0, 21, 0, 0, 0, 0, 1, 0, 1, 38, 0,
387     0, 0, 0, 1, 0, 1, 39, 0, 0, 0, 0, 1, 0, 1, 40, 1, 0, 0, 0, 8, 0, 4, 40, 104, 192, 0, 0, 0, 242,
388     1, 70, 8, 32, 0, 0, 0, 242, 1, 64, 40, 64, 0, 0, 0, 242, 1, 66, 72, 160, 0, 0, 0, 242, 1, 68,
389     1, 0, 6, 40, 0, 0, 0, 0, 1, 0, 1, 41, 5, 0, 2, 0
390 };
391
392 static const Uint8 GLES2_FragmentTegra_None_TextureSrc_[] = {
393     220, 217, 41, 211, 47, 109, 131, 38, 6, 0, 1, 0, 5, 0, 0, 0, 17, 0, 0, 0, 1, 0, 0, 0, 73, 0,
394     0, 0, 34, 0, 0, 0, 36, 0, 0, 0, 2, 0, 0, 0, 82, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 4, 0, 0, 0,
395     82, 0, 0, 0, 1, 0, 0, 0, 20, 0, 0, 0, 6, 0, 0, 0, 87, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 7, 0,
396     0, 0, 87, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 8, 0, 0, 0, 87, 0, 0, 0, 2, 0, 0, 0, 56, 0, 0, 0,
397     13, 0, 0, 0, 101, 0, 0, 0, 4, 0, 0, 0, 16, 0, 0, 0, 14, 0, 0, 0, 105, 0, 0, 0, 1, 0, 0, 0, 4,
398     0, 0, 0, 22, 0, 0, 0, 106, 0, 0, 0, 8, 0, 0, 0, 32, 0, 0, 0, 23, 0, 0, 0, 114, 0, 0, 0, 1, 0,
399     0, 0, 4, 0, 0, 0, 15, 0, 0, 0, 115, 0, 0, 0, 1, 0, 0, 0, 80, 0, 0, 0, 17, 0, 0, 0, 135, 0, 0,
400     0, 0, 0, 0, 0, 0, 0, 0, 0, 18, 0, 0, 0, 135, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 19, 0, 0, 0, 135,
401     0, 0, 0, 120, 0, 0, 0, 120, 0, 0, 0, 20, 0, 0, 0, 135, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 21,
402     0, 0, 0, 135, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 109, 97, 110, 70, 73, 0, 0, 0, 0, 0, 0, 0, 0,
403     0, 0, 0, 118, 95, 116, 101, 120, 67, 111, 111, 114, 100, 0, 117, 95, 109, 111, 100, 117, 108,
404     97, 116, 105, 111, 110, 0, 117, 95, 116, 101, 120, 116, 117, 114, 101, 0, 0, 0, 0, 0, 0, 0,
405     2, 0, 0, 0, 0, 0, 0, 0, 220, 0, 0, 0, 0, 0, 0, 0, 11, 0, 0, 0, 82, 139, 0, 0, 1, 0, 0, 0, 1,
406     0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 24, 0, 0, 0, 94, 139, 0, 0, 1, 0, 0, 0, 1, 0, 0,
407     0, 2, 0, 0, 0, 16, 0, 0, 0, 0, 0, 0, 0, 5, 48, 0, 0, 0, 0, 0, 0, 3, 0, 0, 0, 0, 0, 0, 0, 0,
408     0, 0, 1, 0, 0, 0, 241, 0, 0, 0, 240, 0, 0, 0, 240, 0, 0, 0, 240, 0, 0, 0, 240, 0, 0, 0, 240,
409     0, 0, 0, 240, 0, 0, 0, 240, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 7, 0, 0, 0, 0, 0, 0, 0, 1, 0,
410     0, 0, 1, 0, 0, 0, 21, 32, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 24, 0, 0, 0, 16, 0, 0, 0, 16, 0, 0,
411     0, 0, 0, 0, 0, 2, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
412     0, 0, 65, 82, 50, 48, 45, 66, 73, 78, 1, 0, 0, 0, 1, 0, 0, 0, 1, 0, 65, 37, 0, 0, 0, 0, 1, 0,
413     0, 21, 0, 0, 0, 0, 1, 0, 1, 38, 1, 0, 0, 0, 2, 0, 4, 38, 186, 81, 78, 16, 2, 1, 0, 0, 1, 0,
414     1, 39, 0, 4, 0, 0, 1, 0, 1, 40, 1, 0, 0, 0, 8, 0, 4, 40, 104, 192, 0, 0, 0, 242, 1, 70, 8, 32,
415     0, 0, 0, 242, 1, 64, 40, 64, 0, 0, 0, 242, 1, 66, 72, 160, 0, 0, 0, 242, 1, 68, 1, 0, 6, 40,
416     0, 0, 0, 0, 1, 0, 1, 41, 5, 0, 2, 0
417 };
418
419 static const Uint8 GLES2_FragmentTegra_Alpha_TextureSrc_[] = {
420     71, 202, 114, 229, 47, 109, 131, 38, 6, 0, 1, 0, 5, 0, 0, 0, 17, 0, 0, 0, 1, 0, 0, 0, 73, 0,
421     0, 0, 34, 0, 0, 0, 36, 0, 0, 0, 2, 0, 0, 0, 82, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 4, 0, 0, 0,
422     82, 0, 0, 0, 1, 0, 0, 0, 20, 0, 0, 0, 6, 0, 0, 0, 87, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 7, 0,
423     0, 0, 87, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 8, 0, 0, 0, 87, 0, 0, 0, 2, 0, 0, 0, 56, 0, 0, 0,
424     13, 0, 0, 0, 101, 0, 0, 0, 4, 0, 0, 0, 16, 0, 0, 0, 14, 0, 0, 0, 105, 0, 0, 0, 1, 0, 0, 0, 4,
425     0, 0, 0, 22, 0, 0, 0, 106, 0, 0, 0, 8, 0, 0, 0, 32, 0, 0, 0, 23, 0, 0, 0, 114, 0, 0, 0, 1, 0,
426     0, 0, 4, 0, 0, 0, 15, 0, 0, 0, 115, 0, 0, 0, 1, 0, 0, 0, 80, 0, 0, 0, 17, 0, 0, 0, 135, 0, 0,
427     0, 0, 0, 0, 0, 0, 0, 0, 0, 18, 0, 0, 0, 135, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 19, 0, 0, 0, 135,
428     0, 0, 0, 176, 0, 0, 0, 176, 0, 0, 0, 20, 0, 0, 0, 135, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 21,
429     0, 0, 0, 135, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 109, 97, 110, 70, 73, 0, 0, 0, 0, 0, 0, 0, 0,
430     0, 0, 0, 118, 95, 116, 101, 120, 67, 111, 111, 114, 100, 0, 117, 95, 109, 111, 100, 117, 108,
431     97, 116, 105, 111, 110, 0, 117, 95, 116, 101, 120, 116, 117, 114, 101, 0, 0, 0, 0, 0, 0, 0,
432     2, 0, 0, 0, 0, 0, 0, 0, 220, 0, 0, 0, 0, 0, 0, 0, 11, 0, 0, 0, 82, 139, 0, 0, 1, 0, 0, 0, 1,
433     0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 24, 0, 0, 0, 94, 139, 0, 0, 1, 0, 0, 0, 1, 0, 0,
434     0, 2, 0, 0, 0, 16, 0, 0, 0, 0, 0, 0, 0, 5, 48, 0, 0, 0, 0, 0, 0, 3, 0, 0, 0, 0, 0, 0, 0, 0,
435     0, 0, 1, 118, 118, 17, 241, 0, 0, 0, 240, 0, 0, 0, 240, 0, 0, 0, 240, 0, 0, 0, 240, 0, 0, 0,
436     240, 0, 0, 0, 240, 0, 0, 0, 240, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 7, 0, 0, 0, 2, 0, 0, 0,
437     1, 0, 0, 0, 2, 0, 0, 0, 21, 32, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 24, 0, 0, 0, 16, 0, 0, 0, 16,
438     0, 0, 0, 0, 0, 0, 0, 2, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
439     0, 0, 0, 0, 65, 82, 50, 48, 45, 66, 73, 78, 1, 0, 0, 0, 2, 0, 0, 0, 2, 0, 65, 37, 0, 0, 0, 0,
440     8, 0, 129, 0, 1, 0, 0, 21, 0, 0, 0, 0, 2, 0, 1, 38, 1, 0, 0, 0, 0, 0, 0, 0, 2, 0, 4, 38, 186,
441     81, 78, 16, 2, 1, 0, 0, 2, 0, 1, 39, 0, 4, 0, 0, 0, 0, 0, 0, 2, 0, 1, 40, 1, 0, 0, 0, 5, 0,
442     0, 0, 16, 0, 4, 40, 40, 160, 1, 0, 0, 242, 1, 66, 8, 192, 1, 0, 0, 242, 1, 64, 104, 32, 1, 0,
443     0, 242, 1, 70, 72, 64, 1, 0, 0, 242, 1, 68, 154, 192, 0, 0, 37, 34, 64, 3, 8, 32, 0, 0, 5, 58,
444     208, 4, 40, 64, 0, 0, 5, 50, 208, 4, 72, 160, 0, 0, 37, 42, 208, 4, 2, 0, 6, 40, 0, 0, 0, 0,
445     0, 0, 0, 0, 2, 0, 1, 41, 0, 0, 0, 0, 5, 0, 2, 0
446 };
447
448 static const Uint8 GLES2_FragmentTegra_Additive_TextureSrc_[] = {
449     161, 234, 193, 234, 47, 109, 131, 38, 6, 0, 1, 0, 5, 0, 0, 0, 17, 0, 0, 0, 1, 0, 0, 0, 73, 0,
450     0, 0, 34, 0, 0, 0, 36, 0, 0, 0, 2, 0, 0, 0, 82, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 4, 0, 0, 0,
451     82, 0, 0, 0, 1, 0, 0, 0, 20, 0, 0, 0, 6, 0, 0, 0, 87, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 7, 0,
452     0, 0, 87, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 8, 0, 0, 0, 87, 0, 0, 0, 2, 0, 0, 0, 56, 0, 0, 0,
453     13, 0, 0, 0, 101, 0, 0, 0, 4, 0, 0, 0, 16, 0, 0, 0, 14, 0, 0, 0, 105, 0, 0, 0, 1, 0, 0, 0, 4,
454     0, 0, 0, 22, 0, 0, 0, 106, 0, 0, 0, 8, 0, 0, 0, 32, 0, 0, 0, 23, 0, 0, 0, 114, 0, 0, 0, 1, 0,
455     0, 0, 4, 0, 0, 0, 15, 0, 0, 0, 115, 0, 0, 0, 1, 0, 0, 0, 80, 0, 0, 0, 17, 0, 0, 0, 135, 0, 0,
456     0, 0, 0, 0, 0, 0, 0, 0, 0, 18, 0, 0, 0, 135, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 19, 0, 0, 0, 135,
457     0, 0, 0, 176, 0, 0, 0, 176, 0, 0, 0, 20, 0, 0, 0, 135, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 21,
458     0, 0, 0, 135, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 109, 97, 110, 70, 73, 0, 0, 0, 0, 0, 0, 0, 0,
459     0, 0, 0, 118, 95, 116, 101, 120, 67, 111, 111, 114, 100, 0, 117, 95, 109, 111, 100, 117, 108,
460     97, 116, 105, 111, 110, 0, 117, 95, 116, 101, 120, 116, 117, 114, 101, 0, 0, 0, 0, 0, 0, 0,
461     2, 0, 0, 0, 0, 0, 0, 0, 220, 0, 0, 0, 0, 0, 0, 0, 11, 0, 0, 0, 82, 139, 0, 0, 1, 0, 0, 0, 1,
462     0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 24, 0, 0, 0, 94, 139, 0, 0, 1, 0, 0, 0, 1, 0, 0,
463     0, 2, 0, 0, 0, 16, 0, 0, 0, 0, 0, 0, 0, 5, 48, 0, 0, 0, 0, 0, 0, 3, 0, 0, 0, 0, 0, 0, 0, 0,
464     0, 0, 1, 22, 22, 17, 241, 0, 0, 0, 240, 0, 0, 0, 240, 0, 0, 0, 240, 0, 0, 0, 240, 0, 0, 0, 240,
465     0, 0, 0, 240, 0, 0, 0, 240, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 7, 0, 0, 0, 2, 0, 0, 0, 1, 0,
466     0, 0, 2, 0, 0, 0, 21, 32, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 24, 0, 0, 0, 16, 0, 0, 0, 16, 0, 0,
467     0, 0, 0, 0, 0, 2, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
468     0, 0, 65, 82, 50, 48, 45, 66, 73, 78, 1, 0, 0, 0, 2, 0, 0, 0, 2, 0, 65, 37, 0, 0, 0, 0, 8, 0,
469     129, 0, 1, 0, 0, 21, 0, 0, 0, 0, 2, 0, 1, 38, 1, 0, 0, 0, 0, 0, 0, 0, 2, 0, 4, 38, 186, 81,
470     78, 16, 2, 1, 0, 0, 2, 0, 1, 39, 0, 4, 0, 0, 0, 0, 0, 0, 2, 0, 1, 40, 1, 0, 0, 0, 5, 0, 0, 0,
471     16, 0, 4, 40, 40, 160, 1, 0, 0, 242, 1, 66, 104, 32, 1, 0, 0, 242, 1, 70, 8, 192, 1, 0, 0, 242,
472     1, 64, 72, 64, 1, 0, 0, 242, 1, 68, 136, 192, 0, 0, 0, 26, 64, 4, 136, 32, 0, 0, 0, 2, 64, 7,
473     136, 64, 0, 0, 0, 10, 64, 6, 136, 160, 0, 0, 0, 18, 64, 5, 2, 0, 6, 40, 0, 0, 0, 0, 0, 0, 0,
474     0, 2, 0, 1, 41, 0, 0, 0, 0, 5, 0, 2, 0
475 };
476
477 static const Uint8 GLES2_FragmentTegra_Modulated_TextureSrc_[] = {
478     75, 132, 201, 227, 47, 109, 131, 38, 6, 0, 1, 0, 5, 0, 0, 0, 17, 0, 0, 0, 1, 0, 0, 0, 73, 0,
479     0, 0, 34, 0, 0, 0, 36, 0, 0, 0, 2, 0, 0, 0, 82, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 4, 0, 0, 0,
480     82, 0, 0, 0, 1, 0, 0, 0, 20, 0, 0, 0, 6, 0, 0, 0, 87, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 7, 0,
481     0, 0, 87, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 8, 0, 0, 0, 87, 0, 0, 0, 2, 0, 0, 0, 56, 0, 0, 0,
482     13, 0, 0, 0, 101, 0, 0, 0, 4, 0, 0, 0, 16, 0, 0, 0, 14, 0, 0, 0, 105, 0, 0, 0, 1, 0, 0, 0, 4,
483     0, 0, 0, 22, 0, 0, 0, 106, 0, 0, 0, 8, 0, 0, 0, 32, 0, 0, 0, 23, 0, 0, 0, 114, 0, 0, 0, 1, 0,
484     0, 0, 4, 0, 0, 0, 15, 0, 0, 0, 115, 0, 0, 0, 1, 0, 0, 0, 80, 0, 0, 0, 17, 0, 0, 0, 135, 0, 0,
485     0, 0, 0, 0, 0, 0, 0, 0, 0, 18, 0, 0, 0, 135, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 19, 0, 0, 0, 135,
486     0, 0, 0, 176, 0, 0, 0, 176, 0, 0, 0, 20, 0, 0, 0, 135, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 21,
487     0, 0, 0, 135, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 109, 97, 110, 70, 73, 0, 0, 0, 0, 0, 0, 0, 0,
488     0, 0, 0, 118, 95, 116, 101, 120, 67, 111, 111, 114, 100, 0, 117, 95, 109, 111, 100, 117, 108,
489     97, 116, 105, 111, 110, 0, 117, 95, 116, 101, 120, 116, 117, 114, 101, 0, 0, 0, 0, 0, 0, 0,
490     2, 0, 0, 0, 0, 0, 0, 0, 220, 0, 0, 0, 0, 0, 0, 0, 11, 0, 0, 0, 82, 139, 0, 0, 1, 0, 0, 0, 1,
491     0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 24, 0, 0, 0, 94, 139, 0, 0, 1, 0, 0, 0, 1, 0, 0,
492     0, 2, 0, 0, 0, 16, 0, 0, 0, 0, 0, 0, 0, 5, 48, 0, 0, 0, 0, 0, 0, 3, 0, 0, 0, 0, 0, 0, 0, 0,
493     0, 0, 1, 32, 32, 17, 241, 0, 0, 0, 240, 0, 0, 0, 240, 0, 0, 0, 240, 0, 0, 0, 240, 0, 0, 0, 240,
494     0, 0, 0, 240, 0, 0, 0, 240, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 7, 0, 0, 0, 2, 0, 0, 0, 1, 0,
495     0, 0, 2, 0, 0, 0, 21, 32, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 24, 0, 0, 0, 16, 0, 0, 0, 16, 0, 0,
496     0, 0, 0, 0, 0, 2, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
497     0, 0, 65, 82, 50, 48, 45, 66, 73, 78, 1, 0, 0, 0, 2, 0, 0, 0, 2, 0, 65, 37, 0, 0, 0, 0, 8, 0,
498     129, 0, 1, 0, 0, 21, 0, 0, 0, 0, 2, 0, 1, 38, 1, 0, 0, 0, 0, 0, 0, 0, 2, 0, 4, 38, 186, 81,
499     78, 16, 2, 1, 0, 0, 2, 0, 1, 39, 0, 4, 0, 0, 0, 0, 0, 0, 2, 0, 1, 40, 1, 0, 0, 0, 5, 0, 0, 0,
500     16, 0, 4, 40, 40, 160, 1, 0, 0, 242, 1, 66, 8, 192, 1, 0, 0, 242, 1, 64, 104, 32, 1, 0, 0, 242,
501     1, 70, 72, 64, 1, 0, 0, 242, 1, 68, 104, 192, 0, 0, 0, 242, 65, 4, 232, 32, 0, 0, 0, 242, 65,
502     0, 40, 64, 0, 0, 0, 242, 65, 6, 72, 160, 0, 0, 0, 242, 65, 5, 2, 0, 6, 40, 0, 0, 0, 0, 0, 0,
503     0, 0, 2, 0, 1, 41, 0, 0, 0, 0, 5, 0, 2, 0
504 };
505
506 static const GLES2_ShaderInstance GLES2_VertexTegra_Default = {
507     GL_VERTEX_SHADER,
508     GL_NVIDIA_PLATFORM_BINARY_NV,
509     sizeof(GLES2_VertexTegra_Default_),
510     GLES2_VertexTegra_Default_
511 };
512
513 static const GLES2_ShaderInstance GLES2_FragmentTegra_None_SolidSrc = {
514     GL_FRAGMENT_SHADER,
515     GL_NVIDIA_PLATFORM_BINARY_NV,
516     sizeof(GLES2_FragmentTegra_None_SolidSrc_),
517     GLES2_FragmentTegra_None_SolidSrc_
518 };
519
520 static const GLES2_ShaderInstance GLES2_FragmentTegra_Alpha_SolidSrc = {
521     GL_FRAGMENT_SHADER,
522     GL_NVIDIA_PLATFORM_BINARY_NV,
523     sizeof(GLES2_FragmentTegra_Alpha_SolidSrc_),
524     GLES2_FragmentTegra_Alpha_SolidSrc_
525 };
526
527 static const GLES2_ShaderInstance GLES2_FragmentTegra_Additive_SolidSrc = {
528     GL_FRAGMENT_SHADER,
529     GL_NVIDIA_PLATFORM_BINARY_NV,
530     sizeof(GLES2_FragmentTegra_Additive_SolidSrc_),
531     GLES2_FragmentTegra_Additive_SolidSrc_
532 };
533
534 static const GLES2_ShaderInstance GLES2_FragmentTegra_Modulated_SolidSrc = {
535     GL_FRAGMENT_SHADER,
536     GL_NVIDIA_PLATFORM_BINARY_NV,
537     sizeof(GLES2_FragmentTegra_Modulated_SolidSrc_),
538     GLES2_FragmentTegra_Modulated_SolidSrc_
539 };
540
541 static const GLES2_ShaderInstance GLES2_FragmentTegra_None_TextureSrc = {
542     GL_FRAGMENT_SHADER,
543     GL_NVIDIA_PLATFORM_BINARY_NV,
544     sizeof(GLES2_FragmentTegra_None_TextureSrc_),
545     GLES2_FragmentTegra_None_TextureSrc_
546 };
547
548 static const GLES2_ShaderInstance GLES2_FragmentTegra_Alpha_TextureSrc = {
549     GL_FRAGMENT_SHADER,
550     GL_NVIDIA_PLATFORM_BINARY_NV,
551     sizeof(GLES2_FragmentTegra_Alpha_TextureSrc_),
552     GLES2_FragmentTegra_Alpha_TextureSrc_
553 };
554
555 static const GLES2_ShaderInstance GLES2_FragmentTegra_Additive_TextureSrc = {
556     GL_FRAGMENT_SHADER,
557     GL_NVIDIA_PLATFORM_BINARY_NV,
558     sizeof(GLES2_FragmentTegra_Additive_TextureSrc_),
559     GLES2_FragmentTegra_Additive_TextureSrc_
560 };
561
562 static const GLES2_ShaderInstance GLES2_FragmentTegra_Modulated_TextureSrc = {
563     GL_FRAGMENT_SHADER,
564     GL_NVIDIA_PLATFORM_BINARY_NV,
565     sizeof(GLES2_FragmentTegra_Modulated_TextureSrc_),
566     GLES2_FragmentTegra_Modulated_TextureSrc_
567 };
568
569 #endif /* GLES2_INCLUDE_NVIDIA_SHADERS */
570
571 /*************************************************************************************************
572  * Vertex/fragment shader definitions                                                            *
573  *************************************************************************************************/
574
575 static GLES2_Shader GLES2_VertexShader_Default = {
576 #if GLES2_INCLUDE_NVIDIA_SHADERS
577     2,
578 #else
579     1,
580 #endif
581     {
582 #if GLES2_INCLUDE_NVIDIA_SHADERS
583         &GLES2_VertexTegra_Default,
584 #endif
585         &GLES2_VertexSrc_Default
586     }
587 };
588
589 static GLES2_Shader GLES2_FragmentShader_None_SolidSrc = {
590 #if GLES2_INCLUDE_NVIDIA_SHADERS
591     2,
592 #else
593     1,
594 #endif
595     {
596 #if GLES2_INCLUDE_NVIDIA_SHADERS
597         &GLES2_FragmentTegra_None_SolidSrc,
598 #endif
599         &GLES2_FragmentSrc_SolidSrc
600     }
601 };
602
603 static GLES2_Shader GLES2_FragmentShader_Alpha_SolidSrc = {
604 #if GLES2_INCLUDE_NVIDIA_SHADERS
605     2,
606 #else
607     1,
608 #endif
609     {
610 #if GLES2_INCLUDE_NVIDIA_SHADERS
611         &GLES2_FragmentTegra_Alpha_SolidSrc,
612 #endif
613         &GLES2_FragmentSrc_SolidSrc
614     }
615 };
616
617 static GLES2_Shader GLES2_FragmentShader_Additive_SolidSrc = {
618 #if GLES2_INCLUDE_NVIDIA_SHADERS
619     2,
620 #else
621     1,
622 #endif
623     {
624 #if GLES2_INCLUDE_NVIDIA_SHADERS
625         &GLES2_FragmentTegra_Additive_SolidSrc,
626 #endif
627         &GLES2_FragmentSrc_SolidSrc
628     }
629 };
630
631 static GLES2_Shader GLES2_FragmentShader_Modulated_SolidSrc = {
632 #if GLES2_INCLUDE_NVIDIA_SHADERS
633     2,
634 #else
635     1,
636 #endif
637     {
638 #if GLES2_INCLUDE_NVIDIA_SHADERS
639         &GLES2_FragmentTegra_Modulated_SolidSrc,
640 #endif
641         &GLES2_FragmentSrc_SolidSrc
642     }
643 };
644
645 static GLES2_Shader GLES2_FragmentShader_None_TextureABGRSrc = {
646 #if GLES2_INCLUDE_NVIDIA_SHADERS
647     2,
648 #else
649     1,
650 #endif
651     {
652 #if GLES2_INCLUDE_NVIDIA_SHADERS
653         &GLES2_FragmentTegra_None_TextureSrc,
654 #endif
655         &GLES2_FragmentSrc_TextureABGRSrc
656     }
657 };
658
659 static GLES2_Shader GLES2_FragmentShader_Alpha_TextureABGRSrc = {
660 #if GLES2_INCLUDE_NVIDIA_SHADERS
661     2,
662 #else
663     1,
664 #endif
665     {
666 #if GLES2_INCLUDE_NVIDIA_SHADERS
667         &GLES2_FragmentTegra_Alpha_TextureSrc,
668 #endif
669         &GLES2_FragmentSrc_TextureABGRSrc
670     }
671 };
672
673 static GLES2_Shader GLES2_FragmentShader_Additive_TextureABGRSrc = {
674 #if GLES2_INCLUDE_NVIDIA_SHADERS
675     2,
676 #else
677     1,
678 #endif
679     {
680 #if GLES2_INCLUDE_NVIDIA_SHADERS
681         &GLES2_FragmentTegra_Additive_TextureSrc,
682 #endif
683         &GLES2_FragmentSrc_TextureABGRSrc
684     }
685 };
686
687 static GLES2_Shader GLES2_FragmentShader_Modulated_TextureABGRSrc = {
688 #if GLES2_INCLUDE_NVIDIA_SHADERS
689     2,
690 #else
691     1,
692 #endif
693     {
694 #if GLES2_INCLUDE_NVIDIA_SHADERS
695         &GLES2_FragmentTegra_Modulated_TextureSrc,
696 #endif
697         &GLES2_FragmentSrc_TextureABGRSrc
698     }
699 };
700
701 static GLES2_Shader GLES2_FragmentShader_None_TextureARGBSrc = {
702     1,
703     {
704         &GLES2_FragmentSrc_TextureARGBSrc
705     }
706 };
707
708 static GLES2_Shader GLES2_FragmentShader_Alpha_TextureARGBSrc = {
709     1,
710     {
711         &GLES2_FragmentSrc_TextureARGBSrc
712     }
713 };
714
715 static GLES2_Shader GLES2_FragmentShader_Additive_TextureARGBSrc = {
716     1,
717     {
718         &GLES2_FragmentSrc_TextureARGBSrc
719     }
720 };
721
722 static GLES2_Shader GLES2_FragmentShader_Modulated_TextureARGBSrc = {
723     1,
724     {
725         &GLES2_FragmentSrc_TextureARGBSrc
726     }
727 };
728
729 static GLES2_Shader GLES2_FragmentShader_None_TextureRGBSrc = {
730     1,
731     {
732         &GLES2_FragmentSrc_TextureRGBSrc
733     }
734 };
735
736 static GLES2_Shader GLES2_FragmentShader_Alpha_TextureRGBSrc = {
737     1,
738     {
739         &GLES2_FragmentSrc_TextureRGBSrc
740     }
741 };
742
743 static GLES2_Shader GLES2_FragmentShader_Additive_TextureRGBSrc = {
744     1,
745     {
746         &GLES2_FragmentSrc_TextureRGBSrc
747     }
748 };
749
750 static GLES2_Shader GLES2_FragmentShader_Modulated_TextureRGBSrc = {
751     1,
752     {
753         &GLES2_FragmentSrc_TextureRGBSrc
754     }
755 };
756
757 static GLES2_Shader GLES2_FragmentShader_None_TextureBGRSrc = {
758     1,
759     {
760         &GLES2_FragmentSrc_TextureBGRSrc
761     }
762 };
763
764 static GLES2_Shader GLES2_FragmentShader_Alpha_TextureBGRSrc = {
765     1,
766     {
767         &GLES2_FragmentSrc_TextureBGRSrc
768     }
769 };
770
771 static GLES2_Shader GLES2_FragmentShader_Additive_TextureBGRSrc = {
772     1,
773     {
774         &GLES2_FragmentSrc_TextureBGRSrc
775     }
776 };
777
778 static GLES2_Shader GLES2_FragmentShader_Modulated_TextureBGRSrc = {
779     1,
780     {
781         &GLES2_FragmentSrc_TextureBGRSrc
782     }
783 };
784
785 static GLES2_Shader GLES2_FragmentShader_TextureYUVSrc = {
786     1,
787     {
788         &GLES2_FragmentSrc_TextureYUVSrc
789     }
790 };
791
792 static GLES2_Shader GLES2_FragmentShader_TextureNV12Src = {
793     1,
794     {
795         &GLES2_FragmentSrc_TextureNV12Src
796     }
797 };
798
799 static GLES2_Shader GLES2_FragmentShader_TextureNV21Src = {
800     1,
801     {
802         &GLES2_FragmentSrc_TextureNV21Src
803     }
804 };
805
806
807 /*************************************************************************************************
808  * Shader selector                                                                               *
809  *************************************************************************************************/
810
811 const GLES2_Shader *GLES2_GetShader(GLES2_ShaderType type, SDL_BlendMode blendMode)
812 {
813     switch (type) {
814     case GLES2_SHADER_VERTEX_DEFAULT:
815         return &GLES2_VertexShader_Default;
816     case GLES2_SHADER_FRAGMENT_SOLID_SRC:
817     switch (blendMode) {
818     case SDL_BLENDMODE_NONE:
819         return &GLES2_FragmentShader_None_SolidSrc;
820     case SDL_BLENDMODE_BLEND:
821         return &GLES2_FragmentShader_Alpha_SolidSrc;
822     case SDL_BLENDMODE_ADD:
823         return &GLES2_FragmentShader_Additive_SolidSrc;
824     case SDL_BLENDMODE_MOD:
825         return &GLES2_FragmentShader_Modulated_SolidSrc;
826     default:
827         return NULL;
828     }
829     case GLES2_SHADER_FRAGMENT_TEXTURE_ABGR_SRC:
830         switch (blendMode) {
831         case SDL_BLENDMODE_NONE:
832             return &GLES2_FragmentShader_None_TextureABGRSrc;
833         case SDL_BLENDMODE_BLEND:
834             return &GLES2_FragmentShader_Alpha_TextureABGRSrc;
835         case SDL_BLENDMODE_ADD:
836             return &GLES2_FragmentShader_Additive_TextureABGRSrc;
837         case SDL_BLENDMODE_MOD:
838             return &GLES2_FragmentShader_Modulated_TextureABGRSrc;
839         default:
840             return NULL;
841     }
842     case GLES2_SHADER_FRAGMENT_TEXTURE_ARGB_SRC:
843         switch (blendMode) {
844         case SDL_BLENDMODE_NONE:
845             return &GLES2_FragmentShader_None_TextureARGBSrc;
846         case SDL_BLENDMODE_BLEND:
847             return &GLES2_FragmentShader_Alpha_TextureARGBSrc;
848         case SDL_BLENDMODE_ADD:
849             return &GLES2_FragmentShader_Additive_TextureARGBSrc;
850         case SDL_BLENDMODE_MOD:
851             return &GLES2_FragmentShader_Modulated_TextureARGBSrc;
852         default:
853             return NULL;
854     }
855
856     case GLES2_SHADER_FRAGMENT_TEXTURE_RGB_SRC:
857         switch (blendMode) {
858         case SDL_BLENDMODE_NONE:
859             return &GLES2_FragmentShader_None_TextureRGBSrc;
860         case SDL_BLENDMODE_BLEND:
861             return &GLES2_FragmentShader_Alpha_TextureRGBSrc;
862         case SDL_BLENDMODE_ADD:
863             return &GLES2_FragmentShader_Additive_TextureRGBSrc;
864         case SDL_BLENDMODE_MOD:
865             return &GLES2_FragmentShader_Modulated_TextureRGBSrc;
866         default:
867             return NULL;
868     }
869
870     case GLES2_SHADER_FRAGMENT_TEXTURE_BGR_SRC:
871         switch (blendMode) {
872         case SDL_BLENDMODE_NONE:
873             return &GLES2_FragmentShader_None_TextureBGRSrc;
874         case SDL_BLENDMODE_BLEND:
875             return &GLES2_FragmentShader_Alpha_TextureBGRSrc;
876         case SDL_BLENDMODE_ADD:
877             return &GLES2_FragmentShader_Additive_TextureBGRSrc;
878         case SDL_BLENDMODE_MOD:
879             return &GLES2_FragmentShader_Modulated_TextureBGRSrc;
880         default:
881             return NULL;
882     }
883     
884     case GLES2_SHADER_FRAGMENT_TEXTURE_YUV_SRC:
885     {
886         return &GLES2_FragmentShader_TextureYUVSrc;
887     }
888
889     case GLES2_SHADER_FRAGMENT_TEXTURE_NV12_SRC:
890     {
891         return &GLES2_FragmentShader_TextureNV12Src;
892     }
893
894     case GLES2_SHADER_FRAGMENT_TEXTURE_NV21_SRC:
895     {
896         return &GLES2_FragmentShader_TextureNV21Src;
897     }
898
899     default:
900         return NULL;
901     }
902 }
903
904 #endif /* SDL_VIDEO_RENDER_OGL_ES2 && !SDL_RENDER_DISABLED */
905
906 /* vi: set ts=4 sw=4 expandtab: */