From a9a4d6349a2d92200d80382532bff46971aafdae Mon Sep 17 00:00:00 2001 From: James Ross-Gowan Date: Thu, 4 Jan 2018 22:58:12 +1100 Subject: vo_gpu: d3d11: check for NULL backbuffer in start_frame In a lost device scenario, resize() will fail and p->backbuffer will be NULL. We can't recover from lost devices yet, but we should still check for a NULL backbuffer in start_frame() rather than crashing. Also remove a NULL check for p->swapchain. This was a red herring, since p->swapchain never becomes NULL in an error condition, but p->backbuffer actually does. This should fix the crash in #5320, but it doesn't fix the underlying reason for the lost device (which is probably a driver bug.) --- video/out/d3d11/context.c | 8 ++++++-- 1 file changed, 6 insertions(+), 2 deletions(-) (limited to 'video/out') diff --git a/video/out/d3d11/context.c b/video/out/d3d11/context.c index b02d2e80ce..af664d9988 100644 --- a/video/out/d3d11/context.c +++ b/video/out/d3d11/context.c @@ -73,8 +73,6 @@ struct priv { static struct mp_image *d3d11_screenshot(struct ra_swapchain *sw) { struct priv *p = sw->ctx->priv; - if (!p->swapchain) - return NULL; return mp_d3d11_screenshot(p->swapchain); } @@ -131,6 +129,10 @@ static int d3d11_color_depth(struct ra_swapchain *sw) static bool d3d11_start_frame(struct ra_swapchain *sw, struct ra_fbo *out_fbo) { struct priv *p = sw->priv; + + if (!p->backbuffer) + return false; + *out_fbo = (struct ra_fbo) { .tex = p->backbuffer, .flip = false, @@ -226,6 +228,8 @@ static bool d3d11_init(struct ra_ctx *ctx) goto error; p->backbuffer = get_backbuffer(ctx); + if (!p->backbuffer) + goto error; return true; -- cgit v1.2.3