diff options
author | Laura Ekstrand <laura@jlekstrand.net> | 2015-02-27 14:54:00 -0800 |
---|---|---|
committer | Laura Ekstrand <laura@jlekstrand.net> | 2015-02-27 15:41:31 -0800 |
commit | 41580fca51c3b4c7d869dc3d4ca92a881c13617a (patch) | |
tree | b6b08720c67caede1cb480107f007fc7039c41e3 | |
parent | a8cff498731811160a59317b640efaaff934fd9c (diff) |
main: Add entry point for TextureBufferRange.adsa-texture-buffer-range
v2: Review by Martin Peres
- Get rid of difficult-to-follow code copied and pasted from
the original TexBufferRange
-rw-r--r-- | src/mapi/glapi/gen/ARB_direct_state_access.xml | 8 | ||||
-rw-r--r-- | src/mesa/main/tests/dispatch_sanity.cpp | 1 | ||||
-rw-r--r-- | src/mesa/main/teximage.c | 46 | ||||
-rw-r--r-- | src/mesa/main/teximage.h | 4 |
4 files changed, 59 insertions, 0 deletions
diff --git a/src/mapi/glapi/gen/ARB_direct_state_access.xml b/src/mapi/glapi/gen/ARB_direct_state_access.xml index 2fe1638fde..86c00f9097 100644 --- a/src/mapi/glapi/gen/ARB_direct_state_access.xml +++ b/src/mapi/glapi/gen/ARB_direct_state_access.xml @@ -21,6 +21,14 @@ <param name="buffer" type="GLuint" /> </function> + <function name="TextureBufferRange" offset="assign"> + <param name="texture" type="GLuint" /> + <param name="internalformat" type="GLenum" /> + <param name="buffer" type="GLuint" /> + <param name="offset" type="GLintptr" /> + <param name="size" type="GLsizeiptr" /> + </function> + <function name="TextureStorage1D" offset="assign"> <param name="texture" type="GLuint" /> <param name="levels" type="GLsizei" /> diff --git a/src/mesa/main/tests/dispatch_sanity.cpp b/src/mesa/main/tests/dispatch_sanity.cpp index c14ad32eb3..6dddb816a8 100644 --- a/src/mesa/main/tests/dispatch_sanity.cpp +++ b/src/mesa/main/tests/dispatch_sanity.cpp @@ -987,6 +987,7 @@ const struct function gl_core_functions_possible[] = { { "glTextureStorage2DMultisample", 45, -1 }, { "glTextureStorage3DMultisample", 45, -1 }, { "glTextureBuffer", 45, -1 }, + { "glTextureBufferRange", 45, -1 }, /* GL_EXT_polygon_offset_clamp */ { "glPolygonOffsetClampEXT", 11, -1 }, diff --git a/src/mesa/main/teximage.c b/src/mesa/main/teximage.c index 9853bc01d6..0090f3e007 100644 --- a/src/mesa/main/teximage.c +++ b/src/mesa/main/teximage.c @@ -5523,6 +5523,52 @@ _mesa_TextureBuffer(GLuint texture, GLenum internalFormat, GLuint buffer) bufObj, 0, buffer ? -1 : 0, "glTextureBuffer"); } +void GLAPIENTRY +_mesa_TextureBufferRange(GLuint texture, GLenum internalFormat, GLuint buffer, + GLintptr offset, GLsizeiptr size) +{ + struct gl_texture_object *texObj; + struct gl_buffer_object *bufObj; + + GET_CURRENT_CONTEXT(ctx); + + if (buffer) { + bufObj = _mesa_lookup_bufferobj_err(ctx, buffer, + "glTextureBufferRange"); + if (!bufObj) + return; + + if (!check_texture_buffer_range(ctx, bufObj, offset, size, + "glTextureBufferRange")) + return; + + } else { + + /* OpenGL 4.5 core spec (02.02.2015) says in Section 8.9 Buffer + * Textures (PDF page 254): + * "If buffer is zero, then any buffer object attached to the buffer + * texture is detached, the values offset and size are ignored and + * the state for offset and size for the buffer texture are reset to + * zero." + */ + offset = 0; + size = 0; + bufObj = NULL; + } + + /* Get the texture object by Name. */ + texObj = _mesa_lookup_texture_err(ctx, texture, "glTextureBufferRange"); + if (!texObj) + return; + + if (!check_texture_buffer_target(ctx, texObj->Target, + "glTextureBufferRange")) + return; + + _mesa_texture_buffer_range(ctx, texObj, internalFormat, + bufObj, offset, size, "glTextureBufferRange"); +} + static GLboolean is_renderable_texture_format(struct gl_context *ctx, GLenum internalformat) diff --git a/src/mesa/main/teximage.h b/src/mesa/main/teximage.h index db6b6485a9..0ce4a30361 100644 --- a/src/mesa/main/teximage.h +++ b/src/mesa/main/teximage.h @@ -409,6 +409,10 @@ _mesa_TexBufferRange(GLenum target, GLenum internalFormat, GLuint buffer, extern void GLAPIENTRY _mesa_TextureBuffer(GLuint texture, GLenum internalFormat, GLuint buffer); +extern void GLAPIENTRY +_mesa_TextureBufferRange(GLuint texture, GLenum internalFormat, GLuint buffer, + GLintptr offset, GLsizeiptr size); + extern void GLAPIENTRY _mesa_TexImage2DMultisample(GLenum target, GLsizei samples, |