i965: old VS: Use brw_vue_map instead of implicit assumptions about VUE structure.
[mesa.git] / src / mesa / drivers / dri / radeon / radeon_buffer_objects.c
index bc5915d3e432f9e87919681b610c66c337be0f60..7b59c0377f8dd73687952c5fd9b679ae4ad8506b 100644 (file)
@@ -40,7 +40,7 @@ get_radeon_buffer_object(struct gl_buffer_object *obj)
 }
 
 static struct gl_buffer_object *
-radeonNewBufferObject(GLcontext * ctx,
+radeonNewBufferObject(struct gl_context * ctx,
                       GLuint name,
                       GLenum target)
 {
@@ -57,7 +57,7 @@ radeonNewBufferObject(GLcontext * ctx,
  * Called via glDeleteBuffersARB().
  */
 static void
-radeonDeleteBufferObject(GLcontext * ctx,
+radeonDeleteBufferObject(struct gl_context * ctx,
                          struct gl_buffer_object *obj)
 {
     struct radeon_buffer_object *radeon_obj = get_radeon_buffer_object(obj);
@@ -70,7 +70,7 @@ radeonDeleteBufferObject(GLcontext * ctx,
         radeon_bo_unref(radeon_obj->bo);
     }
 
-    _mesa_free(radeon_obj);
+    free(radeon_obj);
 }
 
 
@@ -82,7 +82,7 @@ radeonDeleteBufferObject(GLcontext * ctx,
  * \return GL_TRUE for success, GL_FALSE if out of memory
  */
 static GLboolean
-radeonBufferData(GLcontext * ctx,
+radeonBufferData(struct gl_context * ctx,
                  GLenum target,
                  GLsizeiptrARB size,
                  const GLvoid * data,
@@ -129,8 +129,7 @@ radeonBufferData(GLcontext * ctx,
  * Called via glBufferSubDataARB().
  */
 static void
-radeonBufferSubData(GLcontext * ctx,
-                    GLenum target,
+radeonBufferSubData(struct gl_context * ctx,
                     GLintptrARB offset,
                     GLsizeiptrARB size,
                     const GLvoid * data,
@@ -154,8 +153,7 @@ radeonBufferSubData(GLcontext * ctx,
  * Called via glGetBufferSubDataARB()
  */
 static void
-radeonGetBufferSubData(GLcontext * ctx,
-                       GLenum target,
+radeonGetBufferSubData(struct gl_context * ctx,
                        GLintptrARB offset,
                        GLsizeiptrARB size,
                        GLvoid * data,
@@ -171,17 +169,18 @@ radeonGetBufferSubData(GLcontext * ctx,
 }
 
 /**
- * Called via glMapBufferARB()
+ * Called via glMapBuffer() and glMapBufferRange()
  */
 static void *
-radeonMapBuffer(GLcontext * ctx,
-                GLenum target,
-                GLenum access,
-                struct gl_buffer_object *obj)
+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 (access == GL_WRITE_ONLY_ARB) {
+    if (write_only) {
         ctx->Driver.Flush(ctx);
     }
 
@@ -190,12 +189,13 @@ radeonMapBuffer(GLcontext * ctx,
         return NULL;
     }
 
-    radeon_bo_map(radeon_obj->bo, access == GL_WRITE_ONLY_ARB);
+    obj->Offset = offset;
+    obj->Length = length;
+    obj->AccessFlags = access;
 
-    obj->Pointer = radeon_obj->bo->ptr;
-    obj->Length = obj->Size;
-    obj->Offset = 0;
+    radeon_bo_map(radeon_obj->bo, write_only);
 
+    obj->Pointer = radeon_obj->bo->ptr + offset;
     return obj->Pointer;
 }
 
@@ -204,8 +204,7 @@ radeonMapBuffer(GLcontext * ctx,
  * Called via glUnmapBufferARB()
  */
 static GLboolean
-radeonUnmapBuffer(GLcontext * ctx,
-                  GLenum target,
+radeonUnmapBuffer(struct gl_context * ctx,
                   struct gl_buffer_object *obj)
 {
     struct radeon_buffer_object *radeon_obj = get_radeon_buffer_object(obj);
@@ -229,6 +228,6 @@ radeonInitBufferObjectFuncs(struct dd_function_table *functions)
     functions->BufferData = radeonBufferData;
     functions->BufferSubData = radeonBufferSubData;
     functions->GetBufferSubData = radeonGetBufferSubData;
-    functions->MapBuffer = radeonMapBuffer;
+    functions->MapBufferRange = radeonMapBufferRange;
     functions->UnmapBuffer = radeonUnmapBuffer;
 }