[Mesa-dev] [PATCH 05/23] pipe-loader: add pipe_loader_ops::configuration()
Emil Velikov
emil.l.velikov at gmail.com
Sun May 18 00:07:27 PDT 2014
Required for the dri state-tracker. Will be used to retrieve
driver specific configuration parameters:
- share_fd (dmabuf) capability
- throttle
Signed-off-by: Emil Velikov <emil.l.velikov at gmail.com>
---
src/gallium/auxiliary/pipe-loader/pipe_loader.c | 7 +++++++
src/gallium/auxiliary/pipe-loader/pipe_loader.h | 11 ++++++++++
.../auxiliary/pipe-loader/pipe_loader_drm.c | 24 ++++++++++++++++++++++
.../auxiliary/pipe-loader/pipe_loader_priv.h | 3 +++
src/gallium/auxiliary/pipe-loader/pipe_loader_sw.c | 8 ++++++++
5 files changed, 53 insertions(+)
diff --git a/src/gallium/auxiliary/pipe-loader/pipe_loader.c b/src/gallium/auxiliary/pipe-loader/pipe_loader.c
index 2639763..8e79f85 100644
--- a/src/gallium/auxiliary/pipe-loader/pipe_loader.c
+++ b/src/gallium/auxiliary/pipe-loader/pipe_loader.c
@@ -61,6 +61,13 @@ pipe_loader_release(struct pipe_loader_device **devs, int ndev)
devs[i]->ops->release(&devs[i]);
}
+const struct drm_conf_ret *
+pipe_loader_configuration(struct pipe_loader_device *dev,
+ enum drm_conf conf)
+{
+ return dev->ops->configuration(dev, conf);
+}
+
struct pipe_screen *
pipe_loader_create_screen(struct pipe_loader_device *dev,
const char *library_paths)
diff --git a/src/gallium/auxiliary/pipe-loader/pipe_loader.h b/src/gallium/auxiliary/pipe-loader/pipe_loader.h
index caef6c1..8ff00b1 100644
--- a/src/gallium/auxiliary/pipe-loader/pipe_loader.h
+++ b/src/gallium/auxiliary/pipe-loader/pipe_loader.h
@@ -34,6 +34,7 @@
#define PIPE_LOADER_H
#include "pipe/p_compiler.h"
+#include "state_tracker/drm_driver.h"
#ifdef HAVE_PIPE_LOADER_XLIB
#include <X11/Xlib.h>
@@ -94,6 +95,16 @@ pipe_loader_create_screen(struct pipe_loader_device *dev,
const char *library_paths);
/**
+ * Query the configuration parameters for the specified device.
+ *
+ * \param dev Device that will be queried.
+ * \param conf The drm_conf id of the option to be queried.
+ */
+const struct drm_conf_ret *
+pipe_loader_configuration(struct pipe_loader_device *dev,
+ enum drm_conf conf);
+
+/**
* Release resources allocated for a list of devices.
*
* Should be called when the specified devices are no longer in use to
diff --git a/src/gallium/auxiliary/pipe-loader/pipe_loader_drm.c b/src/gallium/auxiliary/pipe-loader/pipe_loader_drm.c
index 2e5b74b..1bbaf19 100644
--- a/src/gallium/auxiliary/pipe-loader/pipe_loader_drm.c
+++ b/src/gallium/auxiliary/pipe-loader/pipe_loader_drm.c
@@ -261,6 +261,29 @@ pipe_loader_drm_release(struct pipe_loader_device **dev)
*dev = NULL;
}
+static const struct drm_conf_ret *
+pipe_loader_drm_configuration(struct pipe_loader_device *dev,
+ enum drm_conf conf)
+{
+ struct pipe_loader_drm_device *ddev = pipe_loader_drm_device(dev);
+ const struct drm_driver_descriptor *dd;
+
+ if (!ddev->lib)
+ return NULL;
+
+ dd = (const struct drm_driver_descriptor *)
+ util_dl_get_proc_address(ddev->lib, "driver_descriptor");
+
+ /* sanity check on the name */
+ if (!dd || strcmp(dd->name, ddev->base.driver_name) != 0)
+ return NULL;
+
+ if (!dd->configuration)
+ return NULL;
+
+ return dd->configuration(conf);
+}
+
static struct pipe_screen *
pipe_loader_drm_create_screen(struct pipe_loader_device *dev,
const char *library_paths)
@@ -285,5 +308,6 @@ pipe_loader_drm_create_screen(struct pipe_loader_device *dev,
static struct pipe_loader_ops pipe_loader_drm_ops = {
.create_screen = pipe_loader_drm_create_screen,
+ .configuration = pipe_loader_drm_configuration,
.release = pipe_loader_drm_release
};
diff --git a/src/gallium/auxiliary/pipe-loader/pipe_loader_priv.h b/src/gallium/auxiliary/pipe-loader/pipe_loader_priv.h
index 476c0ad..d3b0252 100644
--- a/src/gallium/auxiliary/pipe-loader/pipe_loader_priv.h
+++ b/src/gallium/auxiliary/pipe-loader/pipe_loader_priv.h
@@ -34,6 +34,9 @@ struct pipe_loader_ops {
struct pipe_screen *(*create_screen)(struct pipe_loader_device *dev,
const char *library_paths);
+ const struct drm_conf_ret *(*configuration)(struct pipe_loader_device *dev,
+ enum drm_conf conf);
+
void (*release)(struct pipe_loader_device **dev);
};
diff --git a/src/gallium/auxiliary/pipe-loader/pipe_loader_sw.c b/src/gallium/auxiliary/pipe-loader/pipe_loader_sw.c
index fa317f2..b1b1ca6 100644
--- a/src/gallium/auxiliary/pipe-loader/pipe_loader_sw.c
+++ b/src/gallium/auxiliary/pipe-loader/pipe_loader_sw.c
@@ -152,6 +152,13 @@ pipe_loader_sw_release(struct pipe_loader_device **dev)
*dev = NULL;
}
+static const struct drm_conf_ret *
+pipe_loader_sw_configuration(struct pipe_loader_device *dev,
+ enum drm_conf conf)
+{
+ return NULL;
+}
+
static struct pipe_screen *
pipe_loader_sw_create_screen(struct pipe_loader_device *dev,
const char *library_paths)
@@ -176,5 +183,6 @@ pipe_loader_sw_create_screen(struct pipe_loader_device *dev,
static struct pipe_loader_ops pipe_loader_sw_ops = {
.create_screen = pipe_loader_sw_create_screen,
+ .configuration = pipe_loader_sw_configuration,
.release = pipe_loader_sw_release
};
--
1.9.2
More information about the mesa-dev
mailing list