diff options
author | Marek Olšák <[email protected]> | 2010-06-20 03:50:44 +0200 |
---|---|---|
committer | Marek Olšák <[email protected]> | 2010-06-20 03:59:32 +0200 |
commit | c85e53bebf325b00db175bc05886a9281e95b0cc (patch) | |
tree | 3a571244945bc2d43ce8884bed0b8128450b47f3 /src/gallium/winsys/r600/drm | |
parent | e4fe18a6206560a3a562147d1033389ec977d607 (diff) |
r600g: handle DRM_API_HANDLE_TYPE_KMS in buffer_get_handle
Diffstat (limited to 'src/gallium/winsys/r600/drm')
-rw-r--r-- | src/gallium/winsys/r600/drm/r600_drm.c | 23 |
1 files changed, 13 insertions, 10 deletions
diff --git a/src/gallium/winsys/r600/drm/r600_drm.c b/src/gallium/winsys/r600/drm/r600_drm.c index b772ff0dd9f..803049d58c9 100644 --- a/src/gallium/winsys/r600/drm/r600_drm.c +++ b/src/gallium/winsys/r600/drm/r600_drm.c @@ -48,19 +48,22 @@ boolean r600_buffer_get_handle(struct radeon *rw, struct winsys_handle *whandle) { struct drm_gem_flink flink; - struct r600_buffer* rbuffer; - int r; + struct r600_buffer* rbuffer = (struct r600_buffer*)buf; - rbuffer = (struct r600_buffer*)buf; - if (!rbuffer->flink) { - flink.handle = rbuffer->bo->handle; - r = ioctl(rw->fd, DRM_IOCTL_GEM_FLINK, &flink); - if (r) { - return FALSE; + if (whandle->type == DRM_API_HANDLE_TYPE_SHARED) { + if (!rbuffer->flink) { + flink.handle = rbuffer->bo->handle; + + if (ioctl(rw->fd, DRM_IOCTL_GEM_FLINK, &flink)) { + return FALSE; + } + + rbuffer->flink = flink.name; } - rbuffer->flink = flink.name; + whandle->handle = rbuffer->flink; + } else if (whandle->type == DRM_API_HANDLE_TYPE_KMS) { + whandle->handle = rbuffer->bo->handle; } - whandle->handle = rbuffer->flink; return TRUE; } |