Merge pull request #6954 from degasus/coherent
OGL/Streambuffer: Use coherent mapping by default.
This commit is contained in:
commit
36ff2a20d5
|
@ -216,7 +216,7 @@ public:
|
||||||
class BufferStorage : public StreamBuffer
|
class BufferStorage : public StreamBuffer
|
||||||
{
|
{
|
||||||
public:
|
public:
|
||||||
BufferStorage(u32 type, u32 size, bool _coherent = false)
|
BufferStorage(u32 type, u32 size, bool _coherent = true)
|
||||||
: StreamBuffer(type, size), coherent(_coherent)
|
: StreamBuffer(type, size), coherent(_coherent)
|
||||||
{
|
{
|
||||||
CreateFences();
|
CreateFences();
|
||||||
|
@ -368,13 +368,12 @@ std::unique_ptr<StreamBuffer> StreamBuffer::Create(u32 type, u32 size)
|
||||||
return std::make_unique<PinnedMemory>(type, size);
|
return std::make_unique<PinnedMemory>(type, size);
|
||||||
|
|
||||||
// buffer storage works well in most situations
|
// buffer storage works well in most situations
|
||||||
bool coherent = DriverDetails::HasBug(DriverDetails::BUG_BROKEN_EXPLICIT_FLUSH);
|
|
||||||
if (g_ogl_config.bSupportsGLBufferStorage &&
|
if (g_ogl_config.bSupportsGLBufferStorage &&
|
||||||
!(DriverDetails::HasBug(DriverDetails::BUG_BROKEN_BUFFER_STORAGE) &&
|
!(DriverDetails::HasBug(DriverDetails::BUG_BROKEN_BUFFER_STORAGE) &&
|
||||||
type == GL_ARRAY_BUFFER) &&
|
type == GL_ARRAY_BUFFER) &&
|
||||||
!(DriverDetails::HasBug(DriverDetails::BUG_INTEL_BROKEN_BUFFER_STORAGE) &&
|
!(DriverDetails::HasBug(DriverDetails::BUG_INTEL_BROKEN_BUFFER_STORAGE) &&
|
||||||
type == GL_ELEMENT_ARRAY_BUFFER))
|
type == GL_ELEMENT_ARRAY_BUFFER))
|
||||||
return std::make_unique<BufferStorage>(type, size, coherent);
|
return std::make_unique<BufferStorage>(type, size);
|
||||||
|
|
||||||
// don't fall back to MapAnd* for Nvidia drivers
|
// don't fall back to MapAnd* for Nvidia drivers
|
||||||
if (DriverDetails::HasBug(DriverDetails::BUG_BROKEN_UNSYNC_MAPPING))
|
if (DriverDetails::HasBug(DriverDetails::BUG_BROKEN_UNSYNC_MAPPING))
|
||||||
|
|
|
@ -52,8 +52,6 @@ static BugInfo m_known_bugs[] = {
|
||||||
BUG_BROKEN_BUFFER_STREAM, -1.0, -1.0, true},
|
BUG_BROKEN_BUFFER_STREAM, -1.0, -1.0, true},
|
||||||
{API_OPENGL, OS_ALL, VENDOR_QUALCOMM, DRIVER_QUALCOMM, Family::UNKNOWN,
|
{API_OPENGL, OS_ALL, VENDOR_QUALCOMM, DRIVER_QUALCOMM, Family::UNKNOWN,
|
||||||
BUG_BROKEN_NEGATED_BOOLEAN, -1.0, -1.0, true},
|
BUG_BROKEN_NEGATED_BOOLEAN, -1.0, -1.0, true},
|
||||||
{API_OPENGL, OS_ALL, VENDOR_QUALCOMM, DRIVER_QUALCOMM, Family::UNKNOWN,
|
|
||||||
BUG_BROKEN_EXPLICIT_FLUSH, -1.0, -1.0, true},
|
|
||||||
{API_OPENGL, OS_ALL, VENDOR_ARM, DRIVER_ARM, Family::UNKNOWN, BUG_BROKEN_BUFFER_STREAM, -1.0,
|
{API_OPENGL, OS_ALL, VENDOR_ARM, DRIVER_ARM, Family::UNKNOWN, BUG_BROKEN_BUFFER_STREAM, -1.0,
|
||||||
-1.0, true},
|
-1.0, true},
|
||||||
{API_OPENGL, OS_ALL, VENDOR_ARM, DRIVER_ARM, Family::UNKNOWN, BUG_BROKEN_VSYNC, -1.0, -1.0,
|
{API_OPENGL, OS_ALL, VENDOR_ARM, DRIVER_ARM, Family::UNKNOWN, BUG_BROKEN_VSYNC, -1.0, -1.0,
|
||||||
|
|
|
@ -200,15 +200,6 @@ enum Bug
|
||||||
// Causes misrenderings on a large amount of things that draw lines.
|
// Causes misrenderings on a large amount of things that draw lines.
|
||||||
BUG_BROKEN_GEOMETRY_SHADERS,
|
BUG_BROKEN_GEOMETRY_SHADERS,
|
||||||
|
|
||||||
// Bug: Explicit flush is very slow on Qualcomm
|
|
||||||
// Started Version: -1
|
|
||||||
// Ended Version: -1
|
|
||||||
// Our ARB_buffer_storage code uses explicit flush to avoid coherent mapping.
|
|
||||||
// Qualcomm seems to have lots of overhead on explicit flushing, but the coherent mapping path is
|
|
||||||
// fine.
|
|
||||||
// So let's use coherent mapping there.
|
|
||||||
BUG_BROKEN_EXPLICIT_FLUSH,
|
|
||||||
|
|
||||||
// Bug: glGetBufferSubData for bounding box reads is slow on AMD drivers
|
// Bug: glGetBufferSubData for bounding box reads is slow on AMD drivers
|
||||||
// Started Version: -1
|
// Started Version: -1
|
||||||
// Ended Version: -1
|
// Ended Version: -1
|
||||||
|
|
Loading…
Reference in New Issue