Use the common pipe_screen ref counting and fd hashing functions for
vc4. This is necessary to only create a single pipe_screen for a
process and avoid multiple imports of same prime fd among other things
(probably).

Cc: Eric Anholt <[email protected]>
Signed-off-by: Rob Herring <[email protected]>
---
 src/gallium/winsys/vc4/drm/vc4_drm_winsys.c | 11 ++++++++++-
 1 file changed, 10 insertions(+), 1 deletion(-)

diff --git a/src/gallium/winsys/vc4/drm/vc4_drm_winsys.c 
b/src/gallium/winsys/vc4/drm/vc4_drm_winsys.c
index c5434ad..e0d9cc2 100644
--- a/src/gallium/winsys/vc4/drm/vc4_drm_winsys.c
+++ b/src/gallium/winsys/vc4/drm/vc4_drm_winsys.c
@@ -22,6 +22,7 @@
  */
 
 #include <unistd.h>
+#include "util/u_screen.h"
 
 #include "vc4_drm_public.h"
 
@@ -30,5 +31,13 @@
 struct pipe_screen *
 vc4_drm_screen_create(int fd)
 {
-       return vc4_screen_create(dup(fd));
+       int dupfd;
+       struct pipe_screen *pscreen = pipe_screen_reference(fd);
+       if (pscreen)
+               return pscreen;
+
+       dupfd = dup(fd);
+       pscreen = vc4_screen_create(dupfd);
+       pipe_screen_reference_init(pscreen, dupfd);
+       return pscreen;
 }
-- 
2.9.2

_______________________________________________
mesa-dev mailing list
[email protected]
https://lists.freedesktop.org/mailman/listinfo/mesa-dev

Reply via email to