Lines Matching full:swapchain
199 // Maximum number of TimingInfo structs to keep per swapchain:
205 struct Swapchain {
206 Swapchain(Surface& surface_,
243 VkSwapchainKHR HandleFromSwapchain(Swapchain* swapchain) {
244 return VkSwapchainKHR(reinterpret_cast<uint64_t>(swapchain));
247 Swapchain* SwapchainFromHandle(VkSwapchainKHR handle) {
248 return reinterpret_cast<Swapchain*>(handle);
254 Swapchain::Image& image) {
268 // We get here during swapchain destruction, or various serious
271 // have already signalled, since the swapchain images are supposed
272 // to be idle before the swapchain is destroyed. In error cases,
300 void OrphanSwapchain(VkDevice device, Swapchain* swapchain) {
301 if (swapchain->surface.swapchain_handle != HandleFromSwapchain(swapchain))
303 for (uint32_t i = 0; i < swapchain->num_images; i++) {
304 if (!swapchain->images[i].dequeued)
305 ReleaseSwapchainImage(device, nullptr, -1, swapchain->images[i]);
307 swapchain->surface.swapchain_handle = VK_NULL_HANDLE;
308 swapchain->timing.clear();
311 uint32_t get_num_ready_timings(Swapchain& swapchain) {
312 if (swapchain.timing.size() < MIN_NUM_FRAMES_AGO) {
317 const size_t num_timings = swapchain.timing.size() - MIN_NUM_FRAMES_AGO + 1;
319 TimingInfo& ti = swapchain.timing.editItemAt(i);
335 swapchain.surface.window.get(), ti.native_frame_id_,
363 ti.calculate(swapchain.refresh_duration);
371 void copy_ready_timings(Swapchain& swapchain,
374 if (swapchain.timing.empty()) {
379 size_t last_ready = swapchain.timing.size() - 1;
380 while (!swapchain.timing[last_ready].ready()) {
391 const TimingInfo& ti = swapchain.timing[i];
401 swapchain
423 ALOGV("unsupported swapchain format %d", format);
956 "swapchain imageArrayLayers=%u not supported",
959 "swapchain preTransform=%#x not supported",
965 "swapchain presentMode=%u not supported",
971 ALOGV("Can't create a swapchain for VkSurfaceKHR 0x%" PRIx64
972 " because it already has active swapchain 0x%" PRIx64
1136 // don't want to give the app back a swapchain with extra images (which they
1183 Swapchain object --
1184 // After this point, we must deallocate the swapchain on error.
1187 sizeof(Swapchain), alignof(Swapchain),
1191 Swapchain* swapchain =
1192 new (mem) Swapchain(surface, num_images, create_info->presentMode);
1230 Swapchain::Image& img = swapchain->images[i];
1272 Swapchain::Image& img = swapchain->images[i];
1274 if (!swapchain->shared) {
1288 swapchain->~Swapchain();
1289 allocator->pfnFree(allocator->pUserData, swapchain);
1293 surface.swapchain_handle = HandleFromSwapchain(swapchain);
1303 Swapchain* swapchain = SwapchainFromHandle(swapchain_handle);
1304 if (!swapchain)
1306 bool active = swapchain->surface.swapchain_handle == swapchain_handle;
1307 ANativeWindow* window = active ? swapchain->surface.window.get() : nullptr;
1309 if (swapchain->frame_timestamps_enabled) {
1312 for (uint32_t i = 0; i < swapchain->num_images; i++)
1313 ReleaseSwapchainImage(device, window, -1, swapchain->images[i]);
1315 swapchain->surface.swapchain_handle = VK_NULL_HANDLE;
1318 swapchain->~Swapchain();
1319 allocator->pfnFree(allocator->pUserData, swapchain);
1327 Swapchain& swapchain = *SwapchainFromHandle(swapchain_handle);
1328 ALOGW_IF(swapchain.surface.swapchain_handle != swapchain_handle,
1329 "getting images for non-active swapchain 0x%" PRIx64
1334 uint32_t n = swapchain.num_images;
1335 if (*count < swapchain.num_images) {
1340 images[i] = swapchain.images[i].image;
1343 *count = swapchain.num_images;
1355 Swapchain& swapchain = *SwapchainFromHandle(swapchain_handle);
1356 ANativeWindow* window = swapchain.surface.window.get();
1360 if (swapchain.surface.swapchain_handle != swapchain_handle)
1367 if (swapchain.shared) {
1373 device, swapchain.images[*image_index].image, -1, semaphore, vk_fence);
1388 for (idx = 0; idx < swapchain.num_images; idx++) {
1389 if (swapchain.images[idx].buffer.get() == buffer) {
1390 swapchain.images[idx].dequeued = true;
1391 swapchain.images[idx].dequeue_fence = fence_fd;
1395 if (idx == swapchain.num_images) {
1412 device, swapchain.images[idx].image, fence_clone, semaphore, vk_fence);
1422 swapchain.images[idx].dequeued = false;
1423 swapchain.images[idx].dequeue_fence = -1;
1437 return AcquireNextImageKHR(device, pAcquireInfo->swapchain,
1510 Swapchain& swapchain =
1513 Swapchain::Image& img = swapchain.images[image_idx];
1515 (regions && !swapchain.mailbox_mode) ? ®ions[sc] : nullptr;
1530 if (swapchain.surface.swapchain_handle ==
1532 ANativeWindow* window = swapchain.surface.window.get();
1535 // Process the incremental-present hint for this swapchain:
1549 rcount = 0; // Ignore the hint for this swapchain
1574 if (!swapchain.frame_timestamps_enabled) {
1579 swapchain.frame_timestamps_enabled = true;
1593 swapchain.timing.push_back(TimingInfo(time, nativeFrameId));
1594 while (swapchain.timing.size() > MAX_TIMING_INFOS) {
1595 swapchain.timing.removeAt(0);
1624 // If the swapchain is in shared mode, immediately dequeue the
1628 if (swapchain.shared && swapchain_result == VK_SUCCESS) {
1638 ALOGE("got wrong image back for shared swapchain");
1650 OrphanSwapchain(device, &swapchain);
1675 Swapchain& swapchain = *SwapchainFromHandle(swapchain_handle);
1679 static_cast<uint64_t>(swapchain.refresh_duration);
1690 Swapchain& swapchain = *SwapchainFromHandle(swapchain_handle);
1691 ANativeWindow* window = swapchain.surface.window.get();
1694 if (!swapchain.frame_timestamps_enabled) {
1697 swapchain.frame_timestamps_enabled = true;
1702 copy_ready_timings(swapchain, count, timings);
1704 *count = get_num_ready_timings(swapchain);
1714 Swapchain& swapchain = *SwapchainFromHandle(swapchain_handle);
1717 if (swapchain.surface.swapchain_handle != swapchain_handle) {
1733 Swapchain* swapchain = SwapchainFromHandle(pSwapchains[idx]);
1734 if (!swapchain)
1737 if (swapchain->surface.swapchain_handle != pSwapchains[idx]) continue;
1739 ANativeWindow* window = swapchain->surface.window.get();