[Mesa-dev] [PATCH 00/23] ARB_direct_state_access buffer objects (v2)

Laura Ekstrand laura at jlekstrand.net
Wed Feb 11 18:05:38 PST 2015

This includes a v2 of all of the buffer object code plus a v2 of the related
TextureBufferRange entry point.

Note that some implementations have been merged together (MapBuffer and
MapBufferRange, for instance) because it didn't seem to make sense to keep two
separate and nearly identical versions of the same code.

As a reminder:

Most of the implementation work involved abstracting the internals of the
traditional GL functions and writing the DSA functions on top of these
abstractions.  For instance, to implement GenerateTextureMipmap, most of the
functionality of GenerateMipmap was moved to a function:
_mesa_generate_texture_mipmap(struct gl_context *ctx,
                              struct gl_texture_object *texObj,
                              GLenum target, bool dsa).
GenerateMipmap and GenerateTextureMipmap
were then implemented on top of this function as thin layers that get the
context and the relevant texture object.

One exciting byproduct of the
creation of these backend abstractions is the potential for driver internals
(such as meta) to use nameless texture objects.  These objects could be
created, used, and deleted without costly hash table lookups.  Moreover, the
backend abstractions avoid the use of GET_CURRENT_CONTEXT(ctx), allowing
driver internals to pass in a different context if desired.

For this reason, most of the backend abstractions were exposed to the rest of
Mesa and given a name of the form _mesa_[DSA_function_name_in_snake_case]. To
avoid confusion between the backend function names and those of software
fallbacks, software fallbacks were renamed in the form
For instance, the backend for TexStorage2D
and TextureStorage2D is named _mesa_texture_storage.  To avoid confusion with
the software fallback _mesa_alloc_texture_storage, the software fallback was
renamed to _mesa_AllocTextureStorage_sw.

Laura Ekstrand (23):
  main: Fix whitespace in teximage.c.
  main: Add entry point for TextureBufferRange.
  main: Add utility function _mesa_lookup_bufferobj_err.
  main: Tex[ture]Buffer[Range] functions now use
  main: Add entry point for CreateBuffers.
  main: Add entry point for NamedBufferStorage.
  main: Add entry point for NamedBufferData.
  main: Add entry point for NamedBufferSubData.
  main: Cosmetic changes to BufferSubData infrastructure.
  main: Add entry point for CopyNamedBufferSubData.
  main: Refactor ClearBuffer[Sub]Data.
  main: Add entry points for ClearNamedBuffer[Sub]Data.
  main: Minor whitespace fixes in ClearNamedBuffer[Sub]Data.
  main: Refactor MapBuffer[Range].
  main: Add entry points for MapNamedBuffer[Range].
  main: Add entry point for UnmapNamedBuffer.
  main: Refactor FlushMappedBufferRange.
  main: Add entry point for FlushMappedNamedBufferRange.
  main: Refactor GetBufferParameteri[64]v.
  main: Add entry points for GetBufferParameteri[64]v.
  main: Add entry point for GetNamedBufferPointerv.
  main: Add entry point for glGetNamedBufferSubData.
  main: Cosmetic changes to GetBufferSubData.

 src/mapi/glapi/gen/ARB_direct_state_access.xml |  112 +++
 src/mesa/main/bufferobj.c                      | 1150 +++++++++++++++---------
 src/mesa/main/bufferobj.h                      |  144 ++-
 src/mesa/main/tests/dispatch_sanity.cpp        |   16 +
 src/mesa/main/teximage.c                       |  120 ++-
 src/mesa/main/teximage.h                       |    4 +
 src/mesa/state_tracker/st_cb_bufferobjects.c   |    4 +-
 7 files changed, 1094 insertions(+), 456 deletions(-)


More information about the mesa-dev mailing list