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

Commit 89eba368 authored by Courtney Goeltzenleuchter's avatar Courtney Goeltzenleuchter Committed by Android (Google) Code Review
Browse files

Merge "Add HDR Metadata extension"

parents d41b8e6d d634c483
Loading
Loading
Loading
Loading
+28 −0
Original line number Diff line number Diff line
@@ -153,6 +153,8 @@ define NULL_HANDLE 0
@extension("VK_KHR_shared_presentable_image") define VK_KHR_SHARED_PRESENTABLE_IMAGE_SPEC_VERSION 1
@extension("VK_KHR_shared_presentable_image") define VK_KHR_SHARED_PRESENTABLE_IMAGE_EXTENSION_NAME "VK_KHR_shared_presentable_image"

@extension("VK_EXT_HDR_METADATA_SPEC_VERSION") define VK_EXT_HDR_METADATA_SPEC_VERSION 1
@extension("VK_EXT_HDR_METADATA_EXTENSION_NAME") define VK_EXT_HDR_METADATA_EXTENSION_NAME "VK_EXT_hdr_metadata"


/////////////
@@ -3303,6 +3305,24 @@ class VkObjectTablePushConstantEntryNVX {
    VkShaderStageFlags                          stageFlags
}

@extension("VK_EXT_hdr_metadata")
class VkXYColorEXT {
    f32    x
    f32    y
}

@extension("VK_EXT_hdr_metadata")
class VkHdrMetadataEXT {
    VkXYColorEXT    displayPrimaryRed
    VkXYColorEXT    displayPrimaryGreen
    VkXYColorEXT    displayPrimaryBlue
    VkXYColorEXT    whitePoint
    f32             maxLuminance
    f32             minLuminance
    f32             maxContentLightLevel
    f32             maxFrameAverageLightLevel
}



////////////////
@@ -6147,6 +6167,14 @@ cmd VkResult vkGetSwapchainStatusKHR(
    return ?
}

@extension("VK_EXT_hdr_metadata")
cmd void  vkSetHdrMetadataEXT(
    VkDevice                                        device,
    u32                                             swapchainCount,
    const VkSwapchainKHR*                           pSwapchains,
    const VkHdrMetadataEXT*                         pMetadata) {
}


