Lines Matching refs:cs
111 tu_cs_init(struct tu_cs *cs,
117 tu_cs_init_external(struct tu_cs *cs, struct tu_device *device,
121 tu_cs_init_suballoc(struct tu_cs *cs, struct tu_device *device,
125 tu_cs_finish(struct tu_cs *cs);
128 tu_cs_begin(struct tu_cs *cs);
131 tu_cs_end(struct tu_cs *cs);
134 tu_cs_begin_sub_stream(struct tu_cs *cs, uint32_t size, struct tu_cs *sub_cs);
137 tu_cs_alloc(struct tu_cs *cs,
143 tu_cs_end_sub_stream(struct tu_cs *cs, struct tu_cs *sub_cs);
146 tu_cs_end_draw_state(struct tu_cs *cs, struct tu_cs *sub_cs)
148 struct tu_cs_entry entry = tu_cs_end_sub_stream(cs, sub_cs);
156 tu_cs_reserve_space(struct tu_cs *cs, uint32_t reserved_size);
159 tu_cs_draw_state(struct tu_cs *sub_cs, struct tu_cs *cs, uint32_t size)
165 tu_cs_init_external(cs, sub_cs->device, memory.map, memory.map + size);
166 tu_cs_begin(cs);
167 tu_cs_reserve_space(cs, size);
176 tu_cs_reset(struct tu_cs *cs);
179 tu_cs_add_entries(struct tu_cs *cs, struct tu_cs *target);
186 tu_cs_get_size(const struct tu_cs *cs)
188 return cs->cur - cs->start;
196 tu_cs_is_empty(const struct tu_cs *cs)
198 return tu_cs_get_size(cs) == 0;
202 * Discard all entries. This allows \a cs to be reused while keeping the
206 tu_cs_discard_entries(struct tu_cs *cs)
208 assert(cs->mode == TU_CS_MODE_GROW);
209 cs->entry_count = 0;
216 tu_cs_get_call_size(const struct tu_cs *cs)
218 assert(cs->mode == TU_CS_MODE_GROW);
220 return cs->entry_count * 4;
227 tu_cs_sanity_check(const struct tu_cs *cs)
229 assert(cs->start <= cs->cur);
230 assert(cs->cur <= cs->reserved_end);
231 assert(cs->reserved_end <= cs->end);
235 tu_cs_emit_sync_breadcrumb(struct tu_cs *cs, uint8_t opcode, uint16_t cnt);
241 tu_cs_emit(struct tu_cs *cs, uint32_t value)
243 assert(cs->cur < cs->reserved_end);
244 *cs->cur = value;
245 ++cs->cur;
248 cs->breadcrumb_emit_after--;
249 if (cs->breadcrumb_emit_after == 0)
250 tu_cs_emit_sync_breadcrumb(cs, -1, 0);
258 tu_cs_emit_array(struct tu_cs *cs, const uint32_t *values, uint32_t length)
260 assert(cs->cur + length <= cs->reserved_end);
261 memcpy(cs->cur, values, sizeof(uint32_t) * length);
262 cs->cur += length;
269 tu_cs_get_space(const struct tu_cs *cs)
271 return cs->end - cs->cur;
275 tu_cs_reserve(struct tu_cs *cs, uint32_t reserved_size)
277 if (cs->mode != TU_CS_MODE_GROW) {
278 assert(tu_cs_get_space(cs) >= reserved_size);
279 assert(cs->reserved_end == cs->end);
283 if (tu_cs_get_space(cs) >= reserved_size &&
284 cs->entry_count < cs->entry_capacity) {
285 cs->reserved_end = cs->cur + reserved_size;
289 ASSERTED VkResult result = tu_cs_reserve_space(cs, reserved_size);
298 tu_cs_emit_pkt4(struct tu_cs *cs, uint16_t regindx, uint16_t cnt)
300 tu_cs_reserve(cs, cnt + 1);
301 tu_cs_emit(cs, pm4_pkt4_hdr(regindx, cnt));
308 tu_cs_emit_pkt7(struct tu_cs *cs, uint8_t opcode, uint16_t cnt)
311 tu_cs_emit_sync_breadcrumb(cs, opcode, cnt + 1);
314 tu_cs_reserve(cs, cnt + 1);
315 tu_cs_emit(cs, pm4_pkt7_hdr(opcode, cnt));
319 tu_cs_emit_wfi(struct tu_cs *cs)
321 tu_cs_emit_pkt7(cs, CP_WAIT_FOR_IDLE, 0);
325 tu_cs_emit_qw(struct tu_cs *cs, uint64_t value)
327 tu_cs_emit(cs, (uint32_t) value);
328 tu_cs_emit(cs, (uint32_t) (value >> 32));
332 tu_cs_emit_write_reg(struct tu_cs *cs, uint16_t reg, uint32_t value)
334 tu_cs_emit_pkt4(cs, reg, 1);
335 tu_cs_emit(cs, value);
342 tu_cs_emit_ib(struct tu_cs *cs, const struct tu_cs_entry *entry)
349 tu_cs_emit_pkt7(cs, CP_INDIRECT_BUFFER, 3);
350 tu_cs_emit_qw(cs, entry->bo->iova + entry->offset);
351 tu_cs_emit(cs, entry->size / sizeof(uint32_t));
356 tu_cs_emit_state_ib(struct tu_cs *cs, struct tu_draw_state state)
359 tu_cs_emit_pkt7(cs, CP_INDIRECT_BUFFER, 3);
360 tu_cs_emit_qw(cs, state.iova);
361 tu_cs_emit(cs, state.size);
370 tu_cs_emit_call(struct tu_cs *cs, const struct tu_cs *target)
374 tu_cs_emit_ib(cs, target->entries + i);
381 tu_cond_exec_start(struct tu_cs *cs, uint32_t cond_flags)
383 assert(cs->mode == TU_CS_MODE_GROW);
384 assert(cs->cond_stack_depth < TU_COND_EXEC_STACK_SIZE);
386 tu_cs_emit_pkt7(cs, CP_COND_REG_EXEC, 2);
387 tu_cs_emit(cs, cond_flags);
389 cs->cond_flags[cs->cond_stack_depth] = cond_flags;
390 cs->cond_dwords[cs->cond_stack_depth] = cs->cur;
393 tu_cs_emit(cs, CP_COND_REG_EXEC_1_DWORDS(0));
395 cs->cond_stack_depth++;
403 tu_cond_exec_end(struct tu_cs *cs)
405 assert(cs->cond_stack_depth > 0);
406 cs->cond_stack_depth--;
408 cs->cond_flags[cs->cond_stack_depth] = 0;
410 *cs->cond_dwords[cs->cond_stack_depth] =
411 cs->cur - cs->cond_dwords[cs->cond_stack_depth] - 1;
472 #define tu_cs_emit_regs(cs, ...) do { \
479 tu_cs_emit_pkt4((cs), regs[0].reg, count); \
480 uint32_t *p = (cs)->cur; \
497 (cs)->cur = p; \