OSDN Git Service

mesa: add EXT_dsa NamedBuffer functions
authorPierre-Eric Pelloux-Prayer <pierre-eric.pelloux-prayer@amd.com>
Fri, 26 Apr 2019 16:10:44 +0000 (18:10 +0200)
committerMarek Olšák <marek.olsak@amd.com>
Wed, 31 Jul 2019 02:04:26 +0000 (22:04 -0400)
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 8cb7fac..dd529c1 100644 (file)
       <param name="buffer" type="GLuint" />
    </function>
 
+   <function name="GetNamedBufferSubDataEXT">
+      <param name="buffer" type="GLuint" />
+      <param name="offset" type="GLintptr" />
+      <param name="size" type="GLsizeiptr" />
+      <param name="data" type="GLvoid *" />
+   </function>
+
+   <function name="GetNamedBufferPointervEXT">
+      <param name="buffer" type="GLuint" />
+      <param name="pname" type="GLenum" />
+      <param name="params" type="GLvoid **" />
+   </function>
+
+   <function name="GetNamedBufferParameterivEXT">
+      <param name="buffer" type="GLuint" />
+      <param name="pname" type="GLenum" />
+      <param name="params" type="GLint *" />
+   </function>
+
+   <function name="FlushMappedNamedBufferRangeEXT">
+      <param name="buffer" type="GLuint" />
+      <param name="offset" type="GLintptr" />
+      <param name="length" type="GLsizeiptr" />
+   </function>
+
    <!-- OpenGL 3.0 -->
 
    <function name="MapNamedBufferRangeEXT">
index 29a80af..b2a8ca1 100644 (file)
@@ -1500,6 +1500,10 @@ offsets = {
     "GetTextureImageEXT": 1464,
     "GetTextureLevelParameterivEXT": 1465,
     "GetTextureLevelParameterfvEXT": 1466,
+    "GetNamedBufferSubDataEXT": 1467,
+    "GetNamedBufferPointervEXT": 1468,
+    "GetNamedBufferParameterivEXT": 1469,
+    "FlushMappedNamedBufferRangeEXT": 1470,
 }
 
 functions = [
index 31c222e..bffca3c 100644 (file)
@@ -2193,7 +2193,7 @@ _mesa_NamedBufferDataEXT(GLuint buffer, GLsizeiptr size, const GLvoid *data,
 
    if (!buffer) {
       _mesa_error(ctx, GL_INVALID_OPERATION,
-                  "glNamedBufferDataEXT(invalid buffer 0)");
+                  "glNamedBufferDataEXT(buffer=0)");
       return;
    }
 
@@ -2342,7 +2342,7 @@ _mesa_NamedBufferSubDataEXT(GLuint buffer, GLintptr offset,
 
    if (!buffer) {
       _mesa_error(ctx, GL_INVALID_OPERATION,
-                  "glNamedBufferSubDataEXT(invalid buffer 0)");
+                  "glNamedBufferSubDataEXT(buffer=0)");
       return;
    }
 
@@ -2401,6 +2401,33 @@ _mesa_GetNamedBufferSubData(GLuint buffer, GLintptr offset,
 }
 
 
+void GLAPIENTRY
+_mesa_GetNamedBufferSubDataEXT(GLuint buffer, GLintptr offset,
+                               GLsizeiptr size, GLvoid *data)
+{
+   GET_CURRENT_CONTEXT(ctx);
+   struct gl_buffer_object *bufObj;
+
+   if (!buffer) {
+      _mesa_error(ctx, GL_INVALID_OPERATION,
+                  "glGetNamedBufferSubDataEXT(buffer=0)");
+      return;
+   }
+
+   bufObj = _mesa_lookup_bufferobj(ctx, buffer);
+   if (!_mesa_handle_bind_buffer_gen(ctx, buffer,
+                                     &bufObj, "glGetNamedBufferSubDataEXT"))
+      return;
+
+   if (!buffer_object_subdata_range_good(ctx, bufObj, offset, size, false,
+                                         "glGetNamedBufferSubDataEXT")) {
+      return;
+   }
+
+   assert(ctx->Driver.GetBufferSubData);
+   ctx->Driver.GetBufferSubData(ctx, offset, size, data, bufObj);
+}
+
 /**
  * \param subdata   true if caller is *SubData, false if *Data
  */
@@ -2718,7 +2745,7 @@ _mesa_UnmapNamedBufferEXT(GLuint buffer)
 
    if (!buffer) {
       _mesa_error(ctx, GL_INVALID_OPERATION,
-                  "glUnmapNamedBufferEXT(invalid buffer 0)");
+                  "glUnmapNamedBufferEXT(buffer=0)");
       return GL_FALSE;
    }
 
