[Beignet] [PATCH] Try to use drm render nodes.

Zhigang Gong zhigang.gong at linux.intel.com
Thu Jun 19 01:24:26 PDT 2014


Pushed with slight change to silence compilation warning.
Thanks for your contribution.

On Wed, Jun 18, 2014 at 10:28:42PM -0400, Abrahm Scully wrote:
> Allows non-root user to run without X.
> Works on Fedora 20 with render nodes enabled.
> 
> Signed-off-by: Abrahm Scully <abrahm.scully at gmail.com>
> ---
>  src/intel/intel_driver.c | 33 +++++++++++++++++++++++++++++++++
>  src/intel/intel_driver.h |  3 +++
>  2 files changed, 36 insertions(+)
> 
> diff --git a/src/intel/intel_driver.c b/src/intel/intel_driver.c
> index f0e860c..2d74ff3 100644
> --- a/src/intel/intel_driver.c
> +++ b/src/intel/intel_driver.c
> @@ -222,6 +222,18 @@ intel_driver_open(intel_driver_t *intel, cl_context_prop props)
>    }
>  
>    if(!intel_driver_is_active(intel)) {
> +    printf("Trying to open render node...\n");
> +    char card_name[20];
> +    for(cardi = 0; cardi < 16; cardi++) {
> +      sprintf(card_name, "/dev/dri/renderD%d", 128+cardi);
> +      if(intel_driver_init_render(intel, card_name)) {
> +        printf("Success at %s.\n", card_name);
> +        break;
> +      }
> +    }
> +  }
> +
> +  if(!intel_driver_is_active(intel)) {
>      printf("Trying to open directly...\n");
>      char card_name[20];
>      for(cardi = 0; cardi < 16; cardi++) {
> @@ -232,6 +244,7 @@ intel_driver_open(intel_driver_t *intel, cl_context_prop props)
>        }
>      }
>    }
> +
>    if(!intel_driver_is_active(intel)) {
>      printf("Device open failed\n");
>      exit(-1);
> @@ -324,6 +337,26 @@ intel_driver_init_master(intel_driver_t *driver, const char* dev_name)
>    return 1;
>  }
>  
> +LOCAL int
> +intel_driver_init_render(intel_driver_t *driver, const char* dev_name)
> +{
> +  int dev_fd;
> +
> +  drm_client_t client;
> +
> +  // usually dev_name = "/dev/dri/renderD%d"
> +  dev_fd = open(dev_name, O_RDWR);
> +  if (dev_fd == -1) {
> +    printf("open(\"%s\", O_RDWR) failed: %s\n", dev_name, strerror(errno));
> +    return 0;
> +  }
> +
> +  intel_driver_init(driver, dev_fd);
> +  driver->master = 1;
> +
> +  return 1;
> +}
> +
>  LOCAL int 
>  intel_driver_terminate(intel_driver_t *driver)
>  {
> diff --git a/src/intel/intel_driver.h b/src/intel/intel_driver.h
> index 34efbbb..1ad0500 100644
> --- a/src/intel/intel_driver.h
> +++ b/src/intel/intel_driver.h
> @@ -106,6 +106,9 @@ extern int intel_driver_init_shared(intel_driver_t*, struct dri_state*);
>   */
>  extern int intel_driver_init_master(intel_driver_t*, const char* dev_name);
>  
> +/* init driver for render node */
> +extern int intel_driver_init_render(intel_driver_t*, const char* dev_name);
> +
>  /* terminate driver and all underlying structures */
>  extern int intel_driver_terminate(intel_driver_t*);
>  
> -- 
> 1.9.3
> 
> _______________________________________________
> Beignet mailing list
> Beignet at lists.freedesktop.org
> http://lists.freedesktop.org/mailman/listinfo/beignet


More information about the Beignet mailing list