diff --git a/src/render/opengles2/SDL_gles2funcs.h b/src/render/opengles2/SDL_gles2funcs.h
index a4999d4..ac750b9 100644
--- a/src/render/opengles2/SDL_gles2funcs.h
+++ b/src/render/opengles2/SDL_gles2funcs.h
@@ -41,7 +41,6 @@
 SDL_PROC(void, glFinish, (void))
 SDL_PROC(void, glGenFramebuffers, (GLsizei, GLuint *))
 SDL_PROC(void, glGenTextures, (GLsizei, GLuint *))
-SDL_PROC(void, glGetBooleanv, (GLenum, GLboolean *))
 SDL_PROC(const GLubyte *, glGetString, (GLenum))
 SDL_PROC(GLenum, glGetError, (void))
 SDL_PROC(void, glGetIntegerv, (GLenum, GLint *))
diff --git a/src/render/opengles2/SDL_render_gles2.c b/src/render/opengles2/SDL_render_gles2.c
index 20743fe..f36b34f 100644
--- a/src/render/opengles2/SDL_render_gles2.c
+++ b/src/render/opengles2/SDL_render_gles2.c
@@ -68,27 +68,11 @@
     GLES2_FBOList *fbo;
 } GLES2_TextureData;
 
-typedef struct GLES2_ShaderCacheEntry
-{
-    GLuint id;
-    GLES2_ShaderType type;
-    const GLES2_ShaderInstance *instance;
-    int references;
-    struct GLES2_ShaderCacheEntry *prev;
-    struct GLES2_ShaderCacheEntry *next;
-} GLES2_ShaderCacheEntry;
-
-typedef struct GLES2_ShaderCache
-{
-    int count;
-    GLES2_ShaderCacheEntry *head;
-} GLES2_ShaderCache;
-
 typedef struct GLES2_ProgramCacheEntry
 {
     GLuint id;
-    GLES2_ShaderCacheEntry *vertex_shader;
-    GLES2_ShaderCacheEntry *fragment_shader;
+    GLuint vertex_shader;
+    GLuint fragment_shader;
     GLuint uniform_locations[16];
     Uint32 color;
     GLfloat projection[4][4];
@@ -167,9 +151,8 @@
     GLES2_FBOList *framebuffers;
     GLuint window_framebuffer;
 
-    int shader_format_count;
-    GLenum *shader_formats;
-    GLES2_ShaderCache shader_cache;
+    GLuint shader_id_cache[GLES2_SHADER_COUNT];
+
     GLES2_ProgramCache program_cache;
     Uint8 clear_r, clear_g, clear_b, clear_a;
 
@@ -395,32 +378,10 @@
 }
 
 
-static void
-GLES2_EvictShader(GLES2_RenderData *data, GLES2_ShaderCacheEntry *entry)
-{
-    /* Unlink the shader from the cache */
-    if (entry->next) {
-        entry->next->prev = entry->prev;
-    }
-    if (entry->prev) {
-        entry->prev->next = entry->next;
-    }
-    if (data->shader_cache.head == entry) {
-        data->shader_cache.head = entry->next;
-    }
-    --data->shader_cache.count;
-
-    /* Deallocate the shader */
-    data->glDeleteShader(entry->id);
-    SDL_free(entry);
-}
-
 static GLES2_ProgramCacheEntry *
