st/nine: Use nine_context for resource_copy_region
authorPatrick Rudolph <siro@das-labor.org>
Wed, 2 Nov 2016 16:17:21 +0000 (17:17 +0100)
committerAxel Davy <axel.davy@ens.fr>
Tue, 20 Dec 2016 22:44:23 +0000 (23:44 +0100)
Use nine_context wrapper for resource_copy_region.
Enables to offload it with CSMT.

Signed-off-by: Patrick Rudolph <siro@das-labor.org>
src/gallium/state_trackers/nine/device9.c
src/gallium/state_trackers/nine/nine_state.c
src/gallium/state_trackers/nine/nine_state.h

index 633bc3e31ea64453021833396ad1bec747727161..5b720cc06dd567f53b3cbf1fd2557bafdc2f37a7 100644 (file)
@@ -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);
     }
index 48a4c1396d4d710701a870e9fa2a1e7b195d1e78..9bb89e36764069c84b312ae156f1f7b8c9910a48 100644 (file)
@@ -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))
 {
index 62b2c134fe130455f92372eaaabab468b186b576..82ebcc9cbcd1344a5190de2d8330e8cf4ecbff97 100644 (file)
@@ -517,6 +517,15 @@ nine_context_draw_indexed_primitive_from_vtxbuf_idxbuf(struct NineDevice9 *devic
                                                        struct pipe_vertex_buffer *vbuf,
                                                        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);