/** Create a gbm device for allocating buffers * * The file descriptor passed in is used by the backend to communicate with * platform for allocating the memory. For allocations using DRI this would be * the file descriptor returned when opening a device such as \c * /dev/dri/card0 * * \param fd The file descriptor for a backend specific device * \return The newly created struct gbm_device. The resources associated with * the device should be freed with gbm_device_destroy() when it is no longer * needed. If the creation of the device failed NULL will be returned. */ GBM_EXPORT struct gbm_device * gbm_create_device(int fd) { struct gbm_device *gbm = NULL; struct stat buf; if (fd < 0 || fstat(fd, &buf) < 0 || !S_ISCHR(buf.st_mode)) { errno = EINVAL; return NULL; } if (device_num == 0) memset(devices, 0, sizeof devices); gbm = _gbm_create_device(fd); if (gbm == NULL) return NULL; gbm->dummy = gbm_create_device; gbm->stat = buf; gbm->refcount = 1; if (device_num < ARRAY_SIZE(devices)-1) devices[device_num++] = gbm; return gbm; }
/** Create a gbm device for allocating buffers * * The file descriptor passed in is used by the backend to communicate with * platform for allocating the memory. For allocations using DRI this would be * the file descriptor returned when opening a device such as \c * /dev/dri/card0 * * \param fd The file descriptor for a backend specific device * \return The newly created struct gbm_device. The resources associated with * the device should be freed with gbm_device_destroy() when it is no longer * needed. If the creation of the device failed NULL will be returned. */ GBM_EXPORT struct gbm_device * gbm_create_device(int fd) { struct gbm_device *gbm = NULL; struct stat buf; if (fd < 0 || fstat(fd, &buf) < 0 || !S_ISCHR(buf.st_mode)) { errno = EINVAL; return NULL; } gbm = _gbm_create_device(fd); if (gbm == NULL) return NULL; gbm->dummy = gbm_create_device; gbm->stat = buf; gbm->refcount = 1; return gbm; }