-GLES2_CacheProgram(GLES2_RenderData *data, GLES2_ShaderCacheEntry *vertex,
-                   GLES2_ShaderCacheEntry *fragment)
+GLES2_CacheProgram(GLES2_RenderData *data, GLuint vertex, GLuint fragment)
 {
     GLES2_ProgramCacheEntry *entry;
-    GLES2_ShaderCacheEntry *shaderEntry;
     GLint linkSuccessful;
 
     /* Check if we've already cached this program */
@@ -458,8 +419,8 @@
 
     /* Create the program and link it */
     entry->id = data->glCreateProgram();
-    data->glAttachShader(entry->id, vertex->id);
-    data->glAttachShader(entry->id, fragment->id);
+    data->glAttachShader(entry->id, vertex);
+    data->glAttachShader(entry->id, fragment);
     data->glBindAttribLocation(entry->id, GLES2_ATTRIBUTE_POSITION, "a_position");
     data->glBindAttribLocation(entry->id, GLES2_ATTRIBUTE_TEXCOORD, "a_texCoord");
     data->glBindAttribLocation(entry->id, GLES2_ATTRIBUTE_ANGLE, "a_angle");
@@ -514,20 +475,8 @@
     data->program_cache.head = entry;
     ++data->program_cache.count;
 
-    /* Increment the refcount of the shaders we're using */
-    ++vertex->references;
-    ++fragment->references;
-
     /* Evict the last entry from the cache if we exceed the limit */
     if (data->program_cache.count > GLES2_MAX_CACHED_PROGRAMS) {
-        shaderEntry = data->program_cache.tail->vertex_shader;
-        if (--shaderEntry->references <= 0) {
-            GLES2_EvictShader(data, shaderEntry);
-        }
-        shaderEntry = data->program_cache.tail->fragment_shader;
-        if (--shaderEntry->references <= 0) {
-            GLES2_EvictShader(data, shaderEntry);
-        }
         data->glDeleteProgram(data->program_cache.tail->id);
         data->program_cache.tail = data->program_cache.tail->prev;
         if (data->program_cache.tail != NULL) {
@@ -539,80 +488,34 @@
     return entry;
 }
 
-static GLES2_ShaderCacheEntry *
-GLES2_CacheShader(GLES2_RenderData *data, GLES2_ShaderType type)
+static GLuint
+GLES2_CacheShader(GLES2_RenderData *data, GLES2_ShaderType type, GLenum shader_type)
 {
-    const GLES2_Shader *shader;
-    const GLES2_ShaderInstance *instance = NULL;
-    GLES2_ShaderCacheEntry *entry = NULL;
+    GLuint id;
     GLint compileSuccessful = GL_FALSE;
-    int i, j;
+    const Uint8 *shader_src = GLES2_GetShader(type);
 
-    /* Find the corresponding shader */
-    shader = GLES2_GetShader(type);
-    if (!shader) {
-        SDL_SetError("No shader matching the requested characteristics was found");
-        return NULL;
+    if (!shader_src) {
+        SDL_SetError("No shader src");
+        return 0;
     }
 
-    /* Find a matching shader instance that's supported on this hardware */
-    for (i = 0; i < shader->instance_count && !instance; ++i) {
-        for (j = 0; j < data->shader_format_count && !instance; ++j) {
-            if (!shader->instances[i]) {
-                continue;
-            }
-            if (shader->instances[i]->format != data->shader_formats[j]) {
-                continue;
-            }
-            instance = shader->instances[i];
-        }
-    }
-    if (!instance) {
-        SDL_SetError("The specified shader cannot be loaded on the current platform");
-        return NULL;
-    }
+    /* Compile */
+    id = data->glCreateShader(shader_type);
+    data->glShaderSource(id, 1, (const char**)&shader_src, NULL);
+    data->glCompileShader(id);
+    data->glGetShaderiv(id, GL_COMPILE_STATUS, &compileSuccessful);
 
-    /* Check if we've already cached this shader */
-    entry = data->shader_cache.head;
-    while (entry) {
-        if (entry->instance == instance) {
-            break;
-        }
-        entry = entry->next;
-    }
-    if (entry) {
-        return entry;
-    }
-
-    /* Create a shader cache entry */
-    entry = (GLES2_ShaderCacheEntry *)SDL_calloc(1, sizeof(GLES2_ShaderCacheEntry));
-    if (!entry) {
-        SDL_OutOfMemory();
-        return NULL;
-    }
-    entry->type = type;
-    entry->instance = instance;
-
-    /* Compile or load the selected shader instance */
-    entry->id = data->glCreateShader(instance->type);
-    if (instance->format == (GLenum)-1) {
-        data->glShaderSource(entry->id, 1, (const char **)(char *)&instance->data, NULL);
-        data->glCompileShader(entry->id);
-        data->glGetShaderiv(entry->id, GL_COMPILE_STATUS, &compileSuccessful);
-    } else {
-        data->glShaderBinary(1, &entry->id, instance->format, instance->data, instance->length);
-        compileSuccessful = GL_TRUE;
-    }
     if (!compileSuccessful) {
         SDL_bool isstack = SDL_FALSE;
         char *info = NULL;
         int length = 0;
 
-        data->glGetShaderiv(entry->id, GL_INFO_LOG_LENGTH, &length);
+        data->glGetShaderiv(id, GL_INFO_LOG_LENGTH, &length);
         if (length > 0) {
             info = SDL_small_alloc(char, length, &isstack);
             if (info) {
-                data->glGetShaderInfoLog(entry->id, length, &length, info);
+                data->glGetShaderInfoLog(id, length, &length, info);
             }
         }
         if (info) {
@@ -621,26 +524,21 @@
         } else {
             SDL_SetError("Failed to load the shader");
         }
-        data->glDeleteShader(entry->id);
-        SDL_free(entry);
-        return NULL;
+        data->glDeleteShader(id);
+        return 0;
     }
 
-    /* Link the shader entry in at the front of the cache */
-    if (data->shader_cache.head) {
-        entry->next = data->shader_cache.head;
-        data->shader_cache.head->prev = entry;
-    }
-    data->shader_cache.head = entry;
-    ++data->shader_cache.count;
-    return entry;
+    /* Cache */
+    data->shader_id_cache[(Uint32)type] = id;
+
+    return id;
 }
 
 static int
 GLES2_SelectProgram(GLES2_RenderData *data, GLES2_ImageSource source, int w, int h)
 {
-    GLES2_ShaderCacheEntry *vertex = NULL;
-    GLES2_ShaderCacheEntry *fragment = NULL;
+    GLuint vertex;
+    GLuint fragment;
     GLES2_ShaderType vtype, ftype;
     GLES2_ProgramCacheEntry *program;
 
@@ -648,30 +546,30 @@
     vtype = GLES2_SHADER_VERTEX_DEFAULT;
     switch (source) {
     case GLES2_IMAGESOURCE_SOLID:
-        ftype = GLES2_SHADER_FRAGMENT_SOLID_SRC;
+        ftype = GLES2_SHADER_FRAGMENT_SOLID;
         break;
     case GLES2_IMAGESOURCE_TEXTURE_ABGR:
-        ftype = GLES2_SHADER_FRAGMENT_TEXTURE_ABGR_SRC;
+        ftype = GLES2_SHADER_FRAGMENT_TEXTURE_ABGR;
         break;
     case GLES2_IMAGESOURCE_TEXTURE_ARGB:
-        ftype = GLES2_SHADER_FRAGMENT_TEXTURE_ARGB_SRC;
+        ftype = GLES2_SHADER_FRAGMENT_TEXTURE_ARGB;
         break;
     case GLES2_IMAGESOURCE_TEXTURE_RGB:
-        ftype = GLES2_SHADER_FRAGMENT_TEXTURE_RGB_SRC;
+        ftype = GLES2_SHADER_FRAGMENT_TEXTURE_RGB;
         break;
     case GLES2_IMAGESOURCE_TEXTURE_BGR:
-        ftype = GLES2_SHADER_FRAGMENT_TEXTURE_BGR_SRC;
+        ftype = GLES2_SHADER_FRAGMENT_TEXTURE_BGR;
         break;
     case GLES2_IMAGESOURCE_TEXTURE_YUV:
         switch (SDL_GetYUVConversionModeForResolution(w, h)) {
         case SDL_YUV_CONVERSION_JPEG:
-            ftype = GLES2_SHADER_FRAGMENT_TEXTURE_YUV_JPEG_SRC;
+            ftype = GLES2_SHADER_FRAGMENT_TEXTURE_YUV_JPEG;
             break;
         case SDL_YUV_CONVERSION_BT601:
-            ftype = GLES2_SHADER_FRAGMENT_TEXTURE_YUV_BT601_SRC;
+            ftype = GLES2_SHADER_FRAGMENT_TEXTURE_YUV_BT601;
             break;
         case SDL_YUV_CONVERSION_BT709:
-            ftype = GLES2_SHADER_FRAGMENT_TEXTURE_YUV_BT709_SRC;
+            ftype = GLES2_SHADER_FRAGMENT_TEXTURE_YUV_BT709;
             break;
         default:
             SDL_SetError("Unsupported YUV conversion mode: %d\n", SDL_GetYUVConversionModeForResolution(w, h));
@@ -681,13 +579,13 @@
     case GLES2_IMAGESOURCE_TEXTURE_NV12:
         switch (SDL_GetYUVConversionModeForResolution(w, h)) {
         case SDL_YUV_CONVERSION_JPEG:
-            ftype = GLES2_SHADER_FRAGMENT_TEXTURE_NV12_JPEG_SRC;
+            ftype = GLES2_SHADER_FRAGMENT_TEXTURE_NV12_JPEG;
             break;
         case SDL_YUV_CONVERSION_BT601:
-            ftype = GLES2_SHADER_FRAGMENT_TEXTURE_NV12_BT601_SRC;
+            ftype = GLES2_SHADER_FRAGMENT_TEXTURE_NV12_BT601;
             break;
         case SDL_YUV_CONVERSION_BT709:
-            ftype = GLES2_SHADER_FRAGMENT_TEXTURE_NV12_BT709_SRC;
+            ftype = GLES2_SHADER_FRAGMENT_TEXTURE_NV12_BT709;
             break;
         default:
             SDL_SetError("Unsupported YUV conversion mode: %d\n", SDL_GetYUVConversionModeForResolution(w, h));
@@ -697,13 +595,13 @@
     case GLES2_IMAGESOURCE_TEXTURE_NV21:
         switch (SDL_GetYUVConversionModeForResolution(w, h)) {
         case SDL_YUV_CONVERSION_JPEG:
-            ftype = GLES2_SHADER_FRAGMENT_TEXTURE_NV21_JPEG_SRC;
+            ftype = GLES2_SHADER_FRAGMENT_TEXTURE_NV21_JPEG;
             break;
         case SDL_YUV_CONVERSION_BT601:
-            ftype = GLES2_SHADER_FRAGMENT_TEXTURE_NV21_BT601_SRC;
+            ftype = GLES2_SHADER_FRAGMENT_TEXTURE_NV21_BT601;
             break;
         case SDL_YUV_CONVERSION_BT709:
-            ftype = GLES2_SHADER_FRAGMENT_TEXTURE_NV21_BT709_SRC;
+            ftype = GLES2_SHADER_FRAGMENT_TEXTURE_NV21_BT709;
             break;
         default:
             SDL_SetError("Unsupported YUV conversion mode: %d\n", SDL_GetYUVConversionModeForResolution(w, h));
@@ -711,20 +609,27 @@
         }
         break;
     case GLES2_IMAGESOURCE_TEXTURE_EXTERNAL_OES:
-        ftype = GLES2_SHADER_FRAGMENT_TEXTURE_EXTERNAL_OES_SRC;
+        ftype = GLES2_SHADER_FRAGMENT_TEXTURE_EXTERNAL_OES;
         break;
     default:
         goto fault;
     }
 
     /* Load the requested shaders */
-    vertex = GLES2_CacheShader(data, vtype);
+    vertex = data->shader_id_cache[(Uint32)vtype];
     if (!vertex) {
-        goto fault;
+        vertex = GLES2_CacheShader(data, vtype, GL_VERTEX_SHADER);
+        if (!vertex) {
+            goto fault;
+        }
     }
-    fragment = GLES2_CacheShader(data, ftype);
+
+    fragment = data->shader_id_cache[(Uint32)ftype];
     if (!fragment) {
-        goto fault;
+        fragment = GLES2_CacheShader(data, ftype, GL_FRAGMENT_SHADER);
+        if (!fragment) {
+            goto fault;
+        }
     }
 
     /* Check if we need to change programs at all */
@@ -749,12 +654,6 @@
     /* Clean up and return */
     return 0;
 fault:
-    if (vertex && vertex->references <= 0) {
-        GLES2_EvictShader(data, vertex);
-    }
-    if (fragment && fragment->references <= 0) {
-        GLES2_EvictShader(data, fragment);
-    }
     data->drawstate.program = NULL;
     return -1;
 }
@@ -907,7 +806,7 @@
                         const SDL_Rect * srcquad, const SDL_FRect * dstrect,
                         const double angle, const SDL_FPoint *center, const SDL_RendererFlip flip)
 {
-    /* render expects cos value - 1 (see GLES2_VertexSrc_Default_) */
+    /* render expects cos value - 1 (see GLES2_Vertex_Default) */
     const float radian_angle = (float)(M_PI * (360.0 - angle) / 180.0);
     const GLfloat s = (GLfloat) SDL_sin(radian_angle);
     const GLfloat c = (GLfloat) SDL_cos(radian_angle) - 1.0f;
@@ -1386,14 +1285,12 @@
         GLES2_ActivateRenderer(renderer);
 
         {
-            GLES2_ShaderCacheEntry *entry;
-            GLES2_ShaderCacheEntry *next;
-            entry = data->shader_cache.head;
-            while (entry) {
-                data->glDeleteShader(entry->id);
-                next = entry->next;
-                SDL_free(entry);
-                entry = next;
+            int i;
+            for (i = 0; i < GLES2_SHADER_COUNT; i++) {
+                GLuint id = data->shader_id_cache[i];
+                if (id) {
+                    data->glDeleteShader(id);
+                }
             }
         }
         {
@@ -1423,7 +1320,6 @@
             SDL_GL_DeleteContext(data->context);
         }
 
-        SDL_free(data->shader_formats);
         SDL_free(data);
     }
     SDL_free(renderer);
@@ -2029,20 +1925,11 @@
  * Renderer instantiation                                                                        *
  *************************************************************************************************/
 
-#ifdef ZUNE_HD
-#define GL_NVIDIA_PLATFORM_BINARY_NV 0x890B
-#endif
-
-
 static SDL_Renderer *
 GLES2_CreateRenderer(SDL_Window *window, Uint32 flags)
 {
     SDL_Renderer *renderer;
     GLES2_RenderData *data;
-    GLint nFormats;
-#ifndef ZUNE_HD
-    GLboolean hasCompiler;
-#endif
     Uint32 window_flags = 0; /* -Wconditional-uninitialized */
     GLint window_framebuffer;
     GLint value;
@@ -2144,33 +2031,6 @@
     data->glGetIntegerv(GL_MAX_TEXTURE_SIZE, &value);
     renderer->info.max_texture_height = value;
 
-    /* Determine supported shader formats */
-    /* HACK: glGetInteger is broken on the Zune HD's compositor, so we just hardcode this */
-#ifdef ZUNE_HD
-    nFormats = 1;
-#else /* !ZUNE_HD */
-    data->glGetIntegerv(GL_NUM_SHADER_BINARY_FORMATS, &nFormats);
-    data->glGetBooleanv(GL_SHADER_COMPILER, &hasCompiler);
-    if (hasCompiler) {
-        ++nFormats;
-    }
-#endif /* ZUNE_HD */
-    data->shader_formats = (GLenum *)SDL_calloc(nFormats, sizeof(GLenum));
-    if (!data->shader_formats) {
-        GLES2_DestroyRenderer(renderer);
-        SDL_OutOfMemory();
-        goto error;
-    }
-    data->shader_format_count = nFormats;
-#ifdef ZUNE_HD
-    data->shader_formats[0] = GL_NVIDIA_PLATFORM_BINARY_NV;
-#else /* !ZUNE_HD */
-    data->glGetIntegerv(GL_SHADER_BINARY_FORMATS, (GLint *)data->shader_formats);
-    if (hasCompiler) {
-        data->shader_formats[nFormats - 1] = (GLenum)-1;
-    }
-#endif /* ZUNE_HD */
-
     /* we keep a few of these and cycle through them, so data can live for a few frames. */
     data->glGenBuffers(SDL_arraysize(data->vertex_buffers), data->vertex_buffers);
 
diff --git a/src/render/opengles2/SDL_shaders_gles2.c b/src/render/opengles2/SDL_shaders_gles2.c
index ff6972e..f849276 100644
--- a/src/render/opengles2/SDL_shaders_gles2.c
+++ b/src/render/opengles2/SDL_shaders_gles2.c
@@ -36,7 +36,7 @@
      value is decremented by 1.0 to get proper output with 0.0 which is
      default value
 */
-static const Uint8 GLES2_VertexSrc_Default_[] = " \
+static const Uint8 GLES2_Vertex_Default[] = " \
     uniform mat4 u_projection; \
     attribute vec2 a_position; \
     attribute vec2 a_texCoord; \
@@ -56,7 +56,7 @@
     } \
 ";
 
-static const Uint8 GLES2_FragmentSrc_SolidSrc_[] = " \
+static const Uint8 GLES2_Fragment_Solid[] = " \
     precision mediump float; \
     uniform vec4 u_color; \
     \
@@ -66,7 +66,7 @@
     } \
 ";
 
-static const Uint8 GLES2_FragmentSrc_TextureABGRSrc_[] = " \
+static const Uint8 GLES2_Fragment_TextureABGR[] = " \
     precision mediump float; \
     uniform sampler2D u_texture; \
     uniform vec4 u_color; \
@@ -80,7 +80,7 @@
 ";
 
 /* ARGB to ABGR conversion */
-static const Uint8 GLES2_FragmentSrc_TextureARGBSrc_[] = " \
+static const Uint8 GLES2_Fragment_TextureARGB[] = " \
     precision mediump float; \
     uniform sampler2D u_texture; \
     uniform vec4 u_color; \
@@ -97,7 +97,7 @@
 ";
 
 /* RGB to ABGR conversion */
-static const Uint8 GLES2_FragmentSrc_TextureRGBSrc_[] = " \
+static const Uint8 GLES2_Fragment_TextureRGB[] = " \
     precision mediump float; \
     uniform sampler2D u_texture; \
     uniform vec4 u_color; \
@@ -115,7 +115,7 @@
 ";
 
 /* BGR to ABGR conversion */
-static const Uint8 GLES2_FragmentSrc_TextureBGRSrc_[] = " \
+static const Uint8 GLES2_Fragment_TextureBGR[] = " \
     precision mediump float; \
     uniform sampler2D u_texture; \
     uniform vec4 u_color; \
@@ -229,58 +229,58 @@
 "}"                                                             \
 
 /* YUV to ABGR conversion */
-static const Uint8 GLES2_FragmentSrc_TextureYUVJPEGSrc_[] = \
+static const Uint8 GLES2_Fragment_TextureYUVJPEG[] = \
         YUV_SHADER_PROLOGUE \
         JPEG_SHADER_CONSTANTS \
         YUV_SHADER_BODY \
 ;
-static const Uint8 GLES2_FragmentSrc_TextureYUVBT601Src_[] = \
+static const Uint8 GLES2_Fragment_TextureYUVBT601[] = \
         YUV_SHADER_PROLOGUE \
         BT601_SHADER_CONSTANTS \
         YUV_SHADER_BODY \
 ;
-static const Uint8 GLES2_FragmentSrc_TextureYUVBT709Src_[] = \
+static const Uint8 GLES2_Fragment_TextureYUVBT709[] = \
         YUV_SHADER_PROLOGUE \
         BT709_SHADER_CONSTANTS \
         YUV_SHADER_BODY \
 ;
 
 /* NV12 to ABGR conversion */
-static const Uint8 GLES2_FragmentSrc_TextureNV12JPEGSrc_[] = \
+static const Uint8 GLES2_Fragment_TextureNV12JPEG[] = \
         YUV_SHADER_PROLOGUE \
         JPEG_SHADER_CONSTANTS \
         NV12_SHADER_BODY \
 ;
-static const Uint8 GLES2_FragmentSrc_TextureNV12BT601Src_[] = \
+static const Uint8 GLES2_Fragment_TextureNV12BT601[] = \
         YUV_SHADER_PROLOGUE \
         BT601_SHADER_CONSTANTS \
         NV12_SHADER_BODY \
 ;
-static const Uint8 GLES2_FragmentSrc_TextureNV12BT709Src_[] = \
+static const Uint8 GLES2_Fragment_TextureNV12BT709[] = \
         YUV_SHADER_PROLOGUE \
         BT709_SHADER_CONSTANTS \
         NV12_SHADER_BODY \
 ;
 
 /* NV21 to ABGR conversion */
-static const Uint8 GLES2_FragmentSrc_TextureNV21JPEGSrc_[] = \
+static const Uint8 GLES2_Fragment_TextureNV21JPEG[] = \
         YUV_SHADER_PROLOGUE \
         JPEG_SHADER_CONSTANTS \
         NV21_SHADER_BODY \
 ;
-static const Uint8 GLES2_FragmentSrc_TextureNV21BT601Src_[] = \
+static const Uint8 GLES2_Fragment_TextureNV21BT601[] = \
         YUV_SHADER_PROLOGUE \
         BT601_SHADER_CONSTANTS \
         NV21_SHADER_BODY \
 ;
-static const Uint8 GLES2_FragmentSrc_TextureNV21BT709Src_[] = \
+static const Uint8 GLES2_Fragment_TextureNV21BT709[] = \
         YUV_SHADER_PROLOGUE \
         BT709_SHADER_CONSTANTS \
         NV21_SHADER_BODY \
 ;
 
 /* Custom Android video format texture */
-static const Uint8 GLES2_FragmentSrc_TextureExternalOESSrc_[] = " \
+static const Uint8 GLES2_Fragment_TextureExternalOES[] = " \
     #extension GL_OES_EGL_image_external : require\n\
     precision mediump float; \
     uniform samplerExternalOES u_texture; \
@@ -294,275 +294,46 @@
     } \
 ";
 
-static const GLES2_ShaderInstance GLES2_VertexSrc_Default = {
-    GL_VERTEX_SHADER,
-    GLES2_SOURCE_SHADER,
-    sizeof(GLES2_VertexSrc_Default_),
-    GLES2_VertexSrc_Default_
-};
-
-static const GLES2_ShaderInstance GLES2_FragmentSrc_SolidSrc = {
-    GL_FRAGMENT_SHADER,
-    GLES2_SOURCE_SHADER,
-    sizeof(GLES2_FragmentSrc_SolidSrc_),
-    GLES2_FragmentSrc_SolidSrc_
-};
-
-static const GLES2_ShaderInstance GLES2_FragmentSrc_TextureABGRSrc = {
-    GL_FRAGMENT_SHADER,
-    GLES2_SOURCE_SHADER,
-    sizeof(GLES2_FragmentSrc_TextureABGRSrc_),
-    GLES2_FragmentSrc_TextureABGRSrc_
-};
-
-static const GLES2_ShaderInstance GLES2_FragmentSrc_TextureARGBSrc = {
-    GL_FRAGMENT_SHADER,
-    GLES2_SOURCE_SHADER,
-    sizeof(GLES2_FragmentSrc_TextureARGBSrc_),
-    GLES2_FragmentSrc_TextureARGBSrc_
-};
-
-static const GLES2_ShaderInstance GLES2_FragmentSrc_TextureRGBSrc = {
-    GL_FRAGMENT_SHADER,
-    GLES2_SOURCE_SHADER,
-    sizeof(GLES2_FragmentSrc_TextureRGBSrc_),
-    GLES2_FragmentSrc_TextureRGBSrc_
-};
-
-static const GLES2_ShaderInstance GLES2_FragmentSrc_TextureBGRSrc = {
-    GL_FRAGMENT_SHADER,
-    GLES2_SOURCE_SHADER,
-    sizeof(GLES2_FragmentSrc_TextureBGRSrc_),
-    GLES2_FragmentSrc_TextureBGRSrc_
-};
-
-static const GLES2_ShaderInstance GLES2_FragmentSrc_TextureYUVJPEGSrc = {
-    GL_FRAGMENT_SHADER,
-    GLES2_SOURCE_SHADER,
-    sizeof(GLES2_FragmentSrc_TextureYUVJPEGSrc_),
-    GLES2_FragmentSrc_TextureYUVJPEGSrc_
-};
-
-static const GLES2_ShaderInstance GLES2_FragmentSrc_TextureYUVBT601Src = {
-    GL_FRAGMENT_SHADER,
-    GLES2_SOURCE_SHADER,
-    sizeof(GLES2_FragmentSrc_TextureYUVBT601Src_),
-    GLES2_FragmentSrc_TextureYUVBT601Src_
-};
-
-static const GLES2_ShaderInstance GLES2_FragmentSrc_TextureYUVBT709Src = {
-    GL_FRAGMENT_SHADER,
-    GLES2_SOURCE_SHADER,
-    sizeof(GLES2_FragmentSrc_TextureYUVBT709Src_),
-    GLES2_FragmentSrc_TextureYUVBT709Src_
-};
-
-static const GLES2_ShaderInstance GLES2_FragmentSrc_TextureNV12JPEGSrc = {
-    GL_FRAGMENT_SHADER,
-    GLES2_SOURCE_SHADER,
-    sizeof(GLES2_FragmentSrc_TextureNV12JPEGSrc_),
-    GLES2_FragmentSrc_TextureNV12JPEGSrc_
-};
-
-static const GLES2_ShaderInstance GLES2_FragmentSrc_TextureNV12BT601Src = {
-    GL_FRAGMENT_SHADER,
-    GLES2_SOURCE_SHADER,
-    sizeof(GLES2_FragmentSrc_TextureNV12BT601Src_),
-    GLES2_FragmentSrc_TextureNV12BT601Src_
-};
-
-static const GLES2_ShaderInstance GLES2_FragmentSrc_TextureNV21BT709Src = {
-    GL_FRAGMENT_SHADER,
-    GLES2_SOURCE_SHADER,
-    sizeof(GLES2_FragmentSrc_TextureNV21BT709Src_),
-    GLES2_FragmentSrc_TextureNV21BT709Src_
-};
-
-static const GLES2_ShaderInstance GLES2_FragmentSrc_TextureNV21JPEGSrc = {
-    GL_FRAGMENT_SHADER,
-    GLES2_SOURCE_SHADER,
-    sizeof(GLES2_FragmentSrc_TextureNV21JPEGSrc_),
-    GLES2_FragmentSrc_TextureNV21JPEGSrc_
-};
-
-static const GLES2_ShaderInstance GLES2_FragmentSrc_TextureNV21BT601Src = {
-    GL_FRAGMENT_SHADER,
-    GLES2_SOURCE_SHADER,
-    sizeof(GLES2_FragmentSrc_TextureNV21BT601Src_),
-    GLES2_FragmentSrc_TextureNV21BT601Src_
-};
-
-static const GLES2_ShaderInstance GLES2_FragmentSrc_TextureNV12BT709Src = {
-    GL_FRAGMENT_SHADER,
-    GLES2_SOURCE_SHADER,
-    sizeof(GLES2_FragmentSrc_TextureNV12BT709Src_),
-    GLES2_FragmentSrc_TextureNV12BT709Src_
-};
-
-static const GLES2_ShaderInstance GLES2_FragmentSrc_TextureExternalOESSrc = {
-    GL_FRAGMENT_SHADER,
-    GLES2_SOURCE_SHADER,
-    sizeof(GLES2_FragmentSrc_TextureExternalOESSrc_),
-    GLES2_FragmentSrc_TextureExternalOESSrc_
-};
-
-
-/*************************************************************************************************
- * Vertex/fragment shader definitions                                                            *
- *************************************************************************************************/
-
-static GLES2_Shader GLES2_VertexShader_Default = {
-    1,
-    {
-        &GLES2_VertexSrc_Default
-    }
-};
-
-static GLES2_Shader GLES2_FragmentShader_SolidSrc = {
-    1,
-    {
-        &GLES2_FragmentSrc_SolidSrc
-    }
-};
-
-static GLES2_Shader GLES2_FragmentShader_TextureABGRSrc = {
-    1,
-    {
-        &GLES2_FragmentSrc_TextureABGRSrc
-    }
-};
-
-static GLES2_Shader GLES2_FragmentShader_TextureARGBSrc = {
-    1,
-    {
-        &GLES2_FragmentSrc_TextureARGBSrc
-    }
-};
-
-static GLES2_Shader GLES2_FragmentShader_TextureRGBSrc = {
-    1,
-    {
-        &GLES2_FragmentSrc_TextureRGBSrc
-    }
-};
-
-static GLES2_Shader GLES2_FragmentShader_TextureBGRSrc = {
-    1,
-    {
-        &GLES2_FragmentSrc_TextureBGRSrc
-    }
-};
-
-static GLES2_Shader GLES2_FragmentShader_TextureYUVJPEGSrc = {
-    1,
-    {
-        &GLES2_FragmentSrc_TextureYUVJPEGSrc
-    }
-};
-
-static GLES2_Shader GLES2_FragmentShader_TextureYUVBT601Src = {
-    1,
-    {
-        &GLES2_FragmentSrc_TextureYUVBT601Src
-    }
-};
-
-static GLES2_Shader GLES2_FragmentShader_TextureYUVBT709Src = {
-    1,
-    {
-        &GLES2_FragmentSrc_TextureYUVBT709Src
-    }
-};
-
-static GLES2_Shader GLES2_FragmentShader_TextureNV12JPEGSrc = {
-    1,
-    {
-        &GLES2_FragmentSrc_TextureNV12JPEGSrc
-    }
-};
-
-static GLES2_Shader GLES2_FragmentShader_TextureNV12BT601Src = {
-    1,
-    {
-        &GLES2_FragmentSrc_TextureNV12BT601Src
-    }
-};
-
-static GLES2_Shader GLES2_FragmentShader_TextureNV12BT709Src = {
-    1,
-    {
-        &GLES2_FragmentSrc_TextureNV12BT709Src
-    }
-};
-
-static GLES2_Shader GLES2_FragmentShader_TextureNV21JPEGSrc = {
-    1,
-    {
-        &GLES2_FragmentSrc_TextureNV21JPEGSrc
-    }
-};
-
-static GLES2_Shader GLES2_FragmentShader_TextureNV21BT601Src = {
-    1,
-    {
-        &GLES2_FragmentSrc_TextureNV21BT601Src
-    }
-};
-
-static GLES2_Shader GLES2_FragmentShader_TextureNV21BT709Src = {
-    1,
-    {
-        &GLES2_FragmentSrc_TextureNV21BT709Src
-    }
-};
-
-static GLES2_Shader GLES2_FragmentShader_TextureExternalOESSrc = {
-    1,
-    {
-        &GLES2_FragmentSrc_TextureExternalOESSrc
-    }
-};
-
 
 /*************************************************************************************************
  * Shader selector                                                                               *
  *************************************************************************************************/
 
-const GLES2_Shader *GLES2_GetShader(GLES2_ShaderType type)
+const Uint8 *GLES2_GetShader(GLES2_ShaderType type)
 {
     switch (type) {
     case GLES2_SHADER_VERTEX_DEFAULT:
-        return &GLES2_VertexShader_Default;
-    case GLES2_SHADER_FRAGMENT_SOLID_SRC:
-        return &GLES2_FragmentShader_SolidSrc;
-    case GLES2_SHADER_FRAGMENT_TEXTURE_ABGR_SRC:
-        return &GLES2_FragmentShader_TextureABGRSrc;
-    case GLES2_SHADER_FRAGMENT_TEXTURE_ARGB_SRC:
-        return &GLES2_FragmentShader_TextureARGBSrc;
-    case GLES2_SHADER_FRAGMENT_TEXTURE_RGB_SRC:
-        return &GLES2_FragmentShader_TextureRGBSrc;
-    case GLES2_SHADER_FRAGMENT_TEXTURE_BGR_SRC:
-        return &GLES2_FragmentShader_TextureBGRSrc;
-    case GLES2_SHADER_FRAGMENT_TEXTURE_YUV_JPEG_SRC:
-        return &GLES2_FragmentShader_TextureYUVJPEGSrc;
-    case GLES2_SHADER_FRAGMENT_TEXTURE_YUV_BT601_SRC:
-        return &GLES2_FragmentShader_TextureYUVBT601Src;
-    case GLES2_SHADER_FRAGMENT_TEXTURE_YUV_BT709_SRC:
-        return &GLES2_FragmentShader_TextureYUVBT709Src;
-    case GLES2_SHADER_FRAGMENT_TEXTURE_NV12_JPEG_SRC:
-        return &GLES2_FragmentShader_TextureNV12JPEGSrc;
-    case GLES2_SHADER_FRAGMENT_TEXTURE_NV12_BT601_SRC:
-        return &GLES2_FragmentShader_TextureNV12BT601Src;
-    case GLES2_SHADER_FRAGMENT_TEXTURE_NV12_BT709_SRC:
-        return &GLES2_FragmentShader_TextureNV12BT709Src;
-    case GLES2_SHADER_FRAGMENT_TEXTURE_NV21_JPEG_SRC:
-        return &GLES2_FragmentShader_TextureNV21JPEGSrc;
-    case GLES2_SHADER_FRAGMENT_TEXTURE_NV21_BT601_SRC:
-        return &GLES2_FragmentShader_TextureNV21BT601Src;
-    case GLES2_SHADER_FRAGMENT_TEXTURE_NV21_BT709_SRC:
-        return &GLES2_FragmentShader_TextureNV21BT709Src;
-    case GLES2_SHADER_FRAGMENT_TEXTURE_EXTERNAL_OES_SRC:
-        return &GLES2_FragmentShader_TextureExternalOESSrc;
+        return GLES2_Vertex_Default;
+    case GLES2_SHADER_FRAGMENT_SOLID:
+        return GLES2_Fragment_Solid;
+    case GLES2_SHADER_FRAGMENT_TEXTURE_ABGR:
+        return GLES2_Fragment_TextureABGR;
+    case GLES2_SHADER_FRAGMENT_TEXTURE_ARGB:
+        return GLES2_Fragment_TextureARGB;
+    case GLES2_SHADER_FRAGMENT_TEXTURE_RGB:
+        return GLES2_Fragment_TextureRGB;
+    case GLES2_SHADER_FRAGMENT_TEXTURE_BGR:
+        return GLES2_Fragment_TextureBGR;
+    case GLES2_SHADER_FRAGMENT_TEXTURE_YUV_JPEG:
+        return GLES2_Fragment_TextureYUVJPEG;
+    case GLES2_SHADER_FRAGMENT_TEXTURE_YUV_BT601:
+        return GLES2_Fragment_TextureYUVBT601;
+    case GLES2_SHADER_FRAGMENT_TEXTURE_YUV_BT709:
+        return GLES2_Fragment_TextureYUVBT709;
+    case GLES2_SHADER_FRAGMENT_TEXTURE_NV12_JPEG:
+        return GLES2_Fragment_TextureNV12JPEG;
+    case GLES2_SHADER_FRAGMENT_TEXTURE_NV12_BT601:
+        return GLES2_Fragment_TextureNV12BT601;
+    case GLES2_SHADER_FRAGMENT_TEXTURE_NV12_BT709:
+        return GLES2_Fragment_TextureNV12BT709;
+    case GLES2_SHADER_FRAGMENT_TEXTURE_NV21_JPEG:
+        return GLES2_Fragment_TextureNV21JPEG;
+    case GLES2_SHADER_FRAGMENT_TEXTURE_NV21_BT601:
+        return GLES2_Fragment_TextureNV21BT601;
+    case GLES2_SHADER_FRAGMENT_TEXTURE_NV21_BT709:
+        return GLES2_Fragment_TextureNV21BT709;
+    case GLES2_SHADER_FRAGMENT_TEXTURE_EXTERNAL_OES:
+        return GLES2_Fragment_TextureExternalOES;
     default:
         return NULL;
     }
diff --git a/src/render/opengles2/SDL_shaders_gles2.h b/src/render/opengles2/SDL_shaders_gles2.h
index 383c7dc..5565d4a 100644
--- a/src/render/opengles2/SDL_shaders_gles2.h
+++ b/src/render/opengles2/SDL_shaders_gles2.h
@@ -25,43 +25,30 @@
 
 #if SDL_VIDEO_RENDER_OGL_ES2
 
-typedef struct GLES2_ShaderInstance
-{
-    GLenum type;
-    GLenum format;
-    int length;
-    const void *data;
-} GLES2_ShaderInstance;
-
-typedef struct GLES2_Shader
-{
-    int instance_count;
-    const GLES2_ShaderInstance *instances[4];
-} GLES2_Shader;
 
 typedef enum
 {
-    GLES2_SHADER_VERTEX_DEFAULT,
-    GLES2_SHADER_FRAGMENT_SOLID_SRC,
-    GLES2_SHADER_FRAGMENT_TEXTURE_ABGR_SRC,
-    GLES2_SHADER_FRAGMENT_TEXTURE_ARGB_SRC,
-    GLES2_SHADER_FRAGMENT_TEXTURE_BGR_SRC,
-    GLES2_SHADER_FRAGMENT_TEXTURE_RGB_SRC,
-    GLES2_SHADER_FRAGMENT_TEXTURE_YUV_JPEG_SRC,
-    GLES2_SHADER_FRAGMENT_TEXTURE_YUV_BT601_SRC,
-    GLES2_SHADER_FRAGMENT_TEXTURE_YUV_BT709_SRC,
-    GLES2_SHADER_FRAGMENT_TEXTURE_NV12_JPEG_SRC,
-    GLES2_SHADER_FRAGMENT_TEXTURE_NV12_BT601_SRC,
-    GLES2_SHADER_FRAGMENT_TEXTURE_NV12_BT709_SRC,
-    GLES2_SHADER_FRAGMENT_TEXTURE_NV21_JPEG_SRC,
-    GLES2_SHADER_FRAGMENT_TEXTURE_NV21_BT601_SRC,
-    GLES2_SHADER_FRAGMENT_TEXTURE_NV21_BT709_SRC,
-    GLES2_SHADER_FRAGMENT_TEXTURE_EXTERNAL_OES_SRC
+    GLES2_SHADER_VERTEX_DEFAULT = 0,
+    GLES2_SHADER_FRAGMENT_SOLID,
+    GLES2_SHADER_FRAGMENT_TEXTURE_ABGR,
+    GLES2_SHADER_FRAGMENT_TEXTURE_ARGB,
+    GLES2_SHADER_FRAGMENT_TEXTURE_BGR,
+    GLES2_SHADER_FRAGMENT_TEXTURE_RGB,
+    GLES2_SHADER_FRAGMENT_TEXTURE_YUV_JPEG,
+    GLES2_SHADER_FRAGMENT_TEXTURE_YUV_BT601,
+    GLES2_SHADER_FRAGMENT_TEXTURE_YUV_BT709,
+    GLES2_SHADER_FRAGMENT_TEXTURE_NV12_JPEG,
+    GLES2_SHADER_FRAGMENT_TEXTURE_NV12_BT601,
+    GLES2_SHADER_FRAGMENT_TEXTURE_NV12_BT709,
+    GLES2_SHADER_FRAGMENT_TEXTURE_NV21_JPEG,
+    GLES2_SHADER_FRAGMENT_TEXTURE_NV21_BT601,
+    GLES2_SHADER_FRAGMENT_TEXTURE_NV21_BT709,
+    GLES2_SHADER_FRAGMENT_TEXTURE_EXTERNAL_OES
 } GLES2_ShaderType;
 
-#define GLES2_SOURCE_SHADER (GLenum)-1
+#define GLES2_SHADER_COUNT  16
 
-const GLES2_Shader *GLES2_GetShader(GLES2_ShaderType type);
+const Uint8 *GLES2_GetShader(GLES2_ShaderType type);
 
 #endif /* SDL_VIDEO_RENDER_OGL_ES2 */
 
