I had a cursory look at this, and broadly it seems fine. I don't like the introduction of wined3d_draw_primitive_strided_data though, and think it could easily be avoided by exposing wined3d_streaming_buffer_map()/wined3d_streaming_buffer_unmap() instead.