From 447b1b09e3e141003d0170cb5c51e3e32f1ddb00 Mon Sep 17 00:00:00 2001 From: Ryan Houdek Date: Wed, 26 Aug 2015 00:09:32 -0500 Subject: Support OpenGL ES 3.2. OpenGL ES 3.2 adds a few things we care about supporting in core. In particular: - GL_{ARB,EXT,OES}_draw_elements_base_vertex - KHR_Debug - Sample Shading - GL_{ARB,EXT,OES,NV}_copy_image - Geometry shaders - Geometry shader instancing (If they support GL_{EXT,OES}_geometry_point_size) Nvidia was the first to release an OpenGL ES 3.2 driver which I uesd to test this on. This also enables GS Instancing on GLES 3.1 hardware if it supports all of the required extensions. --- Source/Core/VideoBackends/OGL/ProgramShaderCache.cpp | 13 ++++++++++++- 1 file changed, 12 insertions(+), 1 deletion(-) (limited to 'Source/Core/VideoBackends/OGL/ProgramShaderCache.cpp') diff --git a/Source/Core/VideoBackends/OGL/ProgramShaderCache.cpp b/Source/Core/VideoBackends/OGL/ProgramShaderCache.cpp index 767e98f1b6..22e86cfe42 100644 --- a/Source/Core/VideoBackends/OGL/ProgramShaderCache.cpp +++ b/Source/Core/VideoBackends/OGL/ProgramShaderCache.cpp @@ -50,6 +50,8 @@ static std::string GetGLSLVersionString() return "#version 300 es"; case GLSLES_310: return "#version 310 es"; + case GLSLES_320: + return "#version 320 es"; case GLSL_130: return "#version 130"; case GLSL_140: @@ -521,6 +523,13 @@ void ProgramShaderCache::CreateHeader() { GLSL_VERSION v = g_ogl_config.eSupportedGLSLVersion; bool is_glsles = v >= GLSLES_300; + std::string SupportedESPointSize; + switch (g_ogl_config.SupportedESPointSize) + { + case 1: SupportedESPointSize = "#extension GL_OES_geometry_point_size : enable"; break; + case 2: SupportedESPointSize = "#extension GL_EXT_geometry_point_size : enable"; break; + default: SupportedESPointSize = ""; break; + } snprintf(s_glsl_header, sizeof(s_glsl_header), "%s\n" @@ -532,6 +541,7 @@ void ProgramShaderCache::CreateHeader() "%s\n" // Sampler binding "%s\n" // storage buffer "%s\n" // shader5 + "%s\n" // Geometry point size "%s\n" // AEP "%s\n" // texture buffer @@ -567,7 +577,8 @@ void ProgramShaderCache::CreateHeader() , (g_ogl_config.bSupportSampleShading) ? "#extension GL_ARB_sample_shading : enable" : "" , 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.bSupportsGSInstancing ? "#extension GL_ARB_gpu_shader5 : enable" : "" + , !is_glsles && g_ActiveConfig.backend_info.bSupportsGSInstancing ? "#extension GL_ARB_gpu_shader5 : enable" : "" + , SupportedESPointSize.c_str() , g_ogl_config.bSupportsAEP ? "#extension GL_ANDROID_extension_pack_es31a : enable" : "" , v Date: Tue, 1 Sep 2015 05:23:43 -0500 Subject: [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 --- Source/Core/VideoBackends/OGL/ProgramShaderCache.cpp | 19 +++++++++++++++++++ 1 file changed, 19 insertions(+) (limited to 'Source/Core/VideoBackends/OGL/ProgramShaderCache.cpp') 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 Date: Fri, 4 Sep 2015 20:25:59 -0500 Subject: Support EXT_blend_func_extended in GLES. This lets us get dual source blending on GLES targets. --- Source/Core/VideoBackends/OGL/ProgramShaderCache.cpp | 2 ++ 1 file changed, 2 insertions(+) (limited to 'Source/Core/VideoBackends/OGL/ProgramShaderCache.cpp') diff --git a/Source/Core/VideoBackends/OGL/ProgramShaderCache.cpp b/Source/Core/VideoBackends/OGL/ProgramShaderCache.cpp index 8b60fe069e..f54d69b95c 100644 --- a/Source/Core/VideoBackends/OGL/ProgramShaderCache.cpp +++ b/Source/Core/VideoBackends/OGL/ProgramShaderCache.cpp @@ -560,6 +560,7 @@ void ProgramShaderCache::CreateHeader() "%s\n" // AEP "%s\n" // texture buffer "%s\n" // ES texture buffer + "%s\n" // ES dual source blend // Precision defines for GLSL ES "%s\n" @@ -599,6 +600,7 @@ void ProgramShaderCache::CreateHeader() , g_ogl_config.bSupportsAEP ? "#extension GL_ANDROID_extension_pack_es31a : enable" : "" , v Date: Fri, 4 Sep 2015 23:45:35 -0500 Subject: Remove all of our workarounds for Qualcomm devices we don't support anymore. --- Source/Core/VideoBackends/OGL/ProgramShaderCache.cpp | 7 ------- 1 file changed, 7 deletions(-) (limited to 'Source/Core/VideoBackends/OGL/ProgramShaderCache.cpp') diff --git a/Source/Core/VideoBackends/OGL/ProgramShaderCache.cpp b/Source/Core/VideoBackends/OGL/ProgramShaderCache.cpp index f54d69b95c..d6533c39d2 100644 --- a/Source/Core/VideoBackends/OGL/ProgramShaderCache.cpp +++ b/Source/Core/VideoBackends/OGL/ProgramShaderCache.cpp @@ -583,10 +583,6 @@ void ProgramShaderCache::CreateHeader() "#define frac fract\n" "#define lerp mix\n" - // Terrible hacks, look at DriverDetails.h - "%s\n" // replace textureSize as constant - "%s\n" // wipe out all centroid usages - , GetGLSLVersionString().c_str() , v Date: Tue, 1 Sep 2015 00:17:24 -0500 Subject: Properly support MSAA and SSAA as separate features(+GLES) SSAA relies on MSAA being active to work. We only supports 4x SSAA while in fact you can enable SSAA at any MSAA level. I even managed to run 64xMSAA + SSAA on my Quadro which made some pretty sleek looking games. They were very cinematic though. With this, it properly fixes up SSAA and MSAA support in GLES as well. Before they were broken when stereo rendering was enabled. Now in GLES they can properly support MSAA and also stereo rendering with MSAA enabled(with proper extensions). --- Source/Core/VideoBackends/OGL/ProgramShaderCache.cpp | 4 +++- 1 file changed, 3 insertions(+), 1 deletion(-) (limited to 'Source/Core/VideoBackends/OGL/ProgramShaderCache.cpp') diff --git a/Source/Core/VideoBackends/OGL/ProgramShaderCache.cpp b/Source/Core/VideoBackends/OGL/ProgramShaderCache.cpp index d6533c39d2..3a90656cb8 100644 --- a/Source/Core/VideoBackends/OGL/ProgramShaderCache.cpp +++ b/Source/Core/VideoBackends/OGL/ProgramShaderCache.cpp @@ -567,6 +567,7 @@ void ProgramShaderCache::CreateHeader() "%s\n" "%s\n" "%s\n" + "%s\n" // Silly differences "#define float2 vec2\n" @@ -588,7 +589,7 @@ void ProgramShaderCache::CreateHeader() , !is_glsles && g_ActiveConfig.backend_info.bSupportsEarlyZ ? "#extension GL_ARB_shader_image_load_store : enable" : "" , (g_ActiveConfig.backend_info.bSupportsBindingLayout && v < GLSLES_310) ? "#extension GL_ARB_shading_language_420pack : enable" : "" , (g_ogl_config.bSupportsMSAA && v < GLSL_150) ? "#extension GL_ARB_texture_multisample : enable" : "" - , (g_ogl_config.bSupportSampleShading) ? "#extension GL_ARB_sample_shading : enable" : "" + , (v < GLSLES_300 && g_ActiveConfig.backend_info.bSupportsSSAA) ? "#extension GL_ARB_sample_shading : enable" : "" , 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" : "" , !is_glsles && g_ActiveConfig.backend_info.bSupportsGSInstancing ? "#extension GL_ARB_gpu_shader5 : enable" : "" @@ -602,6 +603,7 @@ void ProgramShaderCache::CreateHeader() , is_glsles ? "precision highp int;" : "" , is_glsles ? "precision highp sampler2DArray;" : "" , (is_glsles && g_ActiveConfig.backend_info.bSupportsPaletteConversion) ? "precision highp usamplerBuffer;" : "" + , v > GLSLES_300 ? "precision highp sampler2DMS;" : "" ); } -- cgit v1.2.3 From 1c0366993a582e76333ed18421e92424261901f2 Mon Sep 17 00:00:00 2001 From: degasus Date: Sun, 6 Sep 2015 13:58:18 +0200 Subject: VideoBackends: Reimplement SSAA, now for D3D + OGL --- Source/Core/VideoBackends/OGL/ProgramShaderCache.cpp | 12 +++++++----- 1 file changed, 7 insertions(+), 5 deletions(-) (limited to 'Source/Core/VideoBackends/OGL/ProgramShaderCache.cpp') diff --git a/Source/Core/VideoBackends/OGL/ProgramShaderCache.cpp b/Source/Core/VideoBackends/OGL/ProgramShaderCache.cpp index 3a90656cb8..859f8a0f4c 100644 --- a/Source/Core/VideoBackends/OGL/ProgramShaderCache.cpp +++ b/Source/Core/VideoBackends/OGL/ProgramShaderCache.cpp @@ -58,6 +58,10 @@ static std::string GetGLSLVersionString() return "#version 140"; case GLSL_150: return "#version 150"; + case GLSL_330: + return "#version 330"; + case GLSL_400: + return "#version 400"; default: // Shouldn't ever hit this return "#version ERROR"; @@ -552,7 +556,6 @@ void ProgramShaderCache::CreateHeader() "%s\n" // early-z "%s\n" // 420pack "%s\n" // msaa - "%s\n" // sample shading "%s\n" // Sampler binding "%s\n" // storage buffer "%s\n" // shader5 @@ -585,17 +588,16 @@ void ProgramShaderCache::CreateHeader() "#define lerp mix\n" , GetGLSLVersionString().c_str() - , v Date: Mon, 7 Sep 2015 22:21:11 +0200 Subject: OGL: reimplement SSAA based on ARB_gpu_shader5 So i965 shall support it again. --- Source/Core/VideoBackends/OGL/ProgramShaderCache.cpp | 2 ++ 1 file changed, 2 insertions(+) (limited to 'Source/Core/VideoBackends/OGL/ProgramShaderCache.cpp') diff --git a/Source/Core/VideoBackends/OGL/ProgramShaderCache.cpp b/Source/Core/VideoBackends/OGL/ProgramShaderCache.cpp index 859f8a0f4c..d99509780f 100644 --- a/Source/Core/VideoBackends/OGL/ProgramShaderCache.cpp +++ b/Source/Core/VideoBackends/OGL/ProgramShaderCache.cpp @@ -559,6 +559,7 @@ void ProgramShaderCache::CreateHeader() "%s\n" // Sampler binding "%s\n" // storage buffer "%s\n" // shader5 + "%s\n" // SSAA "%s\n" // Geometry point size "%s\n" // AEP "%s\n" // texture buffer @@ -595,6 +596,7 @@ void ProgramShaderCache::CreateHeader() , 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" : "" , v < GLSL_400 && g_ActiveConfig.backend_info.bSupportsGSInstancing ? "#extension GL_ARB_gpu_shader5 : enable" : "" + , v < GLSL_400 && g_ActiveConfig.backend_info.bSupportsSSAA ? "#extension GL_ARB_sample_shading : enable" : "" , 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" : "" -- cgit v1.2.3