Lines Matching refs:dri

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