Signed-off-by: Bas Nieuwenhuizen <b...@basnieuwenhuizen.nl>
---
 src/gallium/drivers/radeonsi/si_descriptors.c | 28 ++++++++++++++++++++-------
 1 file changed, 21 insertions(+), 7 deletions(-)

diff --git a/src/gallium/drivers/radeonsi/si_descriptors.c 
b/src/gallium/drivers/radeonsi/si_descriptors.c
index 46d00b4..5e26760 100644
--- a/src/gallium/drivers/radeonsi/si_descriptors.c
+++ b/src/gallium/drivers/radeonsi/si_descriptors.c
@@ -641,14 +641,18 @@ static bool si_upload_vertex_buffer_descriptors(struct 
si_context *sctx)
         * directly through a staging buffer and don't go through
         * the fine-grained upload path.
         */
-       u_upload_alloc(sctx->b.uploader, 0, count * 16, 256, 
&desc->buffer_offset,
-                      (struct pipe_resource**)&desc->buffer, (void**)&ptr);
-       if (!desc->buffer)
-               return false;
 
-       radeon_add_to_buffer_list(&sctx->b, &sctx->b.gfx,
-                             desc->buffer, RADEON_USAGE_READ,
-                             RADEON_PRIO_DESCRIPTORS);
+       if (sctx->ce_ib) {
+               radeon_emit(sctx->ce_ib, PKT3(PKT3_WRITE_CONST_RAM, 4 * count, 
0));
+               radeon_emit(sctx->ce_ib, desc->ce_offset);
+               ptr = sctx->ce_ib->buf + sctx->ce_ib->cdw;
+               sctx->ce_ib->cdw += count * 4;
+       } else {
+               u_upload_alloc(sctx->b.uploader, 0, count * 16, 256, 
&desc->buffer_offset,
+                       (struct pipe_resource**)&desc->buffer, (void**)&ptr);
+               if (!desc->buffer)
+                       return false;
+       }
 
        assert(count <= SI_NUM_VERTEX_BUFFERS);
 
@@ -697,6 +701,16 @@ static bool si_upload_vertex_buffer_descriptors(struct 
si_context *sctx)
                }
        }
 
+       if (sctx->ce_ib) {
+               if (!si_ce_upload(sctx, desc->ce_offset, count * 16,
+                                 &desc->buffer_offset, &desc->buffer))
+                       return false;
+       }
+
+       radeon_add_to_buffer_list(&sctx->b, &sctx->b.gfx,
+                             desc->buffer, RADEON_USAGE_READ,
+                             RADEON_PRIO_DESCRIPTORS);
+
        /* Don't flush the const cache. It would have a very negative effect
         * on performance (confirmed by testing). New descriptors are always
         * uploaded to a fresh new buffer, so I don't think flushing the const
-- 
2.8.0

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

Reply via email to