winsys/radeon: disable use of the buffer busy-for-write flag
authorMarek Olšák <maraeo@gmail.com>
Sat, 6 Aug 2011 03:15:30 +0000 (05:15 +0200)
committerMarek Olšák <maraeo@gmail.com>
Sat, 6 Aug 2011 03:45:19 +0000 (05:45 +0200)
src/gallium/winsys/radeon/drm/radeon_drm_bo.c

index 2eb9d13..609a906 100644 (file)
@@ -192,6 +192,17 @@ static void *radeon_bo_map_internal(struct pb_buffer *_buf,
                 if (radeon_bo_is_referenced_by_cs_for_write(cs, bo)) {
                     cs->flush_cs(cs->flush_data, 0);
                     radeon_bo_wait((struct pb_buffer*)bo);
+                } else {
+                    /* XXX We could check whether the buffer is busy for write here. */
+                    radeon_bo_wait((struct pb_buffer*)bo);
+                }
+#if 0
+                /* XXX This per-winsys busy-for-write tracking sucks.
+                 * What if some other process wrote something, e.g. using
+                 * DRI2CopyRegion? We wouldn't get the busy_for_write flag
+                 * set, skipping bo_wait.
+                 * We need to move the is-busy-for-write query into the kernel.
+                 */
                 } else if (bo->busy_for_write) {
                     /* Update the busy_for_write field (done by radeon_bo_is_busy)
                      * and wait if needed. */
@@ -199,6 +210,7 @@ static void *radeon_bo_map_internal(struct pb_buffer *_buf,
                         radeon_bo_wait((struct pb_buffer*)bo);
                     }
                 }
+#endif
             } else {
                 /* Mapping for write. */
                 if (radeon_bo_is_referenced_by_cs(cs, bo)) {