diff options
author | 2024-05-01 10:19:50 +0000 | |
---|---|---|
committer | 2024-05-01 10:19:50 +0000 | |
commit | e9d915df2cb03ebbcc35cfbb7d97860df0abc103 (patch) | |
tree | 51d209b7925a3d4306a36144a50e46826042773c | |
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
-rw-r--r-- | opengl/libs/EGL/egl_platform_entries.cpp | 29 | ||||
-rw-r--r-- | vulkan/libvulkan/swapchain.cpp | 62 |
2 files changed, 32 insertions, 59 deletions
diff --git a/opengl/libs/EGL/egl_platform_entries.cpp b/opengl/libs/EGL/egl_platform_entries.cpp index 6e4d513d4f..a6af713830 100644 --- a/opengl/libs/EGL/egl_platform_entries.cpp +++ b/opengl/libs/EGL/egl_platform_entries.cpp @@ -711,25 +711,24 @@ EGLSurface eglCreateWindowSurfaceTmpl(egl_display_t* dp, egl_connection_t* cnx, } attrib_list = strippedAttribList.data(); - int err = native_window_set_buffers_format(window, static_cast<int>(format)); - if (err != 0) { - ALOGE("error setting native window pixel format: %s (%d)", strerror(-err), err); - if (!cnx->angleLoaded) { + if (!cnx->angleLoaded) { + int err = native_window_set_buffers_format(window, static_cast<int>(format)); + if (err != 0) { + ALOGE("error setting native window pixel format: %s (%d)", strerror(-err), err); native_window_api_disconnect(window, NATIVE_WINDOW_API_EGL); + return setError(EGL_BAD_NATIVE_WINDOW, EGL_NO_SURFACE); } - return setError(EGL_BAD_NATIVE_WINDOW, EGL_NO_SURFACE); - } - android_dataspace dataSpace = dataSpaceFromEGLColorSpace(colorSpace, format); - // Set dataSpace even if it could be HAL_DATASPACE_UNKNOWN. HAL_DATASPACE_UNKNOWN is the default - // value, but it may have changed at this point. - err = native_window_set_buffers_data_space(window, dataSpace); - if (err != 0) { - ALOGE("error setting native window pixel dataSpace: %s (%d)", strerror(-err), err); - if (!cnx->angleLoaded) { + android_dataspace dataSpace = dataSpaceFromEGLColorSpace(colorSpace, format); + // Set dataSpace even if it could be HAL_DATASPACE_UNKNOWN. + // HAL_DATASPACE_UNKNOWN is the default value, but it may have changed + // at this point. + err = native_window_set_buffers_data_space(window, dataSpace); + if (err != 0) { + ALOGE("error setting native window pixel dataSpace: %s (%d)", strerror(-err), err); native_window_api_disconnect(window, NATIVE_WINDOW_API_EGL); + return setError(EGL_BAD_NATIVE_WINDOW, EGL_NO_SURFACE); } - return setError(EGL_BAD_NATIVE_WINDOW, EGL_NO_SURFACE); } // the EGL spec requires that a new EGLSurface default to swap interval @@ -744,8 +743,8 @@ EGLSurface eglCreateWindowSurfaceTmpl(egl_display_t* dp, egl_connection_t* cnx, } // EGLSurface creation failed - native_window_set_buffers_format(window, 0); if (!cnx->angleLoaded) { + native_window_set_buffers_format(window, 0); native_window_api_disconnect(window, NATIVE_WINDOW_API_EGL); } return EGL_NO_SURFACE; 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) { |