diff options
author | 2024-05-01 10:19:50 +0000 | |
---|---|---|
committer | 2024-05-01 10:19:50 +0000 | |
commit | e9d915df2cb03ebbcc35cfbb7d97860df0abc103 (patch) | |
tree | 51d209b7925a3d4306a36144a50e46826042773c /vulkan/libvulkan/swapchain.cpp | |
parent | 3aef18eed051782d0c0753c4425d6be40298451b (diff) |
Revert "EGL/ANGLE/Vulkan: respect EGL resolved RGBX format"
This revert was created by Android Culprit Assistant. The culprit was identified in the following culprit search session (http://go/aca-get/96953fd0-49c9-4874-bc2a-cdc3b220bf45).
Change-Id: Icb89f5d5b9c59e0d611191871db8d8c40106ee86
Diffstat (limited to 'vulkan/libvulkan/swapchain.cpp')
-rw-r--r-- | vulkan/libvulkan/swapchain.cpp | 62 |
1 files changed, 18 insertions, 44 deletions
diff --git a/vulkan/libvulkan/swapchain.cpp b/vulkan/libvulkan/swapchain.cpp index 3eeb6b14e0..74d3d9dc64 100644 --- a/vulkan/libvulkan/swapchain.cpp +++ b/vulkan/libvulkan/swapchain.cpp @@ -250,7 +250,6 @@ struct Surface { android::sp<ANativeWindow> window; VkSwapchainKHR swapchain_handle; uint64_t consumer_usage; - int default_format; // Indicate whether this surface has been used by a swapchain, no matter the // swapchain is still current or has been destroyed. @@ -527,15 +526,12 @@ void copy_ready_timings(Swapchain& swapchain, *count = num_copied; } -PixelFormat GetNativePixelFormat(VkFormat format, - VkCompositeAlphaFlagBitsKHR alpha) { +PixelFormat GetNativePixelFormat(VkFormat format) { PixelFormat native_format = PixelFormat::RGBA_8888; switch (format) { case VK_FORMAT_R8G8B8A8_UNORM: case VK_FORMAT_R8G8B8A8_SRGB: - native_format = alpha == VK_COMPOSITE_ALPHA_OPAQUE_BIT_KHR - ? PixelFormat::RGBX_8888 - : PixelFormat::RGBA_8888; + native_format = PixelFormat::RGBA_8888; break; case VK_FORMAT_R5G6B5_UNORM_PACK16: native_format = PixelFormat::RGB_565; @@ -625,12 +621,11 @@ VkResult CreateAndroidSurfaceKHR( return VK_ERROR_OUT_OF_HOST_MEMORY; Surface* surface = new (mem) Surface; - ANativeWindow* window = pCreateInfo->window; - surface->window = window; + surface->window = pCreateInfo->window; surface->swapchain_handle = VK_NULL_HANDLE; surface->used_by_swapchain = false; - int err = - native_window_get_consumer_usage(window, &surface->consumer_usage); + int err = native_window_get_consumer_usage(surface->window.get(), + &surface->consumer_usage); if (err != android::OK) { ALOGE("native_window_get_consumer_usage() failed: %s (%d)", strerror(-err), err); @@ -639,16 +634,8 @@ VkResult CreateAndroidSurfaceKHR( return VK_ERROR_SURFACE_LOST_KHR; } - err = window->query(window, NATIVE_WINDOW_FORMAT, &surface->default_format); - if (err != android::OK) { - ALOGE("NATIVE_WINDOW_FORMAT query failed: %s (%d)", strerror(-err), - err); - surface->~Surface(); - allocator->pfnFree(allocator->pUserData, surface); - return VK_ERROR_SURFACE_LOST_KHR; - } - - err = native_window_api_connect(window, NATIVE_WINDOW_API_EGL); + err = + native_window_api_connect(surface->window.get(), NATIVE_WINDOW_API_EGL); if (err != android::OK) { ALOGE("native_window_api_connect() failed: %s (%d)", strerror(-err), err); @@ -914,7 +901,7 @@ VkResult GetPhysicalDeviceSurfaceCapabilities2KHR( VkSurfaceCapabilities2KHR* pSurfaceCapabilities) { ATRACE_CALL(); - auto surface_handle = pSurfaceInfo->surface; + auto surface = pSurfaceInfo->surface; auto capabilities = &pSurfaceCapabilities->surfaceCapabilities; VkSurfacePresentModeEXT const *pPresentMode = nullptr; @@ -935,9 +922,7 @@ VkResult GetPhysicalDeviceSurfaceCapabilities2KHR( int transform_hint; int max_buffer_count; int min_undequeued_buffers; - VkCompositeAlphaFlagsKHR composite_alpha = - VK_COMPOSITE_ALPHA_INHERIT_BIT_KHR; - if (surface_handle == VK_NULL_HANDLE) { + if (surface == VK_NULL_HANDLE) { const InstanceData& instance_data = GetData(physicalDevice); ProcHook::Extension surfaceless = ProcHook::GOOGLE_surfaceless_query; bool surfaceless_enabled = @@ -958,8 +943,7 @@ VkResult GetPhysicalDeviceSurfaceCapabilities2KHR( capabilities->minImageCount = 0xFFFFFFFF; capabilities->maxImageCount = 0xFFFFFFFF; } else { - Surface& surface = *SurfaceFromHandle(surface_handle); - ANativeWindow* window = surface.window.get(); + ANativeWindow* window = SurfaceFromHandle(surface)->window.get(); err = window->query(window, NATIVE_WINDOW_DEFAULT_WIDTH, &width); if (err != android::OK) { @@ -1034,17 +1018,6 @@ VkResult GetPhysicalDeviceSurfaceCapabilities2KHR( min_undequeued_buffers + default_additional_buffers); capabilities->maxImageCount = static_cast<uint32_t>(max_buffer_count); } - - // The surface default format can be either of below: - // - consumer side default format - // - platform EGL resolved format and we get here via ANGLE - // - // For any of above, advertise OPAQUE bit so that later swapchain - // creation can resolve VK_FORMAT_R8G8B8A8_* to RGBX_8888 only if the - // client also requests OPAQUE bit for compositeAlpha. - if (surface.default_format == (int)PixelFormat::RGBX_8888) { - composite_alpha |= VK_COMPOSITE_ALPHA_OPAQUE_BIT_KHR; - } } capabilities->currentExtent = @@ -1071,7 +1044,9 @@ VkResult GetPhysicalDeviceSurfaceCapabilities2KHR( capabilities->currentTransform = TranslateNativeToVulkanTransform(transform_hint); - capabilities->supportedCompositeAlpha = composite_alpha; + // On Android, window composition is a WindowManager property, not something + // associated with the bufferqueue. It can't be changed from here. + capabilities->supportedCompositeAlpha = VK_COMPOSITE_ALPHA_INHERIT_BIT_KHR; capabilities->supportedUsageFlags = VK_IMAGE_USAGE_TRANSFER_SRC_BIT | VK_IMAGE_USAGE_TRANSFER_DST_BIT | @@ -1670,21 +1645,20 @@ VkResult CreateSwapchainKHR(VkDevice device, ALOGV("vkCreateSwapchainKHR: surface=0x%" PRIx64 " minImageCount=%u imageFormat=%u imageColorSpace=%u" - " imageExtent=%ux%u imageUsage=%#x preTransform=%u compositeAlpha=%u" - " presentMode=%u oldSwapchain=0x%" PRIx64, + " imageExtent=%ux%u imageUsage=%#x preTransform=%u presentMode=%u" + " oldSwapchain=0x%" PRIx64, reinterpret_cast<uint64_t>(create_info->surface), create_info->minImageCount, create_info->imageFormat, create_info->imageColorSpace, create_info->imageExtent.width, create_info->imageExtent.height, create_info->imageUsage, - create_info->preTransform, create_info->compositeAlpha, - create_info->presentMode, + create_info->preTransform, create_info->presentMode, reinterpret_cast<uint64_t>(create_info->oldSwapchain)); if (!allocator) allocator = &GetData(device).allocator; - PixelFormat native_pixel_format = GetNativePixelFormat( - create_info->imageFormat, create_info->compositeAlpha); + PixelFormat native_pixel_format = + GetNativePixelFormat(create_info->imageFormat); DataSpace native_dataspace = GetNativeDataspace( create_info->imageColorSpace, create_info->imageFormat); if (native_dataspace == DataSpace::UNKNOWN) { |