Re: [Mesa-dev] [PATCH] pipe_loader: Try to connect with the X server before probing pciids v2

2012-07-18 Thread Francisco Jerez
Tom Stellard tstel...@gmail.com writes:

 When X is running it is neccesary for pipe_loader to authenticate with
 DRM, in order to be able to use the device.

 This makes it possible to run OpenCL programs while X is running.

 v2:
   - Fix C++ style comments
   - Drop Xlib-xcb dependency
   - Close the X connection when done
   - Split auth code into separate function

Thanks, Reviewed-by: Francisco Jerez curroje...@riseup.net

 ---
  configure.ac   |6 ++
  .../auxiliary/pipe-loader/pipe_loader_drm.c|   61 
 
  2 files changed, 67 insertions(+), 0 deletions(-)

 diff --git a/configure.ac b/configure.ac
 index 10216a3..35cc579 100644
 --- a/configure.ac
 +++ b/configure.ac
 @@ -2084,6 +2084,12 @@ if test x$enable_gallium_loader = xyes; then
  
  if test x$enable_gallium_drm_loader = xyes; then
  GALLIUM_PIPE_LOADER_DEFINES=$GALLIUM_PIPE_LOADER_DEFINES 
 -DHAVE_PIPE_LOADER_DRM
 +PKG_CHECK_MODULES([GALLIUM_PIPE_LOADER_XCB], [x11-xcb xcb-dri2],
 +  pipe_loader_have_xcb=yes, pipe_loader_have_xcb=no)
 +if test x$pipe_loader_have_xcb = xyes; then
 +GALLIUM_PIPE_LOADER_DEFINES=$GALLIUM_PIPE_LOADER_DEFINES 
 -DPIPE_LOADER_HAVE_XCB
 +GALLIUM_PIPE_LOADER_LIBS=$GALLIUM_PIPE_LOADER_LIBS 
 $GALLIUM_PIPE_LOADER_XCB_LIBS $LIBDRM_LIBS
 +fi
  fi
  
  AC_SUBST([GALLIUM_PIPE_LOADER_DEFINES])
 diff --git a/src/gallium/auxiliary/pipe-loader/pipe_loader_drm.c 
 b/src/gallium/auxiliary/pipe-loader/pipe_loader_drm.c
 index 518f3da..64bd921 100644
 --- a/src/gallium/auxiliary/pipe-loader/pipe_loader_drm.c
 +++ b/src/gallium/auxiliary/pipe-loader/pipe_loader_drm.c
 @@ -35,6 +35,12 @@
  #include libudev.h
  #include xf86drm.h
  
 +#ifdef PIPE_LOADER_HAVE_XCB
 +
 +#include xcb/dri2.h
 +
 +#endif
 +
  #include state_tracker/drm_driver.h
  #include pipe_loader_priv.h
  
 @@ -127,6 +133,59 @@ find_drm_driver_name(struct pipe_loader_drm_device *ddev)
  
  static struct pipe_loader_ops pipe_loader_drm_ops;
  
 +static void
 +pipe_loader_drm_x_auth(int fd)
 +{
 +#if PIPE_LOADER_HAVE_XCB
 +   /* Try authenticate with the X server to give us access to devices that X
 +* is running on. */
 +   xcb_connection_t *xcb_conn;
 +   const xcb_setup_t *xcb_setup;
 +   xcb_screen_iterator_t s;
 +   xcb_dri2_connect_cookie_t connect_cookie;
 +   xcb_dri2_connect_reply_t *connect;
 +   drm_magic_t magic;
 +   xcb_dri2_authenticate_cookie_t authenticate_cookie;
 +   xcb_dri2_authenticate_reply_t *authenticate;
 +
 +   xcb_conn = xcb_connect(NULL,  NULL);
 +
 +   if(!xcb_conn)
 +  return;
 +
 +   xcb_setup = xcb_get_setup(xcb_conn);
 +
 +  if (!xcb_setup)
 +goto disconnect;
 +
 +   s = xcb_setup_roots_iterator(xcb_setup);
 +   connect_cookie = xcb_dri2_connect_unchecked(xcb_conn, s.data-root,
 +   XCB_DRI2_DRIVER_TYPE_DRI);
 +   connect = xcb_dri2_connect_reply(xcb_conn, connect_cookie, NULL);
 +
 +   if (!connect || connect-driver_name_length
 +   + connect-device_name_length == 0) {
 +
 +  goto disconnect;
 +   }
 +
 +   if (drmGetMagic(fd, magic))
 +  goto disconnect;
 +
 +   authenticate_cookie = xcb_dri2_authenticate_unchecked(xcb_conn,
 + s.data-root,
 + magic);
 +   authenticate = xcb_dri2_authenticate_reply(xcb_conn,
 +  authenticate_cookie,
 +  NULL);
 +   FREE(authenticate);
 +
 +disconnect:
 +   xcb_disconnect(xcb_conn);
 +
 +#endif
 +}
 +
  boolean
  pipe_loader_drm_probe_fd(struct pipe_loader_device **dev, int fd)
  {
 @@ -136,6 +195,8 @@ pipe_loader_drm_probe_fd(struct pipe_loader_device **dev, 
 int fd)
 ddev-base.ops = pipe_loader_drm_ops;
 ddev-fd = fd;
  
 +   pipe_loader_drm_x_auth(fd);
 +
 if (!find_drm_pci_id(ddev))
goto fail;


pgpLkZHmxVcIZ.pgp
Description: PGP signature
___
mesa-dev mailing list
mesa-dev@lists.freedesktop.org
http://lists.freedesktop.org/mailman/listinfo/mesa-dev


Re: [Mesa-dev] [PATCH] pipe_loader: Try to connect with the X server before probing pciids v2

2012-07-18 Thread Michel Dänzer
On Mit, 2012-07-18 at 12:28 -0400, Tom Stellard wrote: 
 When X is running it is neccesary for pipe_loader to authenticate with
 DRM, in order to be able to use the device.
 
 This makes it possible to run OpenCL programs while X is running.
 
 v2:
   - Fix C++ style comments
   - Drop Xlib-xcb dependency
   - Close the X connection when done
   - Split auth code into separate function

[...]

 diff --git a/configure.ac b/configure.ac
 index 10216a3..35cc579 100644
 --- a/configure.ac
 +++ b/configure.ac
 @@ -2084,6 +2084,12 @@ if test x$enable_gallium_loader = xyes; then
  
  if test x$enable_gallium_drm_loader = xyes; then
  GALLIUM_PIPE_LOADER_DEFINES=$GALLIUM_PIPE_LOADER_DEFINES 
 -DHAVE_PIPE_LOADER_DRM
 +PKG_CHECK_MODULES([GALLIUM_PIPE_LOADER_XCB], [x11-xcb xcb-dri2],

This should check for xcb instead of x11-xcb. With that fixed,

Reviewed-by: Michel Dänzer michel.daen...@amd.com


-- 
Earthling Michel Dänzer   |   http://www.amd.com
Libre software enthusiast |  Debian, X and DRI developer
___
mesa-dev mailing list
mesa-dev@lists.freedesktop.org
http://lists.freedesktop.org/mailman/listinfo/mesa-dev