This implements all of the texture functions for ARB_direct_state_access, with
the exception of glTextureBufferRange. There is an outstanding bug on the
specification for glTextureBufferRange. Fortunately, glTextureBufferRange
shares its implementation with glTextureBuffer and will be trivial to add once
the bug is fixed.
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
void _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
_mesa_[Driver_function_name]_sw. 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.
ARB_direct_state_access allows the user to create and pass around objects with
the effective target of GL_TEXTURE_CUBE_MAP. This causes some unfortunate
complexities in the implementation of TextureSubImage*D and GetTextureImage,
and there is an outstanding bug on how these implementations should act if the
user fails to provide enough storage for his or her cube map. In the meantime,
TextureSubImage*D and GetTextureImage throw GL_INVALID_OPERATION if this
happens.
Laura Ekstrand (41):
glapi: Added ARB_direct_state_access.xml file.
main: Created a standard function that looks up a texture object by
its ID and throws INVALID_OPERATION if the ID isn't in the hash
table.
i965: intel_tex_image.c now accepts TEXTURE_CUBE_MAP as a valid
target.
main: Moved _mesa_lock_texture and _mesa_unlock_texture to texobj.h
from teximage.h.
main: Moved _mesa_get_current_tex_object from teximage.c to texobj.c.
main: Changed _mesa_alloc_texture_storage to
_mesa_AllocTextureStorage_sw.
main: Renamed _mesa_get_teximage to _mesa_GetTexImage_sw.
main: Renamed _mesa_get_compressed_teximage to
_mesa_GetCompressedTexImage_sw.
main: Removed trailing whitespace in texstate.c.
main: Added entry point for glCreateTextures.
main: Added entry points for glTextureStorage*D.
main: Added entry points for glTextureSubImage*D.
main: Corrected comment on _mesa_is_zero_size_texture.
main: Added entry point for BindTextureUnit.
main: set_tex_parameteri now handles errors according to the OpenGL
4.5 Specification.
main: set_tex_parameterf now handles errors according to the OpenGL
4.5 Specification.
main: Added get_texobj_by_name in texparam.c.
main: Added entry point for glTextureParameterf.
main: Added entry point for glTextureParameterfv.
main: Added entry point for glTextureParameteri.
main: Added entry points for glTextureParameteriv, Iiv, Iuiv.
main: legal_get_tex_level_parameter_target now handles
GL_TEXTURE_CUBE_MAP.
main: Added entry points for glGetTextureLevelParameteriv, fv.
main: Added entry point for glGetTextureParameterfv.
main: Added entry points for glGetTextureParameteriv, Iiv, and Iuiv.
main: Fixed some comments in texparam.c
main: Added entry points for CopyTextureSubImage*D.
main: Nameless texture creation and deletion. Does not affect normal
creation and deletion paths.
main: Added entry point for glGetTextureImage.
main: Added entry point for glGetCompressedTextureImage.
main: Added entry points for glCompressedTextureSubImage*D.
main: Added entry point for glGenerateTextureMipmap.
main: Added entry points for glTextureStorage2DMultisample and
glTextureStorage3DMultisample.
main: Fixed _mesa_texture_image_multisample so that it updates the
texObj->Immutable flag correctly.
main: Added entry point for glTextureBuffer.
main: Deleted trailing whitespaces in texobj.c.
main: Fixed whitespace errors in teximage.h and teximage.c.
main: Refactor in teximage.c to handle NULL from
_mesa_get_current_tex_object.
main: glDeleteTextures now throws GL_INVALID_VALUE if n is negative.
main: Checking for cube completeness in GetTextureImage.
main: Checking for cube completeness in TextureSubImage.
src/mapi/glapi/gen/ARB_direct_state_access.xml | 271 ++++++
src/mapi/glapi/gen/Makefile.am | 1 +
src/mapi/glapi/gen/gl_API.xml | 6 +-
src/mesa/drivers/common/driverfuncs.c | 4 +-
src/mesa/drivers/common/meta.c | 2 +-
src/mesa/drivers/dri/i965/intel_tex.c | 2 +-
src/mesa/drivers/dri/i965/intel_tex_copy.c | 1 +
src/mesa/drivers/dri/i965/intel_tex_image.c | 1 +
src/mesa/drivers/dri/swrast/swrast.c | 1 +
src/mesa/main/extensions.c | 1 +
src/mesa/main/genmipmap.c | 73 +-
src/mesa/main/genmipmap.h | 6 +
src/mesa/main/texgetimage.c | 497 ++++++++---
src/mesa/main/texgetimage.h | 33 +-
src/mesa/main/teximage.c | 1096 +++++++++++++++++-------
src/mesa/main/teximage.h | 133 ++-
src/mesa/main/texobj.c | 397 ++++++++-
src/mesa/main/texobj.h | 48 +-
src/mesa/main/texparam.c | 758 ++++++++++++----
src/mesa/main/texparam.h | 84 +-
src/mesa/main/texstate.c | 22 +-
src/mesa/main/texstate.h | 39 +-
src/mesa/main/texstorage.c | 213 +++--
src/mesa/main/texstorage.h | 39 +-
src/mesa/state_tracker/st_cb_texture.c | 12 +-
25 files changed, 2971 insertions(+), 769 deletions(-)
create mode 100644 src/mapi/glapi/gen/ARB_direct_state_access.xml
--
2.1.0
_______________________________________________
mesa-dev mailing list
[email protected]
http://lists.freedesktop.org/mailman/listinfo/mesa-dev