Module: Mesa
Branch: master
Commit: 77b8aa4d95678cf30210339d2afb75c7d1749f57
URL:    
http://cgit.freedesktop.org/mesa/mesa/commit/?id=77b8aa4d95678cf30210339d2afb75c7d1749f57

Author: Dave Airlie <airl...@redhat.com>
Date:   Tue Jun  6 08:47:22 2017 +1000

radv: add gfx9 cp dma support.

This adds support to the CP dma code for GFX9, ported from
radeonsi.

Reviewed-by: Bas Nieuwenhuizen <b...@basnieuwenhuizen.nl>
Signed-off-by: Dave Airlie <airl...@redhat.com>

---

 src/amd/vulkan/si_cmd_buffer.c | 21 ++++++++++++++++-----
 1 file changed, 16 insertions(+), 5 deletions(-)

diff --git a/src/amd/vulkan/si_cmd_buffer.c b/src/amd/vulkan/si_cmd_buffer.c
index d111c98881..604a5e218a 100644
--- a/src/amd/vulkan/si_cmd_buffer.c
+++ b/src/amd/vulkan/si_cmd_buffer.c
@@ -996,7 +996,9 @@ si_emit_cache_flush(struct radv_cmd_buffer *cmd_buffer)
 /* The max number of bytes that can be copied per packet. */
 static inline unsigned cp_dma_max_byte_count(struct radv_cmd_buffer 
*cmd_buffer)
 {
-       unsigned max = S_414_BYTE_COUNT_GFX6(~0u);
+       unsigned max = cmd_buffer->device->physical_device->rad_info.chip_class 
>= GFX9 ?
+                              S_414_BYTE_COUNT_GFX9(~0u) :
+                              S_414_BYTE_COUNT_GFX6(~0u);
 
        /* make it aligned for optimal performance */
        return max & ~(SI_CPDMA_ALIGNMENT - 1);
@@ -1017,21 +1019,30 @@ static void si_emit_cp_dma(struct radv_cmd_buffer 
*cmd_buffer,
        assert(size <= cp_dma_max_byte_count(cmd_buffer));
 
        radeon_check_space(cmd_buffer->device->ws, cmd_buffer->cs, 9);
-
-       command |= S_414_BYTE_COUNT_GFX6(size);
+       if (cmd_buffer->device->physical_device->rad_info.chip_class >= GFX9)
+               command |= S_414_BYTE_COUNT_GFX9(size);
+       else
+               command |= S_414_BYTE_COUNT_GFX6(size);
 
        /* Sync flags. */
        if (flags & CP_DMA_SYNC)
                header |= S_411_CP_SYNC(1);
        else {
-               command |= S_414_DISABLE_WR_CONFIRM_GFX6(1);
+               if (cmd_buffer->device->physical_device->rad_info.chip_class >= 
GFX9)
+                       command |= S_414_DISABLE_WR_CONFIRM_GFX9(1);
+               else
+                       command |= S_414_DISABLE_WR_CONFIRM_GFX6(1);
        }
 
        if (flags & CP_DMA_RAW_WAIT)
                command |= S_414_RAW_WAIT(1);
 
        /* Src and dst flags. */
-       if (flags & CP_DMA_USE_L2)
+       if (cmd_buffer->device->physical_device->rad_info.chip_class >= GFX9 &&
+           !(flags & CP_DMA_CLEAR) &&
+           src_va == dst_va)
+               header |= S_411_DSL_SEL(V_411_NOWHERE); /* prefetch only */
+       else if (flags & CP_DMA_USE_L2)
                header |= S_411_DSL_SEL(V_411_DST_ADDR_TC_L2);
 
        if (flags & CP_DMA_CLEAR)

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

Reply via email to