aboutsummaryrefslogtreecommitdiffstats
path: root/src
diff options
context:
space:
mode:
authorEric Anholt <[email protected]>2020-04-21 09:21:52 -0700
committerMarge Bot <[email protected]>2020-04-23 17:54:54 +0000
commite9add0c501c3765cae43ef60ec58404c2340991b (patch)
tree31887ec82b6531e5dc8e9d4ca1e6144af9e2a0ee /src
parent5a8718f01b3976e1bc82362a907befef68a7f525 (diff)
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 <how many render nodes I already have in my system> argument. Reviewed-by: Lionel Landwerlin <[email protected]> Reviewed-by: Iago Toral Quiroga <[email protected]> Reviewed-by: Christian Gmeiner <[email protected]> Part-of: <https://gitlab.freedesktop.org/mesa/mesa/-/merge_requests/4664>
Diffstat (limited to 'src')
-rw-r--r--src/broadcom/drm-shim/v3d.c2
-rw-r--r--src/broadcom/drm-shim/v3d_noop.c2
-rw-r--r--src/drm-shim/drm_shim.c9
-rw-r--r--src/drm-shim/drm_shim.h1
-rw-r--r--src/etnaviv/drm-shim/etnaviv_noop.c2
-rw-r--r--src/freedreno/drm-shim/freedreno_noop.c2
6 files changed, 15 insertions, 3 deletions
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;