diff options
| author | Ryan Houdek <Sonicadvance1@gmail.com> | 2015-09-01 05:23:43 -0500 |
|---|---|---|
| committer | Ryan Houdek <Sonicadvance1@gmail.com> | 2015-09-01 05:41:03 -0500 |
| commit | 7a35f9285b354c8fd24295e11bcb85a2b99b3de5 (patch) | |
| tree | 21078772bff9a158baab6a2c776a03d78e264037 /Source/Core/VideoBackends/OGL/ProgramShaderCache.cpp | |
| parent | b9ea9c05ad8287462cfbbc1c19620f98f9eaad26 (diff) | |
[GLES] Support texture_buffer for palette texture conversion.
OpenGL ES 3.2 adds this feature to core
It was available to GLES 3.1 as GL_{EXT, OES}_texture_buffer as well.
For the non-Nvidia vendors that implemented this is:
- Qualcomm's Adreno 4xx
- IMGTec's PowerVR Rogue
Diffstat (limited to 'Source/Core/VideoBackends/OGL/ProgramShaderCache.cpp')
| -rw-r--r-- | Source/Core/VideoBackends/OGL/ProgramShaderCache.cpp | 19 |
1 files changed, 19 insertions, 0 deletions
diff --git a/Source/Core/VideoBackends/OGL/ProgramShaderCache.cpp b/Source/Core/VideoBackends/OGL/ProgramShaderCache.cpp index 22e86cfe42..8b60fe069e 100644 --- a/Source/Core/VideoBackends/OGL/ProgramShaderCache.cpp +++ b/Source/Core/VideoBackends/OGL/ProgramShaderCache.cpp @@ -524,6 +524,7 @@ void ProgramShaderCache::CreateHeader() GLSL_VERSION v = g_ogl_config.eSupportedGLSLVersion; bool is_glsles = v >= GLSLES_300; std::string SupportedESPointSize; + std::string SupportedESTextureBuffer; switch (g_ogl_config.SupportedESPointSize) { case 1: SupportedESPointSize = "#extension GL_OES_geometry_point_size : enable"; break; @@ -531,6 +532,20 @@ void ProgramShaderCache::CreateHeader() default: SupportedESPointSize = ""; break; } + switch (g_ogl_config.SupportedESTextureBuffer) + { + case ES_TEXBUF_TYPE::TEXBUF_EXT: + SupportedESTextureBuffer = "#extension GL_EXT_texture_buffer : enable"; + break; + case ES_TEXBUF_TYPE::TEXBUF_OES: + SupportedESTextureBuffer = "#extension GL_OES_texture_buffer : enable"; + break; + case ES_TEXBUF_TYPE::TEXBUF_CORE: + case ES_TEXBUF_TYPE::TEXBUF_NONE: + SupportedESTextureBuffer = ""; + break; + } + snprintf(s_glsl_header, sizeof(s_glsl_header), "%s\n" "%s\n" // ubo @@ -544,11 +559,13 @@ void ProgramShaderCache::CreateHeader() "%s\n" // Geometry point size "%s\n" // AEP "%s\n" // texture buffer + "%s\n" // ES texture buffer // Precision defines for GLSL ES "%s\n" "%s\n" "%s\n" + "%s\n" // Silly differences "#define float2 vec2\n" @@ -581,10 +598,12 @@ void ProgramShaderCache::CreateHeader() , SupportedESPointSize.c_str() , g_ogl_config.bSupportsAEP ? "#extension GL_ANDROID_extension_pack_es31a : enable" : "" , v<GLSL_140 && g_ActiveConfig.backend_info.bSupportsPaletteConversion ? "#extension GL_ARB_texture_buffer_object : enable" : "" + , SupportedESTextureBuffer.c_str() , is_glsles ? "precision highp float;" : "" , is_glsles ? "precision highp int;" : "" , is_glsles ? "precision highp sampler2DArray;" : "" + , (is_glsles && g_ActiveConfig.backend_info.bSupportsPaletteConversion) ? "precision highp usamplerBuffer;" : "" , DriverDetails::HasBug(DriverDetails::BUG_BROKENTEXTURESIZE) ? "#define textureSize(x, y) ivec2(1, 1)" : "" , DriverDetails::HasBug(DriverDetails::BUG_BROKENCENTROID) ? "#define centroid" : "" |
