Lines Matching refs:surface

120 VulkanSurface::BackbufferInfo* VulkanManager::getAvailableBackbuffer(VulkanSurface* surface) {
121 SkASSERT(surface->mBackbuffers);
123 ++surface->mCurrentBackbufferIndex;
124 if (surface->mCurrentBackbufferIndex > surface->mImageCount) {
125 surface->mCurrentBackbufferIndex = 0;
128 VulkanSurface::BackbufferInfo* backbuffer = surface->mBackbuffers +
129 surface->mCurrentBackbufferIndex;
143 SkSurface* VulkanManager::getBackbufferSurface(VulkanSurface* surface) {
144 VulkanSurface::BackbufferInfo* backbuffer = getAvailableBackbuffer(surface);
154 res = mAcquireNextImageKHR(mBackendContext->fDevice, surface->mSwapchain, UINT64_MAX,
164 if (!createSwapchain(surface)) {
167 backbuffer = getAvailableBackbuffer(surface);
172 res = mAcquireNextImageKHR(mBackendContext->fDevice, surface->mSwapchain, UINT64_MAX,
181 VkImageLayout layout = surface->mImageInfos[backbuffer->mImageIndex].mImageLayout;
200 surface->mImages[backbuffer->mImageIndex], // image
234 sk_sp<SkSurface> skSurface = surface->mImageInfos[backbuffer->mImageIndex].mSurface;
239 surface->mBackbuffer = std::move(skSurface);
240 return surface->mBackbuffer.get();
243 void VulkanManager::destroyBuffers(VulkanSurface* surface) {
244 if (surface->mBackbuffers) {
245 for (uint32_t i = 0; i < surface->mImageCount + 1; ++i) {
246 mWaitForFences(mBackendContext->fDevice, 2, surface->mBackbuffers[i].mUsageFences, true,
248 surface->mBackbuffers[i].mImageIndex = -1;
249 mDestroySemaphore(mBackendContext->fDevice, surface->mBackbuffers[i].mAcquireSemaphore,
251 mDestroySemaphore(mBackendContext->fDevice, surface->mBackbuffers[i].mRenderSemaphore,
254 surface->mBackbuffers[i].mTransitionCmdBuffers);
255 mDestroyFence(mBackendContext->fDevice, surface->mBackbuffers[i].mUsageFences[0], 0);
256 mDestroyFence(mBackendContext->fDevice, surface->mBackbuffers[i].mUsageFences[1], 0);
260 delete[] surface->mBackbuffers;
261 surface->mBackbuffers = nullptr;
262 delete[] surface->mImageInfos;
263 surface->mImageInfos = nullptr;
264 delete[] surface->mImages;
265 surface->mImages = nullptr;
268 void VulkanManager::destroySurface(VulkanSurface* surface) {
275 destroyBuffers(surface);
277 if (VK_NULL_HANDLE != surface->mSwapchain) {
278 mDestroySwapchainKHR(mBackendContext->fDevice, surface->mSwapchain, nullptr);
279 surface->mSwapchain = VK_NULL_HANDLE;
282 if (VK_NULL_HANDLE != surface->mVkSurface) {
283 mDestroySurfaceKHR(mBackendContext->fInstance, surface->mVkSurface, nullptr);
284 surface->mVkSurface = VK_NULL_HANDLE;
286 delete surface;
289 void VulkanManager::createBuffers(VulkanSurface* surface, VkFormat format, VkExtent2D extent) {
290 mGetSwapchainImagesKHR(mBackendContext->fDevice, surface->mSwapchain, &surface->mImageCount,
292 SkASSERT(surface->mImageCount);
293 surface->mImages = new VkImage[surface->mImageCount];
294 mGetSwapchainImagesKHR(mBackendContext->fDevice, surface->mSwapchain,
295 &surface->mImageCount, surface->mImages);
303 surface->mImageInfos = new VulkanSurface::ImageInfo[surface->mImageCount];
304 for (uint32_t i = 0; i < surface->mImageCount; ++i) {
307 info.fImage = surface->mImages[i];
322 VulkanSurface::ImageInfo& imageInfo = surface->mImageInfos[i];
350 surface->mBackbuffers = new VulkanSurface::BackbufferInfo[surface->mImageCount + 1];
351 for (uint32_t i = 0; i < surface->mImageCount + 1; ++i) {
353 surface->mBackbuffers[i].mImageIndex = -1;
355 &surface->mBackbuffers[i].mAcquireSemaphore);
357 &surface->mBackbuffers[i].mRenderSemaphore);
359 surface->mBackbuffers[i].mTransitionCmdBuffers);
361 &surface->mBackbuffers[i].mUsageFences[0]);
363 &surface->mBackbuffers[i].mUsageFences[1]);
366 surface->mCurrentBackbufferIndex = surface->mImageCount;
369 bool VulkanManager::createSwapchain(VulkanSurface* surface) {
373 surface->mVkSurface, &caps);
379 res = mGetPhysicalDeviceSurfaceFormatsKHR(mBackendContext->fPhysicalDevice, surface->mVkSurface,
386 res = mGetPhysicalDeviceSurfaceFormatsKHR(mBackendContext->fPhysicalDevice, surface->mVkSurface,
394 surface->mVkSurface, &presentModeCount, nullptr);
401 surface->mVkSurface, &presentModeCount, presentModes.data());
438 // Pick our surface format. For now, just make sure it matches our sRGB request:
473 swapchainCreateInfo.surface = surface->mVkSurface;
496 swapchainCreateInfo.oldSwapchain = surface->mSwapchain;
499 &surface->mSwapchain);
508 destroyBuffers(surface);
513 createBuffers(surface, surfaceFormat, extent);
526 VulkanSurface* surface = new VulkanSurface();
536 nullptr, &surface->mVkSurface);
538 delete surface;
545 mPresentQueueIndex, surface->mVkSurface, &supported);
551 if (!createSwapchain(surface)) {
552 destroySurface(surface);
556 return surface;
605 void VulkanManager::swapBuffers(VulkanSurface* surface) {
611 VulkanSurface::BackbufferInfo* backbuffer = surface->mBackbuffers +
612 surface->mCurrentBackbufferIndex;
614 SkSurface* skSurface = surface->mImageInfos[backbuffer->mImageIndex].mSurface.get();
618 SkASSERT(imageInfo->fImage == surface->mImages[backbuffer->mImageIndex]);
637 surface->mImages[backbuffer->mImageIndex], // image
651 surface->mImageInfos[backbuffer->mImageIndex].mImageLayout = VK_IMAGE_LAYOUT_PRESENT_SRC_KHR;
679 &surface->mSwapchain, // pSwapchains
686 surface->mBackbuffer.reset();
687 surface->mImageInfos[backbuffer->mImageIndex].mLastUsed = surface->mCurrentTime;
688 surface->mImageInfos[backbuffer->mImageIndex].mInvalid = false;
689 surface->mCurrentTime++;
692 int VulkanManager::getAge(VulkanSurface* surface) {
693 VulkanSurface::BackbufferInfo* backbuffer = surface->mBackbuffers +
694 surface->mCurrentBackbufferIndex;
696 || surface->mImageInfos[backbuffer->mImageIndex].mInvalid) {
699 uint16_t lastUsed = surface->mImageInfos[backbuffer->mImageIndex].mLastUsed;
700 return surface->mCurrentTime - lastUsed;