Commit a408ed31 authored by Timothy Arceri's avatar Timothy Arceri

mesa: add support for glMapNamedBufferRangeEXT()

parent 9e096ea4
......@@ -124,5 +124,15 @@
<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>
......@@ -3270,30 +3270,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");
}
/**
......
......@@ -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);
......
......@@ -1231,7 +1231,7 @@ const struct function common_desktop_functions_possible[] = {
//{ "glGetVertexArrayPointervEXT", 10, -1 },
//{ "glGetVertexArrayIntegeri_vEXT", 10, -1 },
//{ "glGetVertexArrayPointeri_vEXT", 10, -1 },
//{ "glMapNamedBufferRangeEXT", 10, -1 },
{ "glMapNamedBufferRangeEXT", 10, -1 },
//{ "glFlushMappedNamedBufferRangeEXT", 10, -1 },
/* GL_ARB_internalformat_query */
......
Markdown is supported
0% or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment