Donate to e Foundation | Murena handsets with /e/OS | Own a part of Murena! Learn more

Commit ea4d0bd4 authored by TreeHugger Robot's avatar TreeHugger Robot Committed by Automerger Merge Worker
Browse files

Merge "Vulkan: avoid calling cancelBuffer on a shared buffer" into tm-dev am:...

Merge "Vulkan: avoid calling cancelBuffer on a shared buffer" into tm-dev am: 7f3ca032 am: e0c2caf3

Original change: https://googleplex-android-review.googlesource.com/c/platform/frameworks/native/+/17673884



Change-Id: I649654df0dfea5f117f28db8694499c103f8bd32
Signed-off-by: default avatarAutomerger Merge Worker <android-build-automerger-merge-worker@system.gserviceaccount.com>
parents 41ce0a27 e0c2caf3
Loading
Loading
Loading
Loading
+11 −6
Original line number Original line Diff line number Diff line
@@ -299,6 +299,7 @@ static bool IsFencePending(int fd) {
}
}


void ReleaseSwapchainImage(VkDevice device,
void ReleaseSwapchainImage(VkDevice device,
                           bool shared_present,
                           ANativeWindow* window,
                           ANativeWindow* window,
                           int release_fence,
                           int release_fence,
                           Swapchain::Image& image,
                           Swapchain::Image& image,
@@ -330,7 +331,8 @@ void ReleaseSwapchainImage(VkDevice device,
        }
        }
        image.dequeue_fence = -1;
        image.dequeue_fence = -1;


        if (window) {
        // It's invalid to call cancelBuffer on a shared buffer
        if (window && !shared_present) {
            window->cancelBuffer(window, image.buffer.get(), release_fence);
            window->cancelBuffer(window, image.buffer.get(), release_fence);
        } else {
        } else {
            if (release_fence >= 0) {
            if (release_fence >= 0) {
@@ -364,9 +366,10 @@ void OrphanSwapchain(VkDevice device, Swapchain* swapchain) {
    if (swapchain->surface.swapchain_handle != HandleFromSwapchain(swapchain))
    if (swapchain->surface.swapchain_handle != HandleFromSwapchain(swapchain))
        return;
        return;
    for (uint32_t i = 0; i < swapchain->num_images; i++) {
    for (uint32_t i = 0; i < swapchain->num_images; i++) {
        if (!swapchain->images[i].dequeued)
        if (!swapchain->images[i].dequeued) {
            ReleaseSwapchainImage(device, nullptr, -1, swapchain->images[i],
            ReleaseSwapchainImage(device, swapchain->shared, nullptr, -1,
                                  true);
                                  swapchain->images[i], true);
        }
    }
    }
    swapchain->surface.swapchain_handle = VK_NULL_HANDLE;
    swapchain->surface.swapchain_handle = VK_NULL_HANDLE;
    swapchain->timing.clear();
    swapchain->timing.clear();
@@ -1084,7 +1087,8 @@ static void DestroySwapchainInternal(VkDevice device,
    }
    }


    for (uint32_t i = 0; i < swapchain->num_images; i++) {
    for (uint32_t i = 0; i < swapchain->num_images; i++) {
        ReleaseSwapchainImage(device, window, -1, swapchain->images[i], false);
        ReleaseSwapchainImage(device, swapchain->shared, window, -1,
                              swapchain->images[i], false);
    }
    }


    if (active) {
    if (active) {
@@ -1854,7 +1858,8 @@ VkResult QueuePresentKHR(VkQueue queue, const VkPresentInfoKHR* present_info) {
                    WorstPresentResult(swapchain_result, VK_SUBOPTIMAL_KHR);
                    WorstPresentResult(swapchain_result, VK_SUBOPTIMAL_KHR);
            }
            }
        } else {
        } else {
            ReleaseSwapchainImage(device, nullptr, fence, img, true);
            ReleaseSwapchainImage(device, swapchain.shared, nullptr, fence,
                                  img, true);
            swapchain_result = VK_ERROR_OUT_OF_DATE_KHR;
            swapchain_result = VK_ERROR_OUT_OF_DATE_KHR;
        }
        }