summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorPatrick Rudolph <[email protected]>2016-10-27 07:39:03 +0200
committerAxel Davy <[email protected]>2016-12-20 23:44:23 +0100
commitc8913a06b454bd0aca813d2ea362e7d06840216f (patch)
tree5425a11b296cd978d84e736a5c06e371a1a4b1ba
parent0fd57306134b9f4e57e544ecc11971a94d7a90df (diff)
st/nine: Use nine_context for blit
Enables to offload it with CSMT. Signed-off-by: Patrick Rudolph <[email protected]>
-rw-r--r--src/gallium/state_trackers/nine/device9.c5
-rw-r--r--src/gallium/state_trackers/nine/nine_state.c8
-rw-r--r--src/gallium/state_trackers/nine/nine_state.h4
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 7d4a2a9c4b0..633bc3e31ea 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 745b9d8c65b..48a4c1396d4 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 ee88a943ccd..62b2c134fe1 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);