diff options
Diffstat (limited to 'src/mesa/drivers/dri/radeon/radeon_buffer_objects.c')
-rw-r--r-- | src/mesa/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 ee634363dca..e106d98c38e 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; } |