Mesa (master): mesa: add ARB_texture_buffer_range glTextureBufferRangeEXT function

GitLab Mirror gitlab-mirror at kemper.freedesktop.org
Tue Nov 19 08:24:13 UTC 2019


Module: Mesa
Branch: master
Commit: a0d667036d8c8b77fa62f74263583b07909f8637
URL:    http://cgit.freedesktop.org/mesa/mesa/commit/?id=a0d667036d8c8b77fa62f74263583b07909f8637

Author: Pierre-Eric Pelloux-Prayer <pierre-eric.pelloux-prayer at amd.com>
Date:   Wed Nov  6 14:04:55 2019 +0100

mesa: add ARB_texture_buffer_range glTextureBufferRangeEXT function

Reviewed-by: Marek Olšák <marek.olsak at amd.com>

---

 docs/features.txt                               |  2 +-
 src/mapi/glapi/gen/ARB_texture_buffer_range.xml |  9 +++++
 src/mapi/glapi/gen/static_data.py               |  1 +
 src/mesa/main/tests/dispatch_sanity.cpp         |  2 +-
 src/mesa/main/teximage.c                        | 46 +++++++++++++++++++++++++
 src/mesa/main/teximage.h                        |  4 +++
 6 files changed, 62 insertions(+), 2 deletions(-)

diff --git a/docs/features.txt b/docs/features.txt
index 7ccc097c9db..0e2aaeb3bad 100644
--- a/docs/features.txt
+++ b/docs/features.txt
@@ -384,7 +384,7 @@ GL_EXT_direct_state_access additions from other extensions (complete list):
   GL_ARB_internalformat_query2                          DONE
   GL_ARB_sparse_texture                                 n/a
   GL_ARB_sparse_buffer                                  not started
-  GL_ARB_texture_buffer_range                           not started
+  GL_ARB_texture_buffer_range                           DONE
   GL_ARB_texture_storage                                DONE
   GL_ARB_texture_storage_multisample                    not started
   GL_ARB_vertex_attrib_64bit                            DONE
diff --git a/src/mapi/glapi/gen/ARB_texture_buffer_range.xml b/src/mapi/glapi/gen/ARB_texture_buffer_range.xml
index 93ed5342323..ea4dbaea0be 100644
--- a/src/mapi/glapi/gen/ARB_texture_buffer_range.xml
+++ b/src/mapi/glapi/gen/ARB_texture_buffer_range.xml
@@ -17,6 +17,15 @@
         <param name="size" type="GLsizeiptr"/>
     </function>
 
+    <function name="TextureBufferRangeEXT">
+        <param name="texture" type="GLuint"/>
+        <param name="target" type="GLenum"/>
+        <param name="internalformat" type="GLenum"/>
+        <param name="buffer" type="GLuint"/>
+        <param name="offset" type="GLintptr"/>
+        <param name="size" type="GLsizeiptr"/>
+    </function>
+
 </category>
 
 </OpenGLAPI>
diff --git a/src/mapi/glapi/gen/static_data.py b/src/mapi/glapi/gen/static_data.py
index 3326ffdf378..98690b14873 100644
--- a/src/mapi/glapi/gen/static_data.py
+++ b/src/mapi/glapi/gen/static_data.py
@@ -1622,6 +1622,7 @@ offsets = {
     "GetNamedFramebufferParameterivEXT": 1586,
     "VertexArrayVertexAttribLOffsetEXT": 1587,
     "VertexArrayVertexAttribDivisorEXT": 1588,
+    "TextureBufferRangeEXT": 1589,
 }
 
 functions = [
diff --git a/src/mesa/main/tests/dispatch_sanity.cpp b/src/mesa/main/tests/dispatch_sanity.cpp
index 02ed6374317..f42d4f4b222 100644
--- a/src/mesa/main/tests/dispatch_sanity.cpp
+++ b/src/mesa/main/tests/dispatch_sanity.cpp
@@ -894,7 +894,7 @@ const struct function common_desktop_functions_possible[] = {
    { "glGetProgramResourceLocation", 43, -1 },
    { "glGetProgramResourceLocationIndex", 43, -1 },
    { "glShaderStorageBlockBinding", 43, -1 },
-// { "glTextureBufferRangeEXT", 43, -1 },               // XXX: Add to xml
+   { "glTextureBufferRangeEXT", 43, -1 },
    { "glTexStorage2DMultisample", 43, -1 },
    { "glTexStorage3DMultisample", 43, -1 },
 // { "glTextureStorage2DMultisampleEXT", 43, -1 },      // XXX: Add to xml
diff --git a/src/mesa/main/teximage.c b/src/mesa/main/teximage.c
index 5e7f4f767fd..bea5c9ae356 100644
--- a/src/mesa/main/teximage.c
+++ b/src/mesa/main/teximage.c
@@ -6401,6 +6401,52 @@ _mesa_TexBufferRange(GLenum target, GLenum internalFormat, GLuint buffer,
                         offset, size, "glTexBufferRange");
 }
 
+
+/** GL_ARB_texture_buffer_range + GL_EXT_direct_state_access */
+void GLAPIENTRY
+_mesa_TextureBufferRangeEXT(GLuint texture, GLenum target, GLenum internalFormat,
+                            GLuint buffer, GLintptr offset, GLsizeiptr size)
+{
+   struct gl_texture_object *texObj;
+   struct gl_buffer_object *bufObj;
+
+   GET_CURRENT_CONTEXT(ctx);
+
+   texObj = _mesa_lookup_or_create_texture(ctx, target, texture, false, true,
+                                           "glTextureBufferRangeEXT");
+   if (!texObj)
+      return;
+
+   if (!check_texture_buffer_target(ctx, target, "glTextureBufferRangeEXT"))
+      return;
+
+   if (buffer) {
+      bufObj = _mesa_lookup_bufferobj_err(ctx, buffer, "glTextureBufferRangeEXT");
+      if (!bufObj)
+         return;
+
+      if (!check_texture_buffer_range(ctx, bufObj, offset, size,
+          "glTextureBufferRangeEXT"))
+         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;
+   }
+
+   texture_buffer_range(ctx, texObj, internalFormat, bufObj,
+                        offset, size, "glTextureBufferRangeEXT");
+}
+
+
 void GLAPIENTRY
 _mesa_TextureBuffer(GLuint texture, GLenum internalFormat, GLuint buffer)
 {
diff --git a/src/mesa/main/teximage.h b/src/mesa/main/teximage.h
index b14acdf7597..66db78df4f9 100644
--- a/src/mesa/main/teximage.h
+++ b/src/mesa/main/teximage.h
@@ -785,6 +785,10 @@ _mesa_TexBufferRange(GLenum target, GLenum internalFormat, GLuint buffer,
                      GLintptr offset, GLsizeiptr size);
 
 extern void GLAPIENTRY
+_mesa_TextureBufferRangeEXT(GLuint texture, GLenum target, GLenum internalFormat,
+                            GLuint buffer, GLintptr offset, GLsizeiptr size);
+
+extern void GLAPIENTRY
 _mesa_TextureBuffer(GLuint texture, GLenum internalFormat, GLuint buffer);
 
 extern void GLAPIENTRY




More information about the mesa-commit mailing list