Lines Matching refs:enc
52 vn_cs_encoder_sanity_check(struct vn_cs_encoder *enc)
54 assert(enc->buffer_count <= enc->buffer_max);
57 for (uint32_t i = 0; i < enc->buffer_count; i++)
58 total_committed_size += enc->buffers[i].committed_size;
59 assert(enc->total_committed_size == total_committed_size);
61 if (enc->buffer_count) {
63 &enc->buffers[enc->buffer_count - 1];
64 assert(cur_buf->base <= enc->cur && enc->cur <= enc->end &&
65 enc->end <= cur_buf->base + enc->current_buffer_size);
67 assert(enc->cur == enc->end);
69 assert(!enc->current_buffer_size);
70 assert(!enc->cur && !enc->end);
75 vn_cs_encoder_add_buffer(struct vn_cs_encoder *enc,
82 assert(enc->buffer_count < enc->buffer_max);
83 struct vn_cs_encoder_buffer *cur_buf = &enc->buffers[enc->buffer_count++];
91 enc->cur = base;
92 enc->end = base + size;
96 vn_cs_encoder_commit_buffer(struct vn_cs_encoder *enc)
98 assert(enc->buffer_count);
100 &enc->buffers[enc->buffer_count - 1];
101 const size_t written_size = enc->cur - cur_buf->base;
106 enc->total_committed_size += written_size;
111 vn_cs_encoder_gc_buffers(struct vn_cs_encoder *enc)
114 if (enc->storage_type == VN_CS_ENCODER_STORAGE_SHMEM_POOL) {
115 for (uint32_t i = 0; i < enc->buffer_count; i++) {
116 vn_renderer_shmem_unref(enc->instance->renderer,
117 enc->buffers[i].shmem);
120 enc->buffer_count = 0;
121 enc->total_committed_size = 0;
122 enc->current_buffer_size = 0;
124 enc->cur = NULL;
125 enc->end = NULL;
131 assert(enc->buffer_count);
133 &enc->buffers[enc->buffer_count - 1];
134 for (uint32_t i = 0; i < enc->buffer_count - 1; i++)
135 vn_renderer_shmem_unref(enc->instance->renderer, enc->buffers[i].shmem);
139 enc->buffer_count = 0;
140 vn_cs_encoder_add_buffer(enc, cur_buf->shmem, used,
142 enc->current_buffer_size - used);
144 enc->total_committed_size = 0;
148 vn_cs_encoder_init(struct vn_cs_encoder *enc,
156 memset(enc, 0, sizeof(*enc));
157 enc->instance = instance;
158 enc->storage_type = storage_type;
159 enc->min_buffer_size = min_size;
163 vn_cs_encoder_fini(struct vn_cs_encoder *enc)
165 if (unlikely(enc->storage_type == VN_CS_ENCODER_STORAGE_POINTER))
168 for (uint32_t i = 0; i < enc->buffer_count; i++)
169 vn_renderer_shmem_unref(enc->instance->renderer, enc->buffers[i].shmem);
170 if (enc->buffers)
171 free(enc->buffers);
178 vn_cs_encoder_reset(struct vn_cs_encoder *enc)
180 /* enc->error is sticky */
181 if (likely(enc->buffer_count))
182 vn_cs_encoder_gc_buffers(enc);
205 vn_cs_encoder_grow_buffer_array(struct vn_cs_encoder *enc)
207 const uint32_t buf_max = next_array_size(enc->buffer_max, 4);
211 void *bufs = realloc(enc->buffers, sizeof(*enc->buffers) * buf_max);
215 enc->buffers = bufs;
216 enc->buffer_max = buf_max;
225 vn_cs_encoder_reserve_internal(struct vn_cs_encoder *enc, size_t size)
228 if (unlikely(enc->storage_type == VN_CS_ENCODER_STORAGE_POINTER))
231 if (enc->buffer_count >= enc->buffer_max) {
232 if (!vn_cs_encoder_grow_buffer_array(enc))
234 assert(enc->buffer_count < enc->buffer_max);
238 if (likely(enc->buffer_count)) {
239 vn_cs_encoder_commit_buffer(enc);
241 if (enc->storage_type == VN_CS_ENCODER_STORAGE_SHMEM_ARRAY) {
248 &enc->buffers[enc->buffer_count - 1];
250 buf_size = next_buffer_size(0, enc->current_buffer_size, size);
256 buf_size = next_buffer_size(enc->current_buffer_size,
257 enc->min_buffer_size, size);
264 if (enc->storage_type == VN_CS_ENCODER_STORAGE_SHMEM_ARRAY) {
265 shmem = vn_renderer_shmem_create(enc->instance->renderer, buf_size);
268 assert(enc->storage_type == VN_CS_ENCODER_STORAGE_SHMEM_POOL);
270 vn_instance_cs_shmem_alloc(enc->instance, buf_size, &buf_offset);
275 if (unlikely(!enc->instance->renderer->info.supports_blob_id_0)) {
278 vn_instance_submit_roundtrip(enc->instance, &roundtrip);
280 vn_renderer_shmem_unref(enc->instance->renderer, shmem);
284 enc->current_buffer_roundtrip = roundtrip;
287 vn_cs_encoder_add_buffer(enc, shmem, buf_offset,
289 enc->current_buffer_size = buf_size;
291 vn_cs_encoder_sanity_check(enc);
300 vn_cs_encoder_commit(struct vn_cs_encoder *enc)
302 if (likely(enc->buffer_count)) {
303 vn_cs_encoder_commit_buffer(enc);
306 enc->end = enc->cur;
309 vn_cs_encoder_sanity_check(enc);