dolphin/Source/Core/VideoBackends/OGL
Markus Wick 227db66e4f OGL: Use glBufferData on Mali.
tl;dr: This PR speedups dolphin on mobiles with the Mali GPU and ES 3.2
drivers by a factor of 10 by using the method with the biggest overhead.
Please keep care not to buy this shit!

The ARM driver team seems to care very well about their customers. But
bad luck, users and open source developers are *not* their customers. So
even device-independent feature requests are just ignored for *years*:

https://community.arm.com/graphics/f/discussions/4645/gl_ext_buffer_storage-support

The bad point, they neither implement any of the other common ways to
stream dynamic content in unextented GL:
- They just ignore the GL_MAP_UNSYNCHRONIZED_BIT flag
- They don't support on-device buffer updates and just stall with
glBufferSubData

It seems like no benchmark is using any dynamic content - and like no
customer cares about anything but benchmarks, or users...

We have a flag to disable the glBufferSubData way, this PR adds the flag
to also disable the unsychronized mapping way. The second one is
available since their ES 3.2 update, but slow as hell.

So how to continue? The last remaining technical way to stream dynamic
content at all is to alloc a new buffer per draw call with glBufferData.
This is very gross, but still a factor 10 speedup compared to stalling
the GPU. Small tests shows that you can expect another 3-5 times speedup
with EXT_buffer_data, so Mali would be on pair with Adreno here. So if
you have bought such a device unfortunately, please try to make noise on
your vendor forums/support and ask for this extension. If you are going
to buy a new mobile, I'd recormend to avoid *any* mobile with a Mali GPU
in it.
2018-02-25 17:12:36 +01:00
..
BoundingBox.cpp videoconfig: add BBoxPreferStencilImplementation 2017-03-15 17:41:33 -07:00
BoundingBox.h OGL: only create stencil buffer when needed 2017-03-15 17:41:33 -07:00
CMakeLists.txt VideoBackends: Add AbstractShader and AbstractPipeline classes 2018-02-22 22:02:34 +10:00
FramebufferManager.cpp OGL: Track state of last bound vertex array object 2018-02-22 19:08:52 +10:00
FramebufferManager.h Remove old XFB logic 2017-11-17 22:11:29 -06:00
GPUTimer.h OGL: Add GPUTimer class for measuring execution time of a draw/dispatch 2017-04-01 12:32:57 +10:00
NativeVertexFormat.cpp OGL/VertexManager: Make vertex and index buffer handles private 2017-09-02 20:51:54 -04:00
OGL.vcxproj VideoBackends: Add AbstractShader and AbstractPipeline classes 2018-02-22 22:02:34 +10:00
OGL.vcxproj.filters VideoBackends: Add AbstractShader and AbstractPipeline classes 2018-02-22 22:02:34 +10:00
OGLPipeline.cpp VideoBackends: Add AbstractShader and AbstractPipeline classes 2018-02-22 22:02:34 +10:00
OGLPipeline.h VideoBackends: Add AbstractShader and AbstractPipeline classes 2018-02-22 22:02:34 +10:00
OGLShader.cpp VideoBackends: Add AbstractShader and AbstractPipeline classes 2018-02-22 22:02:34 +10:00
OGLShader.h VideoBackends: Add AbstractShader and AbstractPipeline classes 2018-02-22 22:02:34 +10:00
OGLTexture.cpp Merge pull request #6367 from stenzek/gl-flush 2018-02-19 16:26:35 +01:00
OGLTexture.h AbstractTexture: Move Bind() method to Renderer 2018-01-22 13:22:09 +10:00
PerfQuery.cpp Improve PerfQuery accuracy 2016-07-04 18:54:49 +10:00
PerfQuery.h Reformat all the things. Have fun with merge conflicts. 2016-06-24 10:43:46 +02:00
PostProcessing.cpp OGL: Track state of last bound vertex array object 2018-02-22 19:08:52 +10:00
PostProcessing.h VideoCommon: Move the blit methods to the backend class 2017-04-25 14:25:41 +10:00
ProgramShaderCache.cpp OGL: Only create bad shader files in Dump when compile failed 2018-02-25 18:03:58 +10:00
ProgramShaderCache.h VideoBackends: Add AbstractShader and AbstractPipeline classes 2018-02-22 22:02:34 +10:00
RasterFont.cpp OGL: Track state of last bound vertex array object 2018-02-22 19:08:52 +10:00
RasterFont.h Reformat all the things. Have fun with merge conflicts. 2016-06-24 10:43:46 +02:00
Render.cpp Merge pull request #6042 from stenzek/videocommon-pipelines 2018-02-23 09:18:19 -08:00
Render.h VideoBackends: Add AbstractShader and AbstractPipeline classes 2018-02-22 22:02:34 +10:00
SamplerCache.cpp Fixed fog, lava, water in Mario Galaxy (and possibly other games) in higher IRs by detecting & fixing the mipmaps that aren't just used for downscaling, but are handmade to create a gradient. 2017-10-27 00:45:20 -07:00
SamplerCache.h VideoBackends: Move SamplerState to common 2017-09-11 20:01:54 +10:00
StreamBuffer.cpp OGL: Use glBufferData on Mali. 2018-02-25 17:12:36 +01:00
StreamBuffer.h ShaderGenCommon: Remove unnecessary includes 2017-02-01 12:19:55 -05:00
TextureCache.cpp OGL: Track state of last bound vertex array object 2018-02-22 19:08:52 +10:00
TextureCache.h VideoCommon: Drop now unused efb2tex matrix generation. 2017-12-06 09:30:03 +01:00
TextureConverter.cpp OGL: Track state of last bound vertex array object 2018-02-22 19:08:52 +10:00
TextureConverter.h Remove old XFB logic 2017-11-17 22:11:29 -06:00
VertexManager.cpp VideoBackends: Add AbstractShader and AbstractPipeline classes 2018-02-22 22:02:34 +10:00
VertexManager.h VideoBackends: Add AbstractShader and AbstractPipeline classes 2018-02-22 22:02:34 +10:00
VideoBackend.h VideoBackend: Remove PeekMessages method 2018-01-27 13:53:55 +10:00
main.cpp VideoConfig: Remove bForceCopyToRam field 2018-02-11 15:29:37 +10:00