Merge pull request #6403 from degasus/master

OGL: Use glBufferData on Mali.
This commit is contained in:
Stenzek 2018-02-27 17:54:41 +10:00 committed by GitHub
commit 25a516bae3
No known key found for this signature in database
GPG Key ID: 4AEE18F83AFDEB23
3 changed files with 13 additions and 2 deletions

View File

@ -376,7 +376,12 @@ std::unique_ptr<StreamBuffer> StreamBuffer::Create(u32 type, u32 size)
// don't fall back to MapAnd* for Nvidia drivers
if (DriverDetails::HasBug(DriverDetails::BUG_BROKEN_UNSYNC_MAPPING))
{
if (DriverDetails::HasBug(DriverDetails::BUG_BROKEN_BUFFER_STREAM))
return std::make_unique<BufferData>(type, size);
else
return std::make_unique<BufferSubData>(type, size);
}
// mapping fallback
if (g_ogl_config.bSupportsGLSync)

View File

@ -82,6 +82,8 @@ static BugInfo m_known_bugs[] = {
BUG_BROKEN_UNSYNC_MAPPING, -1.0, -1.0, true},
{API_OPENGL, OS_LINUX, VENDOR_NVIDIA, DRIVER_NVIDIA, Family::UNKNOWN, BUG_BROKEN_UNSYNC_MAPPING,
-1.0, -1.0, true},
{API_OPENGL, OS_ALL, VENDOR_ARM, DRIVER_ARM, Family::UNKNOWN, BUG_BROKEN_UNSYNC_MAPPING, -1.0,
-1.0, true},
{API_OPENGL, OS_WINDOWS, VENDOR_INTEL, DRIVER_INTEL, Family::UNKNOWN,
BUG_INTEL_BROKEN_BUFFER_STORAGE, 101810.3907, 101810.3960, true},
{API_OPENGL, OS_ALL, VENDOR_ATI, DRIVER_ATI, Family::UNKNOWN, BUG_SLOW_GETBUFFERSUBDATA, -1.0,

View File

@ -125,13 +125,17 @@ enum Bug
// Intel HD 4000 series isn't affected by the bug
BUG_PRIMITIVE_RESTART,
// Bug: unsync mapping doesn't work fine
// Affected devices: Nvidia driver
// Affected devices: Nvidia driver, ARM Mali
// Started Version: -1
// Ended Version: -1
// The Nvidia driver (both Windows + Linux) doesn't like unsync mapping performance wise.
// Because of their threaded behavior, they seem not to handle unsync mapping complete unsync,
// in fact, they serialize the driver which adds a much bigger overhead.
// Workaround: Use BufferSubData
// The Mali behavior is even worse: They just ignore the unsychronized flag and stall the GPU.
// Workaround: As they were even too lazy to implement asynchronous buffer updates,
// BufferSubData stalls as well, so we have to use the slowest possible path:
// Alloc one buffer per draw call with BufferData.
// TODO: some Windows AMD driver/GPU combination seems also affected
// but as they all support pinned memory, it doesn't matter
BUG_BROKEN_UNSYNC_MAPPING,