diff options
| author | Matthew Parlane <parlane@gmail.com> | 2014-04-04 08:43:20 +1300 |
|---|---|---|
| committer | Matthew Parlane <parlane@gmail.com> | 2014-04-04 08:43:20 +1300 |
| commit | 13119e67556bdd951a26eb31730b1219c9d68680 (patch) | |
| tree | a379e8130aa3b74c477006b185c7c6cd96c1ff28 /Source/Core/VideoBackends/OGL/ProgramShaderCache.cpp | |
| parent | c68be42c556e34b6221c079c95d9c639dbbeb989 (diff) | |
| parent | 3251d78f8934b500b4cbdf06f3fd62038cb2047d (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.cpp | 34 |
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" : "" |
