summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorIan Romanick <[email protected]>2011-08-21 18:32:09 -0700
committerIan Romanick <[email protected]>2011-08-23 14:52:11 -0700
commitcccc7412c22a704d85203d7bb9c8e73d45cccf49 (patch)
tree448320a04f026b3a71de0720531b4bfaec6a567e
parentb2184da684fc20849b5e6e554f0a0f92d2872ce9 (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.c33
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;
}