From e958eca3ed012af208d35fdb2690d8062f267778 Mon Sep 17 00:00:00 2001 From: fzurita Date: Mon, 16 Apr 2018 00:46:35 -0400 Subject: [PATCH] Disable usage of *_fragment_shader_interlock with tegra It causes lockups with at least Tegra X1. --- src/Graphics/OpenGLContext/opengl_GLInfo.cpp | 8 ++++++-- src/Graphics/OpenGLContext/opengl_GLInfo.h | 1 + 2 files changed, 7 insertions(+), 2 deletions(-) diff --git a/src/Graphics/OpenGLContext/opengl_GLInfo.cpp b/src/Graphics/OpenGLContext/opengl_GLInfo.cpp index 8f97b92f..387a86a5 100644 --- a/src/Graphics/OpenGLContext/opengl_GLInfo.cpp +++ b/src/Graphics/OpenGLContext/opengl_GLInfo.cpp @@ -40,6 +40,8 @@ void GLInfo::init() { renderer = Renderer::Intel; else if (strstr((const char*)strRenderer, "PowerVR") != nullptr) renderer = Renderer::PowerVR; + else if (strstr((const char*)strRenderer, "NVIDIA Tegra") != nullptr) + renderer = Renderer::Tegra; LOG(LOG_VERBOSE, "OpenGL renderer: %s\n", strRenderer); int numericVersion = majorVersion * 10 + minorVersion; @@ -55,8 +57,10 @@ void GLInfo::init() { msaa = true; } - fragment_interlock = Utils::isExtensionSupported(*this, "GL_ARB_fragment_shader_interlock"); - fragment_interlockNV = Utils::isExtensionSupported(*this, "GL_NV_fragment_shader_interlock") && !fragment_interlock; + //Tegra has a buggy implementation of fragment_shader_interlock that causes graphics lockups + bool hasBuggyFragmentShaderInterlock = renderer == Renderer::Tegra; + fragment_interlock = Utils::isExtensionSupported(*this, "GL_ARB_fragment_shader_interlock") && !hasBuggyFragmentShaderInterlock; + fragment_interlockNV = Utils::isExtensionSupported(*this, "GL_NV_fragment_shader_interlock") && !fragment_interlock && !hasBuggyFragmentShaderInterlock; fragment_ordering = Utils::isExtensionSupported(*this, "GL_INTEL_fragment_shader_ordering") && !fragment_interlock && !fragment_interlockNV; imageTextures = imageTextures && (fragment_interlock || fragment_interlockNV || fragment_ordering); diff --git a/src/Graphics/OpenGLContext/opengl_GLInfo.h b/src/Graphics/OpenGLContext/opengl_GLInfo.h index 60f4f876..e5ad1b5d 100644 --- a/src/Graphics/OpenGLContext/opengl_GLInfo.h +++ b/src/Graphics/OpenGLContext/opengl_GLInfo.h @@ -10,6 +10,7 @@ enum class Renderer { VideoCore, Intel, PowerVR, + Tegra, Other };