From: Marek Olšák <marek.ol...@amd.com>

---
 src/gallium/drivers/radeonsi/cik_sdma.c | 44 ++++++++++++---------------------
 1 file changed, 16 insertions(+), 28 deletions(-)

diff --git a/src/gallium/drivers/radeonsi/cik_sdma.c 
b/src/gallium/drivers/radeonsi/cik_sdma.c
index 698f8f6..648b1ca 100644
--- a/src/gallium/drivers/radeonsi/cik_sdma.c
+++ b/src/gallium/drivers/radeonsi/cik_sdma.c
@@ -21,71 +21,59 @@
  * OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE
  * USE OR OTHER DEALINGS IN THE SOFTWARE.
  *
  * Authors:
  *      Jerome Glisse
  */
 
 #include "sid.h"
 #include "si_pipe.h"
 
-static void cik_sdma_do_copy_buffer(struct si_context *ctx,
-                                   struct pipe_resource *dst,
-                                   struct pipe_resource *src,
-                                   uint64_t dst_offset,
-                                   uint64_t src_offset,
-                                   uint64_t size)
+static void cik_sdma_copy_buffer(struct si_context *ctx,
+                                struct pipe_resource *dst,
+                                struct pipe_resource *src,
+                                uint64_t dst_offset,
+                                uint64_t src_offset,
+                                uint64_t size)
 {
        struct radeon_winsys_cs *cs = ctx->b.dma.cs;
        unsigned i, ncopy, csize;
-       struct r600_resource *rdst = (struct r600_resource*)dst;
-       struct r600_resource *rsrc = (struct r600_resource*)src;
+       struct r600_resource *rdst = r600_resource(dst);
+       struct r600_resource *rsrc = r600_resource(src);
 
-       dst_offset += r600_resource(dst)->gpu_address;
-       src_offset += r600_resource(src)->gpu_address;
+       /* Mark the buffer range of destination as valid (initialized),
+        * so that transfer_map knows it should wait for the GPU when mapping
+        * that range. */
+       util_range_add(&rdst->valid_buffer_range, dst_offset,
+                      dst_offset + size);
+
+       dst_offset += rdst->gpu_address;
+       src_offset += rsrc->gpu_address;
 
        ncopy = DIV_ROUND_UP(size, CIK_SDMA_COPY_MAX_SIZE);
        r600_need_dma_space(&ctx->b, ncopy * 7, rdst, rsrc);
 
        for (i = 0; i < ncopy; i++) {
                csize = MIN2(size, CIK_SDMA_COPY_MAX_SIZE);
                radeon_emit(cs, CIK_SDMA_PACKET(CIK_SDMA_OPCODE_COPY,
                                                CIK_SDMA_COPY_SUB_OPCODE_LINEAR,
                                                0));
                radeon_emit(cs, csize);
                radeon_emit(cs, 0); /* src/dst endian swap */
                radeon_emit(cs, src_offset);
                radeon_emit(cs, src_offset >> 32);
                radeon_emit(cs, dst_offset);
                radeon_emit(cs, dst_offset >> 32);
                dst_offset += csize;
                src_offset += csize;
                size -= csize;
        }
-}
-
-static void cik_sdma_copy_buffer(struct si_context *ctx,
-                                struct pipe_resource *dst,
-                                struct pipe_resource *src,
-                                uint64_t dst_offset,
-                                uint64_t src_offset,
-                                uint64_t size)
-{
-       struct r600_resource *rdst = (struct r600_resource*)dst;
-
-       /* Mark the buffer range of destination as valid (initialized),
-        * so that transfer_map knows it should wait for the GPU when mapping
-        * that range. */
-       util_range_add(&rdst->valid_buffer_range, dst_offset,
-                      dst_offset + size);
-
-       cik_sdma_do_copy_buffer(ctx, dst, src, dst_offset, src_offset, size);
        r600_dma_emit_wait_idle(&ctx->b);
 }
 
 static void cik_sdma_clear_buffer(struct pipe_context *ctx,
                                  struct pipe_resource *dst,
                                  uint64_t offset,
                                  uint64_t size,
                                  unsigned clear_value)
 {
        struct si_context *sctx = (struct si_context *)ctx;
-- 
2.7.4

_______________________________________________
mesa-dev mailing list
mesa-dev@lists.freedesktop.org
https://lists.freedesktop.org/mailman/listinfo/mesa-dev

Reply via email to