freedreno: Support per-device driconf overrides

Signed-off-by: Rob Clark <robdclark@chromium.org>
Reviewed-by: Emil Velikov <emil.l.velikov@gmail.com>
Part-of: <https://gitlab.freedesktop.org/mesa/mesa/-/merge_requests/12135>
This commit is contained in:
Rob Clark 2021-07-30 17:00:32 -07:00
parent 7094cc78a4
commit 8813dfab83
7 changed files with 21 additions and 8 deletions

View File

@ -265,7 +265,7 @@ pipe_msm_create_screen(int fd, const struct pipe_screen_config *config)
{
struct pipe_screen *screen;
screen = fd_drm_screen_create(fd, NULL);
screen = fd_drm_screen_create(fd, NULL, config);
return screen ? debug_screen_wrap(screen) : NULL;
}
DRM_DRIVER_DESCRIPTOR(msm, NULL, 0)

View File

@ -35,6 +35,7 @@
#include "util/u_memory.h"
#include "util/u_screen.h"
#include "util/u_string.h"
#include "util/xmlconfig.h"
#include "util/os_time.h"
@ -923,7 +924,8 @@ fd_screen_get_driver_uuid(struct pipe_screen *pscreen, char *uuid)
}
struct pipe_screen *
fd_screen_create(struct fd_device *dev, struct renderonly *ro)
fd_screen_create(struct fd_device *dev, struct renderonly *ro,
const struct pipe_screen_config *config)
{
struct fd_screen *screen = CALLOC_STRUCT(fd_screen);
struct pipe_screen *pscreen;
@ -1013,6 +1015,10 @@ fd_screen_create(struct fd_device *dev, struct renderonly *ro)
screen->has_syncobj = fd_has_syncobj(screen->dev);
/* parse driconf configuration now for device specific overrides: */
driParseConfigFiles(config->options, config->options_info, 0, "msm",
NULL, fd_dev_name(screen->gpu_id), NULL, 0, NULL, 0);
struct sysinfo si;
sysinfo(&si);
screen->ram_size = si.totalram;

View File

@ -179,7 +179,8 @@ struct fd_bo *fd_screen_bo_from_handle(struct pipe_screen *pscreen,
struct winsys_handle *whandle);
struct pipe_screen *fd_screen_create(struct fd_device *dev,
struct renderonly *ro);
struct renderonly *ro,
const struct pipe_screen_config *config);
static inline boolean
is_a20x(struct fd_screen *screen)

View File

@ -286,7 +286,10 @@ driver_freedreno = declare_dependency(
libfreedreno_layout,
libfreedreno_perfcntrs
],
dependencies : idep_nir,
dependencies : [
idep_nir,
idep_xmlconfig,
],
)
ir3_compiler = executable(
@ -320,6 +323,7 @@ gmemtool = executable(
idep_nir,
idep_mesautil,
idep_u_tracepoints,
idep_xmlconfig,
],
link_with : [
libfreedreno,

View File

@ -5,6 +5,7 @@
struct pipe_screen;
struct renderonly;
struct pipe_screen *fd_drm_screen_create(int drmFD, struct renderonly *ro);
struct pipe_screen *fd_drm_screen_create(int drmFD, struct renderonly *ro,
const struct pipe_screen_config *config);
#endif

View File

@ -69,7 +69,8 @@ fd_drm_screen_destroy(struct pipe_screen *pscreen)
}
struct pipe_screen *
fd_drm_screen_create(int fd, struct renderonly *ro)
fd_drm_screen_create(int fd, struct renderonly *ro,
const struct pipe_screen_config *config)
{
struct pipe_screen *pscreen = NULL;
@ -88,7 +89,7 @@ fd_drm_screen_create(int fd, struct renderonly *ro)
if (!dev)
goto unlock;
pscreen = fd_screen_create(dev, ro);
pscreen = fd_screen_create(dev, ro, config);
if (pscreen) {
int fd = fd_device_fd(dev);

View File

@ -91,7 +91,7 @@ struct pipe_screen *kmsro_drm_screen_create(int fd,
ro->gpu_fd = drmOpenWithType("msm", NULL, DRM_NODE_RENDER);
if (ro->gpu_fd >= 0) {
ro->create_for_resource = renderonly_create_kms_dumb_buffer_for_resource;
screen = fd_drm_screen_create(ro->gpu_fd, ro);
screen = fd_drm_screen_create(ro->gpu_fd, ro, config);
if (!screen)
goto out_free;