d3d12: Pass explicit context to pre/post draw surface blits

Reviewed By: Bill Kristiansen <billkris@microsoft.com>

Part-of: <https://gitlab.freedesktop.org/mesa/mesa/-/merge_requests/13670>
This commit is contained in:
Jesse Natalie
2021-11-04 10:15:56 -07:00
committed by Marge Bot
parent cd41ed53b2
commit 2c90fa19a8
3 changed files with 14 additions and 10 deletions

View File

@@ -479,7 +479,7 @@ d3d12_draw_vbo(struct pipe_context *pctx,
for (int i = 0; i < ctx->fb.nr_cbufs; ++i) {
if (ctx->fb.cbufs[i]) {
struct d3d12_surface *surface = d3d12_surface(ctx->fb.cbufs[i]);
conversion_modes[i] = d3d12_surface_update_pre_draw(surface, d3d12_rtv_format(ctx, i));
conversion_modes[i] = d3d12_surface_update_pre_draw(pctx, surface, d3d12_rtv_format(ctx, i));
if (conversion_modes[i] != D3D12_SURFACE_CONVERSION_NONE)
ctx->cmdlist_dirty |= D3D12_DIRTY_FRAMEBUFFER;
}
@@ -759,7 +759,7 @@ d3d12_draw_vbo(struct pipe_context *pctx,
for (int i = 0; i < ctx->fb.nr_cbufs; ++i) {
if (ctx->fb.cbufs[i]) {
struct d3d12_surface *surface = d3d12_surface(ctx->fb.cbufs[i]);
d3d12_surface_update_post_draw(surface, conversion_modes[i]);
d3d12_surface_update_post_draw(pctx, surface, conversion_modes[i]);
}
}
}

View File

@@ -280,7 +280,7 @@ d3d12_surface_destroy(struct pipe_context *pctx,
}
static void
blit_surface(struct d3d12_surface *surface, bool pre)
blit_surface(struct pipe_context *pctx, struct d3d12_surface *surface, bool pre)
{
struct pipe_blit_info info = {};
@@ -297,11 +297,12 @@ blit_surface(struct d3d12_surface *surface, bool pre)
info.src.box.depth = info.dst.box.depth = 0;
info.mask = PIPE_MASK_RGBA;
d3d12_blit(surface->base.context, &info);
d3d12_blit(pctx, &info);
}
enum d3d12_surface_conversion_mode
d3d12_surface_update_pre_draw(struct d3d12_surface *surface,
d3d12_surface_update_pre_draw(struct pipe_context *pctx,
struct d3d12_surface *surface,
DXGI_FORMAT format)
{
struct d3d12_screen *screen = d3d12_screen(surface->base.context->screen);
@@ -337,7 +338,7 @@ d3d12_surface_update_pre_draw(struct d3d12_surface *surface,
surface->rgba_texture = screen->base.resource_create(&screen->base, &templ);
}
blit_surface(surface, true);
blit_surface(pctx, surface, true);
res = d3d12_resource(surface->rgba_texture);
}
@@ -350,11 +351,12 @@ d3d12_surface_update_pre_draw(struct d3d12_surface *surface,
}
void
d3d12_surface_update_post_draw(struct d3d12_surface *surface,
d3d12_surface_update_post_draw(struct pipe_context *pctx,
struct d3d12_surface *surface,
enum d3d12_surface_conversion_mode mode)
{
if (mode == D3D12_SURFACE_CONVERSION_BGRA_UINT)
blit_surface(surface, false);
blit_surface(pctx, surface, false);
}
D3D12_CPU_DESCRIPTOR_HANDLE

View File

@@ -52,11 +52,13 @@ d3d12_surface(struct pipe_surface *psurf)
}
enum d3d12_surface_conversion_mode
d3d12_surface_update_pre_draw(struct d3d12_surface *surface,
d3d12_surface_update_pre_draw(struct pipe_context *pctx,
struct d3d12_surface *surface,
DXGI_FORMAT format);
void
d3d12_surface_update_post_draw(struct d3d12_surface *surface,
d3d12_surface_update_post_draw(struct pipe_context *pctx,
struct d3d12_surface *surface,
enum d3d12_surface_conversion_mode mode);
D3D12_CPU_DESCRIPTOR_HANDLE