OSDN Git Service

minigbm: flush buffer instead of unmapping
[android-x86/external-minigbm.git] / gbm.c
diff --git a/gbm.c b/gbm.c
index ab576cf..831dfbf 100644 (file)
--- a/gbm.c
+++ b/gbm.c
@@ -170,7 +170,7 @@ PUBLIC struct gbm_bo *gbm_bo_import(struct gbm_device *gbm, uint32_t type, void
        size_t num_planes, i;
 
        memset(&drv_data, 0, sizeof(drv_data));
-
+       drv_data.flags = gbm_convert_flags(usage);
        switch (type) {
        case GBM_BO_IMPORT_FD:
                gbm_format = fd_data->format;
@@ -233,13 +233,16 @@ PUBLIC void *gbm_bo_map(struct gbm_bo *bo, uint32_t x, uint32_t y, uint32_t widt
                return NULL;
 
        *stride = gbm_bo_get_plane_stride(bo, plane);
-       return drv_bo_map(bo->bo, x, y, width, height, 0, (struct map_info **)map_data, plane);
+       uint32_t drv_flags = flags & GBM_BO_TRANSFER_READ ? BO_TRANSFER_READ : BO_TRANSFER_NONE;
+       drv_flags |= flags & GBM_BO_TRANSFER_WRITE ? BO_TRANSFER_WRITE : BO_TRANSFER_NONE;
+       return drv_bo_map(bo->bo, x, y, width, height, drv_flags, (struct map_info **)map_data,
+                         plane);
 }
 
 PUBLIC void gbm_bo_unmap(struct gbm_bo *bo, void *map_data)
 {
        assert(bo);
-       drv_bo_unmap(bo->bo, map_data);
+       drv_bo_flush(bo->bo, map_data);
 }
 
 PUBLIC uint32_t gbm_bo_get_width(struct gbm_bo *bo)