@@ -2844,6 +2871,31 @@ _mesa_GetNamedBufferParameteriv(GLuint buffer, GLenum pname, GLint *params)
 }
 
 void GLAPIENTRY
+_mesa_GetNamedBufferParameterivEXT(GLuint buffer, GLenum pname, GLint *params)
+{
+   GET_CURRENT_CONTEXT(ctx);
+   struct gl_buffer_object *bufObj;
+   GLint64 parameter;
+
+   if (!buffer) {
+      _mesa_error(ctx, GL_INVALID_OPERATION,
+                  "glGetNamedBufferParameterivEXT: buffer=0");
+      return;
+   }
+
+   bufObj = _mesa_lookup_bufferobj(ctx, buffer);
+   if (!_mesa_handle_bind_buffer_gen(ctx, buffer,
+                                     &bufObj, "glGetNamedBufferParameterivEXT"))
+      return;
+
+   if (!get_buffer_parameter(ctx, bufObj, pname, &parameter,
+                             "glGetNamedBufferParameterivEXT"))
+      return; /* Error already recorded. */
+
+   *params = (GLint) parameter;
+}
+
+void GLAPIENTRY
 _mesa_GetNamedBufferParameteri64v(GLuint buffer, GLenum pname,
                                   GLint64 *params)
 {
@@ -2904,6 +2956,30 @@ _mesa_GetNamedBufferPointerv(GLuint buffer, GLenum pname, GLvoid **params)
    *params = bufObj->Mappings[MAP_USER].Pointer;
 }
 
