SDL: Cg shaders for vita gles2

From 8003623061ddea5ee58257f870644a46a1bbfcae Mon Sep 17 00:00:00 2001
From: Ivan Epifanov <[EMAIL REDACTED]>
Date: Mon, 2 Nov 2020 18:10:09 +0300
Subject: [PATCH] Cg shaders for vita gles2

---
 src/render/opengles2/SDL_render_gles2.c |   4 +
 src/render/vita/SDL_shaders_gles2_cg.c  | 563 ++++++++++++++++++++++++
 2 files changed, 567 insertions(+)
 create mode 100644 src/render/vita/SDL_shaders_gles2_cg.c

diff --git a/src/render/opengles2/SDL_render_gles2.c b/src/render/opengles2/SDL_render_gles2.c
index f36b34f90..e9361a8af 100644
--- a/src/render/opengles2/SDL_render_gles2.c
+++ b/src/render/opengles2/SDL_render_gles2.c
@@ -23,6 +23,7 @@
 #if SDL_VIDEO_RENDER_OGL_ES2 && !SDL_RENDER_DISABLED
 
 #include "SDL_hints.h"
+#include "SDL_log.h"
 #include "SDL_opengles2.h"
 #include "../SDL_sysrender.h"
 #include "../../video/SDL_blit.h"
