diff options
Diffstat (limited to 'src')
-rw-r--r-- | src/freedreno/vulkan/tu_cmd_buffer.c | 5 | ||||
-rw-r--r-- | src/freedreno/vulkan/tu_cs.c | 20 | ||||
-rw-r--r-- | src/freedreno/vulkan/tu_private.h | 2 |
3 files changed, 16 insertions, 11 deletions
diff --git a/src/freedreno/vulkan/tu_cmd_buffer.c b/src/freedreno/vulkan/tu_cmd_buffer.c index 36bcd8af8fd..4600f1ffa2f 100644 --- a/src/freedreno/vulkan/tu_cmd_buffer.c +++ b/src/freedreno/vulkan/tu_cmd_buffer.c @@ -459,7 +459,10 @@ tu_EndCommandBuffer(VkCommandBuffer commandBuffer) { TU_FROM_HANDLE(tu_cmd_buffer, cmd_buffer, commandBuffer); - tu_cs_end(&cmd_buffer->cs); + VkResult result = tu_cs_end(&cmd_buffer->cs); + if (result != VK_SUCCESS) + cmd_buffer->record_result = result; + cmd_buffer->status = TU_CMD_BUFFER_STATUS_EXECUTABLE; return cmd_buffer->record_result; diff --git a/src/freedreno/vulkan/tu_cs.c b/src/freedreno/vulkan/tu_cs.c index 155a5df7512..e85925f3a15 100644 --- a/src/freedreno/vulkan/tu_cs.c +++ b/src/freedreno/vulkan/tu_cs.c @@ -127,29 +127,31 @@ tu_cs_begin(struct tu_device *dev, struct tu_cs *cs, uint32_t reserve_size) VkResult tu_cs_end(struct tu_cs *cs) { + /* no command packet at all */ if (cs->start == cs->cur) return VK_SUCCESS; + /* grow cs->entries if needed */ if (cs->entry_capacity == cs->entry_count) { uint32_t new_capacity = MAX2(cs->entry_capacity * 2, 4); struct tu_cs_entry *new_entries = realloc(cs->entries, new_capacity * sizeof(struct tu_cs_entry)); if (!new_entries) - abort(); /* TODO */ + return VK_ERROR_OUT_OF_HOST_MEMORY; cs->entries = new_entries; cs->entry_capacity = new_capacity; } assert(cs->bo_count); - - struct tu_cs_entry entry; - entry.bo = cs->bos[cs->bo_count - 1]; - entry.size = (cs->cur - cs->start) * sizeof(uint32_t); - entry.offset = (cs->start - (uint32_t *) entry.bo->map) * sizeof(uint32_t); - - cs->entries[cs->entry_count] = entry; - ++cs->entry_count; + const struct tu_bo *bo = cs->bos[cs->bo_count - 1]; + + /* add an entry for [cs->start, cs->cur] */ + cs->entries[cs->entry_count++] = (struct tu_cs_entry) { + .bo = bo, + .size = (cs->cur - cs->start) * sizeof(uint32_t), + .offset = (cs->start - (uint32_t *) bo->map) * sizeof(uint32_t), + }; return VK_SUCCESS; } diff --git a/src/freedreno/vulkan/tu_private.h b/src/freedreno/vulkan/tu_private.h index 7a65bc38585..31f9d23fa4c 100644 --- a/src/freedreno/vulkan/tu_private.h +++ b/src/freedreno/vulkan/tu_private.h @@ -720,7 +720,7 @@ uint32_t tu_bo_list_add(struct tu_bo_list *list, struct tu_cs_entry { /* No ownership */ - struct tu_bo *bo; + const struct tu_bo *bo; uint32_t size; uint64_t offset; |