mirror of
https://gitlab.freedesktop.org/mesa/mesa.git
synced 2026-05-03 05:38:16 +02:00
st/dri: implement v2 of DRI_ConfigOptions
Reviewed-by: Marek Olšák <marek.olsak@amd.com>
This commit is contained in:
parent
aa222e21c2
commit
b4ff5e90e9
4 changed files with 55 additions and 2 deletions
|
|
@ -34,6 +34,8 @@
|
||||||
#include "util/xmlconfig.h"
|
#include "util/xmlconfig.h"
|
||||||
#include "util/xmlpool.h"
|
#include "util/xmlpool.h"
|
||||||
|
|
||||||
|
#include <string.h>
|
||||||
|
|
||||||
#ifdef _MSC_VER
|
#ifdef _MSC_VER
|
||||||
#include <stdlib.h>
|
#include <stdlib.h>
|
||||||
#define PATH_MAX _MAX_PATH
|
#define PATH_MAX _MAX_PATH
|
||||||
|
|
@ -107,6 +109,17 @@ pipe_loader_load_options(struct pipe_loader_device *dev)
|
||||||
dev->driver_name);
|
dev->driver_name);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
char *
|
||||||
|
pipe_loader_get_driinfo_xml(const char *driver_name)
|
||||||
|
{
|
||||||
|
char *xml = pipe_loader_drm_get_driinfo_xml(driver_name);
|
||||||
|
|
||||||
|
if (!xml)
|
||||||
|
xml = strdup(gallium_driinfo_xml);
|
||||||
|
|
||||||
|
return xml;
|
||||||
|
}
|
||||||
|
|
||||||
struct pipe_screen *
|
struct pipe_screen *
|
||||||
pipe_loader_create_screen(struct pipe_loader_device *dev,
|
pipe_loader_create_screen(struct pipe_loader_device *dev,
|
||||||
struct pipe_screen_config *config)
|
struct pipe_screen_config *config)
|
||||||
|
|
|
||||||
|
|
@ -113,6 +113,14 @@ pipe_loader_configuration(struct pipe_loader_device *dev,
|
||||||
void
|
void
|
||||||
pipe_loader_load_options(struct pipe_loader_device *dev);
|
pipe_loader_load_options(struct pipe_loader_device *dev);
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Get the driinfo XML string used by the given driver.
|
||||||
|
*
|
||||||
|
* The returned string is heap-allocated.
|
||||||
|
*/
|
||||||
|
char *
|
||||||
|
pipe_loader_get_driinfo_xml(const char *driver_name);
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* Release resources allocated for a list of devices.
|
* Release resources allocated for a list of devices.
|
||||||
*
|
*
|
||||||
|
|
@ -197,6 +205,14 @@ pipe_loader_drm_probe(struct pipe_loader_device **devs, int ndev);
|
||||||
bool
|
bool
|
||||||
pipe_loader_drm_probe_fd(struct pipe_loader_device **dev, int fd);
|
pipe_loader_drm_probe_fd(struct pipe_loader_device **dev, int fd);
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Get the driinfo XML used for the DRM driver of the given name, if any.
|
||||||
|
*
|
||||||
|
* The returned string is heap-allocated.
|
||||||
|
*/
|
||||||
|
char *
|
||||||
|
pipe_loader_drm_get_driinfo_xml(const char *driver_name);
|
||||||
|
|
||||||
extern const char gallium_driinfo_xml[];
|
extern const char gallium_driinfo_xml[];
|
||||||
|
|
||||||
#ifdef __cplusplus
|
#ifdef __cplusplus
|
||||||
|
|
|
||||||
|
|
@ -32,6 +32,7 @@
|
||||||
|
|
||||||
#include <fcntl.h>
|
#include <fcntl.h>
|
||||||
#include <stdio.h>
|
#include <stdio.h>
|
||||||
|
#include <string.h>
|
||||||
#include <xf86drm.h>
|
#include <xf86drm.h>
|
||||||
#include <unistd.h>
|
#include <unistd.h>
|
||||||
|
|
||||||
|
|
@ -299,6 +300,28 @@ pipe_loader_drm_create_screen(struct pipe_loader_device *dev,
|
||||||
return ddev->dd->create_screen(ddev->fd, config);
|
return ddev->dd->create_screen(ddev->fd, config);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
char *
|
||||||
|
pipe_loader_drm_get_driinfo_xml(const char *driver_name)
|
||||||
|
{
|
||||||
|
char *xml = NULL;
|
||||||
|
struct util_dl_library *lib = NULL;
|
||||||
|
const struct drm_driver_descriptor *dd =
|
||||||
|
get_driver_descriptor(driver_name, &lib);
|
||||||
|
if (!dd)
|
||||||
|
goto out;
|
||||||
|
|
||||||
|
const struct drm_conf_ret *conf = dd->configuration(DRM_CONF_XML_OPTIONS);
|
||||||
|
if (!conf)
|
||||||
|
goto out;
|
||||||
|
|
||||||
|
xml = strdup((const char *)conf->val.val_pointer);
|
||||||
|
|
||||||
|
out:
|
||||||
|
if (lib)
|
||||||
|
util_dl_close(lib);
|
||||||
|
return xml;
|
||||||
|
}
|
||||||
|
|
||||||
static const struct pipe_loader_ops pipe_loader_drm_ops = {
|
static const struct pipe_loader_ops pipe_loader_drm_ops = {
|
||||||
.create_screen = pipe_loader_drm_create_screen,
|
.create_screen = pipe_loader_drm_create_screen,
|
||||||
.configuration = pipe_loader_drm_configuration,
|
.configuration = pipe_loader_drm_configuration,
|
||||||
|
|
|
||||||
|
|
@ -49,8 +49,9 @@
|
||||||
#undef false
|
#undef false
|
||||||
|
|
||||||
const __DRIconfigOptionsExtension gallium_config_options = {
|
const __DRIconfigOptionsExtension gallium_config_options = {
|
||||||
.base = { __DRI_CONFIG_OPTIONS, 1 },
|
.base = { __DRI_CONFIG_OPTIONS, 2 },
|
||||||
.xml = gallium_driinfo_xml
|
.xml = gallium_driinfo_xml,
|
||||||
|
.getXml = pipe_loader_get_driinfo_xml
|
||||||
};
|
};
|
||||||
|
|
||||||
#define false 0
|
#define false 0
|
||||||
|
|
|
||||||
Loading…
Add table
Reference in a new issue