////////////////
// Validation //
+34 −1
Original line number Diff line number Diff line
@@ -6,7 +6,7 @@ extern "C" {
#endif

/*
** Copyright (c) 2015-2016 The Khronos Group Inc.
** Copyright (c) 2015-2017 The Khronos Group Inc.
**
** Licensed under the Apache License, Version 2.0 (the "License");
** you may not use this file except in compliance with the License.
@@ -4608,6 +4608,39 @@ VKAPI_ATTR void VKAPI_CALL vkGetPhysicalDeviceGeneratedCommandsPropertiesNVX(
    VkDeviceGeneratedCommandsLimitsNVX*         pLimits);
#endif

#define VK_EXT_hdr_metadata 1
#define VK_EXT_HDR_METADATA_SPEC_VERSION  0
#define VK_EXT_HDR_METADATA_EXTENSION_NAME "VK_EXT_hdr_metadata"

typedef struct VkXYColorEXT {
    float    x;
    float    y;
} VkXYColorEXT;

typedef struct VkHdrMetadataEXT {
    VkStructureType    sType;
    const void*        pNext;
    VkXYColorEXT       displayPrimaryRed;
    VkXYColorEXT       displayPrimaryGreen;
    VkXYColorEXT       displayPrimaryBlue;
    VkXYColorEXT       whitePoint;
    float              maxLuminance;
    float              minLuminance;
    float              maxContentLightLevel;
    float              maxFrameAverageLightLevel;
} VkHdrMetadataEXT;


typedef void (VKAPI_PTR *PFN_vkSetHdrMetadataEXT)(VkDevice device, uint32_t swapchainCount, const VkSwapchainKHR* pSwapchains, const VkHdrMetadataEXT* pMetadata);

#ifndef VK_NO_PROTOTYPES
VKAPI_ATTR void VKAPI_CALL vkSetHdrMetadataEXT(
    VkDevice                                    device,
    uint32_t                                    swapchainCount,
    const VkSwapchainKHR*                       pSwapchains,
    const VkHdrMetadataEXT*                     pMetadata);
#endif

#ifdef __cplusplus
}
#endif
+5 −3
Original line number Diff line number Diff line
@@ -682,11 +682,12 @@ bool InitDriverTable(VkDevice dev, PFN_vkGetDeviceProcAddr get_proc,
{{define "driver.InterceptedExtensions"}}
VK_ANDROID_native_buffer
VK_EXT_debug_report
VK_EXT_hdr_metadata
VK_GOOGLE_display_timing
VK_KHR_android_surface
VK_KHR_incremental_present
VK_KHR_surface
VK_KHR_swapchain
VK_GOOGLE_display_timing
VK_KHR_shared_presentable_image
{{end}}

@@ -1127,8 +1128,9 @@ VK_KHR_shared_presentable_image

{{/*
------------------------------------------------------------------------------
  Reports whether an extension is implemented entirely by the loader,
  so drivers should not enumerate it.
  Reports whether an extension has functions exported by the loader.
  E.g. applications can directly link to an extension function.
  Currently only support WSI extensions this way.
------------------------------------------------------------------------------
*/}}
{{define "IsExtensionExported"}}
+6 −1
Original line number Diff line number Diff line
@@ -472,6 +472,9 @@ void CreateInfoWrapper::FilterExtension(const char* name) {
                hook_extensions_.set(ext_bit);
                // return now as these extensions do not require HAL support
                return;
            case ProcHook::EXT_hdr_metadata:
                hook_extensions_.set(ext_bit);
                break;
            case ProcHook::EXTENSION_UNKNOWN:
                // HAL's extensions
                break;
@@ -737,12 +740,14 @@ VkResult EnumerateDeviceExtensionProperties(
    uint32_t* pPropertyCount,
    VkExtensionProperties* pProperties) {
    const InstanceData& data = GetData(physicalDevice);
    static const std::array<VkExtensionProperties, 2> loader_extensions = {{
    static const std::array<VkExtensionProperties, 3> loader_extensions = {{
        // WSI extensions
        {VK_KHR_INCREMENTAL_PRESENT_EXTENSION_NAME,
         VK_KHR_INCREMENTAL_PRESENT_SPEC_VERSION},
        {VK_GOOGLE_DISPLAY_TIMING_EXTENSION_NAME,
         VK_GOOGLE_DISPLAY_TIMING_SPEC_VERSION},
        {VK_EXT_HDR_METADATA_EXTENSION_NAME,
         VK_EXT_HDR_METADATA_SPEC_VERSION},
    }};

    // enumerate our extensions first
+17 −1
Original line number Diff line number Diff line
@@ -102,6 +102,14 @@ VKAPI_ATTR VkResult checkedGetSwapchainStatusKHR(VkDevice device, VkSwapchainKHR
    }
}

VKAPI_ATTR void checkedSetHdrMetadataEXT(VkDevice device, uint32_t swapchainCount, const VkSwapchainKHR* pSwapchains, const VkHdrMetadataEXT* pMetadata) {
    if (GetData(device).hook_extensions[ProcHook::EXT_hdr_metadata]) {
        SetHdrMetadataEXT(device, swapchainCount, pSwapchains, pMetadata);
    } else {
        Logger(device).Err(device, "VK_EXT_hdr_metadata not enabled. vkSetHdrMetadataEXT not executed.");
    }
}

// clang-format on

const ProcHook g_proc_hooks[] = {
@@ -330,6 +338,13 @@ const ProcHook g_proc_hooks[] = {
        nullptr,
        nullptr,
    },
    {
        "vkSetHdrMetadataEXT",
        ProcHook::DEVICE,
        ProcHook::EXT_hdr_metadata,
        reinterpret_cast<PFN_vkVoidFunction>(SetHdrMetadataEXT),
        reinterpret_cast<PFN_vkVoidFunction>(checkedSetHdrMetadataEXT),
    },
    // clang-format on
};

@@ -349,11 +364,12 @@ ProcHook::Extension GetProcHookExtension(const char* name) {
    // clang-format off
    if (strcmp(name, "VK_ANDROID_native_buffer") == 0) return ProcHook::ANDROID_native_buffer;
    if (strcmp(name, "VK_EXT_debug_report") == 0) return ProcHook::EXT_debug_report;
    if (strcmp(name, "VK_EXT_hdr_metadata") == 0) return ProcHook::EXT_hdr_metadata;
    if (strcmp(name, "VK_GOOGLE_display_timing") == 0) return ProcHook::GOOGLE_display_timing;
    if (strcmp(name, "VK_KHR_android_surface") == 0) return ProcHook::KHR_android_surface;
    if (strcmp(name, "VK_KHR_incremental_present") == 0) return ProcHook::KHR_incremental_present;
    if (strcmp(name, "VK_KHR_surface") == 0) return ProcHook::KHR_surface;
    if (strcmp(name, "VK_KHR_swapchain") == 0) return ProcHook::KHR_swapchain;
    if (strcmp(name, "VK_GOOGLE_display_timing") == 0) return ProcHook::GOOGLE_display_timing;
    if (strcmp(name, "VK_KHR_shared_presentable_image") == 0) return ProcHook::KHR_shared_presentable_image;
    // clang-format on
    return ProcHook::EXTENSION_UNKNOWN;
Loading