mirror of
https://github.com/mpv-player/mpv
synced 2025-03-03 20:57:45 +00:00
vo_gpu/d3d11: mimic libplacebo backbuffer usage
Instead of always having the reference outside of calling resize, request a backbuffer at start and relieve the backbuffer at submission for presentation.
This commit is contained in:
parent
6102d2bd78
commit
4b8e3f20bc
@ -166,7 +166,10 @@ static bool resize(struct ra_ctx *ctx)
|
|||||||
struct priv *p = ctx->priv;
|
struct priv *p = ctx->priv;
|
||||||
HRESULT hr;
|
HRESULT hr;
|
||||||
|
|
||||||
ra_tex_free(ctx->ra, &p->backbuffer);
|
if (p->backbuffer) {
|
||||||
|
MP_ERR(ctx, "Attempt at resizing while a frame was in progress!\n");
|
||||||
|
return false;
|
||||||
|
}
|
||||||
|
|
||||||
hr = IDXGISwapChain_ResizeBuffers(p->swapchain, 0, ctx->vo->dwidth,
|
hr = IDXGISwapChain_ResizeBuffers(p->swapchain, 0, ctx->vo->dwidth,
|
||||||
ctx->vo->dheight, DXGI_FORMAT_UNKNOWN, 0);
|
ctx->vo->dheight, DXGI_FORMAT_UNKNOWN, 0);
|
||||||
@ -175,8 +178,6 @@ static bool resize(struct ra_ctx *ctx)
|
|||||||
return false;
|
return false;
|
||||||
}
|
}
|
||||||
|
|
||||||
p->backbuffer = get_backbuffer(ctx);
|
|
||||||
|
|
||||||
return true;
|
return true;
|
||||||
}
|
}
|
||||||
|
|
||||||
@ -213,6 +214,9 @@ static bool d3d11_start_frame(struct ra_swapchain *sw, struct ra_fbo *out_fbo)
|
|||||||
if (!out_fbo)
|
if (!out_fbo)
|
||||||
return true;
|
return true;
|
||||||
|
|
||||||
|
assert(!p->backbuffer);
|
||||||
|
|
||||||
|
p->backbuffer = get_backbuffer(sw->ctx);
|
||||||
if (!p->backbuffer)
|
if (!p->backbuffer)
|
||||||
return false;
|
return false;
|
||||||
|
|
||||||
@ -227,7 +231,10 @@ static bool d3d11_start_frame(struct ra_swapchain *sw, struct ra_fbo *out_fbo)
|
|||||||
static bool d3d11_submit_frame(struct ra_swapchain *sw,
|
static bool d3d11_submit_frame(struct ra_swapchain *sw,
|
||||||
const struct vo_frame *frame)
|
const struct vo_frame *frame)
|
||||||
{
|
{
|
||||||
|
struct priv *p = sw->priv;
|
||||||
|
|
||||||
ra_d3d11_flush(sw->ctx->ra);
|
ra_d3d11_flush(sw->ctx->ra);
|
||||||
|
ra_tex_free(sw->ctx->ra, &p->backbuffer);
|
||||||
return true;
|
return true;
|
||||||
}
|
}
|
||||||
|
|
||||||
@ -526,10 +533,6 @@ static bool d3d11_init(struct ra_ctx *ctx)
|
|||||||
if (!mp_d3d11_create_swapchain(p->device, ctx->log, &scopts, &p->swapchain))
|
if (!mp_d3d11_create_swapchain(p->device, ctx->log, &scopts, &p->swapchain))
|
||||||
goto error;
|
goto error;
|
||||||
|
|
||||||
p->backbuffer = get_backbuffer(ctx);
|
|
||||||
if (!p->backbuffer)
|
|
||||||
goto error;
|
|
||||||
|
|
||||||
return true;
|
return true;
|
||||||
|
|
||||||
error:
|
error:
|
||||||
|
Loading…
Reference in New Issue
Block a user