Lines Matching defs:cdt

32 zink_kopper_set_present_mode_for_interval(struct kopper_displaytarget *cdt, int interval)
36 cdt->present_mode = VK_PRESENT_MODE_IMMEDIATE_KHR;
40 if (cdt->present_modes & BITFIELD_BIT(VK_PRESENT_MODE_IMMEDIATE_KHR))
41 cdt->present_mode = VK_PRESENT_MODE_IMMEDIATE_KHR;
43 cdt->present_mode = VK_PRESENT_MODE_MAILBOX_KHR;
45 cdt->present_mode = VK_PRESENT_MODE_FIFO_KHR;
47 assert(cdt->present_modes & BITFIELD_BIT(cdt->present_mode));
52 init_dt_type(struct kopper_displaytarget *cdt)
54 VkStructureType type = cdt->info.bos.sType;
58 cdt->type = KOPPER_X11;
63 cdt->type = KOPPER_WAYLAND;
68 cdt->type = KOPPER_WIN32;
77 kopper_CreateSurface(struct zink_screen *screen, struct kopper_displaytarget *cdt)
82 init_dt_type(cdt);
83 VkStructureType type = cdt->info.bos.sType;
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);
124 cdt->present_modes |= BITFIELD_BIT(modes[i]);
127 zink_kopper_set_present_mode_for_interval(cdt, cdt->info.initial_swap_interval);
157 prune_old_swapchains(struct zink_screen *screen, struct kopper_displaytarget *cdt, bool wait)
159 while (cdt->old_swapchain) {
160 struct kopper_swapchain *cswap = cdt->old_swapchain;
166 cdt->old_swapchain = cswap->next;
172 find_dt_entry(struct zink_screen *screen, const struct kopper_displaytarget *cdt)
175 switch (cdt->type) {
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)
200 if (!cdt->surface)
203 struct hash_entry *he = find_dt_entry(screen, cdt);
206 cdt = he->data;
209 destroy_swapchain(screen, cdt->swapchain);
210 prune_old_swapchains(screen, cdt, true);
211 VKSCR(DestroySurfaceKHR)(screen->instance, cdt->surface, NULL);
212 cdt->swapchain = cdt->old_swapchain = NULL;
213 cdt->surface = VK_NULL_HANDLE;
214 util_queue_fence_destroy(&cdt->present_fence);
218 kopper_CreateSwapchain(struct zink_screen *screen, struct kopper_displaytarget *cdt, unsigned w, unsigned h, VkResult *result)
226 bool has_alpha = cdt->info.has_alpha && (cdt->caps.supportedCompositeAlpha & VK_COMPOSITE_ALPHA_PRE_MULTIPLIED_BIT_KHR);
227 if (cdt->swapchain) {
228 cswap->scci = cdt->swapchain->scci;
229 cswap->scci.oldSwapchain = cdt->swapchain->swapchain;
233 cswap->scci.surface = cdt->surface;
234 cswap->scci.flags = zink_kopper_has_srgb(cdt) ? VK_SWAPCHAIN_CREATE_MUTABLE_FORMAT_BIT_KHR : 0;
235 cswap->scci.imageFormat = cdt->formats[0];
249 cswap->scci.presentMode = cdt->present_mode;
250 cswap->scci.minImageCount = cdt->caps.minImageCount;
251 cswap->scci.preTransform = cdt->caps.currentTransform;
252 if (cdt->formats[1])
253 cswap->scci.pNext = &cdt->format_list;
256 switch (cdt->type) {
264 cswap->scci.imageExtent.width = cdt->caps.currentExtent.width;
265 cswap->scci.imageExtent.height = cdt->caps.currentExtent.height;
288 zink_kopper_deinit_displaytarget(screen, cdt);
298 cswap->max_acquires = cswap->scci.minImageCount - cdt->caps.minImageCount;
325 update_caps(struct zink_screen *screen, struct kopper_displaytarget *cdt)
327 VkResult error = VKSCR(GetPhysicalDeviceSurfaceCapabilitiesKHR)(screen->pdev, cdt->surface, &cdt->caps);
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);
342 struct kopper_swapchain **pswap = &cdt->old_swapchain;
345 *pswap = cdt->swapchain;
346 cdt->swapchain = cswap;
348 return kopper_GetSwapchainImages(screen, cdt->swapchain);
357 struct kopper_displaytarget *cdt;
383 cdt = he->data;
384 p_atomic_inc(&cdt->refcount);
385 *stride = cdt->stride;
386 return cdt;
390 cdt = CALLOC_STRUCT(kopper_displaytarget);
391 if (!cdt)
394 cdt->refcount = 1;
395 cdt->loader_private = (void*)loader_private;
396 cdt->info = *info;
397 util_queue_fence_init(&cdt->present_fence);
406 cdt->formats[0] = zink_get_format(screen, format);
408 cdt->format_list.sType = VK_STRUCTURE_TYPE_IMAGE_FORMAT_LIST_CREATE_INFO;
409 cdt->format_list.pNext = NULL;
410 cdt->format_list.viewFormatCount = 2;
411 cdt->format_list.pViewFormats = cdt->formats;
413 cdt->formats[1] = zink_get_format(screen, srgb);
416 cdt->surface = kopper_CreateSurface(screen, cdt);
417 if (!cdt->surface)
420 if (update_swapchain(screen, cdt, width, height) != VK_SUCCESS)
424 switch (cdt->type) {
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);
445 *stride = cdt->stride;
446 return cdt;
454 zink_kopper_displaytarget_destroy(struct zink_screen *screen, struct kopper_displaytarget *cdt)
456 if (!p_atomic_dec_zero(&cdt->refcount))
458 zink_kopper_deinit_displaytarget(screen, cdt);
459 FREE(cdt);
465 struct kopper_displaytarget *cdt = res->obj->dt;
475 (cdt->swapchain->images[res->obj->dt_idx].acquire || cdt->swapchain->images[res->obj->dt_idx].acquired))
481 VkResult error = update_swapchain(screen, cdt, res->base.b.width0, res->base.b.height0);
491 p_atomic_read_relaxed(&cdt->swapchain->num_acquires) > cdt->swapchain->max_acquires) {
492 util_queue_fence_wait(&cdt->present_fence);
506 ret = VKSCR(AcquireNextImageKHR)(screen->dev, cdt->swapchain->swapchain, timeout, acquire, VK_NULL_HANDLE, &res->obj->dt_idx);
518 cdt->swapchain->images[res->obj->dt_idx].acquire = acquire;
519 res->obj->image = cdt->swapchain->images[res->obj->dt_idx].image;
520 cdt->swapchain->images[res->obj->dt_idx].acquired = false;
521 if (!cdt->swapchain->images[res->obj->dt_idx].init) {
524 cdt->swapchain->images[res->obj->dt_idx].init = true;
528 p_atomic_inc(&cdt->swapchain->num_acquires);
530 cdt->swapchain->images[res->obj->dt_idx].dt_has_data = false;
561 struct kopper_displaytarget *cdt = res->obj->dt;
562 if (!cdt)
565 if (cdt->is_kill) {
569 const struct kopper_swapchain *cswap = cdt->swapchain;
574 if (cswap != cdt->swapchain) {
575 ctx->swapchain_size = cdt->swapchain->scci.imageExtent;
589 struct kopper_displaytarget *cdt = res->obj->dt;
591 if (cdt->swapchain->images[res->obj->dt_idx].dt_has_data)
594 if (cdt->swapchain->images[res->obj->dt_idx].acquired) {
595 assert(!cdt->swapchain->images[res->obj->dt_idx].acquire);
598 assert(cdt->swapchain->images[res->obj->dt_idx].acquire);
599 cdt->swapchain->images[res->obj->dt_idx].acquired = true;
601 VkSemaphore acquire = cdt->swapchain->images[res->obj->dt_idx].acquire;
602 cdt->swapchain->images[res->obj->dt_idx].acquire = VK_NULL_HANDLE;
603 cdt->swapchain->images[res->obj->dt_idx].dt_has_data = true;
635 struct kopper_displaytarget *cdt = cpi->res->obj->dt;
642 if (screen->driver_workarounds.implicit_sync && cdt->type != KOPPER_WIN32) {
676 if (error2 == VK_SUBOPTIMAL_KHR && cdt->swapchain == swapchain)
725 struct kopper_displaytarget *cdt = res->obj->dt;
731 cpi->swapchain = cdt->swapchain;
739 cpi->info.pSwapchains = &cdt->swapchain->swapchain;
753 for (int i = 0; i < cdt->swapchain->num_images; i++) {
755 cdt->swapchain->images[i].age = 1;
756 else if (cdt->swapchain->images[i].age > 0)
757 cdt->swapchain->images[i].age += 1;
761 util_queue_add_job(&screen->flush_queue, cpi, &cdt->present_fence,
767 cdt->swapchain->images[res->obj->dt_idx].acquired = false;
776 struct kopper_displaytarget *cdt = res->obj->dt;
777 const struct kopper_swapchain *cswap = cdt->swapchain;
782 (zink_kopper_acquired(cdt, res->obj->dt_idx) && cdt->swapchain->images[res->obj->dt_idx].dt_has_data))
795 if (cswap != cdt->swapchain) {
796 ctx->swapchain_size = cdt->swapchain->scci.imageExtent;
842 struct kopper_displaytarget *cdt = res->obj->dt;
843 if (cdt->type != KOPPER_X11) {
848 VkResult ret = update_caps(screen, cdt);
851 cdt->is_kill = true;
854 *w = cdt->caps.currentExtent.width;
855 *h = cdt->caps.currentExtent.height;
909 struct kopper_displaytarget *cdt = res->obj->dt;
910 return !cdt->is_kill;
919 struct kopper_displaytarget *cdt = res->obj->dt;
920 VkPresentModeKHR old_present_mode = cdt->present_mode;
922 zink_kopper_set_present_mode_for_interval(cdt, interval);
924 if (old_present_mode != cdt->present_mode)
925 update_swapchain(screen, cdt, cdt->caps.currentExtent.width, cdt->caps.currentExtent.height);
934 struct kopper_displaytarget *cdt = res->obj->dt;
945 return cdt->swapchain->images[res->obj->dt_idx].age;