+ /* If the resource is from a different screen, try re-importing it */
+ if (res && res->screen != screen) {
+ struct pipe_resource *new_res = NULL;
+ struct winsys_handle whandle = { .type = WINSYS_HANDLE_TYPE_FD };
+ unsigned usage = PIPE_HANDLE_USAGE_FRAMEBUFFER_WRITE;
+
+ if (screen->get_param(screen, PIPE_CAP_DMABUF) &&
+ res->screen->get_param(res->screen, PIPE_CAP_DMABUF) &&
+ res->screen->resource_get_handle(res->screen, NULL, res, &whandle,
+ usage)) {
+ new_res = screen->resource_from_handle(screen, res, &whandle, usage);
+ close(whandle.handle);
+ }
+
+ pipe_resource_reference(&res, NULL);
+ res = new_res;