From c8913a06b454bd0aca813d2ea362e7d06840216f Mon Sep 17 00:00:00 2001 From: Patrick Rudolph Date: Thu, 27 Oct 2016 07:39:03 +0200 Subject: [PATCH] st/nine: Use nine_context for blit Enables to offload it with CSMT. Signed-off-by: Patrick Rudolph --- src/gallium/state_trackers/nine/device9.c | 5 +++-- src/gallium/state_trackers/nine/nine_state.c | 8 ++++++++ src/gallium/state_trackers/nine/nine_state.h | 4 ++++ 3 files changed, 15 insertions(+), 2 deletions(-) diff --git a/src/gallium/state_trackers/nine/device9.c b/src/gallium/state_trackers/nine/device9.c index 7d4a2a9..633bc3e 100644 --- a/src/gallium/state_trackers/nine/device9.c +++ b/src/gallium/state_trackers/nine/device9.c @@ -1549,7 +1549,7 @@ NineDevice9_StretchRect( struct NineDevice9 *This, D3DTEXTUREFILTERTYPE Filter ) { struct pipe_screen *screen = This->screen; - struct pipe_context *pipe = NineDevice9_GetPipe(This); + struct pipe_context *pipe; struct NineSurface9 *dst = NineSurface9(pDestSurface); struct NineSurface9 *src = NineSurface9(pSourceSurface); struct pipe_resource *dst_res = NineSurface9_GetResource(dst); @@ -1722,7 +1722,7 @@ NineDevice9_StretchRect( struct NineDevice9 *This, PIPE_BIND_RENDER_TARGET), D3DERR_INVALIDCALL); - pipe->blit(pipe, &blit); + nine_context_blit(This, &blit); } else { assert(blit.dst.box.x >= 0 && blit.dst.box.y >= 0 && blit.src.box.x >= 0 && blit.src.box.y >= 0 && @@ -1732,6 +1732,7 @@ NineDevice9_StretchRect( struct NineDevice9 *This, blit.src.box.y + blit.src.box.height <= src->desc.Height); /* Or drivers might crash ... */ DBG("Using resource_copy_region.\n"); + pipe = NineDevice9_GetPipe(This); pipe->resource_copy_region(pipe, blit.dst.resource, blit.dst.level, blit.dst.box.x, blit.dst.box.y, blit.dst.box.z, diff --git a/src/gallium/state_trackers/nine/nine_state.c b/src/gallium/state_trackers/nine/nine_state.c index 745b9d8..48a4c13 100644 --- a/src/gallium/state_trackers/nine/nine_state.c +++ b/src/gallium/state_trackers/nine/nine_state.c @@ -2583,6 +2583,14 @@ CSMT_ITEM_NO_WAIT(nine_context_draw_indexed_primitive_from_vtxbuf_idxbuf, context->pipe->draw_vbo(context->pipe, &info); } +CSMT_ITEM_NO_WAIT(nine_context_blit, + ARG_BIND_BLIT(struct pipe_blit_info, blit)) +{ + struct nine_context *context = &device->context; + + context->pipe->blit(context->pipe, blit); +} + struct pipe_query * nine_context_create_query(struct NineDevice9 *device, unsigned query_type) { diff --git a/src/gallium/state_trackers/nine/nine_state.h b/src/gallium/state_trackers/nine/nine_state.h index ee88a94..62b2c13 100644 --- a/src/gallium/state_trackers/nine/nine_state.h +++ b/src/gallium/state_trackers/nine/nine_state.h @@ -517,6 +517,10 @@ nine_context_draw_indexed_primitive_from_vtxbuf_idxbuf(struct NineDevice9 *devic struct pipe_vertex_buffer *vbuf, struct pipe_index_buffer *ibuf); +void +nine_context_blit(struct NineDevice9 *device, + struct pipe_blit_info *blit); + struct pipe_query * nine_context_create_query(struct NineDevice9 *device, unsigned query_type); -- 2.7.4