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

Commit 58153aa0 authored by TreeHugger Robot's avatar TreeHugger Robot Committed by Android (Google) Code Review
Browse files

Merge "Add HDR support to Vulkan"

parents 085e7787 7671d461
Loading
Loading
Loading
Loading
+4 −0
Original line number Diff line number Diff line
@@ -68,10 +68,14 @@ cc_library_shared {
        "vulkan_headers",
    ],
    shared_libs: [
        "android.hardware.configstore@1.0",
        "android.hardware.configstore-utils",
        "libziparchive",
        "libhardware",
        "libsync",
        "libbase",
        "libhidlbase",
        "libhidltransport",
        "liblog",
        "libui",
        "libgraphicsenv",
+13 −0
Original line number Diff line number Diff line
@@ -27,6 +27,8 @@
#include <log/log.h>

#include <android/dlext.h>
#include <android/hardware/configstore/1.0/ISurfaceFlingerConfigs.h>
#include <configstore/Utils.h>
#include <cutils/properties.h>
#include <graphicsenv/GraphicsEnv.h>
#include <utils/Vector.h>
@@ -36,6 +38,9 @@
#include "driver.h"
#include "stubhal.h"

using namespace android::hardware::configstore;
using namespace android::hardware::configstore::V1_0;

// TODO(b/37049319) Get this from a header once one exists
extern "C" {
android_namespace_t* android_get_exported_namespace(const char*);
@@ -826,6 +831,14 @@ VkResult EnumerateDeviceExtensionProperties(
        VK_KHR_INCREMENTAL_PRESENT_EXTENSION_NAME,
        VK_KHR_INCREMENTAL_PRESENT_SPEC_VERSION});

    bool hdrBoardConfig =
        getBool<ISurfaceFlingerConfigs, &ISurfaceFlingerConfigs::hasHDRDisplay>(
            false);
    if (hdrBoardConfig) {
        loader_extensions.push_back({VK_EXT_HDR_METADATA_EXTENSION_NAME,
                                     VK_EXT_HDR_METADATA_SPEC_VERSION});
    }

    VkPhysicalDevicePresentationPropertiesANDROID presentation_properties;
    if (QueryPresentationProperties(physicalDevice, &presentation_properties) &&
        presentation_properties.sharedImage) {
+30 −6
Original line number Diff line number Diff line
@@ -1650,15 +1650,39 @@ VkResult GetSwapchainStatusKHR(
}

VKAPI_ATTR void SetHdrMetadataEXT(
    VkDevice device,
    VkDevice,
    uint32_t swapchainCount,
    const VkSwapchainKHR* pSwapchains,
    const VkHdrMetadataEXT* pHdrMetadataEXTs) {
    // TODO: courtneygo: implement actual function
    (void)device;
    (void)swapchainCount;
    (void)pSwapchains;
    (void)pHdrMetadataEXTs;

    for (uint32_t idx = 0; idx < swapchainCount; idx++) {
        Swapchain* swapchain = SwapchainFromHandle(pSwapchains[idx]);
        if (!swapchain)
            continue;

        if (swapchain->surface.swapchain_handle != pSwapchains[idx]) continue;

        ANativeWindow* window = swapchain->surface.window.get();

        VkHdrMetadataEXT vulkanMetadata = pHdrMetadataEXTs[idx];
        const android_smpte2086_metadata smpteMetdata = {
            {vulkanMetadata.displayPrimaryRed.x,
             vulkanMetadata.displayPrimaryRed.y},
            {vulkanMetadata.displayPrimaryGreen.x,
             vulkanMetadata.displayPrimaryGreen.y},
            {vulkanMetadata.displayPrimaryBlue.x,
             vulkanMetadata.displayPrimaryBlue.y},
            {vulkanMetadata.whitePoint.x, vulkanMetadata.whitePoint.y},
            vulkanMetadata.maxLuminance,
            vulkanMetadata.minLuminance};
        native_window_set_buffers_smpte2086_metadata(window, &smpteMetdata);

        const android_cta861_3_metadata cta8613Metadata = {
            vulkanMetadata.maxContentLightLevel,
            vulkanMetadata.maxFrameAverageLightLevel};
        native_window_set_buffers_cta861_3_metadata(window, &cta8613Metadata);
    }

    return;
}