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:
@@ -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]);
|
||||
}
|
||||
}
|
||||
}
|
||||
|
@@ -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
|
||||
|
@@ -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
|
||||
|
Reference in New Issue
Block a user