Work around Intel's failings with with buffer_storage
This commit is contained in:
parent
f9650c52f8
commit
e32b2e1771
|
@ -315,17 +315,22 @@ static void InitDriverInfo()
|
||||||
version = 100*major + 10*minor + release;
|
version = 100*major + 10*minor + release;
|
||||||
}
|
}
|
||||||
break;
|
break;
|
||||||
case DriverDetails::VENDOR_INTEL: // Happens in OS X
|
case DriverDetails::VENDOR_INTEL: // Happens in OS X/Windows
|
||||||
|
{
|
||||||
sscanf(g_ogl_config.gl_renderer, "Intel HD Graphics %d", &family);
|
sscanf(g_ogl_config.gl_renderer, "Intel HD Graphics %d", &family);
|
||||||
/*
|
#ifdef _WIN32
|
||||||
int glmajor = 0;
|
int glmajor = 0;
|
||||||
int glminor = 0;
|
int glminor = 0;
|
||||||
int major = 0;
|
int major = 0;
|
||||||
int minor = 0;
|
int minor = 0;
|
||||||
int release = 0;
|
int release = 0;
|
||||||
sscanf(g_ogl_config.gl_version, "%d.%d INTEL-%d.%d.%d", &glmajor, &glminor, &major, &minor, &release);
|
int revision = 0;
|
||||||
version = 10000*major + 1000*minor + release;
|
// Example version string: '4.3.0 - Build 10.18.10.3907'
|
||||||
*/
|
sscanf(g_ogl_config.gl_version, "%d.%d.0 - Build %d.%d.%d.%d", &glmajor, &glminor, &major, &minor, &release, &revision);
|
||||||
|
version = 100000000 * major + 1000000 * minor + 10000 * release + revision;
|
||||||
|
version /= 10000;
|
||||||
|
#endif
|
||||||
|
}
|
||||||
break;
|
break;
|
||||||
case DriverDetails::VENDOR_NVIDIA:
|
case DriverDetails::VENDOR_NVIDIA:
|
||||||
{
|
{
|
||||||
|
|
|
@ -378,7 +378,8 @@ StreamBuffer* StreamBuffer::Create(u32 type, u32 size)
|
||||||
|
|
||||||
// buffer storage works well in most situations
|
// buffer storage works well in most situations
|
||||||
if (g_ogl_config.bSupportsGLBufferStorage &&
|
if (g_ogl_config.bSupportsGLBufferStorage &&
|
||||||
!(DriverDetails::HasBug(DriverDetails::BUG_BROKENBUFFERSTORAGE) && type == GL_ARRAY_BUFFER))
|
!(DriverDetails::HasBug(DriverDetails::BUG_BROKENBUFFERSTORAGE) && type == GL_ARRAY_BUFFER) &&
|
||||||
|
!(DriverDetails::HasBug(DriverDetails::BUG_INTELBROKENBUFFERSTORAGE) && type == GL_ELEMENT_ARRAY_BUFFER))
|
||||||
return new BufferStorage(type, size);
|
return new BufferStorage(type, size);
|
||||||
|
|
||||||
// don't fall back to MapAnd* for nvidia drivers
|
// don't fall back to MapAnd* for nvidia drivers
|
||||||
|
|
|
@ -57,6 +57,7 @@ namespace DriverDetails
|
||||||
{OS_OSX, VENDOR_INTEL, DRIVER_INTEL, 3000, BUG_PRIMITIVERESTART, -1.0, -1.0, true},
|
{OS_OSX, VENDOR_INTEL, DRIVER_INTEL, 3000, BUG_PRIMITIVERESTART, -1.0, -1.0, true},
|
||||||
{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, -1.0, true},
|
||||||
};
|
};
|
||||||
|
|
||||||
static std::map<Bug, BugInfo> m_bugs;
|
static std::map<Bug, BugInfo> m_bugs;
|
||||||
|
|
|
@ -174,6 +174,14 @@ namespace DriverDetails
|
||||||
// Qualcomm in their infinite wisdom thought it was a good idea to rotate the framebuffer 180 degrees on glBlit
|
// Qualcomm in their infinite wisdom thought it was a good idea to rotate the framebuffer 180 degrees on glBlit
|
||||||
// This bug allows us to work around that rotation by rotating it the right way around again.
|
// This bug allows us to work around that rotation by rotating it the right way around again.
|
||||||
BUG_ROTATEDFRAMEBUFFER,
|
BUG_ROTATEDFRAMEBUFFER,
|
||||||
|
// Bug: Intel's Window driver broke buffer_storage with GL_ELEMENT_ARRAY_BUFFER
|
||||||
|
// Affected devices: Intel (Windows)
|
||||||
|
// Started Version: 15.36.3.64.3907 (10.18.10.3907)
|
||||||
|
// Ended Version: -1
|
||||||
|
// Intel implemented buffer_storage in their GL 4.3 driver.
|
||||||
|
// It works for all the buffer types we use except GL_ELEMENT_ARRAY_BUFFER.
|
||||||
|
// Causes complete blackscreen issues.
|
||||||
|
BUG_INTELBROKENBUFFERSTORAGE,
|
||||||
};
|
};
|
||||||
|
|
||||||
// Initializes our internal vendor, device family, and driver version
|
// Initializes our internal vendor, device family, and driver version
|
||||||
|
|
Loading…
Reference in New Issue