Mesa (master): mesa: add support for glMapNamedBufferRangeEXT()

GitLab Mirror gitlab-mirror at kemper.freedesktop.org
Fri Jun 28 19:41:53 UTC 2019


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

Author: Timothy Arceri <tarceri at itsqueeze.com>
Date:   Fri May 25 13:24:47 2018 +1000

mesa: add support for glMapNamedBufferRangeEXT()

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

---

 src/mapi/glapi/gen/EXT_direct_state_access.xml | 11 +++++++
 src/mapi/glapi/gen/static_data.py              |  1 +
 src/mesa/main/bufferobj.c                      | 45 ++++++++++++++++++--------
 src/mesa/main/bufferobj.h                      |  3 ++
 src/mesa/main/tests/dispatch_sanity.cpp        |  2 +-
 5 files changed, 48 insertions(+), 14 deletions(-)

diff --git a/src/mapi/glapi/gen/EXT_direct_state_access.xml b/src/mapi/glapi/gen/EXT_direct_state_access.xml
index a19677cde10..6a6a118a2bd 100644
--- a/src/mapi/glapi/gen/EXT_direct_state_access.xml
+++ b/src/mapi/glapi/gen/EXT_direct_state_access.xml
@@ -145,5 +145,16 @@
       <param name="size" type="GLsizeiptr" />
       <param name="data" type="const GLvoid *" />
    </function>
+
+   <!-- OpenGL 3.0 -->
+
+   <function name="MapNamedBufferRangeEXT">
+      <return type="GLvoid *" />
+      <param name="buffer" type="GLuint" />
+      <param name="offset" type="GLintptr" />
+      <param name="length" type="GLsizeiptr" />
+      <param name="access" type="GLbitfield" />
+   </function>
+
 </category>
 </OpenGLAPI>
diff --git a/src/mapi/glapi/gen/static_data.py b/src/mapi/glapi/gen/static_data.py
index 582530c046a..3970452b0cb 100644
--- a/src/mapi/glapi/gen/static_data.py
+++ b/src/mapi/glapi/gen/static_data.py
@@ -1477,6 +1477,7 @@ offsets = {
     "NamedBufferDataEXT": 1441,
     "NamedBufferSubDataEXT": 1442,
     "NamedBufferStorageEXT": 1443,
+    "MapNamedBufferRangeEXT": 1444,
 }
 
 functions = [
diff --git a/src/mesa/main/bufferobj.c b/src/mesa/main/bufferobj.c
index 0d350dbabd5..a751e41d6e8 100644
--- a/src/mesa/main/bufferobj.c
+++ b/src/mesa/main/bufferobj.c
@@ -3277,30 +3277,49 @@ _mesa_MapNamedBufferRange_no_error(GLuint buffer, GLintptr offset,
                            "glMapNamedBufferRange");
 }
 
-void * GLAPIENTRY
-_mesa_MapNamedBufferRange(GLuint buffer, GLintptr offset, GLsizeiptr length,
-                          GLbitfield access)
+static void *
+map_named_buffer_range(GLuint buffer, GLintptr offset, GLsizeiptr length,
+                       GLbitfield access, bool dst_ext, const char *func)
 {
    GET_CURRENT_CONTEXT(ctx);
-   struct gl_buffer_object *bufObj;
+   struct gl_buffer_object *bufObj = NULL;
 
    if (!ctx->Extensions.ARB_map_buffer_range) {
       _mesa_error(ctx, GL_INVALID_OPERATION,
-                  "glMapNamedBufferRange("
-                  "ARB_map_buffer_range not supported)");
+                  "%s(ARB_map_buffer_range not supported)", func);
       return NULL;
    }
 
-   bufObj = _mesa_lookup_bufferobj_err(ctx, buffer, "glMapNamedBufferRange");
-   if (!bufObj)
-      return NULL;
+   if (dst_ext) {
+      bufObj = _mesa_lookup_bufferobj(ctx, buffer);
+      if (!_mesa_handle_bind_buffer_gen(ctx, buffer, &bufObj, func))
+         return NULL;
+   } else {
+      bufObj = _mesa_lookup_bufferobj_err(ctx, buffer, func);
+      if (!bufObj)
+         return NULL;
+   }
 
-   if (!validate_map_buffer_range(ctx, bufObj, offset, length, access,
-                                  "glMapNamedBufferRange"))
+   if (!validate_map_buffer_range(ctx, bufObj, offset, length, access, func))
       return NULL;
 
-   return map_buffer_range(ctx, bufObj, offset, length, access,
-                           "glMapNamedBufferRange");
+   return map_buffer_range(ctx, bufObj, offset, length, access, func);
+}
+
+void * GLAPIENTRY
+_mesa_MapNamedBufferRangeEXT(GLuint buffer, GLintptr offset, GLsizeiptr length,
+                             GLbitfield access)
+{
+   return map_named_buffer_range(buffer, offset, length, access, true,
+                                 "glMapNamedBufferRangeEXT");
+}
+
+void * GLAPIENTRY
+_mesa_MapNamedBufferRange(GLuint buffer, GLintptr offset, GLsizeiptr length,
+                          GLbitfield access)
+{
+   return map_named_buffer_range(buffer, offset, length, access, false,
+                                 "glMapNamedBufferRange");
 }
 
 /**
diff --git a/src/mesa/main/bufferobj.h b/src/mesa/main/bufferobj.h
index 6b35d70606f..c3b57ef7fe6 100644
--- a/src/mesa/main/bufferobj.h
+++ b/src/mesa/main/bufferobj.h
@@ -357,6 +357,9 @@ _mesa_MapNamedBufferRange_no_error(GLuint buffer, GLintptr offset,
 void * GLAPIENTRY
 _mesa_MapNamedBufferRange(GLuint buffer, GLintptr offset, GLsizeiptr length,
                           GLbitfield access);
+void * GLAPIENTRY
+_mesa_MapNamedBufferRangeEXT(GLuint buffer, GLintptr offset,
+                             GLsizeiptr length, GLbitfield access);
 
 void * GLAPIENTRY
 _mesa_MapBuffer_no_error(GLenum target, GLenum access);
diff --git a/src/mesa/main/tests/dispatch_sanity.cpp b/src/mesa/main/tests/dispatch_sanity.cpp
index c789a2d513b..8813e945bfc 100644
--- a/src/mesa/main/tests/dispatch_sanity.cpp
+++ b/src/mesa/main/tests/dispatch_sanity.cpp
@@ -1222,7 +1222,7 @@ const struct function common_desktop_functions_possible[] = {
    //{ "glGetVertexArrayPointervEXT", 30, -1 },
    //{ "glGetVertexArrayIntegeri_vEXT", 30, -1 },
    //{ "glGetVertexArrayPointeri_vEXT", 30, -1 },
-   //{ "glMapNamedBufferRangeEXT", 30, -1 },
+   { "glMapNamedBufferRangeEXT", 30, -1 },
    //{ "glFlushMappedNamedBufferRangeEXT", 30, -1 },
 
    /* GL_ARB_internalformat_query */




More information about the mesa-commit mailing list