Hey, thanks Paul!
Re MAP_UNSYNCHRONIZED, that’s great! And you’d get access to the mapped buffer with no draw thread blocking and TA kicks?
If so, I think that provides the tools needed to upload dynamically-loaded frame-to-frame reused batch data without a lot of needless VBO creation/destruction (and a lot of VBO rebind overhead when launching batches). Basically, alloc one big VBO (big enough to handle many frames of data), stream the data in front-to-back with reuse, and then when it fills up, orphan it and repeat (see Re: Optimal Streaming Strategy and Buffer Object Streaming).
One related question is: How’s PowerVR’s support for buffer orphaning (sometimes called buffer respecification; see the 2nd link above)?
Good orphaning support is a nice-to-have, but it isn’t a make-or-break because (as you said) I could use multiple buffers and get into the explicit fence/wait sync business. Orphaning is useful though because it avoids the need for the client to synchronize with the server/GPU (and thus the need for the client to perform explicit synchronization).
Have a great weekend!