pipe-loader: add pipe_loader_ops::configuration()
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@gmail.com>
This commit is contained in:
@@ -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)
|
||||
|
@@ -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>
|
||||
@@ -93,6 +94,16 @@ struct pipe_screen *
|
||||
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.
|
||||
*
|
||||
|
@@ -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
|
||||
};
|
||||
|
@@ -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);
|
||||
};
|
||||
|
||||
|
@@ -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
|
||||
};
|
||||
|
Reference in New Issue
Block a user