Lines Matching full:dri
64 struct gbm_dri_device *dri = data; in dri_lookup_egl_image() local
66 if (dri->lookup_image == NULL) in dri_lookup_egl_image()
69 return dri->lookup_image(screen, image, dri->lookup_user_data); in dri_lookup_egl_image()
75 struct gbm_dri_device *dri = data; in dri_validate_egl_image() local
77 if (dri->validate_image == NULL) in dri_validate_egl_image()
80 return dri->validate_image(image, dri->lookup_user_data); in dri_validate_egl_image()
86 struct gbm_dri_device *dri = data; in dri_lookup_egl_image_validated() local
88 if (dri->lookup_image_validated == NULL) in dri_lookup_egl_image_validated()
91 return dri->lookup_image_validated(image, dri->lookup_user_data); in dri_lookup_egl_image_validated()
101 struct gbm_dri_device *dri = gbm_dri_device(surf->base.gbm); in dri_get_buffers() local
103 if (dri->get_buffers == NULL) in dri_get_buffers()
106 return dri->get_buffers(driDrawable, width, height, attachments, in dri_get_buffers()
114 struct gbm_dri_device *dri = gbm_dri_device(surf->base.gbm); in dri_flush_front_buffer() local
116 if (dri->flush_front_buffer != NULL) in dri_flush_front_buffer()
117 dri->flush_front_buffer(driDrawable, surf->dri_private); in dri_flush_front_buffer()
127 struct gbm_dri_device *dri = gbm_dri_device(surf->base.gbm); in dri_get_buffers_with_format() local
129 if (dri->get_buffers_with_format == NULL) in dri_get_buffers_with_format()
133 dri->get_buffers_with_format(driDrawable, width, height, attachments, in dri_get_buffers_with_format()
158 struct gbm_dri_device *dri = gbm_dri_device(surf->base.gbm); in image_get_buffers() local
160 if (dri->image_get_buffers == NULL) in image_get_buffers()
163 return dri->image_get_buffers(driDrawable, format, stamp, in image_get_buffers()
195 struct gbm_dri_device *dri = gbm_dri_device(surf->base.gbm); in swrast_put_image2() local
197 dri->swrast_put_image2(driDrawable, in swrast_put_image2()
227 struct gbm_dri_device *dri = gbm_dri_device(surf->base.gbm); in swrast_get_image() local
229 dri->swrast_get_image(driDrawable, in swrast_get_image()
314 dri_bind_extensions(struct gbm_dri_device *dri, in dri_bind_extensions() argument
325 field = ((char *) dri + matches[j].offset); in dri_bind_extensions()
332 field = ((char *) dri + matches[j].offset); in dri_bind_extensions()
344 dri_open_driver(struct gbm_dri_device *dri) in dri_open_driver() argument
346 /* Temporarily work around dri driver libs that need symbols in libglapi in dri_open_driver()
365 return loader_open_driver(dri->driver_name, &dri->driver, search_path_vars); in dri_open_driver()
369 dri_load_driver(struct gbm_dri_device *dri) in dri_load_driver() argument
373 extensions = dri_open_driver(dri); in dri_load_driver()
377 if (!dri_bind_extensions(dri, gbm_dri_device_extensions, in dri_load_driver()
380 dlclose(dri->driver); in dri_load_driver()
385 dri->driver_extensions = extensions; in dri_load_driver()
391 dri_load_driver_swrast(struct gbm_dri_device *dri) in dri_load_driver_swrast() argument
395 extensions = dri_open_driver(dri); in dri_load_driver_swrast()
399 if (!dri_bind_extensions(dri, gbm_swrast_device_extensions, in dri_load_driver_swrast()
402 dlclose(dri->driver); in dri_load_driver_swrast()
407 dri->driver_extensions = extensions; in dri_load_driver_swrast()
413 dri_screen_create_dri2(struct gbm_dri_device *dri, char *driver_name) in dri_screen_create_dri2() argument
418 dri->driver_name = driver_name; in dri_screen_create_dri2()
419 if (dri->driver_name == NULL) in dri_screen_create_dri2()
422 ret = dri_load_driver(dri); in dri_screen_create_dri2()
424 fprintf(stderr, "failed to load driver: %s\n", dri->driver_name); in dri_screen_create_dri2()
428 dri->loader_extensions = gbm_dri_screen_extensions; in dri_screen_create_dri2()
430 if (dri->dri2 == NULL) in dri_screen_create_dri2()
433 if (dri->dri2->base.version >= 4) { in dri_screen_create_dri2()
434 dri->screen = dri->dri2->createNewScreen2(0, dri->base.v0.fd, in dri_screen_create_dri2()
435 dri->loader_extensions, in dri_screen_create_dri2()
436 dri->driver_extensions, in dri_screen_create_dri2()
437 &dri->driver_configs, dri); in dri_screen_create_dri2()
439 dri->screen = dri->dri2->createNewScreen(0, dri->base.v0.fd, in dri_screen_create_dri2()
440 dri->loader_extensions, in dri_screen_create_dri2()
441 &dri->driver_configs, dri); in dri_screen_create_dri2()
443 if (dri->screen == NULL) in dri_screen_create_dri2()
446 extensions = dri->core->getExtensions(dri->screen); in dri_screen_create_dri2()
447 if (!dri_bind_extensions(dri, dri_core_extensions, in dri_screen_create_dri2()
454 dri->lookup_image = NULL; in dri_screen_create_dri2()
455 dri->lookup_user_data = NULL; in dri_screen_create_dri2()
460 dri->core->destroyScreen(dri->screen); in dri_screen_create_dri2()
466 dri_screen_create_swrast(struct gbm_dri_device *dri) in dri_screen_create_swrast() argument
470 dri->driver_name = strdup("swrast"); in dri_screen_create_swrast()
471 if (dri->driver_name == NULL) in dri_screen_create_swrast()
474 ret = dri_load_driver_swrast(dri); in dri_screen_create_swrast()
480 dri->loader_extensions = gbm_dri_screen_extensions; in dri_screen_create_swrast()
482 if (dri->swrast == NULL) in dri_screen_create_swrast()
485 if (dri->swrast->base.version >= 4) { in dri_screen_create_swrast()
486 dri->screen = dri->swrast->createNewScreen2(0, dri->loader_extensions, in dri_screen_create_swrast()
487 dri->driver_extensions, in dri_screen_create_swrast()
488 &dri->driver_configs, dri); in dri_screen_create_swrast()
490 dri->screen = dri->swrast->createNewScreen(0, dri->loader_extensions, in dri_screen_create_swrast()
491 &dri->driver_configs, dri); in dri_screen_create_swrast()
493 if (dri->screen == NULL) in dri_screen_create_swrast()
496 dri->lookup_image = NULL; in dri_screen_create_swrast()
497 dri->lookup_user_data = NULL; in dri_screen_create_swrast()
503 dri_screen_create(struct gbm_dri_device *dri) in dri_screen_create() argument
507 driver_name = loader_get_driver_for_fd(dri->base.v0.fd); in dri_screen_create()
511 return dri_screen_create_dri2(dri, driver_name); in dri_screen_create()
515 dri_screen_create_sw(struct gbm_dri_device *dri) in dri_screen_create_sw() argument
524 ret = dri_screen_create_dri2(dri, driver_name); in dri_screen_create_sw()
530 ret = dri_screen_create_dri2(dri, driver_name); in dri_screen_create_sw()
532 ret = dri_screen_create_swrast(dri); in dri_screen_create_sw()
537 dri->software = true; in dri_screen_create_sw()
664 struct gbm_dri_device *dri = gbm_dri_device(gbm); in gbm_dri_is_format_supported() local
676 if (dri->image->base.version <= 15 || !dri->image->queryDmaBufModifiers) { in gbm_dri_is_format_supported()
688 if (!dri->image->queryDmaBufModifiers(dri->screen, format, 0, NULL, NULL, in gbm_dri_is_format_supported()
700 struct gbm_dri_device *dri = gbm_dri_device(gbm); in gbm_dri_get_format_modifier_plane_count() local
703 if (dri->image->base.version < 16 || in gbm_dri_get_format_modifier_plane_count()
704 !dri->image->queryDmaBufFormatModifierAttribs) in gbm_dri_get_format_modifier_plane_count()
711 if (!dri->image->queryDmaBufFormatModifierAttribs( in gbm_dri_get_format_modifier_plane_count()
712 dri->screen, format, modifier, in gbm_dri_get_format_modifier_plane_count()
737 struct gbm_dri_device *dri = gbm_dri_device(_bo->gbm); in gbm_dri_bo_get_fd() local
744 if (!dri->image->queryImage(bo->image, __DRI_IMAGE_ATTRIB_FD, &fd)) in gbm_dri_bo_get_fd()
751 get_number_planes(struct gbm_dri_device *dri, __DRIimage *image) in get_number_planes() argument
759 dri->image->queryImage(image, __DRI_IMAGE_ATTRIB_NUM_PLANES, &num_planes); in get_number_planes()
770 struct gbm_dri_device *dri = gbm_dri_device(_bo->gbm); in gbm_dri_bo_get_planes() local
773 return get_number_planes(dri, bo->image); in gbm_dri_bo_get_planes()
779 struct gbm_dri_device *dri = gbm_dri_device(_bo->gbm); in gbm_dri_bo_get_handle_for_plane() local
784 if (!dri->image || dri->image->base.version < 13 || !dri->image->fromPlanar) { in gbm_dri_bo_get_handle_for_plane()
795 if (plane >= get_number_planes(dri, bo->image)) { in gbm_dri_bo_get_handle_for_plane()
807 __DRIimage *image = dri->image->fromPlanar(bo->image, plane, NULL); in gbm_dri_bo_get_handle_for_plane()
809 dri->image->queryImage(image, __DRI_IMAGE_ATTRIB_HANDLE, &ret.s32); in gbm_dri_bo_get_handle_for_plane()
810 dri->image->destroyImage(image); in gbm_dri_bo_get_handle_for_plane()
813 dri->image->queryImage(bo->image, __DRI_IMAGE_ATTRIB_HANDLE, &ret.s32); in gbm_dri_bo_get_handle_for_plane()
822 struct gbm_dri_device *dri = gbm_dri_device(_bo->gbm); in gbm_dri_bo_get_plane_fd() local
826 if (!dri->image || dri->image->base.version < 13 || !dri->image->fromPlanar) { in gbm_dri_bo_get_plane_fd()
841 if (plane >= get_number_planes(dri, bo->image)) { in gbm_dri_bo_get_plane_fd()
846 __DRIimage *image = dri->image->fromPlanar(bo->image, plane, NULL); in gbm_dri_bo_get_plane_fd()
848 dri->image->queryImage(image, __DRI_IMAGE_ATTRIB_FD, &fd); in gbm_dri_bo_get_plane_fd()
849 dri->image->destroyImage(image); in gbm_dri_bo_get_plane_fd()
852 dri->image->queryImage(bo->image, __DRI_IMAGE_ATTRIB_FD, &fd); in gbm_dri_bo_get_plane_fd()
861 struct gbm_dri_device *dri = gbm_dri_device(_bo->gbm); in gbm_dri_bo_get_stride() local
866 if (!dri->image || dri->image->base.version < 11 || !dri->image->fromPlanar) { in gbm_dri_bo_get_stride()
875 if (plane >= get_number_planes(dri, bo->image)) { in gbm_dri_bo_get_stride()
885 image = dri->image->fromPlanar(bo->image, plane, NULL); in gbm_dri_bo_get_stride()
887 dri->image->queryImage(image, __DRI_IMAGE_ATTRIB_STRIDE, &stride); in gbm_dri_bo_get_stride()
888 dri->image->destroyImage(image); in gbm_dri_bo_get_stride()
891 dri->image->queryImage(bo->image, __DRI_IMAGE_ATTRIB_STRIDE, &stride); in gbm_dri_bo_get_stride()
900 struct gbm_dri_device *dri = gbm_dri_device(_bo->gbm); in gbm_dri_bo_get_offset() local
909 if (!dri->image || dri->image->base.version < 13 || !dri->image->fromPlanar) in gbm_dri_bo_get_offset()
912 if (plane >= get_number_planes(dri, bo->image)) in gbm_dri_bo_get_offset()
921 __DRIimage *image = dri->image->fromPlanar(bo->image, plane, NULL); in gbm_dri_bo_get_offset()
923 dri->image->queryImage(image, __DRI_IMAGE_ATTRIB_OFFSET, &offset); in gbm_dri_bo_get_offset()
924 dri->image->destroyImage(image); in gbm_dri_bo_get_offset()
927 dri->image->queryImage(bo->image, __DRI_IMAGE_ATTRIB_OFFSET, &offset); in gbm_dri_bo_get_offset()
936 struct gbm_dri_device *dri = gbm_dri_device(_bo->gbm); in gbm_dri_bo_get_modifier() local
939 if (!dri->image || dri->image->base.version < 14) { in gbm_dri_bo_get_modifier()
950 if (!dri->image->queryImage(bo->image, __DRI_IMAGE_ATTRIB_MODIFIER_UPPER, in gbm_dri_bo_get_modifier()
956 if (!dri->image->queryImage(bo->image, __DRI_IMAGE_ATTRIB_MODIFIER_LOWER, in gbm_dri_bo_get_modifier()
968 struct gbm_dri_device *dri = gbm_dri_device(_bo->gbm); in gbm_dri_bo_destroy() local
973 dri->image->destroyImage(bo->image); in gbm_dri_bo_destroy()
978 drmIoctl(dri->base.v0.fd, DRM_IOCTL_MODE_DESTROY_DUMB, &arg); in gbm_dri_bo_destroy()
988 struct gbm_dri_device *dri = gbm_dri_device(gbm); in gbm_dri_bo_import() local
995 if (dri->image == NULL || dri->image->base.version < 4) { in gbm_dri_bo_import()
1006 if (!dri->wl_drm) { in gbm_dri_bo_import()
1011 wb = wayland_drm_buffer_get(dri->wl_drm, (struct wl_resource *) buffer); in gbm_dri_bo_import()
1017 image = dri->image->dupImage(wb->driver_buffer, NULL); in gbm_dri_bo_import()
1029 if (dri->lookup_image == NULL) { in gbm_dri_bo_import()
1034 image = dri->lookup_image(dri->screen, buffer, dri->lookup_user_data); in gbm_dri_bo_import()
1035 image = dri->image->dupImage(image, NULL); in gbm_dri_bo_import()
1036 dri->image->queryImage(image, __DRI_IMAGE_ATTRIB_FORMAT, &dri_format); in gbm_dri_bo_import()
1040 dri->image->destroyImage(image); in gbm_dri_bo_import()
1052 /* GBM's GBM_FORMAT_* tokens are a strict superset of the DRI FourCC in gbm_dri_bo_import()
1057 image = dri->image->createImageFromFds(dri->screen, in gbm_dri_bo_import()
1079 if (dri->image == NULL || dri->image->base.version < 15 || in gbm_dri_bo_import()
1080 dri->image->createImageFromDmaBufs2 == NULL) { in gbm_dri_bo_import()
1085 /* GBM's GBM_FORMAT_* tokens are a strict superset of the DRI FourCC in gbm_dri_bo_import()
1090 image = dri->image->createImageFromDmaBufs2(dri->screen, fd_data->width, in gbm_dri_bo_import()
1116 dri->image->destroyImage(image); in gbm_dri_bo_import()
1126 if (dri->image->base.version >= 2 && in gbm_dri_bo_import()
1127 !dri->image->validateUsage(bo->image, dri_use)) { in gbm_dri_bo_import()
1129 dri->image->destroyImage(bo->image); in gbm_dri_bo_import()
1137 dri->image->queryImage(bo->image, __DRI_IMAGE_ATTRIB_WIDTH, in gbm_dri_bo_import()
1139 dri->image->queryImage(bo->image, __DRI_IMAGE_ATTRIB_HEIGHT, in gbm_dri_bo_import()
1141 dri->image->queryImage(bo->image, __DRI_IMAGE_ATTRIB_STRIDE, in gbm_dri_bo_import()
1143 dri->image->queryImage(bo->image, __DRI_IMAGE_ATTRIB_HANDLE, in gbm_dri_bo_import()
1154 struct gbm_dri_device *dri = gbm_dri_device(gbm); in create_dumb() local
1179 ret = drmIoctl(dri->base.v0.fd, DRM_IOCTL_MODE_CREATE_DUMB, &create_arg); in create_dumb()
1200 drmIoctl(dri->base.v0.fd, DRM_IOCTL_MODE_DESTROY_DUMB, &destroy_arg); in create_dumb()
1214 struct gbm_dri_device *dri = gbm_dri_device(gbm); in gbm_dri_bo_create() local
1221 if (usage & GBM_BO_USE_WRITE || dri->image == NULL) in gbm_dri_bo_create()
1251 if (modifiers && (dri->image->base.version < 14 || in gbm_dri_bo_create()
1252 !dri->image->createImageWithModifiers)) { in gbm_dri_bo_create()
1257 bo->image = loader_dri_create_image(dri->screen, dri->image, width, height, in gbm_dri_bo_create()
1266 dri->image->queryImage(bo->image, __DRI_IMAGE_ATTRIB_HANDLE, in gbm_dri_bo_create()
1268 dri->image->queryImage(bo->image, __DRI_IMAGE_ATTRIB_STRIDE, in gbm_dri_bo_create()
1284 struct gbm_dri_device *dri = gbm_dri_device(_bo->gbm); in gbm_dri_bo_map() local
1294 if (!dri->image || dri->image->base.version < 12 || !dri->image->mapImage) { in gbm_dri_bo_map()
1299 mtx_lock(&dri->mutex); in gbm_dri_bo_map()
1300 if (!dri->context) in gbm_dri_bo_map()
1301 dri->context = dri->dri2->createNewContext(dri->screen, NULL, in gbm_dri_bo_map()
1303 assert(dri->context); in gbm_dri_bo_map()
1304 mtx_unlock(&dri->mutex); in gbm_dri_bo_map()
1306 /* GBM flags and DRI flags are the same, so just pass them on */ in gbm_dri_bo_map()
1307 return dri->image->mapImage(dri->context, bo->image, x, y, in gbm_dri_bo_map()
1315 struct gbm_dri_device *dri = gbm_dri_device(_bo->gbm); in gbm_dri_bo_unmap() local
1325 if (!dri->context || !dri->image || in gbm_dri_bo_unmap()
1326 dri->image->base.version < 12 || !dri->image->unmapImage) in gbm_dri_bo_unmap()
1329 dri->image->unmapImage(dri->context, bo->image, map_data); in gbm_dri_bo_unmap()
1332 * Not all DRI drivers use direct maps. They may queue up DMA operations in gbm_dri_bo_unmap()
1336 if (dri->flush->base.version >= 4) in gbm_dri_bo_unmap()
1337 dri->flush->flush_with_flags(dri->context, NULL, __DRI2_FLUSH_CONTEXT, 0); in gbm_dri_bo_unmap()
1347 struct gbm_dri_device *dri = gbm_dri_device(gbm); in gbm_dri_surface_create() local
1351 (!dri->image || dri->image->base.version < 14 || in gbm_dri_surface_create()
1352 !dri->image->createImageWithModifiers)) { in gbm_dri_surface_create()
1416 struct gbm_dri_device *dri = gbm_dri_device(gbm); in dri_destroy() local
1419 if (dri->context) in dri_destroy()
1420 dri->core->destroyContext(dri->context); in dri_destroy()
1422 dri->core->destroyScreen(dri->screen); in dri_destroy()
1423 for (i = 0; dri->driver_configs[i]; i++) in dri_destroy()
1424 free((__DRIconfig *) dri->driver_configs[i]); in dri_destroy()
1425 free(dri->driver_configs); in dri_destroy()
1426 dlclose(dri->driver); in dri_destroy()
1427 free(dri->driver_name); in dri_destroy()
1429 free(dri); in dri_destroy()
1435 struct gbm_dri_device *dri; in dri_device_create() local
1440 * Since the DRI backend is built-in to the loader, the loader ABI version is in dri_device_create()
1446 dri = calloc(1, sizeof *dri); in dri_device_create()
1447 if (!dri) in dri_device_create()
1450 dri->base.v0.fd = fd; in dri_device_create()
1451 dri->base.v0.backend_version = gbm_backend_version; in dri_device_create()
1452 dri->base.v0.bo_create = gbm_dri_bo_create; in dri_device_create()
1453 dri->base.v0.bo_import = gbm_dri_bo_import; in dri_device_create()
1454 dri->base.v0.bo_map = gbm_dri_bo_map; in dri_device_create()
1455 dri->base.v0.bo_unmap = gbm_dri_bo_unmap; in dri_device_create()
1456 dri->base.v0.is_format_supported = gbm_dri_is_format_supported; in dri_device_create()
1457 dri->base.v0.get_format_modifier_plane_count = in dri_device_create()
1459 dri->base.v0.bo_write = gbm_dri_bo_write; in dri_device_create()
1460 dri->base.v0.bo_get_fd = gbm_dri_bo_get_fd; in dri_device_create()
1461 dri->base.v0.bo_get_planes = gbm_dri_bo_get_planes; in dri_device_create()
1462 dri->base.v0.bo_get_handle = gbm_dri_bo_get_handle_for_plane; in dri_device_create()
1463 dri->base.v0.bo_get_plane_fd = gbm_dri_bo_get_plane_fd; in dri_device_create()
1464 dri->base.v0.bo_get_stride = gbm_dri_bo_get_stride; in dri_device_create()
1465 dri->base.v0.bo_get_offset = gbm_dri_bo_get_offset; in dri_device_create()
1466 dri->base.v0.bo_get_modifier = gbm_dri_bo_get_modifier; in dri_device_create()
1467 dri->base.v0.bo_destroy = gbm_dri_bo_destroy; in dri_device_create()
1468 dri->base.v0.destroy = dri_destroy; in dri_device_create()
1469 dri->base.v0.surface_create = gbm_dri_surface_create; in dri_device_create()
1470 dri->base.v0.surface_destroy = gbm_dri_surface_destroy; in dri_device_create()
1472 dri->base.v0.name = "drm"; in dri_device_create()
1474 dri->visual_table = gbm_dri_visuals_table; in dri_device_create()
1475 dri->num_visuals = ARRAY_SIZE(gbm_dri_visuals_table); in dri_device_create()
1477 mtx_init(&dri->mutex, mtx_plain); in dri_device_create()
1481 ret = dri_screen_create(dri); in dri_device_create()
1483 ret = dri_screen_create_sw(dri); in dri_device_create()
1485 ret = dri_screen_create_sw(dri); in dri_device_create()
1491 return &dri->base; in dri_device_create()
1494 free(dri); in dri_device_create()
1501 .v0.backend_name = "dri",