radv: fix logic for when to flush on multiple CS emission
authorDave Airlie <airlied@redhat.com>
Sun, 19 Mar 2017 23:00:36 +0000 (09:00 +1000)
committerDave Airlie <airlied@redhat.com>
Mon, 20 Mar 2017 04:17:43 +0000 (14:17 +1000)
The current code evaluated to always true, we only want to flush
on the first submit. Rename the variable to do_flush, and only
emit on the first iteration.

Reviewed-by: Bas Nieuwenhuizen <bas@basnieuwenhuizen.nl>
Signed-off-by: Dave Airlie <airlied@redhat.com>
src/amd/vulkan/radv_device.c

index 893dceae047d2ed3a5f0d91df2d037a1592eca57..106f7064d438e974c7d83905b49d2d4b70e82751 100644 (file)
@@ -1565,8 +1565,8 @@ VkResult radv_QueueSubmit(
 
        for (uint32_t i = 0; i < submitCount; i++) {
                struct radeon_winsys_cs **cs_array;
-               bool has_flush = !submitCount;
-               bool can_patch = !has_flush;
+               bool do_flush = !i;
+               bool can_patch = !do_flush;
                uint32_t advance;
 
                if (!pSubmits[i].commandBufferCount) {
@@ -1589,9 +1589,9 @@ VkResult radv_QueueSubmit(
                }
 
                cs_array = malloc(sizeof(struct radeon_winsys_cs *) *
-                                               (pSubmits[i].commandBufferCount + has_flush));
+                                               (pSubmits[i].commandBufferCount + do_flush));
 
-               if(has_flush)
+               if(do_flush)
                        cs_array[0] = queue->device->flush_cs[queue->queue_family_index];
 
                for (uint32_t j = 0; j < pSubmits[i].commandBufferCount; j++) {
@@ -1599,16 +1599,16 @@ VkResult radv_QueueSubmit(
                                         pSubmits[i].pCommandBuffers[j]);
                        assert(cmd_buffer->level == VK_COMMAND_BUFFER_LEVEL_PRIMARY);
 
-                       cs_array[j + has_flush] = cmd_buffer->cs;
+                       cs_array[j + do_flush] = cmd_buffer->cs;
                        if ((cmd_buffer->usage_flags & VK_COMMAND_BUFFER_USAGE_SIMULTANEOUS_USE_BIT))
                                can_patch = false;
                }
 
-               for (uint32_t j = 0; j < pSubmits[i].commandBufferCount + has_flush; j += advance) {
+               for (uint32_t j = 0; j < pSubmits[i].commandBufferCount + do_flush; j += advance) {
                        advance = MIN2(max_cs_submission,
-                                      pSubmits[i].commandBufferCount + has_flush - j);
+                                      pSubmits[i].commandBufferCount + do_flush - j);
                        bool b = j == 0;
-                       bool e = j + advance == pSubmits[i].commandBufferCount + has_flush;
+                       bool e = j + advance == pSubmits[i].commandBufferCount + do_flush;
 
                        if (queue->device->trace_bo)
                                *queue->device->trace_id_ptr = 0;