diff options
author | Ian Romanick <[email protected]> | 2011-08-21 18:32:09 -0700 |
---|---|---|
committer | Ian Romanick <[email protected]> | 2011-08-23 14:52:11 -0700 |
commit | cccc7412c22a704d85203d7bb9c8e73d45cccf49 (patch) | |
tree | 448320a04f026b3a71de0720531b4bfaec6a567e | |
parent | b2184da684fc20849b5e6e554f0a0f92d2872ce9 (diff) |
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 <[email protected]>
Reviewed-by: Brian Paul <[email protected]>
Acked-by: Kenneth Graunke <[email protected]>
Reviewed-by: Eric Anholt <[email protected]>
Reviewed-by: Alex Deucher <[email protected]>
Cc: Maciej Cencora <[email protected]>
-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; } |