Thanks for the tips Sio2, I'll try them out right away and update the patch accordingly.
Performance penalty could be severe.
That could certainly explain a few things.
Please note that I didn't write all the code for this, I mostly just merged raedwulf's implementation with Luke's interface.
Another issue is that the usage hint is for for both VB and IB's. Usually you'll want the VB to be static and the IB dynamic so you can dynamically update the indices.
Or the other way for terrain rendering or the likes. Unfortunately Irrlicht normally seeks to provide ease of use at the cost of customisability. I simply followed Luke's interface so I had no say in this matter. Looking at what we've got it would be a 5 minute change to implement this, allowing setHardwareMappingHint() to set flags for boths indices and vertices, and providing 2 other functions eg setVertexHardwareMappingHint to allow the user to set this more discreetly.
Offcourse this would be quite pointless if the changed id dirty method wasn't altered to support both index buffers and vertex buffers individually. Currently it will upload both regardless of what changed. (Although looking at CMeshBuffer.h now it seems that hybrid recently changed the function header for setDirty() to allow for the user to specify the type buffer in question, so something along these lines must already be in the works.)
Cheers