mirror of
https://gitlab.freedesktop.org/wayland/weston.git
synced 2026-05-07 14:18:32 +02:00
renderer-gl: return RENDERER_LOST if GPU reset
Return WESTON_RENDERER_ERROR_LOST if GPU reset happened in function gl_renderer_repaint_output() for further process Signed-off-by: Trigger Huang <Trigger.Huang@amd.com>
This commit is contained in:
parent
fcde9fc220
commit
8737e8e4d1
1 changed files with 34 additions and 0 deletions
|
|
@ -3080,6 +3080,37 @@ blit_shadow_to_output(struct weston_output *output,
|
|||
pixman_region32_fini(&translated_damage);
|
||||
}
|
||||
|
||||
static int
|
||||
gl_renderer_check_reset(struct gl_renderer *gr)
|
||||
{
|
||||
bool has_reset = false;
|
||||
int i;
|
||||
|
||||
if (!gl_features_has(gr, FEATURE_GRAPHICS_RESET_RECOVERY) ||
|
||||
!gr->get_graphics_reset_status)
|
||||
return 0;
|
||||
|
||||
/* Assume GPU reset should be finished within 5s. */
|
||||
for (i = 0; i < 100000; i++) {
|
||||
GLenum status;
|
||||
|
||||
status = gr->get_graphics_reset_status();
|
||||
if (status == GL_NO_ERROR)
|
||||
break;
|
||||
|
||||
has_reset = true;
|
||||
usleep(50);
|
||||
}
|
||||
|
||||
if (!has_reset)
|
||||
return 0;
|
||||
|
||||
/* If GPU reset has not completed, nothing we can do. */
|
||||
assert(i < 100000);
|
||||
|
||||
return -EAGAIN;
|
||||
}
|
||||
|
||||
/* NOTE: We now allow falling back to ARGB gl visuals when XRGB is
|
||||
* unavailable, so we're assuming the background has no transparency
|
||||
* and that everything with a blend, like drop shadows, will have something
|
||||
|
|
@ -3316,6 +3347,9 @@ gl_renderer_repaint_output(struct weston_output *output,
|
|||
|
||||
gl_renderer_garbage_collect_programs(gr);
|
||||
|
||||
if (gl_renderer_check_reset(gr))
|
||||
return WESTON_RENDERER_ERROR_LOST;
|
||||
|
||||
out:
|
||||
return WESTON_RENDERER_ERROR_NONE;
|
||||
}
|
||||
|
|
|
|||
Loading…
Add table
Reference in a new issue