radeon/r200: mark state atoms as dirty after blits
[mesa.git] / src / mesa / drivers / dri / radeon / radeon_buffer_objects.c
index 7b59c0377f8dd73687952c5fd9b679ae4ad8506b..d9d4f5ffc5e1c11173fadffde9dc3228e57e175e 100644 (file)
  *
  */
 
-#include "radeon_buffer_objects.h"
-
 #include "main/imports.h"
 #include "main/mtypes.h"
 #include "main/bufferobj.h"
 
 #include "radeon_common.h"
+#include "radeon_buffer_objects.h"
 
 struct radeon_buffer_object *
 get_radeon_buffer_object(struct gl_buffer_object *obj)
@@ -41,12 +40,11 @@ get_radeon_buffer_object(struct gl_buffer_object *obj)
 
 static struct gl_buffer_object *
 radeonNewBufferObject(struct gl_context * ctx,
-                      GLuint name,
-                      GLenum target)
+                      GLuint name)
 {
     struct radeon_buffer_object *obj = CALLOC_STRUCT(radeon_buffer_object);
 
-    _mesa_initialize_buffer_object(&obj->Base, name, target);
+    _mesa_initialize_buffer_object(ctx, &obj->Base, name);
 
     obj->bo = NULL;
 
@@ -61,9 +59,12 @@ radeonDeleteBufferObject(struct gl_context * ctx,
                          struct gl_buffer_object *obj)
 {
     struct radeon_buffer_object *radeon_obj = get_radeon_buffer_object(obj);
+    int i;
 
-    if (obj->Pointer) {
-        radeon_bo_unmap(radeon_obj->bo);
+    for (i = 0; i < MAP_COUNT; i++) {
+       if (obj->Mappings[i].Pointer) {
+           radeon_bo_unmap(radeon_obj->bo);
+       }
     }
 
     if (radeon_obj->bo) {
@@ -87,6 +88,7 @@ radeonBufferData(struct gl_context * ctx,
                  GLsizeiptrARB size,
                  const GLvoid * data,
                  GLenum usage,
+                 GLbitfield storageFlags,
                  struct gl_buffer_object *obj)
 {
     radeonContextPtr radeon = RADEON_CONTEXT(ctx);
@@ -94,6 +96,7 @@ radeonBufferData(struct gl_context * ctx,
 
     radeon_obj->Base.Size = size;
     radeon_obj->Base.Usage = usage;
+    radeon_obj->Base.StorageFlags = storageFlags;
 
     if (radeon_obj->bo != NULL) {
         radeon_bo_unref(radeon_obj->bo);
@@ -104,7 +107,7 @@ radeonBufferData(struct gl_context * ctx,
         radeon_obj->bo = radeon_bo_open(radeon->radeonScreen->bom,
                                         0,
                                         size,
-                                        32,
+                                        ctx->Const.MinMapBufferAlignment,
                                         RADEON_GEM_DOMAIN_GTT,
                                         0);
 
@@ -174,7 +177,8 @@ radeonGetBufferSubData(struct gl_context * ctx,
 static void *
 radeonMapBufferRange(struct gl_context * ctx,
                     GLintptr offset, GLsizeiptr length,
-                    GLbitfield access, struct gl_buffer_object *obj)
+                    GLbitfield access, struct gl_buffer_object *obj,
+                     gl_map_buffer_index index)
 {
     struct radeon_buffer_object *radeon_obj = get_radeon_buffer_object(obj);
     const GLboolean write_only =
@@ -185,18 +189,18 @@ radeonMapBufferRange(struct gl_context * ctx,
     }
 
     if (radeon_obj->bo == NULL) {
-        obj->Pointer = NULL;
+        obj->Mappings[index].Pointer = NULL;
         return NULL;
     }
 
-    obj->Offset = offset;
-    obj->Length = length;
-    obj->AccessFlags = access;
+    obj->Mappings[index].Offset = offset;
+    obj->Mappings[index].Length = length;
+    obj->Mappings[index].AccessFlags = access;
 
     radeon_bo_map(radeon_obj->bo, write_only);
 
-    obj->Pointer = radeon_obj->bo->ptr + offset;
-    return obj->Pointer;
+    obj->Mappings[index].Pointer = radeon_obj->bo->ptr + offset;
+    return obj->Mappings[index].Pointer;
 }
 
 
@@ -205,7 +209,8 @@ radeonMapBufferRange(struct gl_context * ctx,
  */
 static GLboolean
 radeonUnmapBuffer(struct gl_context * ctx,
-                  struct gl_buffer_object *obj)
+                  struct gl_buffer_object *obj,
+                  gl_map_buffer_index index)
 {
     struct radeon_buffer_object *radeon_obj = get_radeon_buffer_object(obj);
 
@@ -213,9 +218,9 @@ radeonUnmapBuffer(struct gl_context * ctx,
         radeon_bo_unmap(radeon_obj->bo);
     }
 
-    obj->Pointer = NULL;
-    obj->Offset = 0;
-    obj->Length = 0;
+    obj->Mappings[index].Pointer = NULL;
+    obj->Mappings[index].Offset = 0;
+    obj->Mappings[index].Length = 0;
 
     return GL_TRUE;
 }