[Mesa-dev] Request for support of GL_AMD_pinned_memory and GL_ARB_buffer_storage extensions

Tony Wasserka neobrainx at googlemail.com
Sun Nov 24 04:19:19 PST 2013


Hello everyone,
I was told on IRC that my question would get most attention around here 
- so bear with me if this is the wrong place to ask

I'm one of the developers of the GC/Wii emulator Dolphin. We recently 
rewrote our OpenGL renderer to use modern OpenGL 3 features, however one 
thing that we stumbled upon are the lack of efficient (vertex/index) 
buffer data streaming mechanisms in OpenGL. Basically, most of our 
vertex data is used once and never again after that (we have to do this 
for accurate emulation) - so all vertex data gets streamed into one huge 
ring buffer (and analogously for index data, which uses its own huge 
ring buffer). For buffer streaming, we have multiple code paths using a 
combination of glMapBufferRange, glBufferSubData, fences and buffer 
orphaning, yet none of these come anywhere close to the performance of 
(legacy) rendering from a vertex array stored in RAM.

There are two OpenGL extensions which greatly help us in this situation: 
AMD's pinned memory [1], and buffer storage[2] in GL 4.4. We currently 
have no buffer storage code path, but usage of pinned memory gave us a 
speedup of up to 60% under heavy workloads when working with AMD's 
Catalyst driver under Windows. We expect the same speedup when using 
buffer storage (specifically we need CLIENT_STORAGE_BIT, if I recall 
correctly).

So the natural question that arises is: Is either of these two 
extensions going to be supported in mesa anytime soon or is it of lower 
priority than other extensions? Also, is the pinned memory extension AMD 
hardware specific or would it be possible to support it for other 
hardware, too? I'm not sure if buffer storage (being a GL 4.4 extension, 
and I read that it might actually depend on some other GL 4.3 extension) 
is possible to implement on older hardware, yet it would be very useful 
for us to have efficient streaming methods for old GPUs, too.

I hope this mail doesn't sound too commanding or anything, it's just 
supposed to be a friendly question on improving the emulator experience 
for our user base
Thanks in advance!

Best regards,
Tony

[1] http://www.opengl.org/registry/specs/AMD/pinned_memory.txt
[2] http://www.opengl.org/registry/specs/ARB/buffer_storage.txt



More information about the mesa-dev mailing list