From: Ian Romanick <[email protected]> This doesn't implement any of the "cool" features of MapBufferRange. Adding this function is necessary for the next commit in the series.
Cc: Maciej Cencora <[email protected]> Cc: Alex Deucher <[email protected]> --- .../drivers/dri/radeon/radeon_buffer_objects.c | 33 ++++++++++++++++++++ 1 files changed, 33 insertions(+), 0 deletions(-) diff --git a/src/mesa/drivers/dri/radeon/radeon_buffer_objects.c b/src/mesa/drivers/dri/radeon/radeon_buffer_objects.c index ee63436..e106d98 100644 --- a/src/mesa/drivers/dri/radeon/radeon_buffer_objects.c +++ b/src/mesa/drivers/dri/radeon/radeon_buffer_objects.c @@ -198,6 +198,38 @@ radeonMapBuffer(struct gl_context * ctx, /** + * Called via glMapBufferRange() + */ +static void * +radeonMapBufferRange(struct gl_context * ctx, + GLintptr offset, GLsizeiptr length, + GLbitfield access, struct gl_buffer_object *obj) +{ + struct radeon_buffer_object *radeon_obj = get_radeon_buffer_object(obj); + const GLboolean write_only = + (access & (GL_MAP_READ_BIT | GL_MAP_WRITE_BIT)) == GL_MAP_WRITE_BIT; + + if (write_only) { + ctx->Driver.Flush(ctx); + } + + if (radeon_obj->bo == NULL) { + obj->Pointer = NULL; + return NULL; + } + + obj->Offset = offset; + obj->Length = length; + obj->AccessFlags = access; + + radeon_bo_map(radeon_obj->bo, write_only); + + obj->Pointer = radeon_obj->bo->ptr + offset; + return obj->Pointer; +} + + +/** * Called via glUnmapBufferARB() */ static GLboolean @@ -226,5 +258,6 @@ radeonInitBufferObjectFuncs(struct dd_function_table *functions) functions->BufferSubData = radeonBufferSubData; functions->GetBufferSubData = radeonGetBufferSubData; functions->MapBuffer = radeonMapBuffer; + functions->MapBufferRange = radeonMapBufferRange; functions->UnmapBuffer = radeonUnmapBuffer; } -- 1.7.4.4 _______________________________________________ mesa-dev mailing list [email protected] http://lists.freedesktop.org/mailman/listinfo/mesa-dev
