st/dri: get drirc options before creating pipe_screen

dri_init_options_get_screen_flags will return the flags for create_screen().

Reviewed-by: Nicolai Hähnle <nicolai.haehnle@amd.com>
This commit is contained in:
Marek Olšák 2017-06-21 00:34:12 +02:00
parent 76f379330a
commit 6b0f6e693b
4 changed files with 38 additions and 20 deletions

View File

@ -2025,8 +2025,13 @@ dri2_init_screen(__DRIscreen * sPriv)
if (screen->fd < 0 || (fd = fcntl(screen->fd, F_DUPFD_CLOEXEC, 3)) < 0)
goto free_screen;
if (pipe_loader_drm_probe_fd(&screen->dev, fd))
pscreen = pipe_loader_create_screen(screen->dev, 0);
if (pipe_loader_drm_probe_fd(&screen->dev, fd)) {
unsigned flags =
dri_init_options_get_screen_flags(screen, screen->dev->driver_name);
pscreen = pipe_loader_create_screen(screen->dev, flags);
}
if (!pscreen)
goto release_pipe;
@ -2064,7 +2069,7 @@ dri2_init_screen(__DRIscreen * sPriv)
else
sPriv->extensions = dri_screen_extensions;
configs = dri_init_screen_helper(screen, pscreen, screen->dev->driver_name);
configs = dri_init_screen_helper(screen, pscreen);
if (!configs)
goto destroy_screen;
@ -2116,8 +2121,10 @@ dri_kms_init_screen(__DRIscreen * sPriv)
if (screen->fd < 0 || (fd = fcntl(screen->fd, F_DUPFD_CLOEXEC, 3)) < 0)
goto free_screen;
unsigned flags = dri_init_options_get_screen_flags(screen, "swrast");
if (pipe_loader_sw_probe_kms(&screen->dev, fd))
pscreen = pipe_loader_create_screen(screen->dev, 0);
pscreen = pipe_loader_create_screen(screen->dev, flags);
if (!pscreen)
goto release_pipe;
@ -2137,7 +2144,7 @@ dri_kms_init_screen(__DRIscreen * sPriv)
sPriv->extensions = dri_screen_extensions;
configs = dri_init_screen_helper(screen, pscreen, "swrast");
configs = dri_init_screen_helper(screen, pscreen);
if (!configs)
goto destroy_screen;

View File

@ -460,10 +460,25 @@ dri_set_background_context(struct st_context_iface *st)
backgroundCallable->setBackgroundContext(ctx->cPriv->loaderPrivate);
}
unsigned
dri_init_options_get_screen_flags(struct dri_screen *screen,
const char* driver_name)
{
unsigned flags = 0;
driParseOptionInfo(&screen->optionCacheDefaults, gallium_config_options.xml);
driParseConfigFiles(&screen->optionCache,
&screen->optionCacheDefaults,
screen->sPriv->myNum,
driver_name);
dri_fill_st_options(screen);
return flags;
}
const __DRIconfig **
dri_init_screen_helper(struct dri_screen *screen,
struct pipe_screen *pscreen,
const char* driver_name)
struct pipe_screen *pscreen)
{
screen->base.screen = pscreen;
screen->base.get_egl_image = dri_get_egl_image;
@ -479,15 +494,6 @@ dri_init_screen_helper(struct dri_screen *screen,
else
screen->target = PIPE_TEXTURE_RECT;
driParseOptionInfo(&screen->optionCacheDefaults, gallium_config_options.xml);
driParseConfigFiles(&screen->optionCache,
&screen->optionCacheDefaults,
screen->sPriv->myNum,
driver_name);
dri_fill_st_options(screen);
/* Handle force_s3tc_enable. */
if (!util_format_s3tc_enabled && screen->options.force_s3tc_enable) {
/* Ensure libtxc_dxtn has been loaded if available.

View File

@ -137,10 +137,13 @@ void
dri_fill_st_visual(struct st_visual *stvis, struct dri_screen *screen,
const struct gl_config *mode);
unsigned
dri_init_options_get_screen_flags(struct dri_screen *screen,
const char* driver_name);
const __DRIconfig **
dri_init_screen_helper(struct dri_screen *screen,
struct pipe_screen *pscreen,
const char* driver_name);
struct pipe_screen *pscreen);
void
dri_destroy_screen_helper(struct dri_screen * screen);

View File

@ -399,13 +399,15 @@ drisw_init_screen(__DRIscreen * sPriv)
sPriv->driverPrivate = (void *)screen;
sPriv->extensions = drisw_screen_extensions;
unsigned flags = dri_init_options_get_screen_flags(screen, "swrast");
if (pipe_loader_sw_probe_dri(&screen->dev, &drisw_lf))
pscreen = pipe_loader_create_screen(screen->dev, 0);
pscreen = pipe_loader_create_screen(screen->dev, flags);
if (!pscreen)
goto fail;
configs = dri_init_screen_helper(screen, pscreen, "swrast");
configs = dri_init_screen_helper(screen, pscreen);
if (!configs)
goto fail;