On Wed, Jul 26, 2017 at 4:00 PM, Nicolai Hähnle <[email protected]> wrote: > On 25.07.2017 17:39, Marek Olšák wrote: >> >> From: Marek Olšák <[email protected]> >> >> This fixes the black Feral launcher window. >> >> Bugzilla: https://bugs.freedesktop.org/show_bug.cgi?id=101867 >> --- >> src/mesa/state_tracker/st_manager.c | 6 ++++++ >> 1 file changed, 6 insertions(+) >> >> diff --git a/src/mesa/state_tracker/st_manager.c >> b/src/mesa/state_tracker/st_manager.c >> index 834bcc9..ede5439 100644 >> --- a/src/mesa/state_tracker/st_manager.c >> +++ b/src/mesa/state_tracker/st_manager.c >> @@ -635,20 +635,26 @@ st_context_flush(struct st_context_iface *stctxi, >> unsigned flags, >> st_flush(st, fence, pipe_flags); >> if ((flags & ST_FLUSH_WAIT) && fence) { >> st->pipe->screen->fence_finish(st->pipe->screen, NULL, *fence, >> PIPE_TIMEOUT_INFINITE); >> st->pipe->screen->fence_reference(st->pipe->screen, fence, NULL); >> } >> if (flags & ST_FLUSH_FRONT) >> st_manager_flush_frontbuffer(st); >> + >> + /* Enter st_validate_state in the next draw call to revalidate >> + * the framebuffer. >> + */ >> + if (flags & ST_FLUSH_END_OF_FRAME) >> + st->gfx_shaders_may_be_dirty = true; > > > Why does this help? Which piece of state is changed from under us without > properly updating the dirty flags? Also, why not one of the > framebuffer-related flags? And is this always needed, or only if > ST_FLUSH_FRONT?
It's always needed. We don't need to update any state. We just need to invoke st_validate_state, so that st_manager_validate_framebuffers is invoked, which will set other dirty flags if needed. DRI3 changes the framebuffer after SwapBuffers, but we need to invoke st_manager_validate_framebuffers to notice that. "gfx_shaders_may_be_dirty = true;" makes sure that st_validate_state will be invoked by the next draw call, and if nothing needs to be done in st_validate_state, it will be no-op. All other dirty flags are stronger than this, which is why we can't use them. Marek _______________________________________________ mesa-dev mailing list [email protected] https://lists.freedesktop.org/mailman/listinfo/mesa-dev
