OGL: Disable geometry shaders on Intel's Windows drivers due to broken interface blocks.

This commit is contained in:
Jules Blok 2014-12-19 23:10:04 +01:00
parent b30802e2f0
commit bc3ed44050
3 changed files with 12 additions and 1 deletions

View File

@ -465,7 +465,8 @@ Renderer::Renderer()
g_Config.backend_info.bSupportsEarlyZ = GLExtensions::Supports("GL_ARB_shader_image_load_store"); 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.bSupportsBBox = GLExtensions::Supports("GL_ARB_shader_storage_buffer_object");
g_Config.backend_info.bSupportsGSInstancing = GLExtensions::Supports("GL_ARB_gpu_shader5"); 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 // Desktop OpenGL supports the binding layout if it supports 420pack
// OpenGL ES 3.1 supports it implicitly without an extension // OpenGL ES 3.1 supports it implicitly without an extension

View File

@ -59,6 +59,7 @@ namespace DriverDetails
{OS_WINDOWS,VENDOR_NVIDIA, DRIVER_NVIDIA, -1, BUG_BROKENUNSYNCMAPPING, -1.0, -1.0, true}, {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_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_INTELBROKENBUFFERSTORAGE, 101810.3907, 101810.3960, true},
{OS_WINDOWS,VENDOR_INTEL, DRIVER_INTEL, -1, BUG_INTELBROKENINTERFACEBLOCKS, -1.0, -1.0, true},
}; };
static std::map<Bug, BugInfo> m_bugs; static std::map<Bug, BugInfo> m_bugs;

View File

@ -200,6 +200,15 @@ namespace DriverDetails
// Broken on Windows Intel // Broken on Windows Intel
// if (cond == false) // if (cond == false)
BUG_BROKENNEGATEDBOOLEAN, 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,
}; };