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) {
|
for (int i = 0; i < ctx->fb.nr_cbufs; ++i) {
|
||||||
if (ctx->fb.cbufs[i]) {
|
if (ctx->fb.cbufs[i]) {
|
||||||
struct d3d12_surface *surface = d3d12_surface(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)
|
if (conversion_modes[i] != D3D12_SURFACE_CONVERSION_NONE)
|
||||||
ctx->cmdlist_dirty |= D3D12_DIRTY_FRAMEBUFFER;
|
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) {
|
for (int i = 0; i < ctx->fb.nr_cbufs; ++i) {
|
||||||
if (ctx->fb.cbufs[i]) {
|
if (ctx->fb.cbufs[i]) {
|
||||||
struct d3d12_surface *surface = d3d12_surface(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
|
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 = {};
|
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.src.box.depth = info.dst.box.depth = 0;
|
||||||
info.mask = PIPE_MASK_RGBA;
|
info.mask = PIPE_MASK_RGBA;
|
||||||
|
|
||||||
d3d12_blit(surface->base.context, &info);
|
d3d12_blit(pctx, &info);
|
||||||
}
|
}
|
||||||
|
|
||||||
enum d3d12_surface_conversion_mode
|
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)
|
DXGI_FORMAT format)
|
||||||
{
|
{
|
||||||
struct d3d12_screen *screen = d3d12_screen(surface->base.context->screen);
|
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);
|
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);
|
res = d3d12_resource(surface->rgba_texture);
|
||||||
}
|
}
|
||||||
|
|
||||||
@@ -350,11 +351,12 @@ d3d12_surface_update_pre_draw(struct d3d12_surface *surface,
|
|||||||
}
|
}
|
||||||
|
|
||||||
void
|
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)
|
enum d3d12_surface_conversion_mode mode)
|
||||||
{
|
{
|
||||||
if (mode == D3D12_SURFACE_CONVERSION_BGRA_UINT)
|
if (mode == D3D12_SURFACE_CONVERSION_BGRA_UINT)
|
||||||
blit_surface(surface, false);
|
blit_surface(pctx, surface, false);
|
||||||
}
|
}
|
||||||
|
|
||||||
D3D12_CPU_DESCRIPTOR_HANDLE
|
D3D12_CPU_DESCRIPTOR_HANDLE
|
||||||
|
@@ -52,11 +52,13 @@ d3d12_surface(struct pipe_surface *psurf)
|
|||||||
}
|
}
|
||||||
|
|
||||||
enum d3d12_surface_conversion_mode
|
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);
|
DXGI_FORMAT format);
|
||||||
|
|
||||||
void
|
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);
|
enum d3d12_surface_conversion_mode mode);
|
||||||
|
|
||||||
D3D12_CPU_DESCRIPTOR_HANDLE
|
D3D12_CPU_DESCRIPTOR_HANDLE
|
||||||
|
Reference in New Issue
Block a user