Lines Matching refs:screen

77 kopper_CreateSurface(struct zink_screen *screen, struct kopper_displaytarget *cdt)
87 error = VKSCR(CreateXcbSurfaceKHR)(screen->instance, &cdt->info.xcb, NULL, &surface);
92 error = VKSCR(CreateWaylandSurfaceKHR)(screen->instance, &cdt->info.wl, NULL, &surface);
97 error = VKSCR(CreateWin32SurfaceKHR)(screen->instance, &cdt->info.win32, NULL, &surface);
108 error = VKSCR(GetPhysicalDeviceSurfaceSupportKHR)(screen->pdev, screen->gfx_queue, surface, &supported);
109 if (!zink_screen_handle_vkresult(screen, error) || !supported)
114 error = VKSCR(GetPhysicalDeviceSurfacePresentModesKHR)(screen->pdev, surface, &count, modes);
115 if (!zink_screen_handle_vkresult(screen, error))
131 VKSCR(DestroySurfaceKHR)(screen->instance, surface, NULL);
136 destroy_swapchain(struct zink_screen *screen, struct kopper_swapchain *cswap)
141 VKSCR(DestroySemaphore)(screen->dev, cswap->images[i].acquire, NULL);
147 VKSCR(DestroySemaphore)(screen->dev, util_dynarray_pop(arr, VkSemaphore), NULL);
152 VKSCR(DestroySwapchainKHR)(screen->dev, cswap->swapchain, NULL);
157 prune_old_swapchains(struct zink_screen *screen, struct kopper_displaytarget *cdt, bool wait)
167 destroy_swapchain(screen, cswap);
172 find_dt_entry(struct zink_screen *screen, const struct kopper_displaytarget *cdt)
178 he = _mesa_hash_table_search_pre_hashed(&screen->dts, cdt->info.xcb.window, (void*)(uintptr_t)cdt->info.xcb.window);
183 he = _mesa_hash_table_search(&screen->dts, cdt->info.wl.surface);
188 he = _mesa_hash_table_search(&screen->dts, cdt->info.win32.hwnd);
198 zink_kopper_deinit_displaytarget(struct zink_screen *screen, struct kopper_displaytarget *cdt)
202 simple_mtx_lock(&screen->dt_lock);
203 struct hash_entry *he = find_dt_entry(screen, cdt);
207 _mesa_hash_table_remove(&screen->dts, he);
208 simple_mtx_unlock(&screen->dt_lock);
209 destroy_swapchain(screen, cdt->swapchain);
210 prune_old_swapchains(screen, cdt, true);
211 VKSCR(DestroySurfaceKHR)(screen->instance, cdt->surface, NULL);
218 kopper_CreateSwapchain(struct zink_screen *screen, struct kopper_displaytarget *cdt, unsigned w, unsigned h, VkResult *result)
280 error = VKSCR(CreateSwapchainKHR)(screen->dev, &cswap->scci, NULL,
283 if (util_queue_is_initialized(&screen->flush_queue))
284 util_queue_finish(&screen->flush_queue);
285 VkResult result = VKSCR(QueueWaitIdle)(screen->queue);
288 zink_kopper_deinit_displaytarget(screen, cdt);
289 error = VKSCR(CreateSwapchainKHR)(screen->dev, &cswap->scci, NULL,
306 kopper_GetSwapchainImages(struct zink_screen *screen, struct kopper_swapchain *cswap)
308 VkResult error = VKSCR(GetSwapchainImagesKHR)(screen->dev, cswap->swapchain, &cswap->num_images, NULL);
309 zink_screen_handle_vkresult(screen, error);
315 error = VKSCR(GetSwapchainImagesKHR)(screen->dev, cswap->swapchain, &cswap->num_images, images);
317 if (zink_screen_handle_vkresult(screen, error)) {
325 update_caps(struct zink_screen *screen, struct kopper_displaytarget *cdt)
327 VkResult error = VKSCR(GetPhysicalDeviceSurfaceCapabilitiesKHR)(screen->pdev, cdt->surface, &cdt->caps);
328 zink_screen_handle_vkresult(screen, error);
333 update_swapchain(struct zink_screen *screen, struct kopper_displaytarget *cdt, unsigned w, unsigned h)
335 VkResult error = update_caps(screen, cdt);
338 struct kopper_swapchain *cswap = kopper_CreateSwapchain(screen, cdt, w, h, &error);
341 prune_old_swapchains(screen, cdt, false);
348 return kopper_GetSwapchainImages(screen, cdt->swapchain);
352 zink_kopper_displaytarget_create(struct zink_screen *screen, unsigned tex_usage,
365 simple_mtx_lock(&screen->dt_lock);
366 if (unlikely(!screen->dts.table)) {
369 _mesa_hash_table_init(&screen->dts, screen, NULL, _mesa_key_pointer_equal);
373 _mesa_hash_table_init(&screen->dts, screen, _mesa_hash_pointer, _mesa_key_pointer_equal);
379 he = find_dt_entry(screen, &k);
381 simple_mtx_unlock(&screen->dt_lock);
400 if (screen->info.have_KHR_swapchain_mutable_format) {
406 cdt->formats[0] = zink_get_format(screen, format);
413 cdt->formats[1] = zink_get_format(screen, srgb);
416 cdt->surface = kopper_CreateSurface(screen, cdt);
420 if (update_swapchain(screen, cdt, width, height) != VK_SUCCESS)
423 simple_mtx_lock(&screen->dt_lock);
427 _mesa_hash_table_insert_pre_hashed(&screen->dts, cdt->info.xcb.window, (void*)(uintptr_t)cdt->info.xcb.window, cdt);
432 _mesa_hash_table_insert(&screen->dts, cdt->info.wl.surface, cdt);
437 _mesa_hash_table_insert(&screen->dts, cdt->info.win32.hwnd, cdt);
443 simple_mtx_unlock(&screen->dt_lock);
454 zink_kopper_displaytarget_destroy(struct zink_screen *screen, struct kopper_displaytarget *cdt)
458 zink_kopper_deinit_displaytarget(screen, cdt);
463 kopper_acquire(struct zink_screen *screen, struct zink_resource *res, uint64_t timeout)
481 VkResult error = update_swapchain(screen, cdt, res->base.b.width0, res->base.b.height0);
482 zink_screen_handle_vkresult(screen, error);
490 if (timeout == UINT64_MAX && util_queue_is_initialized(&screen->flush_queue) &&
501 ret = VKSCR(CreateSemaphore)(screen->dev, &sci, NULL, &acquire);
506 ret = VKSCR(AcquireNextImageKHR)(screen->dev, cdt->swapchain->swapchain, timeout, acquire, VK_NULL_HANDLE, &res->obj->dt_idx);
512 VKSCR(DestroySemaphore)(screen->dev, acquire, NULL);
537 struct zink_screen *screen = zink_screen(ctx->base.screen);
541 struct pipe_resource *pres = screen->base.resource_create(&screen->base, &res->base.b);
542 zink_resource_object_reference(screen, &res->obj, zink_resource(pres)->obj);
572 VkResult ret = kopper_acquire(zink_screen(ctx->base.screen), res, timeout);
586 zink_kopper_acquire_submit(struct zink_screen *screen, struct zink_resource *res)
608 zink_kopper_present(struct zink_screen *screen, struct zink_resource *res)
618 VkResult ret = VKSCR(CreateSemaphore)(screen->dev, &sci, NULL, &res->obj->present);
619 return zink_screen_handle_vkresult(screen, ret) ? res->obj->present : VK_NULL_HANDLE;
637 struct zink_screen *screen = gdata;
641 simple_mtx_lock(&screen->queue_lock);
642 if (screen->driver_workarounds.implicit_sync && cdt->type != KOPPER_WIN32) {
643 if (!screen->fence) {
646 VKSCR(CreateFence)(screen->dev, &fci, NULL, &screen->fence);
648 VKSCR(ResetFences)(screen->dev, 1, &screen->fence);
656 error = VKSCR(QueueSubmit)(screen->queue, 1, &si, screen->fence);
657 if (!zink_screen_handle_vkresult(screen, error)) {
658 simple_mtx_unlock(&screen->queue_lock);
659 VKSCR(DestroySemaphore)(screen->dev, cpi->sem, NULL);
662 error = VKSCR(WaitForFences)(screen->dev, 1, &screen->fence, VK_TRUE, UINT64_MAX);
663 if (!zink_screen_handle_vkresult(screen, error)) {
664 simple_mtx_unlock(&screen->queue_lock);
665 VKSCR(DestroySemaphore)(screen->dev, cpi->sem, NULL);
671 VkResult error2 = VKSCR(QueuePresentKHR)(screen->queue, &cpi->info);
672 simple_mtx_unlock(&screen->queue_lock);
689 for (; screen->last_finished && swapchain->last_present_prune != screen->last_finished; swapchain->last_present_prune++) {
695 VKSCR(DestroySemaphore)(screen->dev, util_dynarray_pop(arr, VkSemaphore), NULL);
702 assert(screen->curr_batch > 0);
703 uint32_t next = (uint32_t)screen->curr_batch + 1;
722 zink_kopper_present_queue(struct zink_screen *screen, struct zink_resource *res)
759 if (util_queue_is_initialized(&screen->flush_queue)) {
761 util_queue_add_job(&screen->flush_queue, cpi, &cdt->present_fence,
764 kopper_present(cpi, screen, -1);
774 struct zink_screen *screen = zink_screen(ctx->base.screen);
788 ret = kopper_acquire(screen, res, 0);
806 struct zink_screen *screen = zink_screen(ctx->base.screen);
818 VkSemaphore acquire = zink_kopper_acquire_submit(screen, res);
819 VkSemaphore present = res->obj->present ? res->obj->present : zink_kopper_present(screen, res);
820 if (screen->threaded)
821 util_queue_finish(&screen->flush_queue);
825 VkResult error = VKSCR(QueueSubmit)(screen->queue, 1, &si, VK_NULL_HANDLE);
826 if (!zink_screen_handle_vkresult(screen, error))
829 zink_kopper_present_queue(screen, res);
830 error = VKSCR(QueueWaitIdle)(screen->queue);
831 return zink_screen_handle_vkresult(screen, error);
838 struct zink_screen *screen = zink_screen(pscreen);
848 VkResult ret = update_caps(screen, cdt);
862 const struct zink_screen *screen = (const struct zink_screen*)pscreen;
863 return screen->is_cpu;
869 struct zink_screen *screen = zink_screen(ctx->base.screen);
885 struct pipe_resource *pz = screen->base.resource_create(&screen->base, &templ);
887 zink_resource_object_reference(screen, &res->obj, z->obj);
898 zink_surface_reference(screen, &csurf->surf, cz->surf);
917 struct zink_screen *screen = zink_screen(pscreen);
925 update_swapchain(screen, cdt, cdt->caps.currentExtent.width, cdt->caps.currentExtent.height);