summaryrefslogtreecommitdiff
path: root/Source/Core/VideoBackends/OGL/ProgramShaderCache.cpp
diff options
context:
space:
mode:
authorMatthew Parlane <parlane@gmail.com>2014-04-04 08:43:20 +1300
committerMatthew Parlane <parlane@gmail.com>2014-04-04 08:43:20 +1300
commit13119e67556bdd951a26eb31730b1219c9d68680 (patch)
treea379e8130aa3b74c477006b185c7c6cd96c1ff28 /Source/Core/VideoBackends/OGL/ProgramShaderCache.cpp
parentc68be42c556e34b6221c079c95d9c639dbbeb989 (diff)
parent3251d78f8934b500b4cbdf06f3fd62038cb2047d (diff)
Merge pull request #240 from Sonicadvance1/GLSLES310_binding
Add initial support for GLSL ES 3.10.
Diffstat (limited to 'Source/Core/VideoBackends/OGL/ProgramShaderCache.cpp')
-rw-r--r--Source/Core/VideoBackends/OGL/ProgramShaderCache.cpp34
1 files changed, 28 insertions, 6 deletions
diff --git a/Source/Core/VideoBackends/OGL/ProgramShaderCache.cpp b/Source/Core/VideoBackends/OGL/ProgramShaderCache.cpp
index 90c73bf6ea..7cf40eed34 100644
--- a/Source/Core/VideoBackends/OGL/ProgramShaderCache.cpp
+++ b/Source/Core/VideoBackends/OGL/ProgramShaderCache.cpp
@@ -2,6 +2,8 @@
// Licensed under GPLv2
// Refer to the license.txt file included.
+#include <string>
+
#include "Common/MathUtil.h"
#include "VideoBackends/OGL/ProgramShaderCache.h"
@@ -36,13 +38,33 @@ UidChecker<VertexShaderUid,VertexShaderCode> ProgramShaderCache::vertex_uid_chec
static char s_glsl_header[1024] = "";
+std::string GetGLSLVersionString()
+{
+ GLSL_VERSION v = g_ogl_config.eSupportedGLSLVersion;
+ switch(v)
+ {
+ case GLSLES_300:
+ return "#version 300 es";
+ case GLSLES_310:
+ return "#version 310 es";
+ case GLSL_130:
+ return "#version 130";
+ case GLSL_140:
+ return "#version 140";
+ case GLSL_150:
+ return "#version 150";
+ }
+ // Shouldn't ever hit this
+ return "#version ERROR";
+}
+
void SHADER::SetProgramVariables()
{
// glsl shader must be bind to set samplers
Bind();
// Bind UBO
- if (!g_ActiveConfig.backend_info.bSupportShadingLanguage420pack)
+ if (!g_ActiveConfig.backend_info.bSupportsBindingLayout)
{
GLint PSBlock_id = glGetUniformBlockIndex(glprogid, "PSBlock");
GLint VSBlock_id = glGetUniformBlockIndex(glprogid, "VSBlock");
@@ -455,7 +477,7 @@ void ProgramShaderCache::CreateHeader ( void )
"%s\n" // early-z
"%s\n" // 420pack
- // Precision defines for GLSLES3
+ // Precision defines for GLSL ES
"%s\n"
"%s\n"
@@ -478,13 +500,13 @@ void ProgramShaderCache::CreateHeader ( void )
"%s\n" // replace textureSize as constant
"%s\n" // wipe out all centroid usages
- , v==GLSLES3 ? "#version 300 es" : v==GLSL_130 ? "#version 130" : v==GLSL_140 ? "#version 140" : "#version 150"
+ , GetGLSLVersionString().c_str()
, v<GLSL_140 ? "#extension GL_ARB_uniform_buffer_object : enable" : ""
, g_ActiveConfig.backend_info.bSupportsEarlyZ ? "#extension GL_ARB_shader_image_load_store : enable" : ""
- , g_ActiveConfig.backend_info.bSupportShadingLanguage420pack ? "#extension GL_ARB_shading_language_420pack : enable" : ""
+ , (g_ActiveConfig.backend_info.bSupportsBindingLayout && v < GLSLES_310) ? "#extension GL_ARB_shading_language_420pack : enable" : ""
- , v==GLSLES3 ? "precision highp float;" : ""
- , v==GLSLES3 ? "precision highp int;" : ""
+ , v>=GLSLES_300 ? "precision highp float;" : ""
+ , v>=GLSLES_300 ? "precision highp int;" : ""
, DriverDetails::HasBug(DriverDetails::BUG_BROKENTEXTURESIZE) ? "#define textureSize(x, y) ivec2(1, 1)" : ""
, DriverDetails::HasBug(DriverDetails::BUG_BROKENCENTROID) ? "#define centroid" : ""