Lines Matching defs:chain
953 struct wsi_wl_swapchain *chain = (struct wsi_wl_swapchain *)wsi_chain;
954 return &chain->images[image_index].base;
962 struct wsi_wl_swapchain *chain = (struct wsi_wl_swapchain *)wsi_chain;
965 int wl_fd = wl_display_get_fd(chain->display->wl_display);
974 int ret = wl_display_dispatch_queue_pending(chain->display->wl_display,
975 chain->display->queue);
980 for (uint32_t i = 0; i < chain->base.image_count; i++) {
981 if (!chain->images[i].busy) {
984 chain->images[i].busy = true;
996 ret = wl_display_prepare_read_queue(chain->display->wl_display,
997 chain->display->queue);
1015 wl_display_cancel_read(chain->display->wl_display);
1026 ret = wl_display_read_events(chain->display->wl_display);
1035 struct wsi_wl_swapchain *chain = data;
1037 chain->frame = NULL;
1038 chain->fifo_ready = true;
1052 struct wsi_wl_swapchain *chain = (struct wsi_wl_swapchain *)wsi_chain;
1054 if (chain->buffer_type == WSI_WL_BUFFER_SHM_MEMCPY) {
1055 struct wsi_wl_image *image = &chain->images[image_index];
1057 image->base.row_pitches[0] * chain->extent.height);
1059 if (chain->base.present_mode == VK_PRESENT_MODE_FIFO_KHR) {
1060 while (!chain->fifo_ready) {
1061 int ret = wl_display_dispatch_queue(chain->display->wl_display,
1062 chain->display->queue);
1068 assert(image_index < chain->base.image_count);
1069 wl_surface_attach(chain->surface, chain->images[image_index].buffer, 0, 0);
1071 if (wl_surface_get_version(chain->surface) >= 4 && damage &&
1076 wl_surface_damage_buffer(chain->surface,
1081 wl_surface_damage(chain->surface, 0, 0, INT32_MAX, INT32_MAX);
1084 if (chain->base.present_mode == VK_PRESENT_MODE_FIFO_KHR) {
1085 chain->frame = wl_surface_frame(chain->surface);
1086 wl_callback_add_listener(chain->frame, &frame_listener, chain);
1087 chain->fifo_ready = false;
1090 chain->images[image_index].busy = true;
1091 wl_surface_commit(chain->surface);
1092 wl_display_flush(chain->display->wl_display);
1135 wsi_wl_image_init(struct wsi_wl_swapchain *chain,
1140 struct wsi_wl_display *display = chain->display;
1143 result = wsi_create_image(&chain->base, &chain->base.image_info,
1148 switch (chain->buffer_type) {
1151 if (chain->buffer_type == WSI_WL_BUFFER_SHM_MEMCPY) {
1153 chain->extent.height);
1162 image->buffer = wl_shm_pool_create_buffer(pool, 0, chain->extent.width,
1163 chain->extent.height,
1165 chain->shm_format);
1190 chain->extent.width,
1191 chain->extent.height,
1192 chain->drm_format,
1210 wsi_destroy_image(&chain->base, &image->base);
1216 wsi_wl_swapchain_images_free(struct wsi_wl_swapchain *chain)
1218 for (uint32_t i = 0; i < chain->base.image_count; i++) {
1219 if (chain->images[i].buffer) {
1220 wl_buffer_destroy(chain->images[i].buffer);
1221 wsi_destroy_image(&chain->base, &chain->images[i].base);
1222 if (chain->images[i].shm_size) {
1223 close(chain->images[i].shm_fd);
1224 munmap(chain->images[i].shm_ptr, chain->images[i].shm_size);
1228 wsi_destroy_image_info(&chain->base, &chain->base.image_info);
1232 wsi_wl_swapchain_chain_free(struct wsi_wl_swapchain *chain,
1235 if (chain->frame)
1236 wl_callback_destroy(chain->frame);
1237 if (chain->surface)
1238 wl_proxy_wrapper_destroy(chain->surface);
1240 if (chain->display)
1241 wsi_wl_display_unref(chain->display);
1243 wsi_swapchain_finish(&chain->base);
1245 vk_free(pAllocator, chain);
1252 struct wsi_wl_swapchain *chain = (struct wsi_wl_swapchain *)wsi_chain;
1254 wsi_wl_swapchain_images_free(chain);
1255 wsi_wl_swapchain_chain_free(chain, pAllocator);
1271 struct wsi_wl_swapchain *chain;
1278 size_t size = sizeof(*chain) + num_images * sizeof(chain->images[0]);
1279 chain = vk_zalloc(pAllocator, size, 8, VK_SYSTEM_ALLOCATION_SCOPE_OBJECT);
1280 if (chain == NULL)
1283 result = wsi_swapchain_init(wsi_device, &chain->base, device,
1286 vk_free(pAllocator, chain);
1293 chain->base.destroy = wsi_wl_swapchain_destroy;
1294 chain->base.get_wsi_image = wsi_wl_swapchain_get_wsi_image;
1295 chain->base.acquire_next_image = wsi_wl_swapchain_acquire_next_image;
1296 chain->base.queue_present = wsi_wl_swapchain_queue_present;
1297 chain->base.present_mode = wsi_swapchain_get_present_mode(wsi_device, pCreateInfo);
1298 chain->base.image_count = num_images;
1299 chain->extent = pCreateInfo->imageExtent;
1300 chain->vk_format = pCreateInfo->imageFormat;
1302 chain->buffer_type = (chain->base.wsi->has_import_memory_host &&
1305 chain->shm_format = wl_shm_format_for_vk_format(chain->vk_format, alpha);
1307 chain->buffer_type = WSI_WL_BUFFER_NATIVE;
1308 chain->drm_format = wl_drm_format_for_vk_format(chain->vk_format, alpha);
1316 chain->display = wsi_wl_display_ref(old_chain->display);
1318 chain->display = NULL;
1320 wsi_device->sw, &chain->display);
1325 chain->surface = wl_proxy_create_wrapper(surface->surface);
1326 if (!chain->surface) {
1330 wl_proxy_set_queue((struct wl_proxy *) chain->surface,
1331 chain->display->queue);
1333 chain->num_drm_modifiers = 0;
1334 chain->drm_modifiers = 0;
1339 if (chain->display->wl_dmabuf && chain->base.wsi->supports_modifiers) {
1340 struct wsi_wl_format *f = find_format(&chain->display->formats, chain->vk_format);
1342 chain->drm_modifiers = u_vector_tail(&f->modifiers);
1343 chain->num_drm_modifiers = u_vector_length(&f->modifiers);
1347 chain->fifo_ready = true;
1349 switch (chain->buffer_type) {
1351 result = wsi_configure_native_image(&chain->base, pCreateInfo,
1352 chain->num_drm_modifiers > 0 ? 1 : 0,
1353 &chain->num_drm_modifiers,
1354 &chain->drm_modifiers,
1355 &chain->base.image_info);
1359 result = wsi_configure_cpu_image(&chain->base, pCreateInfo,
1361 &chain->base.image_info);
1365 result = wsi_configure_cpu_image(&chain->base, pCreateInfo,
1366 NULL, &chain->base.image_info);
1375 for (uint32_t i = 0; i < chain->base.image_count; i++) {
1376 result = wsi_wl_image_init(chain, &chain->images[i],
1380 chain->images[i].busy = false;
1383 *swapchain_out = &chain->base;
1388 wsi_wl_swapchain_images_free(chain);
1391 wsi_wl_swapchain_chain_free(chain, pAllocator);