diff options
author | Patrick Rudolph <[email protected]> | 2016-11-02 17:17:21 +0100 |
---|---|---|
committer | Axel Davy <[email protected]> | 2016-12-20 23:44:23 +0100 |
commit | fef23f6712064416f02211f1517e387169735e0b (patch) | |
tree | 47fc0a3afcaf94c334aff2576c48cf4992e51712 | |
parent | c8913a06b454bd0aca813d2ea362e7d06840216f (diff) |
st/nine: Use nine_context for resource_copy_region
Use nine_context wrapper for resource_copy_region.
Enables to offload it with CSMT.
Signed-off-by: Patrick Rudolph <[email protected]>
-rw-r--r-- | src/gallium/state_trackers/nine/device9.c | 6 | ||||
-rw-r--r-- | src/gallium/state_trackers/nine/nine_state.c | 17 | ||||
-rw-r--r-- | src/gallium/state_trackers/nine/nine_state.h | 9 |
3 files changed, 28 insertions, 4 deletions
diff --git a/src/gallium/state_trackers/nine/device9.c b/src/gallium/state_trackers/nine/device9.c index 633bc3e31ea..5b720cc06dd 100644 --- a/src/gallium/state_trackers/nine/device9.c +++ b/src/gallium/state_trackers/nine/device9.c @@ -1549,7 +1549,6 @@ NineDevice9_StretchRect( struct NineDevice9 *This, D3DTEXTUREFILTERTYPE Filter ) { struct pipe_screen *screen = This->screen; - struct pipe_context *pipe; struct NineSurface9 *dst = NineSurface9(pDestSurface); struct NineSurface9 *src = NineSurface9(pSourceSurface); struct pipe_resource *dst_res = NineSurface9_GetResource(dst); @@ -1732,10 +1731,9 @@ 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, + nine_context_resource_copy_region(This, blit.dst.resource, blit.dst.level, - blit.dst.box.x, blit.dst.box.y, blit.dst.box.z, + &blit.dst.box, blit.src.resource, blit.src.level, &blit.src.box); } diff --git a/src/gallium/state_trackers/nine/nine_state.c b/src/gallium/state_trackers/nine/nine_state.c index 48a4c1396d4..9bb89e36764 100644 --- a/src/gallium/state_trackers/nine/nine_state.c +++ b/src/gallium/state_trackers/nine/nine_state.c @@ -2583,6 +2583,23 @@ 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_resource_copy_region, + ARG_BIND_RES(struct pipe_resource, dst_res), + ARG_VAL(unsigned, dst_level), + ARG_COPY_REF(struct pipe_box, dst_box), + ARG_BIND_RES(struct pipe_resource, src_res), + ARG_VAL(unsigned, src_level), + ARG_COPY_REF(struct pipe_box, src_box)) +{ + struct nine_context *context = &device->context; + + context->pipe->resource_copy_region(context->pipe, + dst_res, dst_level, + dst_box->x, dst_box->y, dst_box->z, + src_res, src_level, + src_box); +} + CSMT_ITEM_NO_WAIT(nine_context_blit, ARG_BIND_BLIT(struct pipe_blit_info, blit)) { diff --git a/src/gallium/state_trackers/nine/nine_state.h b/src/gallium/state_trackers/nine/nine_state.h index 62b2c134fe1..82ebcc9cbcd 100644 --- a/src/gallium/state_trackers/nine/nine_state.h +++ b/src/gallium/state_trackers/nine/nine_state.h @@ -518,6 +518,15 @@ nine_context_draw_indexed_primitive_from_vtxbuf_idxbuf(struct NineDevice9 *devic struct pipe_index_buffer *ibuf); void +nine_context_resource_copy_region(struct NineDevice9 *device, + struct pipe_resource* dst_res, + unsigned dst_level, + const struct pipe_box *dst_box, + struct pipe_resource* src_res, + unsigned src_level, + const struct pipe_box *src_box); + +void nine_context_blit(struct NineDevice9 *device, struct pipe_blit_info *blit); |