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.veli...@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.3 _______________________________________________ mesa-dev mailing list mesa-dev@lists.freedesktop.org http://lists.freedesktop.org/mailman/listinfo/mesa-dev