@@ -978,6 +979,7 @@ SetDrawState(GLES2_RenderData *data, const SDL_RenderCommand *cmd, const GLES2_I
     }
 
     if (program->uniform_locations[GLES2_UNIFORM_COLOR] != -1) {
+        SDL_LogInfo(SDL_LOG_CATEGORY_RENDER, "has color uniform location");
         if (data->drawstate.color != program->color) {
             const Uint8 r = (data->drawstate.color >> 16) & 0xFF;
             const Uint8 g = (data->drawstate.color >> 8) & 0xFF;
@@ -986,6 +988,8 @@ SetDrawState(GLES2_RenderData *data, const SDL_RenderCommand *cmd, const GLES2_I
             data->glUniform4f(program->uniform_locations[GLES2_UNIFORM_COLOR], r * inv255f, g * inv255f, b * inv255f, a * inv255f);
             program->color = data->drawstate.color;
         }
+    } else {
+        SDL_LogInfo(SDL_LOG_CATEGORY_RENDER, "oops, no color uniform location");
     }
 
     if (blend != data->drawstate.blend) {
diff --git a/src/render/vita/SDL_shaders_gles2_cg.c b/src/render/vita/SDL_shaders_gles2_cg.c
new file mode 100644
index 000000000..a904d8484
--- /dev/null
+++ b/src/render/vita/SDL_shaders_gles2_cg.c
@@ -0,0 +1,563 @@
+/*
+  Simple DirectMedia Layer
+  Copyright (C) 1997-2020 Sam Lantinga <slouken@libsdl.org>
+
+  This software is provided 'as-is', without any express or implied
+  warranty.  In no event will the authors be held liable for any damages
+  arising from the use of this software.
+
+  Permission is granted to anyone to use this software for any purpose,
+  including commercial applications, and to alter it and redistribute it
+  freely, subject to the following restrictions:
+
+  1. The origin of this software must not be misrepresented; you must not
+     claim that you wrote the original software. If you use this software
+     in a product, an acknowledgment in the product documentation would be
+     appreciated but is not required.
+  2. Altered source versions must be plainly marked as such, and must not be
+     misrepresented as being the original software.
+  3. This notice may not be removed or altered from any source distribution.
+*/
+#include "../../SDL_internal.h"
+
+#if SDL_VIDEO_RENDER_OGL_ES2 && !SDL_RENDER_DISABLED
+
+#include "SDL_video.h"
+#include "SDL_opengles2.h"
+#include "../opengles2/SDL_shaders_gles2.h"
+#include "SDL_stdinc.h"
+
+/* While Vita is gles2-compliant, shaders should be in Cg format, not glsl */
+
+/*************************************************************************************************
+ * Vertex/fragment shader source                                                                 *
+ *************************************************************************************************/
+/* Notes on a_angle:
+   * It is a vector containing sin and cos for rotation matrix
+   * To get correct rotation for most cases when a_angle is disabled cos
+     value is decremented by 1.0 to get proper output with 0.0 which is
+     default value
+*/
+static const Uint8 GLES2_VertexSrc_Default_[] = " \
+    struct _Output { \
+      float2 v_texCoord : TEXCOORD0; \
+      float4 position : POSITION; \
+      float pointsize    : PSIZE; \
+    }; \
+\
+    _Output main( \
+        uniform float4x4 u_projection, \
+        float2 a_position, \
+        float2 a_texCoord, \
+        float2 a_angle, \
+        float2 a_center \
+    ) \
+    { \
+        _Output OUT; \
+\
+        float s = a_angle[0]; \
+        float c = a_angle[1] + 1.0; \
+        float2x2 rotationMatrix = float2x2(c, s, -s, c); \
+        float2 position = mul((a_position - a_center) + a_center, rotationMatrix); \
+\
+        OUT.v_texCoord = a_texCoord; \
+        OUT.position =  mul(float4(position, 0.0, 1.0), u_projection);\
+        OUT.pointsize = 1.0; \
+        return OUT; \
+    } \
+";
+
+static const Uint8 GLES2_FragmentSrc_SolidSrc_[] = " \
+    float4 main(uniform float4 u_color : COLOR) : COLOR \
+    { \
+        return u_color; \
+    } \
+";
+
+static const Uint8 GLES2_FragmentSrc_TextureABGRSrc_[] = " \
+    float4 main(sampler2D u_texture, uniform float4 u_color : COLOR, float2 v_texCoord : TEXCOORD0 ) : COLOR \
+    { \
+        float4 color = tex2D(u_texture, v_texCoord); \
+        return color * u_color; \
+    } \
+";
+
+/* ARGB to ABGR conversion */
+static const Uint8 GLES2_FragmentSrc_TextureARGBSrc_[] = " \
+    float4 main(sampler2D u_texture, uniform float4 u_color : COLOR, float2 v_texCoord : TEXCOORD0 ) : COLOR \
+    { \
+        float4 abgr = tex2D(u_texture, v_texCoord); \
+        float4 color = abgr; \
+        color.r = abgr.b; \
+        color.b = abgr.r; \
+        return color * u_color; \
+    } \
+";
+
+/* RGB to ABGR conversion */
+static const Uint8 GLES2_FragmentSrc_TextureRGBSrc_[] = " \
+    float4 main(sampler2D u_texture, uniform float4 u_color : COLOR, float2 v_texCoord : TEXCOORD0 ) : COLOR \
+    { \
+        float4 abgr = tex2D(u_texture, v_texCoord); \
+        float4 color = abgr; \
+        color.r = abgr.b; \
+        color.b = abgr.r; \
+        color.a = 1.0; \
+        return color * u_color; \
+    } \
+";
+
+/* BGR to ABGR conversion */
+static const Uint8 GLES2_FragmentSrc_TextureBGRSrc_[] = " \
+    float4 main(sampler2D u_texture, uniform float4 u_color : COLOR, float2 v_texCoord : TEXCOORD0 ) : COLOR \
+    { \
+        float4 abgr = tex2D(u_texture, v_texCoord); \
+        float4 color = abgr; \
+        color.a = 1.0; \
+        return color * u_color; \
+    } \
+";
+
+// VITA : TODO
+
+#define JPEG_SHADER_CONSTANTS                                   \
+"// YUV offset \n"                                              \
+"const vec3 offset = vec3(0, -0.501960814, -0.501960814);\n"    \
+"\n"                                                            \
+"// RGB coefficients \n"                                        \
+"const mat3 matrix = mat3( 1,       1,        1,\n"             \
+"                          0,      -0.3441,   1.772,\n"         \
+"                          1.402,  -0.7141,   0);\n"            \
+
+#define BT601_SHADER_CONSTANTS                                  \
+"// YUV offset \n"                                              \
+"const vec3 offset = vec3(-0.0627451017, -0.501960814, -0.501960814);\n" \
+"\n"                                                            \
+"// RGB coefficients \n"                                        \
+"const mat3 matrix = mat3( 1.1644,  1.1644,   1.1644,\n"        \
+"                          0,      -0.3918,   2.0172,\n"        \
+"                          1.596,  -0.813,    0);\n"            \
+
+#define BT709_SHADER_CONSTANTS                                  \
+"// YUV offset \n"                                              \
+"const vec3 offset = vec3(-0.0627451017, -0.501960814, -0.501960814);\n" \
+"\n"                                                            \
+"// RGB coefficients \n"                                        \
+"const mat3 matrix = mat3( 1.1644,  1.1644,   1.1644,\n"        \
+"                          0,      -0.2132,   2.1124,\n"        \
+"                          1.7927, -0.5329,   0);\n"            \
+
+
+#define YUV_SHADER_PROLOGUE                                     \
+"precision mediump float;\n"                                    \
+"uniform sampler2D u_texture;\n"                                \
+"uniform sampler2D u_texture_u;\n"                              \
+"uniform sampler2D u_texture_v;\n"                              \
+"uniform vec4 u_color;\n"                                  \
+"varying vec2 v_texCoord;\n"                                    \
+"\n"                                                            \
+
+#define YUV_SHADER_BODY                                         \
+"\n"                                                            \
+"void main()\n"                                                 \
+"{\n"                                                           \
+"    mediump vec3 yuv;\n"                                       \
+"    lowp vec3 rgb;\n"                                          \
+"\n"                                                            \
+"    // Get the YUV values \n"                                  \
+"    yuv.x = texture2D(u_texture,   v_texCoord).r;\n"           \
+"    yuv.y = texture2D(u_texture_u, v_texCoord).r;\n"           \
+"    yuv.z = texture2D(u_texture_v, v_texCoord).r;\n"           \
+"\n"                                                            \
+"    // Do the color transform \n"                              \
+"    yuv += offset;\n"                                          \
+"    rgb = matrix * yuv;\n"                                     \
+"\n"                                                            \
+"    // That was easy. :) \n"                                   \
+"    gl_FragColor = vec4(rgb, 1);\n"                            \
+"    gl_FragColor *= u_color;\n"                           \
+"}"                                                             \
+
+#define NV12_SHADER_BODY                                        \
+"\n"                                                            \
+"void main()\n"                                                 \
+"{\n"                                                           \
+"    mediump vec3 yuv;\n"                                       \
+"    lowp vec3 rgb;\n"                                          \
+"\n"                                                            \
+"    // Get the YUV values \n"                                  \
+"    yuv.x = texture2D(u_texture,   v_texCoord).r;\n"           \
+"    yuv.yz = texture2D(u_texture_u, v_texCoord).ra;\n"         \
+"\n"                                                            \
+"    // Do the color transform \n"                              \
+"    yuv += offset;\n"                                          \
+"    rgb = matrix * yuv;\n"                                     \
+"\n"                                                            \
+"    // That was easy. :) \n"                                   \
+"    gl_FragColor = vec4(rgb, 1);\n"                            \
+"    gl_FragColor *= u_color;\n"                           \
+"}"                                                             \
+
+#define NV21_SHADER_BODY                                        \
+"\n"                                                            \
+"void main()\n"                                                 \
+"{\n"                                                           \
+"    mediump vec3 yuv;\n"                                       \
+"    lowp vec3 rgb;\n"                                          \
+"\n"                                                            \
+"    // Get the YUV values \n"                                  \
+"    yuv.x = texture2D(u_texture,   v_texCoord).r;\n"           \
+"    yuv.yz = texture2D(u_texture_u, v_texCoord).ar;\n"         \
+"\n"                                                            \
+"    // Do the color transform \n"                              \
+"    yuv += offset;\n"                                          \
+"    rgb = matrix * yuv;\n"                                     \
+"\n"                                                            \
+"    // That was easy. :) \n"                                   \
+"    gl_FragColor = vec4(rgb, 1);\n"                            \
+"    gl_FragColor *= u_color;\n"                           \
+"}"                                                             \
+
+/* YUV to ABGR conversion */
+static const Uint8 GLES2_FragmentSrc_TextureYUVJPEGSrc_[] = \
+        YUV_SHADER_PROLOGUE \
+        JPEG_SHADER_CONSTANTS \
+        YUV_SHADER_BODY \
+;
+static const Uint8 GLES2_FragmentSrc_TextureYUVBT601Src_[] = \
+        YUV_SHADER_PROLOGUE \
+        BT601_SHADER_CONSTANTS \
+        YUV_SHADER_BODY \
+;
+static const Uint8 GLES2_FragmentSrc_TextureYUVBT709Src_[] = \
+        YUV_SHADER_PROLOGUE \
+        BT709_SHADER_CONSTANTS \
+        YUV_SHADER_BODY \
+;
+
+/* NV12 to ABGR conversion */
+static const Uint8 GLES2_FragmentSrc_TextureNV12JPEGSrc_[] = \
+        YUV_SHADER_PROLOGUE \
+        JPEG_SHADER_CONSTANTS \
+        NV12_SHADER_BODY \
+;
+static const Uint8 GLES2_FragmentSrc_TextureNV12BT601Src_[] = \
+        YUV_SHADER_PROLOGUE \
+        BT601_SHADER_CONSTANTS \
+        NV12_SHADER_BODY \
+;
+static const Uint8 GLES2_FragmentSrc_TextureNV12BT709Src_[] = \
+        YUV_SHADER_PROLOGUE \
+        BT709_SHADER_CONSTANTS \
+        NV12_SHADER_BODY \
+;
+
+/* NV21 to ABGR conversion */
+static const Uint8 GLES2_FragmentSrc_TextureNV21JPEGSrc_[] = \
+        YUV_SHADER_PROLOGUE \
+        JPEG_SHADER_CONSTANTS \
+        NV21_SHADER_BODY \
+;
+static const Uint8 GLES2_FragmentSrc_TextureNV21BT601Src_[] = \
+        YUV_SHADER_PROLOGUE \
+        BT601_SHADER_CONSTANTS \
+        NV21_SHADER_BODY \
+;
+static const Uint8 GLES2_FragmentSrc_TextureNV21BT709Src_[] = \
+        YUV_SHADER_PROLOGUE \
+        BT709_SHADER_CONSTANTS \
+        NV21_SHADER_BODY \
+;
+
+/* Custom Android video format texture */
+static const Uint8 GLES2_FragmentSrc_TextureExternalOESSrc_[] = " \
+    #extension GL_OES_EGL_image_external : require\n\
+    precision mediump float; \
+    uniform samplerExternalOES u_texture; \
+    uniform vec4 u_color; \
+    varying vec2 v_texCoord; \
+    \
+    void main() \
+    { \
+        gl_FragColor = texture2D(u_texture, v_texCoord); \
+        gl_FragColor *= u_color; \
+    } \
+";
+
+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)
+{
+    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;
+    default:
+        return NULL;
+    }
+}
+
+#endif /* SDL_VIDEO_RENDER_OGL_ES2 && !SDL_RENDER_DISABLED */
+
+/* vi: set ts=4 sw=4 expandtab: */