+void GLAPIENTRY
+_mesa_GetNamedBufferPointervEXT(GLuint buffer, GLenum pname, GLvoid **params)
+{
+   GET_CURRENT_CONTEXT(ctx);
+   struct gl_buffer_object *bufObj;
+
+   if (!buffer) {
+      _mesa_error(ctx, GL_INVALID_OPERATION,
+                  "glGetNamedBufferPointervEXT(buffer=0)");
+      return;
+   }
+   if (pname != GL_BUFFER_MAP_POINTER) {
+      _mesa_error(ctx, GL_INVALID_ENUM, "glGetNamedBufferPointervEXT(pname != "
+                  "GL_BUFFER_MAP_POINTER)");
+      return;
+   }
+
+   bufObj = _mesa_lookup_bufferobj(ctx, buffer);
+   if (!_mesa_handle_bind_buffer_gen(ctx, buffer,
+                                     &bufObj, "glGetNamedBufferPointervEXT"))
+      return;
+
+   *params = bufObj->Mappings[MAP_USER].Pointer;
+}
 
 static void
 copy_buffer_sub_data(struct gl_context *ctx, struct gl_buffer_object *src,
@@ -3333,7 +3409,7 @@ _mesa_MapNamedBufferRangeEXT(GLuint buffer, GLintptr offset, GLsizeiptr length,
    GET_CURRENT_CONTEXT(ctx);
    if (!buffer) {
       _mesa_error(ctx, GL_INVALID_OPERATION,
-                  "glMapNamedBufferRangeEXT(invalid buffer 0)");
+                  "glMapNamedBufferRangeEXT(buffer=0)");
       return NULL;
    }
    return map_named_buffer_range(buffer, offset, length, access, true,
@@ -3459,7 +3535,7 @@ _mesa_MapNamedBufferEXT(GLuint buffer, GLenum access)
    GLbitfield accessFlags;
    if (!buffer) {
       _mesa_error(ctx, GL_INVALID_OPERATION,
-                  "glMapNamedBufferEXT(invalid buffer 0)");
+                  "glMapNamedBufferEXT(buffer=0)");
       return NULL;
    }
    if (!get_map_buffer_access_flags(ctx, access, &accessFlags)) {
@@ -3590,6 +3666,28 @@ _mesa_FlushMappedNamedBufferRange(GLuint buffer, GLintptr offset,
                              "glFlushMappedNamedBufferRange");
 }
 
+void GLAPIENTRY
+_mesa_FlushMappedNamedBufferRangeEXT(GLuint buffer, GLintptr offset,
+                                     GLsizeiptr length)
+{
+   GET_CURRENT_CONTEXT(ctx);
+   struct gl_buffer_object *bufObj;
+
+   if (!buffer) {
+      _mesa_error(ctx, GL_INVALID_OPERATION,
+                  "glFlushMappedNamedBufferRangeEXT(buffer=0)");
+      return;
+   }
+
+   bufObj = _mesa_lookup_bufferobj(ctx, buffer);
+   if (!_mesa_handle_bind_buffer_gen(ctx, buffer,
+                                     &bufObj, "glFlushMappedNamedBufferRangeEXT"))
+      return;
+
+   flush_mapped_buffer_range(ctx, bufObj, offset, length,
+                             "glFlushMappedNamedBufferRangeEXT");
+}
+
 static void
 bind_buffer_range_uniform_buffer(struct gl_context *ctx, GLuint index,
                                  struct gl_buffer_object *bufObj,
index 6dca61e..dc752fa 100644 (file)
@@ -255,6 +255,10 @@ _mesa_GetNamedBufferSubData(GLuint buffer, GLintptr offset,
                             GLsizeiptr size, GLvoid *data);
 
 void GLAPIENTRY
+_mesa_GetNamedBufferSubDataEXT(GLuint buffer, GLintptr offset,
+                               GLsizeiptr size, GLvoid *data);
+
+void GLAPIENTRY
 _mesa_ClearBufferData_no_error(GLenum target, GLenum internalformat,
                                GLenum format, GLenum type, const GLvoid *data);
 
@@ -317,6 +321,9 @@ void GLAPIENTRY
 _mesa_GetNamedBufferParameteriv(GLuint buffer, GLenum pname, GLint *params);
 
 void GLAPIENTRY
+_mesa_GetNamedBufferParameterivEXT(GLuint buffer, GLenum pname, GLint *params);
+
+void GLAPIENTRY
 _mesa_GetNamedBufferParameteri64v(GLuint buffer, GLenum pname,
                                   GLint64 *params);
 
@@ -327,6 +334,9 @@ void GLAPIENTRY
 _mesa_GetNamedBufferPointerv(GLuint buffer, GLenum pname, GLvoid **params);
 
 void GLAPIENTRY
+_mesa_GetNamedBufferPointervEXT(GLuint buffer, GLenum pname, GLvoid **params);
+
+void GLAPIENTRY
 _mesa_CopyBufferSubData_no_error(GLenum readTarget, GLenum writeTarget,
                                  GLintptr readOffset, GLintptr writeOffset,
                                  GLsizeiptr size);
@@ -388,6 +398,10 @@ _mesa_FlushMappedNamedBufferRange(GLuint buffer, GLintptr offset,
                                   GLsizeiptr length);
 
 void GLAPIENTRY
+_mesa_FlushMappedNamedBufferRangeEXT(GLuint buffer, GLintptr offset,
+                                     GLsizeiptr length);
+
+void GLAPIENTRY
 _mesa_BindBufferRange_no_error(GLenum target, GLuint index, GLuint buffer,
                                GLintptr offset, GLsizeiptr size);
 void GLAPIENTRY
index ba5df4b..0b2dcfc 100644 (file)
@@ -1129,9 +1129,9 @@ const struct function common_desktop_functions_possible[] = {
    { "glNamedBufferSubDataEXT", 15, -1 },
    { "glMapNamedBufferEXT", 15, -1 },
    { "glUnmapNamedBufferEXT", 15, -1 },
-   //{ "glGetNamedBufferParameterivEXT", 15, -1 },
-   //{ "glGetNamedBufferPointervEXT", 15, -1 },
-   //{ "glGetNamedBufferSubDataEXT", 15, -1 },
+   { "glGetNamedBufferParameterivEXT", 15, -1 },
+   { "glGetNamedBufferPointervEXT", 15, -1 },
+   { "glGetNamedBufferSubDataEXT", 15, -1 },
    /* GL_EXT_direct_state_access - GL 2.0 */
    //{ "glProgramUniform1iEXT", 20, -1 },
    //{ "glProgramUniform1ivEXT", 20, -1 },
@@ -1222,7 +1222,7 @@ const struct function common_desktop_functions_possible[] = {
    //{ "glGetVertexArrayIntegeri_vEXT", 30, -1 },
    //{ "glGetVertexArrayPointeri_vEXT", 30, -1 },
    { "glMapNamedBufferRangeEXT", 30, -1 },
-   //{ "glFlushMappedNamedBufferRangeEXT", 30, -1 },
+   { "glFlushMappedNamedBufferRangeEXT", 30, -1 },
 
    /* GL_ARB_internalformat_query */
    { "glGetInternalformativ", 30, -1 },