[Mesa-dev] [PATCH 49/84] st/nine: Use nine_context for blit

Axel Davy axel.davy at ens.fr
Wed Dec 7 22:55:22 UTC 2016


From: Patrick Rudolph <siro at das-labor.org>

Enables to offload it with CSMT.

Signed-off-by: Patrick Rudolph <siro at das-labor.org>
---
 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 8ac3fc1..20ab5df 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 ef19374..017ad67 100644
--- a/src/gallium/state_trackers/nine/nine_state.c
+++ b/src/gallium/state_trackers/nine/nine_state.c
@@ -2587,6 +2587,14 @@ CSMT_ITEM_NO_WAIT(nine_context_draw_indexed_primitive_from_vtxbuf_idxbuf,
     pipe_resource_reference(&ibuf->buffer, NULL);
 }
 
+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.10.2



More information about the mesa-dev mailing list