[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