Lines Matching defs:enc

12 vn_cs_encoder_sanity_check(struct vn_cs_encoder *enc)
14 assert(enc->buffer_count <= enc->buffer_max);
17 for (uint32_t i = 0; i < enc->buffer_count; i++)
18 total_committed_size += enc->buffers[i].committed_size;
19 assert(enc->total_committed_size == total_committed_size);
21 if (enc->buffer_count) {
23 &enc->buffers[enc->buffer_count - 1];
24 assert(cur_buf->base <= enc->cur && enc->cur <= enc->end &&
25 enc->end <= cur_buf->base + enc->current_buffer_size);
27 assert(enc->cur == enc->end);
29 assert(!enc->current_buffer_size);
30 assert(!enc->cur && !enc->end);
35 vn_cs_encoder_add_buffer(struct vn_cs_encoder *enc,
42 assert(enc->buffer_count < enc->buffer_max);
43 struct vn_cs_encoder_buffer *cur_buf = &enc->buffers[enc->buffer_count++];
51 enc->cur = base;
52 enc->end = base + size;
56 vn_cs_encoder_commit_buffer(struct vn_cs_encoder *enc)
58 assert(enc->buffer_count);
60 &enc->buffers[enc->buffer_count - 1];
61 const size_t written_size = enc->cur - cur_buf->base;
66 enc->total_committed_size += written_size;
71 vn_cs_encoder_gc_buffers(struct vn_cs_encoder *enc)
74 assert(enc->buffer_count);
76 &enc->buffers[enc->buffer_count - 1];
77 for (uint32_t i = 0; i < enc->buffer_count - 1; i++)
78 vn_renderer_shmem_unref(enc->instance->renderer, enc->buffers[i].shmem);
82 enc->buffer_count = 0;
83 vn_cs_encoder_add_buffer(enc, cur_buf->shmem, used,
85 enc->current_buffer_size - used);
87 enc->total_committed_size = 0;
91 vn_cs_encoder_init_indirect(struct vn_cs_encoder *enc,
95 memset(enc, 0, sizeof(*enc));
96 enc->instance = instance;
97 enc->min_buffer_size = min_size;
98 enc->indirect = true;
102 vn_cs_encoder_fini(struct vn_cs_encoder *enc)
104 if (unlikely(!enc->indirect))
107 for (uint32_t i = 0; i < enc->buffer_count; i++)
108 vn_renderer_shmem_unref(enc->instance->renderer, enc->buffers[i].shmem);
109 if (enc->buffers)
110 free(enc->buffers);
117 vn_cs_encoder_reset(struct vn_cs_encoder *enc)
119 /* enc->error is sticky */
120 if (likely(enc->buffer_count))
121 vn_cs_encoder_gc_buffers(enc);
144 vn_cs_encoder_grow_buffer_array(struct vn_cs_encoder *enc)
146 const uint32_t buf_max = next_array_size(enc->buffer_max, 4);
150 void *bufs = realloc(enc->buffers, sizeof(*enc->buffers) * buf_max);
154 enc->buffers = bufs;
155 enc->buffer_max = buf_max;
164 vn_cs_encoder_reserve_internal(struct vn_cs_encoder *enc, size_t size)
166 if (unlikely(!enc->indirect))
169 if (enc->buffer_count >= enc->buffer_max) {
170 if (!vn_cs_encoder_grow_buffer_array(enc))
172 assert(enc->buffer_count < enc->buffer_max);
176 if (likely(enc->buffer_count)) {
177 vn_cs_encoder_commit_buffer(enc);
181 &enc->buffers[enc->buffer_count - 1];
183 buf_size = next_buffer_size(0, enc->current_buffer_size, size);
187 buf_size = next_buffer_size(enc->current_buffer_size,
188 enc->min_buffer_size, size);
194 vn_renderer_shmem_create(enc->instance->renderer, buf_size);
199 VkResult result = vn_instance_submit_roundtrip(enc->instance, &roundtrip);
201 vn_renderer_shmem_unref(enc->instance->renderer, shmem);
205 vn_cs_encoder_add_buffer(enc, shmem, 0, shmem->mmap_ptr, buf_size);
206 enc->current_buffer_size = buf_size;
207 enc->current_buffer_roundtrip = roundtrip;
209 vn_cs_encoder_sanity_check(enc);
218 vn_cs_encoder_commit(struct vn_cs_encoder *enc)
220 if (likely(enc->buffer_count)) {
221 vn_cs_encoder_commit_buffer(enc);
224 enc->end = enc->cur;
227 vn_cs_encoder_sanity_check(enc);