sna: Parse output options early during initialisation

Before we can query whether an option is set, we first need to generate
the options table. This is done through xf86OutputUseScreenMonitor() so
make sure it is called as early as possible in the proceedings.

Signed-off-by: Chris Wilson <chris@chris-wilson.co.uk>
This commit is contained in:
Chris Wilson 2014-08-11 12:22:17 +01:00
parent 8e1961e7fc
commit 6554cf0a69
1 changed files with 10 additions and 8 deletions

View File

@ -3670,12 +3670,22 @@ sna_output_add(struct sna *sna, unsigned id, unsigned serial)
goto cleanup;
}
output->scrn = scrn;
output->funcs = &sna_output_funcs;
output->name = (char *)(output + 1);
memcpy(output->name, name, len + 1);
output->use_screen_monitor = config->num_output != 1;
xf86OutputUseScreenMonitor(output, !output->use_screen_monitor);
assert(output->options);
DBG(("%s: inserting output #%d of %d\n", __FUNCTION__, sna->mode.num_real_output, config->num_output));
for (i = config->num_output; i > sna->mode.num_real_output; i--) {
outputs[i] = outputs[i-1];
assert(outputs[i]->driver_private == NULL);
outputs[i]->possible_clones <<= 1;
}
if (xf86ReturnOptValBool(output->options, OPTION_PRIMARY, FALSE)) {
memmove(outputs + 1, outputs, sizeof(output)*config->num_output);
outputs[0] = output;
@ -3685,14 +3695,6 @@ sna_output_add(struct sna *sna, unsigned id, unsigned serial)
config->num_output++;
config->output = outputs;
output->scrn = scrn;
output->funcs = &sna_output_funcs;
output->name = (char *)(output + 1);
memcpy(output->name, name, len + 1);
output->use_screen_monitor = config->num_output != 1;
xf86OutputUseScreenMonitor(output, !output->use_screen_monitor);
reset:
sna_output->id = compat_conn.conn.connector_id;
sna_output->is_panel = is_panel(compat_conn.conn.connector_type);