turnip: specify initial size in tu_cs_init
authorChia-I Wu <olvaffe@gmail.com>
Tue, 29 Jan 2019 00:24:48 +0000 (16:24 -0800)
committerChia-I Wu <olvaffe@gmail.com>
Mon, 11 Mar 2019 17:02:13 +0000 (10:02 -0700)
We will drop size parameter from tu_cs_begin shortly, such that
tu_cs_begin never fails.

src/freedreno/vulkan/tu_cmd_buffer.c
src/freedreno/vulkan/tu_cs.c
src/freedreno/vulkan/tu_cs.h
src/freedreno/vulkan/tu_private.h

index 82a7819966b3ee76aa11243e26346a82d4ac9deb..0544313bf669f41e5de2da949a6b564d27e28721 100644 (file)
@@ -736,7 +736,7 @@ tu_create_cmd_buffer(struct tu_device *device,
    }
 
    tu_bo_list_init(&cmd_buffer->bo_list);
-   tu_cs_init(&cmd_buffer->cs);
+   tu_cs_init(&cmd_buffer->cs, 4096);
 
    *pCommandBuffer = tu_cmd_buffer_to_handle(cmd_buffer);
 
index 108ac707e29786b35384c97dec80673709786114..81bf36e9a872f399c5ec5d7fe1461b0b6bc5f478 100644 (file)
  * Initialize a command stream.
  */
 void
-tu_cs_init(struct tu_cs *cs)
+tu_cs_init(struct tu_cs *cs, uint32_t initial_size)
 {
-   cs->start = cs->cur = cs->end = NULL;
+   memset(cs, 0, sizeof(*cs));
 
-   cs->entry_count = cs->entry_capacity = 0;
-   cs->entries = NULL;
-
-   cs->bo_count = cs->bo_capacity = 0;
-   cs->bos = NULL;
+   cs->next_bo_size = initial_size;
 }
 
 /**
@@ -98,7 +94,7 @@ tu_cs_is_empty(const struct tu_cs *cs)
  * be emitted to the new BO.
  */
 static VkResult
-tu_cs_add_bo(struct tu_device *dev, struct tu_cs *cs, uint32_t byte_size)
+tu_cs_add_bo(struct tu_device *dev, struct tu_cs *cs, uint32_t size)
 {
    /* grow cs->bos if needed */
    if (cs->bo_count == cs->bo_capacity) {
@@ -116,7 +112,7 @@ tu_cs_add_bo(struct tu_device *dev, struct tu_cs *cs, uint32_t byte_size)
    if (!new_bo)
       return VK_ERROR_OUT_OF_HOST_MEMORY;
 
-   VkResult result = tu_bo_init_new(dev, new_bo, byte_size);
+   VkResult result = tu_bo_init_new(dev, new_bo, size * sizeof(uint32_t));
    if (result != VK_SUCCESS) {
       free(new_bo);
       return result;
@@ -196,13 +192,12 @@ tu_cs_begin(struct tu_device *dev, struct tu_cs *cs, uint32_t reserve_size)
    assert(tu_cs_is_empty(cs));
 
    if (tu_cs_get_space(cs) < reserve_size) {
-      uint32_t new_size = MAX2(16384, reserve_size * sizeof(uint32_t));
-      if (cs->bo_count)
-         new_size = MAX2(new_size, cs->bos[cs->bo_count - 1]->size * 2);
-
+      uint32_t new_size = MAX2(cs->next_bo_size, reserve_size);
       VkResult result = tu_cs_add_bo(dev, cs, new_size);
       if (result != VK_SUCCESS)
          return result;
+
+      cs->next_bo_size = new_size * 2;
    }
 
    assert(tu_cs_get_space(cs) >= reserve_size);
index a26b01b0ca2c4ff3202c86e51c0727daccbd7d63..4c184dac8f9a6b0726e7aadac576114da2f89299 100644 (file)
@@ -28,7 +28,7 @@
 #include "registers/adreno_pm4.xml.h"
 
 void
-tu_cs_init(struct tu_cs *cs);
+tu_cs_init(struct tu_cs *cs, uint32_t initial_size);
 void
 tu_cs_finish(struct tu_device *dev, struct tu_cs *cs);
 VkResult
index 3107b05288162f42cc4f6ce629ed422ede490162..cd724ea1b9d2ff03667efddfcbd038f83441809b 100644 (file)
@@ -786,6 +786,8 @@ struct tu_cs
    /* for tu_cs_reserve_space_assert */
    uint32_t *reserved_end;
 
+   uint32_t next_bo_size;
+
    struct tu_cs_entry *entries;
    uint32_t entry_count;
    uint32_t entry_capacity;