+ memset(&drv_data, 0, sizeof(drv_data));
+ drv_data.flags = gbm_convert_flags(usage);
+ switch (type) {
+ case GBM_BO_IMPORT_FD:
+ gbm_format = fd_data->format;
+ drv_data.width = fd_data->width;
+ drv_data.height = fd_data->height;
+ drv_data.format = fd_data->format;
+ drv_data.fds[0] = fd_data->fd;
+ drv_data.strides[0] = fd_data->stride;
+ drv_data.sizes[0] = fd_data->height * fd_data->stride;
+ break;
+ case GBM_BO_IMPORT_FD_PLANAR:
+ gbm_format = fd_planar_data->format;
+ drv_data.width = fd_planar_data->width;
+ drv_data.height = fd_planar_data->height;
+ drv_data.format = fd_planar_data->format;
+ num_planes = drv_num_planes_from_format(drv_data.format);
+
+ assert(num_planes);
+
+ for (i = 0; i < num_planes; i++) {
+ drv_data.fds[i] = fd_planar_data->fds[i];
+ drv_data.offsets[i] = fd_planar_data->offsets[i];
+ drv_data.strides[i] = fd_planar_data->strides[i];
+ drv_data.format_modifiers[i] = fd_planar_data->format_modifiers[i];
+
+ drv_data.sizes[i] = drv_size_from_format(
+ drv_data.format, drv_data.strides[i], drv_data.height, i);
+ }
+
+ for (i = num_planes; i < GBM_MAX_PLANES; i++)
+ drv_data.fds[i] = -1;
+
+ break;
+ default: