--- src/mapi/glapi/gen/ARB_direct_state_access.xml | 4 +- src/mapi/glapi/gen/ARB_map_buffer_range.xml | 2 +- src/mapi/glapi/gen/gl_API.xml | 2 +- src/mesa/main/bufferobj.c | 53 ++++++++++++++++++++++++++ src/mesa/main/bufferobj.h | 10 +++++ 5 files changed, 67 insertions(+), 4 deletions(-)
diff --git a/src/mapi/glapi/gen/ARB_direct_state_access.xml b/src/mapi/glapi/gen/ARB_direct_state_access.xml index 43841bb..b147e72 100644 --- a/src/mapi/glapi/gen/ARB_direct_state_access.xml +++ b/src/mapi/glapi/gen/ARB_direct_state_access.xml @@ -94,27 +94,27 @@ <function name="ClearNamedBufferSubData"> <param name="buffer" type="GLuint" /> <param name="internalformat" type="GLenum" /> <param name="offset" type="GLintptr" /> <param name="size" type="GLsizeiptr" /> <param name="format" type="GLenum" /> <param name="type" type="GLenum" /> <param name="data" type="const GLvoid *" /> </function> - <function name="MapNamedBuffer"> + <function name="MapNamedBuffer" no_error="true"> <return type="GLvoid *" /> <param name="buffer" type="GLuint" /> <param name="access" type="GLenum" /> </function> - <function name="MapNamedBufferRange"> + <function name="MapNamedBufferRange" no_error="true"> <return type="GLvoid *" /> <param name="buffer" type="GLuint" /> <param name="offset" type="GLintptr" /> <param name="length" type="GLsizeiptr" /> <param name="access" type="GLbitfield" /> </function> <function name="UnmapNamedBuffer"> <return type="GLboolean" /> <param name="buffer" type="GLuint" /> diff --git a/src/mapi/glapi/gen/ARB_map_buffer_range.xml b/src/mapi/glapi/gen/ARB_map_buffer_range.xml index cf7b211..b79b70a 100644 --- a/src/mapi/glapi/gen/ARB_map_buffer_range.xml +++ b/src/mapi/glapi/gen/ARB_map_buffer_range.xml @@ -8,21 +8,21 @@ <category name="GL_ARB_map_buffer_range" number="50"> <enum name="MAP_READ_BIT" value="0x0001"/> <enum name="MAP_WRITE_BIT" value="0x0002"/> <enum name="MAP_INVALIDATE_RANGE_BIT" value="0x0004"/> <enum name="MAP_INVALIDATE_BUFFER_BIT" value="0x0008"/> <enum name="MAP_FLUSH_EXPLICIT_BIT" value="0x0010"/> <enum name="MAP_UNSYNCHRONIZED_BIT" value="0x0020"/> - <function name="MapBufferRange" es2="3.0"> + <function name="MapBufferRange" es2="3.0" no_error="true"> <param name="target" type="GLenum"/> <param name="offset" type="GLintptr"/> <param name="length" type="GLsizeiptr"/> <param name="access" type="GLbitfield"/> <return type="GLvoid *"/> </function> <function name="FlushMappedBufferRange" es2="3.0"> <param name="target" type="GLenum"/> <param name="offset" type="GLintptr"/> diff --git a/src/mapi/glapi/gen/gl_API.xml b/src/mapi/glapi/gen/gl_API.xml index c271887..a10da02 100644 --- a/src/mapi/glapi/gen/gl_API.xml +++ b/src/mapi/glapi/gen/gl_API.xml @@ -5090,21 +5090,21 @@ <param name="data" type="GLvoid *" output="true" count="size"/> <glx ignore="true"/> </function> <function name="IsBuffer" es1="1.1" es2="2.0"> <param name="buffer" type="GLuint"/> <return type="GLboolean"/> <glx ignore="true"/> </function> - <function name="MapBuffer"> + <function name="MapBuffer" no_error="true"> <param name="target" type="GLenum"/> <param name="access" type="GLenum"/> <return type="GLvoid *"/> <glx ignore="true"/> </function> <function name="UnmapBuffer" es2="3.0"> <param name="target" type="GLenum"/> <return type="GLboolean"/> <glx ignore="true"/> diff --git a/src/mesa/main/bufferobj.c b/src/mesa/main/bufferobj.c index 797b6fb..d1726d6 100644 --- a/src/mesa/main/bufferobj.c +++ b/src/mesa/main/bufferobj.c @@ -2569,20 +2569,33 @@ map_buffer_range(struct gl_context *ctx, struct gl_buffer_object *bufObj, for (i = 0; i < 100; i++) { buf[bufObj->Size - i - 1] = 123; } } #endif return map; } void * GLAPIENTRY +_mesa_MapBufferRange_no_error(GLenum target, GLintptr offset, + GLsizeiptr length, GLbitfield access) +{ + GET_CURRENT_CONTEXT(ctx); + + struct gl_buffer_object **bufObjPtr = get_buffer_target(ctx, target); + struct gl_buffer_object *bufObj = *bufObjPtr; + + return map_buffer_range(ctx, bufObj, offset, length, access, + "glMapBufferRange"); +} + +void * GLAPIENTRY _mesa_MapBufferRange(GLenum target, GLintptr offset, GLsizeiptr length, GLbitfield access) { GET_CURRENT_CONTEXT(ctx); struct gl_buffer_object *bufObj; if (!ctx->Extensions.ARB_map_buffer_range) { _mesa_error(ctx, GL_INVALID_OPERATION, "glMapBufferRange(ARB_map_buffer_range not supported)"); return NULL; @@ -2594,20 +2607,31 @@ _mesa_MapBufferRange(GLenum target, GLintptr offset, GLsizeiptr length, if (!validate_map_buffer_range(ctx, bufObj, offset, length, access, "glMapBufferRange")) return NULL; return map_buffer_range(ctx, bufObj, offset, length, access, "glMapBufferRange"); } void * GLAPIENTRY +_mesa_MapNamedBufferRange_no_error(GLuint buffer, GLintptr offset, + GLsizeiptr length, GLbitfield access) +{ + GET_CURRENT_CONTEXT(ctx); + struct gl_buffer_object *bufObj = _mesa_lookup_bufferobj(ctx, buffer); + + return map_buffer_range(ctx, bufObj, offset, length, access, + "glMapNamedBufferRange"); +} + +void * GLAPIENTRY _mesa_MapNamedBufferRange(GLuint buffer, GLintptr offset, GLsizeiptr length, GLbitfield access) { GET_CURRENT_CONTEXT(ctx); struct gl_buffer_object *bufObj; if (!ctx->Extensions.ARB_map_buffer_range) { _mesa_error(ctx, GL_INVALID_OPERATION, "glMapNamedBufferRange(" "ARB_map_buffer_range not supported)"); @@ -2645,20 +2669,35 @@ get_map_buffer_access_flags(struct gl_context *ctx, GLenum access, return true; case GL_READ_WRITE_ARB: *flags = GL_MAP_READ_BIT | GL_MAP_WRITE_BIT; return _mesa_is_desktop_gl(ctx); default: return false; } } void * GLAPIENTRY +_mesa_MapBuffer_no_error(GLenum target, GLenum access) +{ + GET_CURRENT_CONTEXT(ctx); + + GLbitfield accessFlags; + get_map_buffer_access_flags(ctx, access, &accessFlags); + + struct gl_buffer_object **bufObjPtr = get_buffer_target(ctx, target); + struct gl_buffer_object *bufObj = *bufObjPtr; + + return map_buffer_range(ctx, bufObj, 0, bufObj->Size, accessFlags, + "glMapBuffer"); +} + +void * GLAPIENTRY _mesa_MapBuffer(GLenum target, GLenum access) { GET_CURRENT_CONTEXT(ctx); struct gl_buffer_object *bufObj; GLbitfield accessFlags; if (!get_map_buffer_access_flags(ctx, access, &accessFlags)) { _mesa_error(ctx, GL_INVALID_ENUM, "glMapBuffer(invalid access)"); return NULL; } @@ -2669,20 +2708,34 @@ _mesa_MapBuffer(GLenum target, GLenum access) if (!validate_map_buffer_range(ctx, bufObj, 0, bufObj->Size, accessFlags, "glMapBuffer")) return NULL; return map_buffer_range(ctx, bufObj, 0, bufObj->Size, accessFlags, "glMapBuffer"); } void * GLAPIENTRY +_mesa_MapNamedBuffer_no_error(GLuint buffer, GLenum access) +{ + GET_CURRENT_CONTEXT(ctx); + + GLbitfield accessFlags; + get_map_buffer_access_flags(ctx, access, &accessFlags); + + struct gl_buffer_object *bufObj = _mesa_lookup_bufferobj(ctx, buffer); + + return map_buffer_range(ctx, bufObj, 0, bufObj->Size, accessFlags, + "glMapNamedBuffer"); +} + +void * GLAPIENTRY _mesa_MapNamedBuffer(GLuint buffer, GLenum access) { GET_CURRENT_CONTEXT(ctx); struct gl_buffer_object *bufObj; GLbitfield accessFlags; if (!get_map_buffer_access_flags(ctx, access, &accessFlags)) { _mesa_error(ctx, GL_INVALID_ENUM, "glMapNamedBuffer(invalid access)"); return NULL; } diff --git a/src/mesa/main/bufferobj.h b/src/mesa/main/bufferobj.h index f9d8874..f95e31a 100644 --- a/src/mesa/main/bufferobj.h +++ b/src/mesa/main/bufferobj.h @@ -286,31 +286,41 @@ void GLAPIENTRY _mesa_CopyBufferSubData(GLenum readTarget, GLenum writeTarget, GLintptr readOffset, GLintptr writeOffset, GLsizeiptr size); void GLAPIENTRY _mesa_CopyNamedBufferSubData(GLuint readBuffer, GLuint writeBuffer, GLintptr readOffset, GLintptr writeOffset, GLsizeiptr size); void * GLAPIENTRY +_mesa_MapBufferRange_no_error(GLenum target, GLintptr offset, + GLsizeiptr length, GLbitfield access); +void * GLAPIENTRY _mesa_MapBufferRange(GLenum target, GLintptr offset, GLsizeiptr length, GLbitfield access); void * GLAPIENTRY +_mesa_MapNamedBufferRange_no_error(GLuint buffer, GLintptr offset, + GLsizeiptr length, GLbitfield access); +void * GLAPIENTRY _mesa_MapNamedBufferRange(GLuint buffer, GLintptr offset, GLsizeiptr length, GLbitfield access); void * GLAPIENTRY +_mesa_MapBuffer_no_error(GLenum target, GLenum access); +void * GLAPIENTRY _mesa_MapBuffer(GLenum target, GLenum access); void * GLAPIENTRY +_mesa_MapNamedBuffer_no_error(GLuint buffer, GLenum access); +void * GLAPIENTRY _mesa_MapNamedBuffer(GLuint buffer, GLenum access); void GLAPIENTRY _mesa_FlushMappedBufferRange(GLenum target, GLintptr offset, GLsizeiptr length); void GLAPIENTRY _mesa_FlushMappedNamedBufferRange(GLuint buffer, GLintptr offset, GLsizeiptr length); -- 2.9.3 _______________________________________________ mesa-dev mailing list mesa-dev@lists.freedesktop.org https://lists.freedesktop.org/mailman/listinfo/mesa-dev