• Home
  • Raw
  • Download

Lines Matching full:bs

30 zink_reset_batch_state(struct zink_context *ctx, struct zink_batch_state *bs)  in zink_reset_batch_state()  argument
34 VkResult result = VKSCR(ResetCommandPool)(screen->dev, bs->cmdpool, 0); in zink_reset_batch_state()
39 set_foreach_remove(bs->resources, entry) { in zink_reset_batch_state()
41 if (!zink_resource_object_usage_unset(obj, bs)) { in zink_reset_batch_state()
46 util_dynarray_append(&bs->unref_resources, struct zink_resource_object*, obj); in zink_reset_batch_state()
50 while (util_dynarray_contains(&bs->bindless_releases[i], uint32_t)) { in zink_reset_batch_state()
51 uint32_t handle = util_dynarray_pop(&bs->bindless_releases[i], uint32_t); in zink_reset_batch_state()
58 set_foreach_remove(bs->active_queries, entry) { in zink_reset_batch_state()
60 zink_prune_query(screen, bs, query); in zink_reset_batch_state()
63 set_foreach_remove(bs->surfaces, entry) { in zink_reset_batch_state()
65 zink_batch_usage_unset(&surf->batch_uses, bs); in zink_reset_batch_state()
68 set_foreach_remove(bs->bufferviews, entry) { in zink_reset_batch_state()
70 zink_batch_usage_unset(&buffer_view->batch_uses, bs); in zink_reset_batch_state()
74 util_dynarray_foreach(&bs->dead_framebuffers, struct zink_framebuffer*, fb) { in zink_reset_batch_state()
77 util_dynarray_clear(&bs->dead_framebuffers); in zink_reset_batch_state()
78 util_dynarray_foreach(&bs->zombie_samplers, VkSampler, samp) { in zink_reset_batch_state()
81 util_dynarray_clear(&bs->zombie_samplers); in zink_reset_batch_state()
82 util_dynarray_clear(&bs->persistent_resources); in zink_reset_batch_state()
84 screen->batch_descriptor_reset(screen, bs); in zink_reset_batch_state()
86 set_foreach_remove(bs->programs, entry) { in zink_reset_batch_state()
88 zink_batch_usage_unset(&pg->batch_uses, bs); in zink_reset_batch_state()
92 bs->resource_size = 0; in zink_reset_batch_state()
93 bs->signal_semaphore = VK_NULL_HANDLE; in zink_reset_batch_state()
94 while (util_dynarray_contains(&bs->wait_semaphores, VkSemaphore)) in zink_reset_batch_state()
95 … VKSCR(DestroySemaphore)(screen->dev, util_dynarray_pop(&bs->wait_semaphores, VkSemaphore), NULL); in zink_reset_batch_state()
96 util_dynarray_clear(&bs->wait_semaphore_stages); in zink_reset_batch_state()
98 bs->present = VK_NULL_HANDLE; in zink_reset_batch_state()
99 while (util_dynarray_contains(&bs->acquires, VkSemaphore)) in zink_reset_batch_state()
100 VKSCR(DestroySemaphore)(screen->dev, util_dynarray_pop(&bs->acquires, VkSemaphore), NULL); in zink_reset_batch_state()
101 bs->swapchain = NULL; in zink_reset_batch_state()
103 while (util_dynarray_contains(&bs->dead_swapchains, VkImageView)) in zink_reset_batch_state()
104 … VKSCR(DestroyImageView)(screen->dev, util_dynarray_pop(&bs->dead_swapchains, VkImageView), NULL); in zink_reset_batch_state()
109 bs->fence.submitted = false; in zink_reset_batch_state()
110 bs->has_barriers = false; in zink_reset_batch_state()
111 if (bs->fence.batch_id) in zink_reset_batch_state()
112 zink_screen_update_last_finished(screen, bs->fence.batch_id); in zink_reset_batch_state()
113 bs->submit_count++; in zink_reset_batch_state()
114 bs->fence.batch_id = 0; in zink_reset_batch_state()
115 bs->usage.usage = 0; in zink_reset_batch_state()
116 bs->next = NULL; in zink_reset_batch_state()
120 unref_resources(struct zink_screen *screen, struct zink_batch_state *bs) in unref_resources() argument
122 while (util_dynarray_contains(&bs->unref_resources, struct zink_resource_object*)) { in unref_resources()
123 …struct zink_resource_object *obj = util_dynarray_pop(&bs->unref_resources, struct zink_resource_ob… in unref_resources()
129 zink_clear_batch_state(struct zink_context *ctx, struct zink_batch_state *bs) in zink_clear_batch_state() argument
131 bs->fence.completed = true; in zink_clear_batch_state()
132 zink_reset_batch_state(ctx, bs); in zink_clear_batch_state()
133 unref_resources(zink_screen(ctx->base.screen), bs); in zink_clear_batch_state()
139 const struct zink_batch_state *bs = ctx->batch_states; in pop_batch_state() local
140 ctx->batch_states = bs->next; in pop_batch_state()
142 if (ctx->last_fence == &bs->fence) in pop_batch_state()
150 struct zink_batch_state *bs = ctx->batch_states; in zink_batch_reset_all() local
151 bs->fence.completed = true; in zink_batch_reset_all()
153 zink_reset_batch_state(ctx, bs); in zink_batch_reset_all()
154 util_dynarray_append(&ctx->free_batch_states, struct zink_batch_state *, bs); in zink_batch_reset_all()
159 zink_batch_state_destroy(struct zink_screen *screen, struct zink_batch_state *bs) in zink_batch_state_destroy() argument
161 if (!bs) in zink_batch_state_destroy()
164 util_queue_fence_destroy(&bs->flush_completed); in zink_batch_state_destroy()
166 cnd_destroy(&bs->usage.flush); in zink_batch_state_destroy()
167 mtx_destroy(&bs->usage.mtx); in zink_batch_state_destroy()
169 if (bs->cmdbuf) in zink_batch_state_destroy()
170 VKSCR(FreeCommandBuffers)(screen->dev, bs->cmdpool, 1, &bs->cmdbuf); in zink_batch_state_destroy()
171 if (bs->barrier_cmdbuf) in zink_batch_state_destroy()
172 VKSCR(FreeCommandBuffers)(screen->dev, bs->cmdpool, 1, &bs->barrier_cmdbuf); in zink_batch_state_destroy()
173 if (bs->cmdpool) in zink_batch_state_destroy()
174 VKSCR(DestroyCommandPool)(screen->dev, bs->cmdpool, NULL); in zink_batch_state_destroy()
176 util_dynarray_fini(&bs->zombie_samplers); in zink_batch_state_destroy()
177 util_dynarray_fini(&bs->dead_framebuffers); in zink_batch_state_destroy()
178 util_dynarray_fini(&bs->unref_resources); in zink_batch_state_destroy()
179 util_dynarray_fini(&bs->bindless_releases[0]); in zink_batch_state_destroy()
180 util_dynarray_fini(&bs->bindless_releases[1]); in zink_batch_state_destroy()
181 util_dynarray_fini(&bs->acquires); in zink_batch_state_destroy()
182 util_dynarray_fini(&bs->acquire_flags); in zink_batch_state_destroy()
183 util_dynarray_fini(&bs->dead_swapchains); in zink_batch_state_destroy()
184 _mesa_set_destroy(bs->surfaces, NULL); in zink_batch_state_destroy()
185 _mesa_set_destroy(bs->bufferviews, NULL); in zink_batch_state_destroy()
186 _mesa_set_destroy(bs->programs, NULL); in zink_batch_state_destroy()
187 _mesa_set_destroy(bs->active_queries, NULL); in zink_batch_state_destroy()
188 screen->batch_descriptor_deinit(screen, bs); in zink_batch_state_destroy()
189 ralloc_free(bs); in zink_batch_state_destroy()
196 struct zink_batch_state *bs = rzalloc(NULL, struct zink_batch_state); in create_batch_state() local
200 VkResult result = VKSCR(CreateCommandPool)(screen->dev, &cpci, NULL, &bs->cmdpool); in create_batch_state()
208 cbai.commandPool = bs->cmdpool; in create_batch_state()
212 result = VKSCR(AllocateCommandBuffers)(screen->dev, &cbai, &bs->cmdbuf); in create_batch_state()
218 result = VKSCR(AllocateCommandBuffers)(screen->dev, &cbai, &bs->barrier_cmdbuf); in create_batch_state()
225 ptr = _mesa_pointer_set_create(bs); \ in create_batch_state()
229 bs->ctx = ctx; in create_batch_state()
231 SET_CREATE_OR_FAIL(bs->resources); in create_batch_state()
232 SET_CREATE_OR_FAIL(bs->surfaces); in create_batch_state()
233 SET_CREATE_OR_FAIL(bs->bufferviews); in create_batch_state()
234 SET_CREATE_OR_FAIL(bs->programs); in create_batch_state()
235 SET_CREATE_OR_FAIL(bs->active_queries); in create_batch_state()
236 util_dynarray_init(&bs->wait_semaphores, NULL); in create_batch_state()
237 util_dynarray_init(&bs->wait_semaphore_stages, NULL); in create_batch_state()
238 util_dynarray_init(&bs->zombie_samplers, NULL); in create_batch_state()
239 util_dynarray_init(&bs->dead_framebuffers, NULL); in create_batch_state()
240 util_dynarray_init(&bs->persistent_resources, NULL); in create_batch_state()
241 util_dynarray_init(&bs->unref_resources, NULL); in create_batch_state()
242 util_dynarray_init(&bs->acquires, NULL); in create_batch_state()
243 util_dynarray_init(&bs->acquire_flags, NULL); in create_batch_state()
244 util_dynarray_init(&bs->dead_swapchains, NULL); in create_batch_state()
245 util_dynarray_init(&bs->bindless_releases[0], NULL); in create_batch_state()
246 util_dynarray_init(&bs->bindless_releases[1], NULL); in create_batch_state()
248 cnd_init(&bs->usage.flush); in create_batch_state()
249 mtx_init(&bs->usage.mtx, mtx_plain); in create_batch_state()
251 if (!screen->batch_descriptor_init(screen, bs)) in create_batch_state()
254 util_queue_fence_init(&bs->flush_completed); in create_batch_state()
256 return bs; in create_batch_state()
258 zink_batch_state_destroy(screen, bs); in create_batch_state()
263 find_unused_state(struct zink_batch_state *bs) in find_unused_state() argument
265 struct zink_fence *fence = &bs->fence; in find_unused_state()
276 struct zink_batch_state *bs = NULL; in get_batch_state() local
279 bs = util_dynarray_pop(&ctx->free_batch_states, struct zink_batch_state*); in get_batch_state()
280 if (!bs && ctx->batch_states) { in get_batch_state()
284 bs = ctx->batch_states; in get_batch_state()
288 if (bs) { in get_batch_state()
289 zink_reset_batch_state(ctx, bs); in get_batch_state()
298 bs = create_batch_state(ctx); in get_batch_state()
300 return bs; in get_batch_state()
344 struct zink_batch_state *bs = data; in post_submit() local
345 struct zink_screen *screen = zink_screen(bs->ctx->base.screen); in post_submit()
347 if (bs->is_device_lost) { in post_submit()
348 if (bs->ctx->reset.reset) in post_submit()
349 bs->ctx->reset.reset(bs->ctx->reset.data, PIPE_GUILTY_CONTEXT_RESET); in post_submit()
354 } else if (bs->ctx->batch_states_count > 5000) { in post_submit()
355 zink_screen_timeline_wait(screen, bs->fence.batch_id - 2500, PIPE_TIMEOUT_INFINITE); in post_submit()
362 struct zink_batch_state *bs = data; in submit_queue() local
363 struct zink_context *ctx = bs->ctx; in submit_queue()
367 while (!bs->fence.batch_id) in submit_queue()
368 bs->fence.batch_id = (uint32_t)p_atomic_inc_return(&screen->curr_batch); in submit_queue()
369 bs->usage.usage = bs->fence.batch_id; in submit_queue()
370 bs->usage.unflushed = false; in submit_queue()
372 uint64_t batch_id = bs->fence.batch_id; in submit_queue()
375 si[0].waitSemaphoreCount = util_dynarray_num_elements(&bs->acquires, VkSemaphore); in submit_queue()
376 si[0].pWaitSemaphores = bs->acquires.data; in submit_queue()
377 …while (util_dynarray_num_elements(&bs->acquire_flags, VkPipelineStageFlags) < si[0].waitSemaphoreC… in submit_queue()
379 util_dynarray_append(&bs->acquire_flags, VkPipelineStageFlags, mask); in submit_queue()
381 …assert(util_dynarray_num_elements(&bs->acquires, VkSemaphore) <= util_dynarray_num_elements(&bs->a… in submit_queue()
382 si[0].pWaitDstStageMask = bs->acquire_flags.data; in submit_queue()
388 si[1].waitSemaphoreCount = util_dynarray_num_elements(&bs->wait_semaphores, VkSemaphore); in submit_queue()
389 si[1].pWaitSemaphores = bs->wait_semaphores.data; in submit_queue()
390 si[1].pWaitDstStageMask = bs->wait_semaphore_stages.data; in submit_queue()
391 si[1].commandBufferCount = bs->has_barriers ? 2 : 1; in submit_queue()
393 bs->barrier_cmdbuf, in submit_queue()
394 bs->cmdbuf, in submit_queue()
396 si[1].pCommandBuffers = bs->has_barriers ? cmdbufs : &cmdbufs[1]; in submit_queue()
399 si[1].signalSemaphoreCount = !!bs->signal_semaphore; in submit_queue()
400 signals[0] = bs->signal_semaphore; in submit_queue()
411 if (bs->present) in submit_queue()
412 signals[si[1].signalSemaphoreCount++] = bs->present; in submit_queue()
415 VkResult result = VKSCR(EndCommandBuffer)(bs->cmdbuf); in submit_queue()
418 bs->is_device_lost = true; in submit_queue()
421 if (bs->has_barriers) { in submit_queue()
422 result = VKSCR(EndCommandBuffer)(bs->barrier_cmdbuf); in submit_queue()
425 bs->is_device_lost = true; in submit_queue()
430 while (util_dynarray_contains(&bs->persistent_resources, struct zink_resource_object*)) { in submit_queue()
431 …struct zink_resource_object *obj = util_dynarray_pop(&bs->persistent_resources, struct zink_resour… in submit_queue()
444 bs->is_device_lost = true; in submit_queue()
447 bs->submit_count++; in submit_queue()
449 cnd_broadcast(&bs->usage.flush); in submit_queue()
451 p_atomic_set(&bs->fence.submitted, true); in submit_queue()
452 unref_resources(screen, bs); in submit_queue()
464 struct zink_batch_state *bs; in zink_end_batch() local
469 bs = ctx->batch_states; in zink_end_batch()
470 struct zink_fence *fence = &bs->fence; in zink_end_batch()
476 zink_reset_batch_state(ctx, bs); in zink_end_batch()
477 util_dynarray_append(&ctx->free_batch_states, struct zink_batch_state *, bs); in zink_end_batch()
483 bs = batch->state; in zink_end_batch()
485 zink_batch_state(ctx->last_fence)->next = bs; in zink_end_batch()
488 ctx->batch_states = bs; in zink_end_batch()
490 ctx->last_fence = &bs->fence; in zink_end_batch()
506 util_queue_add_job(&screen->flush_queue, bs, &bs->flush_completed, in zink_end_batch()
509 submit_queue(bs, NULL, 0); in zink_end_batch()
510 post_submit(bs, NULL, 0); in zink_end_batch()