libdrm/nouveau: add prime handle->bo and bo->handle support.
This adds prime support to nouveau libdrm. Signed-off-by: Dave Airlie <airlied@redhat.com>main
parent
cc0a14575d
commit
13c06cde4e
|
@ -34,6 +34,7 @@
|
|||
#include <assert.h>
|
||||
#include <errno.h>
|
||||
#include <sys/mman.h>
|
||||
#include <fcntl.h>
|
||||
|
||||
#include <xf86drm.h>
|
||||
#include <xf86atomic.h>
|
||||
|
@ -441,6 +442,40 @@ nouveau_bo_ref(struct nouveau_bo *bo, struct nouveau_bo **pref)
|
|||
*pref = bo;
|
||||
}
|
||||
|
||||
int
|
||||
nouveau_bo_prime_handle_ref(struct nouveau_device *dev, int prime_fd,
|
||||
struct nouveau_bo **bo)
|
||||
{
|
||||
int ret;
|
||||
unsigned int handle;
|
||||
|
||||
ret = drmPrimeFDToHandle(dev->fd, prime_fd, &handle);
|
||||
if (ret) {
|
||||
nouveau_bo_ref(NULL, bo);
|
||||
return ret;
|
||||
}
|
||||
|
||||
ret = nouveau_bo_wrap(dev, handle, bo);
|
||||
if (ret) {
|
||||
nouveau_bo_ref(NULL, bo);
|
||||
return ret;
|
||||
}
|
||||
|
||||
return 0;
|
||||
}
|
||||
|
||||
int
|
||||
nouveau_bo_set_prime(struct nouveau_bo *bo, int *prime_fd)
|
||||
{
|
||||
struct nouveau_bo_priv *nvbo = nouveau_bo(bo);
|
||||
int ret;
|
||||
|
||||
ret = drmPrimeHandleToFD(bo->device->fd, nvbo->base.handle, DRM_CLOEXEC, prime_fd);
|
||||
if (ret)
|
||||
return ret;
|
||||
return 0;
|
||||
}
|
||||
|
||||
int
|
||||
nouveau_bo_wait(struct nouveau_bo *bo, uint32_t access,
|
||||
struct nouveau_client *client)
|
||||
|
|
|
@ -135,6 +135,9 @@ int nouveau_bo_map(struct nouveau_bo *, uint32_t access,
|
|||
struct nouveau_client *);
|
||||
int nouveau_bo_wait(struct nouveau_bo *, uint32_t access,
|
||||
struct nouveau_client *);
|
||||
int nouveau_bo_prime_handle_ref(struct nouveau_device *dev, int prime_fd,
|
||||
struct nouveau_bo **);
|
||||
int nouveau_bo_set_prime(struct nouveau_bo *bo, int *prime_fd);
|
||||
|
||||
struct nouveau_bufref {
|
||||
struct nouveau_list thead;
|
||||
|
|
Loading…
Reference in New Issue