Lines Matching full:dri
20 #include "dri.h"
89 * The DRI GEM namespace may be different from the minigbm's driver GEM namespace. We have
92 static int import_into_minigbm(struct dri_driver *dri, struct bo *bo) in import_into_minigbm() argument
99 if (dri->image_extension->queryImage(bo->priv, __DRI_IMAGE_ATTRIB_MODIFIER_UPPER, in import_into_minigbm()
101 dri->image_extension->queryImage(bo->priv, __DRI_IMAGE_ATTRIB_MODIFIER_LOWER, in import_into_minigbm()
108 if (!dri->image_extension->queryImage(bo->priv, __DRI_IMAGE_ATTRIB_NUM_PLANES, &num_planes)) in import_into_minigbm()
113 if (!dri->image_extension->queryImage(bo->priv, __DRI_IMAGE_ATTRIB_FD, &prime_fd)) in import_into_minigbm()
136 plane_image = dri->image_extension->fromPlanar(bo->priv, i, NULL); in import_into_minigbm()
139 if (!dri->image_extension->queryImage(image, __DRI_IMAGE_ATTRIB_STRIDE, &stride) || in import_into_minigbm()
140 !dri->image_extension->queryImage(image, __DRI_IMAGE_ATTRIB_OFFSET, &offset)) { in import_into_minigbm()
149 dri->image_extension->destroyImage(plane_image); in import_into_minigbm()
162 dri->image_extension->destroyImage(plane_image); in import_into_minigbm()
190 struct dri_driver *dri = calloc(1, sizeof(*dri)); in dri_init() local
191 if (!dri) in dri_init()
198 dri->fd = open(node_name, O_RDWR); in dri_init()
200 if (dri->fd < 0) in dri_init()
203 dri->driver_handle = dri_dlopen(dri_so_path); in dri_init()
204 if (!dri->driver_handle) in dri_init()
208 get_extensions = dlsym(dri->driver_handle, fname); in dri_init()
212 dri->extensions = get_extensions(); in dri_init()
213 if (!dri->extensions) in dri_init()
216 if (!lookup_extension(dri->extensions, __DRI_CORE, 2, in dri_init()
217 (const __DRIextension **)&dri->core_extension)) in dri_init()
221 if (!lookup_extension(dri->extensions, __DRI_DRI2, 4, in dri_init()
222 (const __DRIextension **)&dri->dri2_extension)) in dri_init()
225 dri->device = dri->dri2_extension->createNewScreen2(0, dri->fd, loader_extensions, in dri_init()
226 dri->extensions, &dri->configs, NULL); in dri_init()
227 if (!dri->device) in dri_init()
230 dri->context = in dri_init()
231 dri->dri2_extension->createNewContext(dri->device, *dri->configs, NULL, NULL); in dri_init()
233 if (!dri->context) in dri_init()
236 if (!lookup_extension(dri->core_extension->getExtensions(dri->device), __DRI_IMAGE, 12, in dri_init()
237 (const __DRIextension **)&dri->image_extension)) in dri_init()
240 if (!lookup_extension(dri->core_extension->getExtensions(dri->device), __DRI2_FLUSH, 4, in dri_init()
241 (const __DRIextension **)&dri->flush_extension)) in dri_init()
244 return dri; in dri_init()
247 dri->core_extension->destroyContext(dri->context); in dri_init()
249 dri->core_extension->destroyScreen(dri->device); in dri_init()
251 dri_dlclose(dri->driver_handle); in dri_init()
252 dri->driver_handle = NULL; in dri_init()
254 close(dri->fd); in dri_init()
256 free(dri); in dri_init()
260 void dri_close(struct dri_driver *dri) in dri_close() argument
262 dri->core_extension->destroyContext(dri->context); in dri_close()
263 dri->core_extension->destroyScreen(dri->device); in dri_close()
264 dri_dlclose(dri->driver_handle); in dri_close()
265 dri->driver_handle = NULL; in dri_close()
266 close(dri->fd); in dri_close()
267 free(dri); in dri_close()
270 int dri_bo_create(struct dri_driver *dri, struct bo *bo, uint32_t width, uint32_t height, in dri_bo_create() argument
287 bo->priv = dri->image_extension->createImage(dri->device, width, height, dri_format, in dri_bo_create()
294 ret = import_into_minigbm(dri, bo); in dri_bo_create()
301 dri->image_extension->destroyImage(bo->priv); in dri_bo_create()
305 int dri_bo_create_with_modifiers(struct dri_driver *dri, struct bo *bo, uint32_t width, in dri_bo_create_with_modifiers() argument
311 if (!dri->image_extension->createImageWithModifiers) in dri_bo_create_with_modifiers()
316 bo->priv = dri->image_extension->createImageWithModifiers( in dri_bo_create_with_modifiers()
317 dri->device, width, height, dri_format, modifiers, modifier_count, NULL); in dri_bo_create_with_modifiers()
323 ret = import_into_minigbm(dri, bo); in dri_bo_create_with_modifiers()
330 dri->image_extension->destroyImage(bo->priv); in dri_bo_create_with_modifiers()
334 int dri_bo_import(struct dri_driver *dri, struct bo *bo, struct drv_import_fd_data *data) in dri_bo_import() argument
341 if (!dri->image_extension->createImageFromDmaBufs2) in dri_bo_import()
345 bo->priv = dri->image_extension->createImageFromDmaBufs2(dri->device, data->width, data->height, in dri_bo_import()
359 /* Could translate the DRI error, but the Mesa GBM also returns ENOSYS. */ in dri_bo_import()
364 bo->priv = dri->image_extension->createImageFromFds(dri->device, data->width, data->height, in dri_bo_import()
374 ret = import_into_minigbm(dri, bo); in dri_bo_import()
376 dri->image_extension->destroyImage(bo->priv); in dri_bo_import()
383 int dri_bo_release(struct dri_driver *dri, struct bo *bo) in dri_bo_release() argument
386 dri->image_extension->destroyImage(bo->priv); in dri_bo_release()
391 int dri_bo_destroy(struct dri_driver *dri, struct bo *bo) in dri_bo_destroy() argument
408 void *dri_bo_map(struct dri_driver *dri, struct bo *bo, struct vma *vma, size_t plane, in dri_bo_map() argument
411 /* GBM flags and DRI flags are the same. */ in dri_bo_map()
412 vma->addr = dri->image_extension->mapImage(dri->context, bo->priv, 0, 0, bo->meta.width, in dri_bo_map()
421 int dri_bo_unmap(struct dri_driver *dri, struct bo *bo, struct vma *vma) in dri_bo_unmap() argument
424 dri->image_extension->unmapImage(dri->context, bo->priv, vma->priv); in dri_bo_unmap()
429 * "Not all DRI drivers use direct maps. They may queue up DMA operations in dri_bo_unmap()
434 dri->flush_extension->flush_with_flags(dri->context, NULL, __DRI2_FLUSH_CONTEXT, 0); in dri_bo_unmap()
438 size_t dri_num_planes_from_modifier(struct dri_driver *dri, uint32_t format, uint64_t modifier) in dri_num_planes_from_modifier() argument
445 if (dri->image_extension->queryDmaBufFormatModifierAttribs && in dri_num_planes_from_modifier()
446 dri->image_extension->queryDmaBufFormatModifierAttribs( in dri_num_planes_from_modifier()
447 dri->device, format, modifier, __DRI_IMAGE_FORMAT_MODIFIER_ATTRIB_PLANE_COUNT, in dri_num_planes_from_modifier()
454 bool dri_query_modifiers(struct dri_driver *dri, uint32_t format, int max, uint64_t *modifiers, in dri_query_modifiers() argument
457 if (!dri->image_extension->queryDmaBufModifiers) in dri_query_modifiers()
460 return dri->image_extension->queryDmaBufModifiers(dri->device, format, max, modifiers, NULL, in dri_query_modifiers()