Merge pull request #1664 from Sonicadvance1/GLES3_stereo

Enables stereo rendering with OpenGL ES 3.1 + AEP.
This commit is contained in:
Markus Wick 2014-12-07 12:53:14 +01:00
commit d83f0308af
4 changed files with 14 additions and 2 deletions

View File

@ -1576,6 +1576,9 @@ const GLFunc gl_function_array[] =
// ARB_buffer_storage // ARB_buffer_storage
GLFUNC_REQUIRES(glBufferStorage, "GL_ARB_buffer_storage"), GLFUNC_REQUIRES(glBufferStorage, "GL_ARB_buffer_storage"),
GLFUNC_REQUIRES(glNamedBufferStorageEXT, "GL_ARB_buffer_storage GL_EXT_direct_state_access"), GLFUNC_REQUIRES(glNamedBufferStorageEXT, "GL_ARB_buffer_storage GL_EXT_direct_state_access"),
// EXT_geometry_shader
GLFUNC_SUFFIX(glFramebufferTexture, EXT, "GL_EXT_geometry_shader !VERSION_3_2"),
}; };
namespace GLExtensions namespace GLExtensions

View File

@ -505,6 +505,7 @@ void ProgramShaderCache::Shutdown()
void ProgramShaderCache::CreateHeader() void ProgramShaderCache::CreateHeader()
{ {
GLSL_VERSION v = g_ogl_config.eSupportedGLSLVersion; GLSL_VERSION v = g_ogl_config.eSupportedGLSLVersion;
snprintf(s_glsl_header, sizeof(s_glsl_header), snprintf(s_glsl_header, sizeof(s_glsl_header),
"%s\n" "%s\n"
"%s\n" // ubo "%s\n" // ubo
@ -515,6 +516,7 @@ void ProgramShaderCache::CreateHeader()
"%s\n" // Sampler binding "%s\n" // Sampler binding
"%s\n" // storage buffer "%s\n" // storage buffer
"%s\n" // shader5 "%s\n" // shader5
"%s\n" // AEP
// Precision defines for GLSL ES // Precision defines for GLSL ES
"%s\n" "%s\n"
@ -549,6 +551,7 @@ void ProgramShaderCache::CreateHeader()
, g_ActiveConfig.backend_info.bSupportsBindingLayout ? "#define SAMPLER_BINDING(x) layout(binding = x)" : "#define SAMPLER_BINDING(x)" , g_ActiveConfig.backend_info.bSupportsBindingLayout ? "#define SAMPLER_BINDING(x) layout(binding = x)" : "#define SAMPLER_BINDING(x)"
, g_ActiveConfig.backend_info.bSupportsBBox ? "#extension GL_ARB_shader_storage_buffer_object : enable" : "" , g_ActiveConfig.backend_info.bSupportsBBox ? "#extension GL_ARB_shader_storage_buffer_object : enable" : ""
, g_ActiveConfig.backend_info.bSupportsGSInstancing ? "#extension GL_ARB_gpu_shader5 : enable" : "" , g_ActiveConfig.backend_info.bSupportsGSInstancing ? "#extension GL_ARB_gpu_shader5 : enable" : ""
, g_ogl_config.bSupportsAEP ? "#extension GL_ANDROID_extension_pack_es31a : enable" : ""
, v>=GLSLES_300 ? "precision highp float;" : "" , v>=GLSLES_300 ? "precision highp float;" : ""
, v>=GLSLES_300 ? "precision highp int;" : "" , v>=GLSLES_300 ? "precision highp int;" : ""

View File

@ -497,15 +497,17 @@ Renderer::Renderer()
if (strstr(g_ogl_config.glsl_version, "3.0")) if (strstr(g_ogl_config.glsl_version, "3.0"))
{ {
g_ogl_config.eSupportedGLSLVersion = GLSLES_300; g_ogl_config.eSupportedGLSLVersion = GLSLES_300;
g_ogl_config.bSupportsAEP = false;
g_Config.backend_info.bSupportsStereoscopy = false;
} }
else else
{ {
g_ogl_config.eSupportedGLSLVersion = GLSLES_310; g_ogl_config.eSupportedGLSLVersion = GLSLES_310;
g_ogl_config.bSupportsAEP = GLExtensions::Supports("GL_ANDROID_extension_pack_es31a");
g_Config.backend_info.bSupportsBindingLayout = true; g_Config.backend_info.bSupportsBindingLayout = true;
g_Config.backend_info.bSupportsEarlyZ = true; g_Config.backend_info.bSupportsEarlyZ = true;
g_Config.backend_info.bSupportsStereoscopy = g_ogl_config.bSupportsAEP;
} }
// TODO: OpenGL ES 3.1 provides the necessary features as extensions.
g_Config.backend_info.bSupportsStereoscopy = false;
} }
else else
{ {
@ -532,6 +534,9 @@ Renderer::Renderer()
{ {
g_ogl_config.eSupportedGLSLVersion = GLSL_150; g_ogl_config.eSupportedGLSLVersion = GLSL_150;
} }
// Desktop OpenGL can't have the Android Extension Pack
g_ogl_config.bSupportsAEP = false;
} }
if (GLExtensions::Supports("GL_KHR_debug")) if (GLExtensions::Supports("GL_KHR_debug"))

View File

@ -30,6 +30,7 @@ struct VideoConfig
GLSL_VERSION eSupportedGLSLVersion; GLSL_VERSION eSupportedGLSLVersion;
bool bSupportOGL31; bool bSupportOGL31;
bool bSupportViewportFloat; bool bSupportViewportFloat;
bool bSupportsAEP;
const char* gl_vendor; const char* gl_vendor;
const char* gl_renderer; const char* gl_renderer;