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:
parent
7094cc78a4
commit
8813dfab83
|
@ -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)
|
||||
|
|
|
@ -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;
|
||||
|
|
|
@ -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)
|
||||
|
|
|
@ -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,
|
||||
|
|
|
@ -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
|
||||
|
|
|
@ -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);
|
||||
|
||||
|
|
|
@ -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;
|
||||
|
||||
|
|
Loading…
Reference in New Issue