On Tue, 2009-03-03 at 10:19 -0800, Brian Paul wrote:
> Keith Whitwell wrote:
> > Just a heads up that we're doing a bit of work to try and improve the
> > process of uploading buffer data, in particular vertex buffer data, and
> > piggy-backing on that some potential rethinking about the way we expose
> > things like "map buffer" in gallium.
> > 
> > The trigger for this is the code in the VBO module, which seems typical
> > of a lot of application usage of vbo's for dynamic data.  Basically
> > these apps want to do something like this:
> > 
> >   loop {
> >      map buffer
> > 
> >      append some hard-to-precalculate number of vertices to whatever
> > else is already in the buffer
> > 
> >      unmap buffer
> >      emit_some_state()
> >      draw_primitives()
> >      if (buffer_full)
> >         get_new_buffer()
> >   }
> >      
> > 
> > The problem is that the existing glMapBuffer() semantics don't really
> > allow a buffer to be remapped after it has been referenced in a draw
> > call -- the underlying driver would be expected to do things like
> > copying the old contents to ensure that they could not be overwritten,
> > etc.  Or, in the case where the draw has been submitted to hardware, the
> > driver would need to wait on a fence prior to mapping the buffer.
> > Current dri/gallium drivers tend to only implement the second check,
> > which is a bit naughty.
> > 
> > In any case, the apps & vbo module don't really want to provoke all this
> > extra work, so (assuming they still want to use vbo's) they end up
> > effectively getting a new buffer after each draw_primitives() call, even
> > though the old one may only hold a tiny number of vertices.
> > 
> > GL has an extension which addresses this, GL_map_buffer_range, which
> > provides asyncrhonous flags for mapping and additional functions for
> > marking buffer regions as dirty and requiring update.  It's interesting
> > to think about what it really means to mark just a small region of a
> > buffer dirty and what possibilities that opens up for the driver and
> > backend implementation.  It's probably worth a separate email...
> > 
> > In the meantime, Jose & I have been experimenting with an asynchronous
> > mapping change to try and improve the behaviour of the vbo module & cut
> > down on the worst cases of excessive buffer usage.  This is a simple
> > DONT_WAIT flag which allows the buffer_map operation to fail if it would
> > have blocked.  This isn't exactly the same as the semantics from the
> > extension, but is somewhat memory-manager friendlier -- it doesn't allow
> > mapping a buffer which is currently being accessed by the GPU, for
> > instance...
> > 
> > Hopefully I've structured the change so as not to affect existing
> > drivers, and allow people to turn on this behaviour fairly easily once
> > it's baked.  However, it's probably a bit early to start putting much
> > work into it as this may change further -- in particular we're looking
> > at what it would take to support the full map_range semantics, and
> > possibly rethinking how gallium exports the buffer mapping
> > functionality.
> 
> 
> On a loosely related note...
> 
> With OpenGL 3.1 there's only going to be array-based drawing with
>  glDrawArrays/Elements(); no immediate mode and no dlists.
> 
> When we get to 3.1 I'm thinking we can omit the VBO module entirely and
>  just do the array/draw setup in the gallium state tracker.  It should
>  be a fairly thin bit of code.  Though, I don't know all the nooks and
>  crannies of the VBO code like you do.
> 
> What do you think?

Brian,

Yes, this makes sense.  The vbo/ code is really just about supporting
the wide variety of rendering modes present in legacy gl.

Keith


------------------------------------------------------------------------------
Open Source Business Conference (OSBC), March 24-25, 2009, San Francisco, CA
-OSBC tackles the biggest issue in open source: Open Sourcing the Enterprise
-Strategies to boost innovation and cut costs with open source participation
-Receive a $600 discount off the registration fee with the source code: SFAD
http://p.sf.net/sfu/XcvMzF8H
_______________________________________________
Mesa3d-dev mailing list
[email protected]
https://lists.sourceforge.net/lists/listinfo/mesa3d-dev

Reply via email to