X-Git-Url: http://git.osdn.net/view?a=blobdiff_plain;f=drv.c;h=3f973c3cef2a5c1213bbc040ba179bac270e5c67;hb=af80dd815f7fd8d3299dd538ed5f93f0adddd4c9;hp=fee3e57a36c32185030c0af84aa773448d5d3c71;hpb=8d88474891dfb726c661849a7d299eb81ed91c7a;p=android-x86%2Fexternal-minigbm.git diff --git a/drv.c b/drv.c index fee3e57..3f973c3 100644 --- a/drv.c +++ b/drv.c @@ -28,41 +28,38 @@ #ifdef DRV_AMDGPU extern const struct backend backend_amdgpu; #endif -extern const struct backend backend_evdi; #ifdef DRV_EXYNOS extern const struct backend backend_exynos; #endif #ifdef DRV_I915 extern const struct backend backend_i915; #endif -#ifdef DRV_MARVELL -extern const struct backend backend_marvell; -#endif #ifdef DRV_MEDIATEK extern const struct backend backend_mediatek; #endif -#ifdef DRV_MESON -extern const struct backend backend_meson; -#endif #ifdef DRV_MSM extern const struct backend backend_msm; #endif -extern const struct backend backend_nouveau; -#ifdef DRV_RADEON -extern const struct backend backend_radeon; -#endif #ifdef DRV_ROCKCHIP extern const struct backend backend_rockchip; #endif #ifdef DRV_TEGRA extern const struct backend backend_tegra; #endif -extern const struct backend backend_udl; #ifdef DRV_VC4 extern const struct backend backend_vc4; #endif -extern const struct backend backend_vgem; + +// Dumb / generic drivers +extern const struct backend backend_evdi; +extern const struct backend backend_marvell; +extern const struct backend backend_meson; +extern const struct backend backend_nouveau; +extern const struct backend backend_komeda; +extern const struct backend backend_radeon; +extern const struct backend backend_synaptics; extern const struct backend backend_virtio_gpu; +extern const struct backend backend_udl; static const struct backend *drv_get_backend(int fd) { @@ -78,40 +75,26 @@ static const struct backend *drv_get_backend(int fd) #ifdef DRV_AMDGPU &backend_amdgpu, #endif - &backend_evdi, #ifdef DRV_EXYNOS &backend_exynos, #endif #ifdef DRV_I915 &backend_i915, #endif -#ifdef DRV_MARVELL - &backend_marvell, -#endif #ifdef DRV_MEDIATEK &backend_mediatek, #endif -#ifdef DRV_MESON - &backend_meson, -#endif #ifdef DRV_MSM &backend_msm, #endif - &backend_nouveau, -#ifdef DRV_RADEON - &backend_radeon, -#endif #ifdef DRV_ROCKCHIP &backend_rockchip, #endif -#ifdef DRV_TEGRA - &backend_tegra, -#endif - &backend_udl, #ifdef DRV_VC4 &backend_vc4, #endif - &backend_vgem, &backend_virtio_gpu, + &backend_marvell, &backend_meson, &backend_nouveau, &backend_komeda, + &backend_radeon, &backend_synaptics, &backend_virtio_gpu, }; for (i = 0; i < ARRAY_SIZE(backend_list); i++) { @@ -439,7 +422,7 @@ void *drv_bo_map(struct bo *bo, const struct rectangle *rect, uint32_t map_flags { uint32_t i; uint8_t *addr; - struct mapping mapping; + struct mapping mapping = { 0 }; assert(rect->width >= 0); assert(rect->height >= 0); @@ -453,7 +436,6 @@ void *drv_bo_map(struct bo *bo, const struct rectangle *rect, uint32_t map_flags return MAP_FAILED; } - memset(&mapping, 0, sizeof(mapping)); mapping.rect = *rect; mapping.refcount = 1; @@ -552,6 +534,21 @@ int drv_bo_invalidate(struct bo *bo, struct mapping *mapping) return ret; } +int drv_bo_flush(struct bo *bo, struct mapping *mapping) +{ + int ret = 0; + + assert(mapping); + assert(mapping->vma); + assert(mapping->refcount > 0); + assert(mapping->vma->refcount > 0); + + if (bo->drv->backend->bo_flush) + ret = bo->drv->backend->bo_flush(bo, mapping); + + return ret; +} + int drv_bo_flush_or_unmap(struct bo *bo, struct mapping *mapping) { int ret = 0; @@ -642,6 +639,11 @@ uint32_t drv_bo_get_format(struct bo *bo) return bo->meta.format; } +size_t drv_bo_get_total_size(struct bo *bo) +{ + return bo->meta.total_size; +} + uint32_t drv_resolve_format(struct driver *drv, uint32_t format, uint64_t use_flags) { if (drv->backend->resolve_format) @@ -685,3 +687,17 @@ void drv_log_prefix(const char *prefix, const char *file, int line, const char * #endif va_end(args); } + +int drv_resource_info(struct bo *bo, uint32_t strides[DRV_MAX_PLANES], + uint32_t offsets[DRV_MAX_PLANES]) +{ + for (uint32_t plane = 0; plane < bo->meta.num_planes; plane++) { + strides[plane] = bo->meta.strides[plane]; + offsets[plane] = bo->meta.offsets[plane]; + } + + if (bo->drv->backend->resource_info) + return bo->drv->backend->resource_info(bo, strides, offsets); + + return 0; +}