mesa: add support for glMapNamedBufferEXT()
authorTimothy Arceri <tarceri@itsqueeze.com>
Wed, 5 Sep 2018 05:48:07 +0000 (15:48 +1000)
committerMarek Olšák <marek.olsak@amd.com>
Fri, 28 Jun 2019 19:41:24 +0000 (15:41 -0400)
Reviewed-by: Marek Olšák <marek.olsak@amd.com>
Signed-off-by: Marek Olšák <marek.olsak@amd.com>
src/mapi/glapi/gen/EXT_direct_state_access.xml
src/mapi/glapi/gen/static_data.py
src/mesa/main/bufferobj.c
src/mesa/main/bufferobj.h
src/mesa/main/tests/dispatch_sanity.cpp

index eb5c20d..37f443b 100644 (file)
       <param name="data" type="const GLvoid *" />
    </function>
 
+   <function name="MapNamedBufferEXT">
+      <return type="GLvoid *" />
+      <param name="buffer" type="GLuint" />
+      <param name="access" type="GLenum" />
+   </function>
+
    <function name="UnmapNamedBufferEXT">
       <return type="GLboolean" />
       <param name="buffer" type="GLuint" />
index 5829da0..006b5bb 100644 (file)
@@ -1480,6 +1480,7 @@ offsets = {
     "MapNamedBufferRangeEXT": 1444,
     "TextureSubImage2DEXT": 1445,
     "CompressedTextureSubImage2DEXT": 1446,
+    "MapNamedBufferEXT": 1447,
 }
 
 functions = [
index cd4bd36..b15e9f3 100644 (file)
@@ -3425,6 +3425,29 @@ _mesa_MapNamedBuffer(GLuint buffer, GLenum access)
                            "glMapNamedBuffer");
 }
 
+void * GLAPIENTRY
+_mesa_MapNamedBufferEXT(GLuint buffer, GLenum access)
+{
+   GET_CURRENT_CONTEXT(ctx);
+
+   GLbitfield accessFlags;
+   if (!get_map_buffer_access_flags(ctx, access, &accessFlags)) {
+      _mesa_error(ctx, GL_INVALID_ENUM, "glMapNamedBufferEXT(invalid access)");
+      return NULL;
+   }
+
+   struct gl_buffer_object *bufObj = _mesa_lookup_bufferobj(ctx, buffer);
+   if (!_mesa_handle_bind_buffer_gen(ctx, buffer,
+                                     &bufObj, "glMapNamedBufferEXT"))
+      return NULL;
+
+   if (!validate_map_buffer_range(ctx, bufObj, 0, bufObj->Size, accessFlags,
+                                  "glMapNamedBufferEXT"))
+      return NULL;
+
+   return map_buffer_range(ctx, bufObj, 0, bufObj->Size, accessFlags,
+                           "glMapNamedBufferEXT");
+}
 
 static void
 flush_mapped_buffer_range(struct gl_context *ctx,
index 91df7e9..6dca61e 100644 (file)
@@ -370,6 +370,8 @@ void * GLAPIENTRY
 _mesa_MapNamedBuffer_no_error(GLuint buffer, GLenum access);
 void * GLAPIENTRY
 _mesa_MapNamedBuffer(GLuint buffer, GLenum access);
+void * GLAPIENTRY
+_mesa_MapNamedBufferEXT(GLuint buffer, GLenum access);
 
 void GLAPIENTRY
 _mesa_FlushMappedBufferRange_no_error(GLenum target, GLintptr offset,
index b29dbdb..a524c58 100644 (file)
@@ -1127,7 +1127,7 @@ const struct function common_desktop_functions_possible[] = {
    /* GL_EXT_direct_state_access - GL 1.5 */
    { "glNamedBufferDataEXT", 15, -1 },
    { "glNamedBufferSubDataEXT", 15, -1 },
-   //{ "glMapNamedBufferEXT", 15, -1 },
+   { "glMapNamedBufferEXT", 15, -1 },
    { "glUnmapNamedBufferEXT", 15, -1 },
    //{ "glGetNamedBufferParameterivEXT", 15, -1 },
    //{ "glGetNamedBufferPointervEXT", 15, -1 },