From: Nicolai Hähnle <[email protected]>

This will be re-used for shader buffers.
---
 src/gallium/drivers/radeonsi/si_descriptors.c | 41 +++++++++++++++++----------
 1 file changed, 26 insertions(+), 15 deletions(-)

diff --git a/src/gallium/drivers/radeonsi/si_descriptors.c 
b/src/gallium/drivers/radeonsi/si_descriptors.c
index 815b87b..c7c30bf 100644
--- a/src/gallium/drivers/radeonsi/si_descriptors.c
+++ b/src/gallium/drivers/radeonsi/si_descriptors.c
@@ -977,6 +977,30 @@ void si_update_compressed_colortex_masks(struct si_context 
*sctx)
 
 /* BUFFER DISCARD/INVALIDATION */
 
+/** Reset descriptors of buffer resources after \p buf has been invalidated. */
+static void si_reset_buffer_resources(struct si_context *sctx,
+                                     struct si_buffer_resources *buffers,
+                                     struct pipe_resource *buf,
+                                     uint64_t old_va)
+{
+       uint64_t mask = buffers->desc.enabled_mask;
+
+       while (mask) {
+               unsigned i = u_bit_scan64(&mask);
+               if (buffers->buffers[i] == buf) {
+                       si_desc_reset_buffer_offset(&sctx->b.b,
+                                                   buffers->desc.list + i*4,
+                                                   old_va, buf);
+                       buffers->desc.list_dirty = true;
+
+                       radeon_add_to_buffer_list(&sctx->b, &sctx->b.gfx,
+                                               (struct r600_resource *)buf,
+                                               buffers->shader_usage,
+                                               buffers->priority);
+               }
+       }
+}
+
 /* Reallocate a buffer a update all resource bindings where the buffer is
  * bound.
  *
@@ -1050,21 +1074,8 @@ static void si_invalidate_buffer(struct pipe_context 
*ctx, struct pipe_resource
 
        /* Constant buffers. */
        for (shader = 0; shader < SI_NUM_SHADERS; shader++) {
-               struct si_buffer_resources *buffers = 
&sctx->const_buffers[shader];
-               uint64_t mask = buffers->desc.enabled_mask;
-
-               while (mask) {
-                       unsigned i = u_bit_scan64(&mask);
-                       if (buffers->buffers[i] == buf) {
-                               si_desc_reset_buffer_offset(ctx, 
buffers->desc.list + i*4,
-                                                           old_va, buf);
-                               buffers->desc.list_dirty = true;
-
-                               radeon_add_to_buffer_list(&sctx->b, 
&sctx->b.gfx,
-                                                     rbuffer, 
buffers->shader_usage,
-                                                     buffers->priority);
-                       }
-               }
+               si_reset_buffer_resources(sctx, &sctx->const_buffers[shader],
+                                         buf, old_va);
        }
 
        /* Texture buffers - update virtual addresses in sampler view 
descriptors. */
-- 
2.5.0

_______________________________________________
mesa-dev mailing list
[email protected]
https://lists.freedesktop.org/mailman/listinfo/mesa-dev

Reply via email to