From 57327626dc754be46841997c5c2f777e7f326c40 Mon Sep 17 00:00:00 2001 From: Chia-I Wu Date: Mon, 25 Feb 2019 14:38:34 -0800 Subject: [PATCH] turnip: simplify tu_cs sub-streams usage Let tu_cs_begin_sub_stream imply tu_cs_reserve_space, and tu_cs_end_sub_stream imply tu_cs_sanity_check. Callers are no longer required to call them (but can still do if they choose to). --- src/freedreno/vulkan/tu_cmd_buffer.c | 4 ---- 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; -- 2.30.2