From bc3ed44050391ea327375cebeb3b28b9bfefa205 Mon Sep 17 00:00:00 2001 From: Jules Blok Date: Fri, 19 Dec 2014 23:10:04 +0100 Subject: [PATCH] OGL: Disable geometry shaders on Intel's Windows drivers due to broken interface blocks. --- Source/Core/VideoBackends/OGL/Render.cpp | 3 ++- Source/Core/VideoCommon/DriverDetails.cpp | 1 + Source/Core/VideoCommon/DriverDetails.h | 9 +++++++++ 3 files changed, 12 insertions(+), 1 deletion(-) diff --git a/Source/Core/VideoBackends/OGL/Render.cpp b/Source/Core/VideoBackends/OGL/Render.cpp index 9baeb286a6..42af2521d9 100644 --- a/Source/Core/VideoBackends/OGL/Render.cpp +++ b/Source/Core/VideoBackends/OGL/Render.cpp @@ -465,7 +465,8 @@ Renderer::Renderer() g_Config.backend_info.bSupportsEarlyZ = GLExtensions::Supports("GL_ARB_shader_image_load_store"); g_Config.backend_info.bSupportsBBox = GLExtensions::Supports("GL_ARB_shader_storage_buffer_object"); g_Config.backend_info.bSupportsGSInstancing = GLExtensions::Supports("GL_ARB_gpu_shader5"); - g_Config.backend_info.bSupportsGeometryShaders = (GLExtensions::Version() >= 320); + g_Config.backend_info.bSupportsGeometryShaders = (GLExtensions::Version() >= 320) && + !DriverDetails::HasBug(DriverDetails::BUG_INTELBROKENINTERFACEBLOCKS); // Desktop OpenGL supports the binding layout if it supports 420pack // OpenGL ES 3.1 supports it implicitly without an extension diff --git a/Source/Core/VideoCommon/DriverDetails.cpp b/Source/Core/VideoCommon/DriverDetails.cpp index dbcd45133f..1a7baccc38 100644 --- a/Source/Core/VideoCommon/DriverDetails.cpp +++ b/Source/Core/VideoCommon/DriverDetails.cpp @@ -59,6 +59,7 @@ namespace DriverDetails {OS_WINDOWS,VENDOR_NVIDIA, DRIVER_NVIDIA, -1, BUG_BROKENUNSYNCMAPPING, -1.0, -1.0, true}, {OS_LINUX, VENDOR_NVIDIA, DRIVER_NVIDIA, -1, BUG_BROKENUNSYNCMAPPING, -1.0, -1.0, true}, {OS_WINDOWS,VENDOR_INTEL, DRIVER_INTEL, -1, BUG_INTELBROKENBUFFERSTORAGE, 101810.3907, 101810.3960, true}, + {OS_WINDOWS,VENDOR_INTEL, DRIVER_INTEL, -1, BUG_INTELBROKENINTERFACEBLOCKS, -1.0, -1.0, true}, }; static std::map m_bugs; diff --git a/Source/Core/VideoCommon/DriverDetails.h b/Source/Core/VideoCommon/DriverDetails.h index 278e339fac..c04114349b 100644 --- a/Source/Core/VideoCommon/DriverDetails.h +++ b/Source/Core/VideoCommon/DriverDetails.h @@ -200,6 +200,15 @@ namespace DriverDetails // Broken on Windows Intel // if (cond == false) BUG_BROKENNEGATEDBOOLEAN, + // Bug: Intel's Windows driver breaks interface blocks that contain structs. + // Affected devices: Intel (Windows) + // Started Version: -1 + // Ended Version: -1 + // We need interface blocks to make the geometry shader optional and we need structs to make + // assignment easier in the geometry shader stage. However Intel's Windows drivers don't seem + // to be able handle this combination. + // TODO: Find affected versions. + BUG_INTELBROKENINTERFACEBLOCKS, };