From 3d5e0a6d3d45b07faa8c1047fab7d506c12376c3 Mon Sep 17 00:00:00 2001 From: degasus Date: Mon, 25 Mar 2013 15:14:24 +0100 Subject: move ogl-only settings into backend --- Source/Plugins/Plugin_VideoOGL/Src/ProgramShaderCache.cpp | 12 ++++++------ 1 file changed, 6 insertions(+), 6 deletions(-) (limited to 'Source/Plugins/Plugin_VideoOGL/Src/ProgramShaderCache.cpp') diff --git a/Source/Plugins/Plugin_VideoOGL/Src/ProgramShaderCache.cpp b/Source/Plugins/Plugin_VideoOGL/Src/ProgramShaderCache.cpp index 3739af5a90..4c516853d7 100644 --- a/Source/Plugins/Plugin_VideoOGL/Src/ProgramShaderCache.cpp +++ b/Source/Plugins/Plugin_VideoOGL/Src/ProgramShaderCache.cpp @@ -21,6 +21,7 @@ #include "Debugger.h" #include "Statistics.h" #include "ImageWrite.h" +#include "Render.h" namespace OGL { @@ -270,7 +271,7 @@ bool ProgramShaderCache::CompileShader ( SHADER& shader, const char* vcode, cons glAttachShader(pid, vsid); glAttachShader(pid, psid); - if (g_ActiveConfig.backend_info.bSupportsGLSLCache) + if (g_ogl_config.bSupportsGLSLCache) glProgramParameteri(pid, GL_PROGRAM_BINARY_RETRIEVABLE_HINT, GL_TRUE); shader.SetProgramBindings(); @@ -406,14 +407,14 @@ void ProgramShaderCache::Init(void) } // Read our shader cache, only if supported - if (g_ActiveConfig.backend_info.bSupportsGLSLCache) + if (g_ogl_config.bSupportsGLSLCache) { GLint Supported; glGetIntegerv(GL_NUM_PROGRAM_BINARY_FORMATS, &Supported); if(!Supported) { ERROR_LOG(VIDEO, "GL_ARB_get_program_binary is supported, but no binary format is known. So disable shader cache."); - g_ActiveConfig.backend_info.bSupportsGLSLCache = false; + g_ogl_config.bSupportsGLSLCache = false; } else { @@ -439,7 +440,7 @@ void ProgramShaderCache::Init(void) void ProgramShaderCache::Shutdown(void) { // store all shaders in cache on disk - if (g_ActiveConfig.backend_info.bSupportsGLSLCache) + if (g_ogl_config.bSupportsGLSLCache) { PCache::iterator iter = pshaders.begin(); for (; iter != pshaders.end(); ++iter) @@ -488,8 +489,7 @@ void ProgramShaderCache::CreateHeader ( void ) // as sandy do ogl3.1, glsl 140 is supported, so force it in this way. // TODO: remove this again when the issue is fixed: // see http://communities.intel.com/thread/36084 - char *vendor = (char*)glGetString(GL_VENDOR); - bool glsl140_hack = strcmp(vendor, "Intel") == 0; + bool glsl140_hack = strcmp(g_ogl_config.gl_vendor, "Intel") == 0; #elif __APPLE__ // as apple doesn't support glsl130 at all, we also have to use glsl140 bool glsl140_hack = true; -- cgit v1.2.3 From 31500f252212a5aa3ffb779b7bac52a14f25908c Mon Sep 17 00:00:00 2001 From: Ryan Houdek Date: Sat, 30 Mar 2013 23:27:24 -0500 Subject: Fix Intel Ironlake since it doesn't support version 120 of GLSL. I don't have Ironlake so it is hard to test. Dropping the shaders to version 120 worked here for me, ATI may be giving me some slack though. --- Source/Plugins/Plugin_VideoOGL/Src/ProgramShaderCache.cpp | 6 +++++- 1 file changed, 5 insertions(+), 1 deletion(-) (limited to 'Source/Plugins/Plugin_VideoOGL/Src/ProgramShaderCache.cpp') diff --git a/Source/Plugins/Plugin_VideoOGL/Src/ProgramShaderCache.cpp b/Source/Plugins/Plugin_VideoOGL/Src/ProgramShaderCache.cpp index 4c516853d7..5f4df23eca 100644 --- a/Source/Plugins/Plugin_VideoOGL/Src/ProgramShaderCache.cpp +++ b/Source/Plugins/Plugin_VideoOGL/Src/ProgramShaderCache.cpp @@ -496,6 +496,10 @@ void ProgramShaderCache::CreateHeader ( void ) #else bool glsl140_hack = false; #endif + // Intel HD Graphics on the Ironlake chipset has been abandoned by Intel + // It supports every feature we need but not GLSL 1.3 + // This is to check if it is Ironlake then drop to GLSL 1.2 + bool glsl120_hack = strstr(g_ogl_config.gl_renderer, "Ironlake") != 0; snprintf(s_glsl_header, sizeof(s_glsl_header), "#version %s\n" @@ -519,7 +523,7 @@ void ProgramShaderCache::CreateHeader ( void ) "#define lerp(x, y, z) mix(x, y, z)\n" - , glsl140_hack ? "140" : "130" + , glsl120_hack ? "120" : glsl140_hack ? "140" : "130" , glsl140_hack ? "#define texture2DRect texture" : "#extension GL_ARB_texture_rectangle : enable" , g_ActiveConfig.backend_info.bSupportsGLSLUBO && !glsl140_hack ? "#extension GL_ARB_uniform_buffer_object : enable" : "// ubo disabled" ); -- cgit v1.2.3 From 4c40e70b8af839f84d7d9b8306116cabf3965cdb Mon Sep 17 00:00:00 2001 From: degasus Date: Mon, 8 Apr 2013 14:50:58 +0200 Subject: ogl: support glsl120 --- .../Plugin_VideoOGL/Src/ProgramShaderCache.cpp | 60 ++++++++++++---------- 1 file changed, 33 insertions(+), 27 deletions(-) (limited to 'Source/Plugins/Plugin_VideoOGL/Src/ProgramShaderCache.cpp') diff --git a/Source/Plugins/Plugin_VideoOGL/Src/ProgramShaderCache.cpp b/Source/Plugins/Plugin_VideoOGL/Src/ProgramShaderCache.cpp index 5f4df23eca..53eb41877e 100644 --- a/Source/Plugins/Plugin_VideoOGL/Src/ProgramShaderCache.cpp +++ b/Source/Plugins/Plugin_VideoOGL/Src/ProgramShaderCache.cpp @@ -123,8 +123,15 @@ void SHADER::SetProgramBindings() glBindFragDataLocationIndexed(glprogid, 0, 0, "ocol0"); glBindFragDataLocationIndexed(glprogid, 0, 1, "ocol1"); } - else + else if(g_ogl_config.eSupportedGLSLVersion > GLSL_120) + { glBindFragDataLocation(glprogid, 0, "ocol0"); + } + else + { + // ogl2 shaders don't need to bind output colors. + // gl_FragColor already point to color channel + } // Need to set some attribute locations glBindAttribLocation(glprogid, SHADER_POSITION_ATTRIB, "rawpos"); @@ -482,35 +489,17 @@ void ProgramShaderCache::Shutdown(void) void ProgramShaderCache::CreateHeader ( void ) { -#ifdef _WIN32 - // Intel Windows driver has a issue: - // their glsl doesn't know about the ubo extension, so we can't load it. - // but as version 140, ubo is in core and don't have to be loaded in glsl. - // as sandy do ogl3.1, glsl 140 is supported, so force it in this way. - // TODO: remove this again when the issue is fixed: - // see http://communities.intel.com/thread/36084 - bool glsl140_hack = strcmp(g_ogl_config.gl_vendor, "Intel") == 0; -#elif __APPLE__ - // as apple doesn't support glsl130 at all, we also have to use glsl140 - bool glsl140_hack = true; -#else - bool glsl140_hack = false; -#endif - // Intel HD Graphics on the Ironlake chipset has been abandoned by Intel - // It supports every feature we need but not GLSL 1.3 - // This is to check if it is Ironlake then drop to GLSL 1.2 - bool glsl120_hack = strstr(g_ogl_config.gl_renderer, "Ironlake") != 0; - + GLSL_VERSION v = g_ogl_config.eSupportedGLSLVersion; snprintf(s_glsl_header, sizeof(s_glsl_header), "#version %s\n" "%s\n" // tex_rect "%s\n" // ubo "\n"// A few required defines and ones that will make our lives a lot easier - "#define ATTRIN in\n" - "#define ATTROUT out\n" - "#define VARYIN centroid in\n" - "#define VARYOUT centroid out\n" + "#define ATTRIN %s\n" + "#define ATTROUT %s\n" + "#define VARYIN %s\n" + "#define VARYOUT %s\n" // Silly differences "#define float2 vec2\n" @@ -522,10 +511,27 @@ void ProgramShaderCache::CreateHeader ( void ) "#define saturate(x) clamp(x, 0.0f, 1.0f)\n" "#define lerp(x, y, z) mix(x, y, z)\n" + // glsl 120 hack + "%s\n" + "%s\n" + "%s\n" + "%s\n" + "%s\n" + "#define COLOROUT(name) %s\n" - , glsl120_hack ? "120" : glsl140_hack ? "140" : "130" - , glsl140_hack ? "#define texture2DRect texture" : "#extension GL_ARB_texture_rectangle : enable" - , g_ActiveConfig.backend_info.bSupportsGLSLUBO && !glsl140_hack ? "#extension GL_ARB_uniform_buffer_object : enable" : "// ubo disabled" + , v==GLSL_120 ? "120" : v==GLSL_130 ? "130" : "140" + , v<=GLSL_130 ? "#extension GL_ARB_texture_rectangle : enable" : "#define texture2DRect texture" + , g_ActiveConfig.backend_info.bSupportsGLSLUBO && v!=GLSL_140 ? "#extension GL_ARB_uniform_buffer_object : enable" : "" + , v==GLSL_120 ? "attribute" : "in" + , v==GLSL_120 ? "attribute" : "out" + , v==GLSL_120 ? "varying" : "centroid in" + , v==GLSL_120 ? "varying" : "centroid out" + , v==GLSL_120 ? "#define texture texture2D" : "" + , v==GLSL_120 ? "#define round(x) floor((x)+0.5f)" : "" + , v==GLSL_120 ? "#define out " : "" + , v==GLSL_120 ? "#define ocol0 gl_FragColor" : "" + , v==GLSL_120 ? "#define ocol1 gl_FragColor" : "" //TODO: implemenet dual source blend + , v==GLSL_120 ? "" : "out vec4 name;" ); } -- cgit v1.2.3