diff options
Diffstat (limited to 'sway')
-rw-r--r-- | sway/config/output.c | 46 |
1 files changed, 32 insertions, 14 deletions
diff --git a/sway/config/output.c b/sway/config/output.c index 3ec5d77b..fb1956df 100644 --- a/sway/config/output.c +++ b/sway/config/output.c | |||
@@ -641,6 +641,30 @@ struct search_context { | |||
641 | bool degrade_to_off; | 641 | bool degrade_to_off; |
642 | }; | 642 | }; |
643 | 643 | ||
644 | static void dump_output_state(struct wlr_output *wlr_output, struct wlr_output_state *state) { | ||
645 | sway_log(SWAY_DEBUG, "Output state for %s", wlr_output->name); | ||
646 | if (state->committed & WLR_OUTPUT_STATE_ENABLED) { | ||
647 | sway_log(SWAY_DEBUG, " enabled: %s", state->enabled ? "yes" : "no"); | ||
648 | } | ||
649 | if (state->committed & WLR_OUTPUT_STATE_RENDER_FORMAT) { | ||
650 | sway_log(SWAY_DEBUG, " render_format: %d", state->render_format); | ||
651 | } | ||
652 | if (state->committed & WLR_OUTPUT_STATE_MODE) { | ||
653 | if (state->mode_type == WLR_OUTPUT_STATE_MODE_CUSTOM) { | ||
654 | sway_log(SWAY_DEBUG, " custom mode: %dx%d@%dmHz", | ||
655 | state->custom_mode.width, state->custom_mode.height, state->custom_mode.refresh); | ||
656 | } else { | ||
657 | sway_log(SWAY_DEBUG, " mode: %dx%d@%dmHz%s", | ||
658 | state->mode->width, state->mode->height, state->mode->refresh, | ||
659 | state->mode->preferred ? " (preferred)" : ""); | ||
660 | } | ||
661 | } | ||
662 | if (state->committed & WLR_OUTPUT_STATE_ADAPTIVE_SYNC_ENABLED) { | ||
663 | sway_log(SWAY_DEBUG, " adaptive_sync: %s", | ||
664 | state->adaptive_sync_enabled ? "enabled": "disabled"); | ||
665 | } | ||
666 | } | ||
667 | |||
644 | static bool search_valid_config(struct search_context *ctx, size_t output_idx); | 668 | static bool search_valid_config(struct search_context *ctx, size_t output_idx); |
645 | 669 | ||
646 | static void reset_output_state(struct wlr_output_state *state) { | 670 | static void reset_output_state(struct wlr_output_state *state) { |
@@ -664,7 +688,12 @@ static void clear_later_output_states(struct wlr_backend_output_state *states, | |||
664 | } | 688 | } |
665 | 689 | ||
666 | static bool search_finish(struct search_context *ctx, size_t output_idx) { | 690 | static bool search_finish(struct search_context *ctx, size_t output_idx) { |
691 | struct wlr_backend_output_state *backend_state = &ctx->states[output_idx]; | ||
692 | struct wlr_output_state *state = &backend_state->base; | ||
693 | struct wlr_output *wlr_output = backend_state->output; | ||
694 | |||
667 | clear_later_output_states(ctx->states, ctx->configs_len, output_idx); | 695 | clear_later_output_states(ctx->states, ctx->configs_len, output_idx); |
696 | dump_output_state(wlr_output, state); | ||
668 | return wlr_output_swapchain_manager_prepare(ctx->swapchain_mgr, ctx->states, ctx->configs_len) && | 697 | return wlr_output_swapchain_manager_prepare(ctx->swapchain_mgr, ctx->states, ctx->configs_len) && |
669 | search_valid_config(ctx, output_idx+1); | 698 | search_valid_config(ctx, output_idx+1); |
670 | } | 699 | } |
@@ -681,8 +710,6 @@ static bool search_adaptive_sync(struct search_context *ctx, size_t output_idx) | |||
681 | } | 710 | } |
682 | } | 711 | } |
683 | if (!cfg->config || cfg->config->adaptive_sync != -1) { | 712 | if (!cfg->config || cfg->config->adaptive_sync != -1) { |
684 | sway_log(SWAY_DEBUG, "Trying with adaptive sync disabled for: %s", | ||
685 | backend_state->output->name); | ||
686 | wlr_output_state_set_adaptive_sync_enabled(state, false); | 713 | wlr_output_state_set_adaptive_sync_enabled(state, false); |
687 | if (search_finish(ctx, output_idx)) { | 714 | if (search_finish(ctx, output_idx)) { |
688 | return true; | 715 | return true; |
@@ -690,8 +717,6 @@ static bool search_adaptive_sync(struct search_context *ctx, size_t output_idx) | |||
690 | } | 717 | } |
691 | // If adaptive sync has not been set, or fallback in case we are on a | 718 | // If adaptive sync has not been set, or fallback in case we are on a |
692 | // backend that cannot disable adaptive sync such as the wayland backend. | 719 | // backend that cannot disable adaptive sync such as the wayland backend. |
693 | sway_log(SWAY_DEBUG, "Trying with adaptive sync unset for: %s", | ||
694 | backend_state->output->name); | ||
695 | state->committed &= ~WLR_OUTPUT_STATE_ADAPTIVE_SYNC_ENABLED; | 720 | state->committed &= ~WLR_OUTPUT_STATE_ADAPTIVE_SYNC_ENABLED; |
696 | return search_finish(ctx, output_idx); | 721 | return search_finish(ctx, output_idx); |
697 | } | 722 | } |
@@ -708,7 +733,6 @@ static bool search_mode(struct search_context *ctx, size_t output_idx) { | |||
708 | 733 | ||
709 | struct wlr_output_mode *preferred_mode = wlr_output_preferred_mode(wlr_output); | 734 | struct wlr_output_mode *preferred_mode = wlr_output_preferred_mode(wlr_output); |
710 | if (preferred_mode) { | 735 | if (preferred_mode) { |
711 | sway_log(SWAY_DEBUG, "Trying with preferred mode for: %s", backend_state->output->name); | ||
712 | wlr_output_state_set_mode(state, preferred_mode); | 736 | wlr_output_state_set_mode(state, preferred_mode); |
713 | if (search_adaptive_sync(ctx, output_idx)) { | 737 | if (search_adaptive_sync(ctx, output_idx)) { |
714 | return true; | 738 | return true; |
@@ -725,8 +749,6 @@ static bool search_mode(struct search_context *ctx, size_t output_idx) { | |||
725 | if (mode == preferred_mode) { | 749 | if (mode == preferred_mode) { |
726 | continue; | 750 | continue; |
727 | } | 751 | } |
728 | sway_log(SWAY_DEBUG, "Trying with mode %dx%d@%dmHz for: %s", | ||
729 | mode->width, mode->height, mode->refresh, backend_state->output->name); | ||
730 | wlr_output_state_set_mode(state, mode); | 752 | wlr_output_state_set_mode(state, mode); |
731 | if (search_adaptive_sync(ctx, output_idx)) { | 753 | if (search_adaptive_sync(ctx, output_idx)) { |
732 | return true; | 754 | return true; |
@@ -765,8 +787,6 @@ static bool search_render_format(struct search_context *ctx, size_t output_idx) | |||
765 | // This is not a supported format for this output | 787 | // This is not a supported format for this output |
766 | continue; | 788 | continue; |
767 | } | 789 | } |
768 | sway_log(SWAY_DEBUG, "Trying with render format %d for: %s", fmts[idx], | ||
769 | wlr_output->name); | ||
770 | wlr_output_state_set_render_format(state, fmts[idx]); | 790 | wlr_output_state_set_render_format(state, fmts[idx]); |
771 | if (search_mode(ctx, output_idx)) { | 791 | if (search_mode(ctx, output_idx)) { |
772 | return true; | 792 | return true; |
@@ -784,9 +804,7 @@ static bool search_valid_config(struct search_context *ctx, size_t output_idx) { | |||
784 | struct matched_output_config *cfg = &ctx->configs[output_idx]; | 804 | struct matched_output_config *cfg = &ctx->configs[output_idx]; |
785 | struct wlr_backend_output_state *backend_state = &ctx->states[output_idx]; | 805 | struct wlr_backend_output_state *backend_state = &ctx->states[output_idx]; |
786 | struct wlr_output_state *state = &backend_state->base; | 806 | struct wlr_output_state *state = &backend_state->base; |
787 | 807 | struct wlr_output *wlr_output = backend_state->output; | |
788 | sway_log(SWAY_DEBUG, "Finding valid config for: %s", | ||
789 | backend_state->output->name); | ||
790 | 808 | ||
791 | if (!output_config_is_disabling(cfg->config)) { | 809 | if (!output_config_is_disabling(cfg->config)) { |
792 | // Search through our possible configurations, doing a depth-first | 810 | // Search through our possible configurations, doing a depth-first |
@@ -800,8 +818,8 @@ static bool search_valid_config(struct search_context *ctx, size_t output_idx) { | |||
800 | } | 818 | } |
801 | // We could not get anything to work, try to disable this output to see | 819 | // We could not get anything to work, try to disable this output to see |
802 | // if we can at least make the outputs before us work. | 820 | // if we can at least make the outputs before us work. |
803 | sway_log(SWAY_DEBUG, "Trying with disabled output for: %s", | 821 | sway_log(SWAY_DEBUG, "Unable to find valid config with output %s, disabling", |
804 | backend_state->output->name); | 822 | wlr_output->name); |
805 | reset_output_state(state); | 823 | reset_output_state(state); |
806 | } | 824 | } |
807 | 825 | ||