OSDN Git Service

minigbm: cros_gralloc: support GRALLOC_MODULE_API_VERSION_0_3
[android-x86/external-minigbm.git] / drv.c
diff --git a/drv.c b/drv.c
index e94c2a8..87b633a 100644 (file)
--- a/drv.c
+++ b/drv.c
@@ -348,11 +348,13 @@ void *drv_bo_map(struct bo *bo, uint32_t x, uint32_t y, uint32_t width, uint32_t
        uint8_t *addr;
        size_t offset;
        struct map_info *data;
+       int prot;
 
        assert(width > 0);
        assert(height > 0);
        assert(x + width <= drv_bo_get_width(bo));
        assert(y + height <= drv_bo_get_height(bo));
+       assert(BO_TRANSFER_READ_WRITE & flags);
 
        pthread_mutex_lock(&bo->drv->driver_lock);
 
@@ -363,7 +365,8 @@ void *drv_bo_map(struct bo *bo, uint32_t x, uint32_t y, uint32_t width, uint32_t
        }
 
        data = calloc(1, sizeof(*data));
-       addr = bo->drv->backend->bo_map(bo, data, plane);
+       prot = BO_TRANSFER_WRITE & flags ? PROT_WRITE | PROT_READ : PROT_READ;
+       addr = bo->drv->backend->bo_map(bo, data, plane, prot);
        if (addr == MAP_FAILED) {
                *map_data = NULL;
                free(data);
@@ -479,10 +482,10 @@ uint32_t drv_bo_get_format(struct bo *bo)
        return bo->format;
 }
 
-uint32_t drv_resolve_format(struct driver *drv, uint32_t format)
+uint32_t drv_resolve_format(struct driver *drv, uint32_t format, uint64_t usage)
 {
        if (drv->backend->resolve_format)
-               return drv->backend->resolve_format(format);
+               return drv->backend->resolve_format(format, usage);
 
        return format;
 }
@@ -539,6 +542,7 @@ size_t drv_num_planes_from_format(uint32_t format)
        case DRM_FORMAT_YVYU:
                return 1;
        case DRM_FORMAT_NV12:
+       case DRM_FORMAT_NV21:
                return 2;
        case DRM_FORMAT_YVU420:
        case DRM_FORMAT_YVU420_ANDROID: