summaryrefslogtreecommitdiffstats
path: root/src/gallium/winsys/r600/drm
diff options
context:
space:
mode:
authorMarek Olšák <[email protected]>2010-06-20 03:50:44 +0200
committerMarek Olšák <[email protected]>2010-06-20 03:59:32 +0200
commitc85e53bebf325b00db175bc05886a9281e95b0cc (patch)
tree3a571244945bc2d43ce8884bed0b8128450b47f3 /src/gallium/winsys/r600/drm
parente4fe18a6206560a3a562147d1033389ec977d607 (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.c23
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;
}