From 483b5a75e8052e7965db3003a3d2f0443a03e282 Mon Sep 17 00:00:00 2001 From: Gregory Hainaut Date: Sat, 29 Mar 2014 10:47:53 +0100 Subject: [PATCH] gsdx ogl: automatic setup of geometry shader * disable it for gallium Mesa driver * Re-enable it for Nvidia driver --- plugins/GSdx/GLLoader.cpp | 18 +++++++++++------- plugins/GSdx/GLLoader.h | 1 + 2 files changed, 12 insertions(+), 7 deletions(-) diff --git a/plugins/GSdx/GLLoader.cpp b/plugins/GSdx/GLLoader.cpp index 71dd1b5eec..60f91813a9 100644 --- a/plugins/GSdx/GLLoader.cpp +++ b/plugins/GSdx/GLLoader.cpp @@ -124,10 +124,11 @@ PFNGLDEPTHRANGEDNVPROC gl_DepthRangedNV = NULL; namespace GLLoader { - bool fglrx_buggy_driver = false; - bool nvidia_buggy_driver = false; - bool intel_buggy_driver = false; - bool in_replayer = false; + bool fglrx_buggy_driver = false; + bool mesa_amd_buggy_driver = false; + bool nvidia_buggy_driver = false; + bool intel_buggy_driver = false; + bool in_replayer = false; // Optional bool found_GL_ARB_separate_shader_objects = false; @@ -139,14 +140,14 @@ namespace GLLoader { // GL4 hardware bool found_GL_ARB_copy_image = false; // Not sure actually maybe GL3 GPU can do it bool found_GL_ARB_gpu_shader5 = false; - bool found_GL_ARB_shader_image_load_store = false; + bool found_GL_ARB_shader_image_load_store = false; // GLES3.1 bool found_GL_ARB_shader_subroutine = false; bool found_GL_ARB_bindless_texture = false; // GL5 GPU? // Surely recent hardware bool found_GL_NV_depth_buffer_float = false; // Mandatory for FULL GL (but optional for GLES) - bool found_GL_ARB_multi_bind = false; // Not yet. Wait Mesa & AMD drivers. Note might be deprecated by bindless_texture + bool found_GL_ARB_multi_bind = false; // Not yet. Wait Mesa & AMD drivers. bool found_GL_ARB_shading_language_420pack = false; // GLES 3.1 ??? // Mandatory @@ -182,6 +183,7 @@ namespace GLLoader { const char* vendor = (const char*)glGetString(GL_VENDOR); fprintf(stderr, "Supported Opengl version: %s on GPU: %s. Vendor: %s\n", s, glGetString(GL_RENDERER), vendor); + fprintf(stderr, "Note: the maximal version supported by GSdx is 3.3 (even if you driver support more)!\n"); // Name change but driver is still bad! if (strstr(vendor, "ATI") || strstr(vendor, "Advanced Micro Devices")) @@ -190,6 +192,8 @@ namespace GLLoader { nvidia_buggy_driver = true; if (strstr(vendor, "Intel")) intel_buggy_driver = true; + if (strstr(vendor, "X.Org")) // Note: it might actually catch nouveau too, but bug are likely to be the same anyway + mesa_amd_buggy_driver = true; GLuint dot = 0; while (s[dot] != '\0' && s[dot] != '.') dot++; @@ -203,7 +207,7 @@ namespace GLLoader { fprintf(stderr, "Geometry shaders are not supported. Required openGL 3.2\n"); found_geometry_shader = false; } - if (nvidia_buggy_driver || intel_buggy_driver) { + if (mesa_amd_buggy_driver || intel_buggy_driver) { fprintf(stderr, "Buggy driver detected. Geometry shaders will be disabled\n"); found_geometry_shader = false; } diff --git a/plugins/GSdx/GLLoader.h b/plugins/GSdx/GLLoader.h index cab86469ed..5a92238654 100644 --- a/plugins/GSdx/GLLoader.h +++ b/plugins/GSdx/GLLoader.h @@ -276,6 +276,7 @@ namespace GLLoader { bool check_gl_supported_extension(); extern bool fglrx_buggy_driver; + extern bool mesa_amd_buggy_driver; extern bool nvidia_buggy_driver; extern bool intel_buggy_driver; extern bool in_replayer;