From: Eric Anholt Date: Tue, 21 Apr 2020 16:21:52 +0000 (-0700) Subject: drm-shim: Let the driver choose to overwrite the first render node. X-Git-Url: https://git.libre-soc.org/?a=commitdiff_plain;h=e9add0c501c3765cae43ef60ec58404c2340991b;p=mesa.git drm-shim: Let the driver choose to overwrite the first render node. When I was writing drm-shim, I was focused on the v3d kmsro case -- use my intel device as the kmsro display device and add on a simulator-based v3d device that we could render with. But for the noop backends we use for shader-db, it's a lot more useful to just overwrite the first render node in the system so that you don't have to pass a -d argument. Reviewed-by: Lionel Landwerlin Reviewed-by: Iago Toral Quiroga Reviewed-by: Christian Gmeiner Part-of: --- diff --git a/src/broadcom/drm-shim/v3d.c b/src/broadcom/drm-shim/v3d.c index 81e34c128e2..f4d5bd31323 100644 --- a/src/broadcom/drm-shim/v3d.c +++ b/src/broadcom/drm-shim/v3d.c @@ -28,6 +28,8 @@ #include "v3d.h" #include "v3d_simulator_wrapper.h" +bool drm_shim_driver_prefers_first_render_node = false; + static struct v3d_device_info devinfo; struct v3d_shim_device v3d = { .devinfo = &devinfo diff --git a/src/broadcom/drm-shim/v3d_noop.c b/src/broadcom/drm-shim/v3d_noop.c index 3caa757bb3e..fd92e8859c5 100644 --- a/src/broadcom/drm-shim/v3d_noop.c +++ b/src/broadcom/drm-shim/v3d_noop.c @@ -28,6 +28,8 @@ #include "drm-uapi/v3d_drm.h" #include "drm-shim/drm_shim.h" +bool drm_shim_driver_prefers_first_render_node = true; + struct v3d_bo { struct shim_bo base; uint32_t offset; diff --git a/src/drm-shim/drm_shim.c b/src/drm-shim/drm_shim.c index 325a8a142e5..61a1cb2ae50 100644 --- a/src/drm-shim/drm_shim.c +++ b/src/drm-shim/drm_shim.c @@ -97,9 +97,11 @@ struct file_override { }; static struct file_override file_overrides[10]; static int file_overrides_count; +extern bool drm_shim_driver_prefers_first_render_node; -/* Come up with a filename for a render node that doesn't actually exist on - * the system. +/* Pick the minor and filename for our shimmed render node. This can be + * either a new one that didn't exist on the system, or if the driver wants, + * it can replace the first render node. */ static void get_dri_render_node_minor(void) @@ -110,7 +112,8 @@ get_dri_render_node_minor(void) asprintf(&render_node_path, "/dev/dri/%s", render_node_dirent_name); struct stat st; - if (stat(render_node_path, &st) == -1) { + if (drm_shim_driver_prefers_first_render_node || + stat(render_node_path, &st) == -1) { render_node_minor = minor; return; diff --git a/src/drm-shim/drm_shim.h b/src/drm-shim/drm_shim.h index 2d262fa35d4..4a151d49bbc 100644 --- a/src/drm-shim/drm_shim.h +++ b/src/drm-shim/drm_shim.h @@ -85,3 +85,4 @@ uint64_t drm_shim_bo_get_mmap_offset(struct shim_fd *shim_fd, /* driver-specific hooks. */ void drm_shim_driver_init(void); +extern bool drm_shim_driver_prefers_new_render_node; diff --git a/src/etnaviv/drm-shim/etnaviv_noop.c b/src/etnaviv/drm-shim/etnaviv_noop.c index f583e299a54..77bb8d0d0dc 100644 --- a/src/etnaviv/drm-shim/etnaviv_noop.c +++ b/src/etnaviv/drm-shim/etnaviv_noop.c @@ -31,6 +31,8 @@ #include "drm-shim/drm_shim.h" #include "util/u_debug.h" +bool drm_shim_driver_prefers_first_render_node = true; + struct etna_shim_gpu { const char *name; diff --git a/src/freedreno/drm-shim/freedreno_noop.c b/src/freedreno/drm-shim/freedreno_noop.c index 48f1c8953f9..b282ab6347f 100644 --- a/src/freedreno/drm-shim/freedreno_noop.c +++ b/src/freedreno/drm-shim/freedreno_noop.c @@ -28,6 +28,8 @@ #include "drm-uapi/msm_drm.h" #include "drm-shim/drm_shim.h" +bool drm_shim_driver_prefers_first_render_node = true; + struct msm_bo { struct shim_bo base; uint32_t offset;