From cccc7412c22a704d85203d7bb9c8e73d45cccf49 Mon Sep 17 00:00:00 2001 From: Ian Romanick Date: Sun, 21 Aug 2011 18:32:09 -0700 Subject: [PATCH] radeon: Hack up an implementation of MapBufferRange This doesn't implement any of the "cool" features of MapBufferRange. Adding this function is necessary for the next commit in the series. Signed-off-by: Ian Romanick Reviewed-by: Brian Paul Acked-by: Kenneth Graunke Reviewed-by: Eric Anholt Reviewed-by: Alex Deucher Cc: Maciej Cencora --- .../dri/radeon/radeon_buffer_objects.c | 33 +++++++++++++++++++ 1 file changed, 33 insertions(+) diff --git a/src/mesa/drivers/dri/radeon/radeon_buffer_objects.c b/src/mesa/drivers/dri/radeon/radeon_buffer_objects.c index ee634363dca..e106d98c38e 100644 --- a/src/mesa/drivers/dri/radeon/radeon_buffer_objects.c +++ b/src/mesa/drivers/dri/radeon/radeon_buffer_objects.c @@ -197,6 +197,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() */ @@ -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; } -- 2.30.2