diff options
-rw-r--r-- | src/freedreno/vulkan/tu_cmd_buffer.c | 4 | ||||
-rw-r--r-- | src/freedreno/vulkan/tu_cs.c | 15 |
2 files changed, 12 insertions, 7 deletions
diff --git a/src/freedreno/vulkan/tu_cmd_buffer.c b/src/freedreno/vulkan/tu_cmd_buffer.c index 29219a0b039..ef07bd6c27b 100644 --- a/src/freedreno/vulkan/tu_cmd_buffer.c +++ b/src/freedreno/vulkan/tu_cmd_buffer.c @@ -1104,9 +1104,7 @@ tu_cmd_prepare_tile_load_ib(struct tu_cmd_buffer *cmd) } /* emit to tile-load sub_cs */ - tu_cs_reserve_space(cmd->device, &sub_cs, tile_load_space); tu6_emit_tile_load(cmd, &sub_cs); - tu_cs_sanity_check(&sub_cs); cmd->state.tile_load_ib = tu_cs_end_sub_stream(&cmd->tile_cs, &sub_cs); @@ -1131,9 +1129,7 @@ tu_cmd_prepare_tile_store_ib(struct tu_cmd_buffer *cmd) } /* emit to tile-store sub_cs */ - tu_cs_reserve_space(cmd->device, &sub_cs, tile_store_space); tu6_emit_tile_store(cmd, &sub_cs); - tu_cs_sanity_check(&sub_cs); cmd->state.tile_store_ib = tu_cs_end_sub_stream(&cmd->tile_cs, &sub_cs); } diff --git a/src/freedreno/vulkan/tu_cs.c b/src/freedreno/vulkan/tu_cs.c index 27fe75b8b50..48242f813ad 100644 --- a/src/freedreno/vulkan/tu_cs.c +++ b/src/freedreno/vulkan/tu_cs.c @@ -221,7 +221,8 @@ tu_cs_begin(struct tu_cs *cs) } /** - * End command packet emission and add an IB entry. + * End command packet emission. This adds an IB entry when \a cs is in + * TU_CS_MODE_GROW mode. */ void tu_cs_end(struct tu_cs *cs) @@ -236,7 +237,9 @@ tu_cs_end(struct tu_cs *cs) * Begin command packet emission to a sub-stream. \a cs must be in * TU_CS_MODE_SUB_STREAM mode. * - * Return \a sub_cs which is in TU_CS_MODE_EXTERNAL mode. + * Return \a sub_cs which is in TU_CS_MODE_EXTERNAL mode. tu_cs_begin and + * tu_cs_reserve_space are implied and \a sub_cs is ready for command packet + * emission. */ VkResult tu_cs_begin_sub_stream(struct tu_device *dev, @@ -252,6 +255,9 @@ tu_cs_begin_sub_stream(struct tu_device *dev, return result; tu_cs_init_external(sub_cs, cs->cur, cs->reserved_end); + tu_cs_begin(sub_cs); + result = tu_cs_reserve_space(dev, sub_cs, size); + assert(result == VK_SUCCESS); return VK_SUCCESS; } @@ -268,7 +274,10 @@ tu_cs_end_sub_stream(struct tu_cs *cs, struct tu_cs *sub_cs) { assert(cs->mode == TU_CS_MODE_SUB_STREAM); assert(cs->bo_count); - assert(sub_cs->cur >= cs->start && sub_cs->cur <= cs->reserved_end); + assert(sub_cs->start == cs->cur && sub_cs->end == cs->reserved_end); + tu_cs_sanity_check(sub_cs); + + tu_cs_end(sub_cs); cs->cur = sub_cs->cur; |