From 01a0dbcb96f133737a7f71b21125a58684d883cc Mon Sep 17 00:00:00 2001 From: =?utf8?q?Christian=20K=C3=B6nig?= Date: Sat, 21 Sep 2013 12:25:13 +0200 Subject: [PATCH] winsys/radeon: share winsys between different fd's MIME-Version: 1.0 Content-Type: text/plain; charset=utf8 Content-Transfer-Encoding: 8bit Share the winsys between different fd's if they point to the same device. Signed-off-by: Christian König Reviewed-by: Marek Olšák --- .../winsys/radeon/drm/radeon_drm_winsys.c | 19 +++++++++++++++++-- 1 file changed, 17 insertions(+), 2 deletions(-) diff --git a/src/gallium/winsys/radeon/drm/radeon_drm_winsys.c b/src/gallium/winsys/radeon/drm/radeon_drm_winsys.c index 27bf3483d7d..61f091323f4 100644 --- a/src/gallium/winsys/radeon/drm/radeon_drm_winsys.c +++ b/src/gallium/winsys/radeon/drm/radeon_drm_winsys.c @@ -41,6 +41,9 @@ #include #include +#include +#include +#include /* * this are copy from radeon_drm, once an updated libdrm is released @@ -519,12 +522,24 @@ static uint64_t radeon_query_value(struct radeon_winsys *rws, static unsigned hash_fd(void *key) { - return pointer_to_intptr(key); + int fd = pointer_to_intptr(key); + struct stat stat; + fstat(fd, &stat); + + return stat.st_dev ^ stat.st_ino ^ stat.st_rdev; } static int compare_fd(void *key1, void *key2) { - return pointer_to_intptr(key1) != pointer_to_intptr(key2); + int fd1 = pointer_to_intptr(key1); + int fd2 = pointer_to_intptr(key2); + struct stat stat1, stat2; + fstat(fd1, &stat1); + fstat(fd2, &stat2); + + return stat1.st_dev != stat2.st_dev || + stat1.st_ino != stat2.st_ino || + stat1.st_rdev != stat2.st_rdev; } void radeon_drm_ws_queue_cs(struct radeon_drm_winsys *ws, struct radeon_drm_cs *cs) -- 2.30.2