Lines Matching refs:cs

30 tu_cs_init(struct tu_cs *cs,  in tu_cs_init()  argument
37 memset(cs, 0, sizeof(*cs)); in tu_cs_init()
39 cs->device = device; in tu_cs_init()
40 cs->mode = mode; in tu_cs_init()
41 cs->next_bo_size = initial_size; in tu_cs_init()
48 tu_cs_init_external(struct tu_cs *cs, struct tu_device *device, in tu_cs_init_external() argument
51 memset(cs, 0, sizeof(*cs)); in tu_cs_init_external()
53 cs->device = device; in tu_cs_init_external()
54 cs->mode = TU_CS_MODE_EXTERNAL; in tu_cs_init_external()
55 cs->start = cs->reserved_end = cs->cur = start; in tu_cs_init_external()
56 cs->end = end; in tu_cs_init_external()
63 tu_cs_finish(struct tu_cs *cs) in tu_cs_finish() argument
65 for (uint32_t i = 0; i < cs->bo_count; ++i) { in tu_cs_finish()
66 tu_bo_finish(cs->device, cs->bos[i]); in tu_cs_finish()
67 free(cs->bos[i]); in tu_cs_finish()
70 free(cs->entries); in tu_cs_finish()
71 free(cs->bos); in tu_cs_finish()
79 tu_cs_get_offset(const struct tu_cs *cs) in tu_cs_get_offset() argument
81 assert(cs->bo_count); in tu_cs_get_offset()
82 return cs->start - (uint32_t *) cs->bos[cs->bo_count - 1]->map; in tu_cs_get_offset()
90 tu_cs_add_bo(struct tu_cs *cs, uint32_t size) in tu_cs_add_bo() argument
93 assert(cs->mode != TU_CS_MODE_EXTERNAL); in tu_cs_add_bo()
96 assert(tu_cs_is_empty(cs)); in tu_cs_add_bo()
99 if (cs->bo_count == cs->bo_capacity) { in tu_cs_add_bo()
100 uint32_t new_capacity = MAX2(4, 2 * cs->bo_capacity); in tu_cs_add_bo()
102 realloc(cs->bos, new_capacity * sizeof(struct tu_bo *)); in tu_cs_add_bo()
106 cs->bo_capacity = new_capacity; in tu_cs_add_bo()
107 cs->bos = new_bos; in tu_cs_add_bo()
115 tu_bo_init_new(cs->device, new_bo, size * sizeof(uint32_t), in tu_cs_add_bo()
122 result = tu_bo_map(cs->device, new_bo); in tu_cs_add_bo()
124 tu_bo_finish(cs->device, new_bo); in tu_cs_add_bo()
129 cs->bos[cs->bo_count++] = new_bo; in tu_cs_add_bo()
131 cs->start = cs->cur = cs->reserved_end = (uint32_t *) new_bo->map; in tu_cs_add_bo()
132 cs->end = cs->start + new_bo->size / sizeof(uint32_t); in tu_cs_add_bo()
141 tu_cs_reserve_entry(struct tu_cs *cs) in tu_cs_reserve_entry() argument
144 assert(cs->mode == TU_CS_MODE_GROW); in tu_cs_reserve_entry()
147 if (cs->entry_count == cs->entry_capacity) { in tu_cs_reserve_entry()
148 uint32_t new_capacity = MAX2(4, cs->entry_capacity * 2); in tu_cs_reserve_entry()
150 realloc(cs->entries, new_capacity * sizeof(struct tu_cs_entry)); in tu_cs_reserve_entry()
154 cs->entry_capacity = new_capacity; in tu_cs_reserve_entry()
155 cs->entries = new_entries; in tu_cs_reserve_entry()
166 tu_cs_add_entry(struct tu_cs *cs) in tu_cs_add_entry() argument
169 assert(cs->mode == TU_CS_MODE_GROW); in tu_cs_add_entry()
172 assert(!tu_cs_is_empty(cs)); in tu_cs_add_entry()
178 assert(cs->bo_count); in tu_cs_add_entry()
179 assert(cs->entry_count < cs->entry_capacity); in tu_cs_add_entry()
182 cs->entries[cs->entry_count++] = (struct tu_cs_entry) { in tu_cs_add_entry()
183 .bo = cs->bos[cs->bo_count - 1], in tu_cs_add_entry()
184 .size = tu_cs_get_size(cs) * sizeof(uint32_t), in tu_cs_add_entry()
185 .offset = tu_cs_get_offset(cs) * sizeof(uint32_t), in tu_cs_add_entry()
188 cs->start = cs->cur; in tu_cs_add_entry()
195 tu_cs_add_entries(struct tu_cs *cs, struct tu_cs *target) in tu_cs_add_entries() argument
199 assert(cs->mode == TU_CS_MODE_GROW); in tu_cs_add_entries()
202 if (!tu_cs_is_empty(cs)) in tu_cs_add_entries()
203 tu_cs_add_entry(cs); in tu_cs_add_entries()
206 result = tu_cs_reserve_entry(cs); in tu_cs_add_entries()
209 cs->entries[cs->entry_count++] = target->entries[i]; in tu_cs_add_entries()
220 tu_cs_begin(struct tu_cs *cs) in tu_cs_begin() argument
222 assert(cs->mode != TU_CS_MODE_SUB_STREAM); in tu_cs_begin()
223 assert(tu_cs_is_empty(cs)); in tu_cs_begin()
231 tu_cs_end(struct tu_cs *cs) in tu_cs_end() argument
233 assert(cs->mode != TU_CS_MODE_SUB_STREAM); in tu_cs_end()
235 if (cs->mode == TU_CS_MODE_GROW && !tu_cs_is_empty(cs)) in tu_cs_end()
236 tu_cs_add_entry(cs); in tu_cs_end()
248 tu_cs_begin_sub_stream(struct tu_cs *cs, uint32_t size, struct tu_cs *sub_cs) in tu_cs_begin_sub_stream() argument
250 assert(cs->mode == TU_CS_MODE_SUB_STREAM); in tu_cs_begin_sub_stream()
253 VkResult result = tu_cs_reserve_space(cs, size); in tu_cs_begin_sub_stream()
257 tu_cs_init_external(sub_cs, cs->device, cs->cur, cs->reserved_end); in tu_cs_begin_sub_stream()
271 tu_cs_alloc(struct tu_cs *cs, in tu_cs_alloc() argument
276 assert(cs->mode == TU_CS_MODE_SUB_STREAM); in tu_cs_alloc()
284 VkResult result = tu_cs_reserve_space(cs, count * size + (size-1)); in tu_cs_alloc()
288 struct tu_bo *bo = cs->bos[cs->bo_count - 1]; in tu_cs_alloc()
289 size_t offset = align(tu_cs_get_offset(cs), size); in tu_cs_alloc()
294 cs->start = cs->cur = (uint32_t*) bo->map + offset + count * size; in tu_cs_alloc()
307 tu_cs_end_sub_stream(struct tu_cs *cs, struct tu_cs *sub_cs) in tu_cs_end_sub_stream() argument
309 assert(cs->mode == TU_CS_MODE_SUB_STREAM); in tu_cs_end_sub_stream()
310 assert(cs->bo_count); in tu_cs_end_sub_stream()
311 assert(sub_cs->start == cs->cur && sub_cs->end == cs->reserved_end); in tu_cs_end_sub_stream()
316 cs->cur = sub_cs->cur; in tu_cs_end_sub_stream()
319 .bo = cs->bos[cs->bo_count - 1], in tu_cs_end_sub_stream()
320 .size = tu_cs_get_size(cs) * sizeof(uint32_t), in tu_cs_end_sub_stream()
321 .offset = tu_cs_get_offset(cs) * sizeof(uint32_t), in tu_cs_end_sub_stream()
324 cs->start = cs->cur; in tu_cs_end_sub_stream()
334 tu_cs_reserve_space(struct tu_cs *cs, uint32_t reserved_size) in tu_cs_reserve_space() argument
336 if (tu_cs_get_space(cs) < reserved_size) { in tu_cs_reserve_space()
337 if (cs->mode == TU_CS_MODE_EXTERNAL) { in tu_cs_reserve_space()
343 if (!tu_cs_is_empty(cs)) { in tu_cs_reserve_space()
345 assert(cs->mode != TU_CS_MODE_SUB_STREAM); in tu_cs_reserve_space()
347 tu_cs_add_entry(cs); in tu_cs_reserve_space()
350 if (cs->cond_flags) { in tu_cs_reserve_space()
352 *cs->cond_dwords = cs->cur - cs->cond_dwords - 1; in tu_cs_reserve_space()
359 uint32_t new_size = MAX2(cs->next_bo_size, reserved_size); in tu_cs_reserve_space()
360 VkResult result = tu_cs_add_bo(cs, new_size); in tu_cs_reserve_space()
365 if (cs->cond_flags) { in tu_cs_reserve_space()
366 cs->reserved_end = cs->cur + reserved_size; in tu_cs_reserve_space()
368 tu_cs_emit_pkt7(cs, CP_COND_REG_EXEC, 2); in tu_cs_reserve_space()
369 tu_cs_emit(cs, cs->cond_flags); in tu_cs_reserve_space()
371 cs->cond_dwords = cs->cur; in tu_cs_reserve_space()
374 tu_cs_emit(cs, CP_COND_REG_EXEC_1_DWORDS(0)); in tu_cs_reserve_space()
381 if (cs->next_bo_size < new_size) in tu_cs_reserve_space()
382 cs->next_bo_size = new_size; in tu_cs_reserve_space()
385 assert(tu_cs_get_space(cs) >= reserved_size); in tu_cs_reserve_space()
386 cs->reserved_end = cs->cur + reserved_size; in tu_cs_reserve_space()
388 if (cs->mode == TU_CS_MODE_GROW) { in tu_cs_reserve_space()
390 return tu_cs_reserve_entry(cs); in tu_cs_reserve_space()
401 tu_cs_reset(struct tu_cs *cs) in tu_cs_reset() argument
403 if (cs->mode == TU_CS_MODE_EXTERNAL) { in tu_cs_reset()
404 assert(!cs->bo_count && !cs->entry_count); in tu_cs_reset()
405 cs->reserved_end = cs->cur = cs->start; in tu_cs_reset()
409 for (uint32_t i = 0; i + 1 < cs->bo_count; ++i) { in tu_cs_reset()
410 tu_bo_finish(cs->device, cs->bos[i]); in tu_cs_reset()
411 free(cs->bos[i]); in tu_cs_reset()
414 if (cs->bo_count) { in tu_cs_reset()
415 cs->bos[0] = cs->bos[cs->bo_count - 1]; in tu_cs_reset()
416 cs->bo_count = 1; in tu_cs_reset()
418 cs->start = cs->cur = cs->reserved_end = (uint32_t *) cs->bos[0]->map; in tu_cs_reset()
419 cs->end = cs->start + cs->bos[0]->size / sizeof(uint32_t); in tu_cs_reset()
422 cs->entry_count = 0; in tu_cs_reset()