From 35c35fc26faab72eba551671903003fe833ad2d6 Mon Sep 17 00:00:00 2001 From: Magnus Norddahl Date: Fri, 7 Apr 2017 15:27:04 +0200 Subject: [PATCH 1/3] - Check if glCreateProgram or glCreateShader fails, because apparently AMD found a way to make exactly that happen --- src/gl/system/gl_swframebuffer.cpp | 3 +++ 1 file changed, 3 insertions(+) diff --git a/src/gl/system/gl_swframebuffer.cpp b/src/gl/system/gl_swframebuffer.cpp index b3de63eee9..c391c49309 100644 --- a/src/gl/system/gl_swframebuffer.cpp +++ b/src/gl/system/gl_swframebuffer.cpp @@ -360,8 +360,11 @@ bool OpenGLSWFrameBuffer::CreatePixelShader(FString vertexsrc, FString fragments auto shader = std::make_unique(); shader->Program = glCreateProgram(); + if (shader->Program == 0) { Printf("glCreateProgram failed. Disabling OpenGL hardware acceleration.\n"); return false; } shader->VertexShader = glCreateShader(GL_VERTEX_SHADER); + if (shader->VertexShader == 0) { Printf("glCreateShader(GL_VERTEX_SHADER) failed. Disabling OpenGL hardware acceleration.\n"); return false; } shader->FragmentShader = glCreateShader(GL_FRAGMENT_SHADER); + if (shader->FragmentShader == 0) { Printf("glCreateShader(GL_FRAGMENT_SHADER) failed. Disabling OpenGL hardware acceleration.\n"); return false; } int maxGlslVersion = 330; int shaderVersion = MIN((int)round(gl.glslversion * 10) * 10, maxGlslVersion); From 73effc70bb78f10657370b9fccd20bd05bf052d6 Mon Sep 17 00:00:00 2001 From: Magnus Norddahl Date: Fri, 7 Apr 2017 15:45:08 +0200 Subject: [PATCH 2/3] - The legacy OpenGL path resets the GLSL version, which in turn makes #version 0 crash the AMD driver. Old stuff that uses the legacy path will not get glswfb acceleration. --- src/gl/system/gl_swframebuffer.cpp | 5 +++++ 1 file changed, 5 insertions(+) diff --git a/src/gl/system/gl_swframebuffer.cpp b/src/gl/system/gl_swframebuffer.cpp index c391c49309..15cabc68e2 100644 --- a/src/gl/system/gl_swframebuffer.cpp +++ b/src/gl/system/gl_swframebuffer.cpp @@ -214,6 +214,11 @@ OpenGLSWFrameBuffer::OpenGLSWFrameBuffer(void *hMonitor, int width, int height, return; } gl_LoadExtensions(); + if (gl.legacyMode) + { + Printf("Legacy OpenGL path is active. No Acceleration will be used.\n"); + return; + } InitializeState(); if (first) { From 3a36ffee353af231328083689dbb920b1b6c7632 Mon Sep 17 00:00:00 2001 From: Rachael Alexanderson Date: Fri, 7 Apr 2017 09:53:59 -0400 Subject: [PATCH 3/3] - vid_glswfb is now true by default in Linux --- src/posix/sdl/sdlglvideo.cpp | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/posix/sdl/sdlglvideo.cpp b/src/posix/sdl/sdlglvideo.cpp index 12f33da403..106b98d79e 100644 --- a/src/posix/sdl/sdlglvideo.cpp +++ b/src/posix/sdl/sdlglvideo.cpp @@ -62,7 +62,7 @@ CUSTOM_CVAR(Bool, gl_debug, false, CVAR_ARCHIVE | CVAR_GLOBALCONFIG | CVAR_NOINI { Printf("This won't take effect until " GAMENAME " is restarted.\n"); } -CUSTOM_CVAR(Bool, vid_glswfb, false, CVAR_ARCHIVE | CVAR_GLOBALCONFIG | CVAR_NOINITCALL) +CUSTOM_CVAR(Bool, vid_glswfb, true, CVAR_ARCHIVE | CVAR_GLOBALCONFIG | CVAR_NOINITCALL) { Printf("This won't take effect until " GAMENAME " is restarted.\n"); }