Merge branch 'llvm-cliptest-viewport'
[mesa.git] / src / mesa / drivers / dri / radeon / radeon_buffer_objects.c
index a24b6dac265bda5278db00112255c89feba517ad..0d1af726c07293ba40d8c40be8aa28a31a4d2b01 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,
@@ -114,7 +114,7 @@ radeonBufferData(GLcontext * ctx,
         if (data != NULL) {
             radeon_bo_map(radeon_obj->bo, GL_TRUE);
 
-            _mesa_memcpy(radeon_obj->bo->ptr, data, size);
+            memcpy(radeon_obj->bo->ptr, data, size);
 
             radeon_bo_unmap(radeon_obj->bo);
         }
@@ -129,18 +129,23 @@ radeonBufferData(GLcontext * ctx,
  * Called via glBufferSubDataARB().
  */
 static void
-radeonBufferSubData(GLcontext * ctx,
+radeonBufferSubData(struct gl_context * ctx,
                     GLenum target,
                     GLintptrARB offset,
                     GLsizeiptrARB size,
                     const GLvoid * data,
                     struct gl_buffer_object *obj)
 {
+    radeonContextPtr radeon = RADEON_CONTEXT(ctx);
     struct radeon_buffer_object *radeon_obj = get_radeon_buffer_object(obj);
 
+    if (radeon_bo_is_referenced_by_cs(radeon_obj->bo, radeon->cmdbuf.cs)) {
+        radeon_firevertices(radeon);
+    }
+
     radeon_bo_map(radeon_obj->bo, GL_TRUE);
 
-    _mesa_memcpy(radeon_obj->bo->ptr + offset, data, size);
+    memcpy(radeon_obj->bo->ptr + offset, data, size);
 
     radeon_bo_unmap(radeon_obj->bo);
 }
@@ -149,7 +154,7 @@ radeonBufferSubData(GLcontext * ctx,
  * Called via glGetBufferSubDataARB()
  */
 static void
-radeonGetBufferSubData(GLcontext * ctx,
+radeonGetBufferSubData(struct gl_context * ctx,
                        GLenum target,
                        GLintptrARB offset,
                        GLsizeiptrARB size,
@@ -160,7 +165,7 @@ radeonGetBufferSubData(GLcontext * ctx,
 
     radeon_bo_map(radeon_obj->bo, GL_FALSE);
 
-    _mesa_memcpy(data, radeon_obj->bo->ptr + offset, size);
+    memcpy(data, radeon_obj->bo->ptr + offset, size);
 
     radeon_bo_unmap(radeon_obj->bo);
 }
@@ -169,7 +174,7 @@ radeonGetBufferSubData(GLcontext * ctx,
  * Called via glMapBufferARB()
  */
 static void *
-radeonMapBuffer(GLcontext * ctx,
+radeonMapBuffer(struct gl_context * ctx,
                 GLenum target,
                 GLenum access,
                 struct gl_buffer_object *obj)
@@ -187,7 +192,11 @@ radeonMapBuffer(GLcontext * ctx,
 
     radeon_bo_map(radeon_obj->bo, access == GL_WRITE_ONLY_ARB);
 
-    return obj->Pointer = radeon_obj->bo->ptr;
+    obj->Pointer = radeon_obj->bo->ptr;
+    obj->Length = obj->Size;
+    obj->Offset = 0;
+
+    return obj->Pointer;
 }
 
 
@@ -195,7 +204,7 @@ radeonMapBuffer(GLcontext * ctx,
  * Called via glUnmapBufferARB()
  */
 static GLboolean
-radeonUnmapBuffer(GLcontext * ctx,
+radeonUnmapBuffer(struct gl_context * ctx,
                   GLenum target,
                   struct gl_buffer_object *obj)
 {
@@ -203,9 +212,12 @@ radeonUnmapBuffer(GLcontext * ctx,
 
     if (radeon_obj->bo != NULL) {
         radeon_bo_unmap(radeon_obj->bo);
-        obj->Pointer = NULL;
     }
 
+    obj->Pointer = NULL;
+    obj->Offset = 0;
+    obj->Length = 0;
+
     return GL_TRUE;
 }