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

Commit 57f7f8c1 authored by Jesse Hall's avatar Jesse Hall
Browse files

vulkan: Enumerate device layer extensions

Change-Id: I453d815ffd910fd56103f1c624cca63ac2014df8
(cherry picked from commit 82a2b6626286610f417df3d48b8e9a56e3726f38)
parent aa410941
Loading
Loading
Loading
Loading
+15 −5
Original line number Diff line number Diff line
@@ -687,12 +687,22 @@ void GetPhysicalDeviceSparseImageFormatProperties_Bottom(
VKAPI_ATTR
VkResult EnumerateDeviceExtensionProperties_Bottom(
    VkPhysicalDevice /*pdev*/,
    const char* /*layer_name*/,
    const char* layer_name,
    uint32_t* properties_count,
    VkExtensionProperties* /*properties*/) {
    // TODO(jessehall): Implement me...
    *properties_count = 0;
    return VK_SUCCESS;
    VkExtensionProperties* properties) {
    const VkExtensionProperties* extensions = nullptr;
    uint32_t num_extensions = 0;
    if (layer_name) {
        GetDeviceLayerExtensions(layer_name, &extensions, &num_extensions);
    } else {
        // TODO(jessehall)
    }

    if (!properties || *properties_count > num_extensions)
        *properties_count = num_extensions;
    if (properties)
        std::copy(extensions, extensions + *properties_count, properties);
    return *properties_count < num_extensions ? VK_INCOMPLETE : VK_SUCCESS;
}

VKAPI_ATTR
+61 −37
Original line number Diff line number Diff line
@@ -295,6 +295,40 @@ VkResult EnumeratePhysicalDevices(VkInstance instance,
    return VK_SUCCESS;
}

VkResult EnumerateDeviceLayerProperties(VkPhysicalDevice /*gpu*/,
                                        uint32_t* count,
                                        VkLayerProperties* /*properties*/) {
    ALOGW("Driver vkEnumerateDeviceLayerProperties shouldn't be called");
    *count = 0;
    return VK_SUCCESS;
}

VkResult EnumerateDeviceExtensionProperties(VkPhysicalDevice /*gpu*/,
                                            const char* layer_name,
                                            uint32_t* count,
                                            VkExtensionProperties* properties) {
    if (layer_name) {
        ALOGW(
            "Driver vkEnumerateDeviceExtensionProperties shouldn't be called "
            "with a layer name ('%s')",
            layer_name);
        *count = 0;
        return VK_SUCCESS;
    }

    const VkExtensionProperties kExtensions[] = {
        {VK_ANDROID_NATIVE_BUFFER_EXTENSION_NAME,
         VK_ANDROID_NATIVE_BUFFER_SPEC_VERSION}};
    const uint32_t kExtensionsCount =
        sizeof(kExtensions) / sizeof(kExtensions[0]);

    if (!properties || *count > kExtensionsCount)
        *count = kExtensionsCount;
    if (properties)
        std::copy(kExtensions, kExtensions + *count, properties);
    return *count < kExtensionsCount ? VK_INCOMPLETE : VK_SUCCESS;
}

void GetPhysicalDeviceProperties(VkPhysicalDevice,
                                 VkPhysicalDeviceProperties* properties) {
    properties->apiVersion = VK_API_VERSION;
@@ -603,6 +637,33 @@ void DestroyImage(VkDevice device,
    allocator->pfnFree(allocator->pUserData, image);
}

VkResult GetSwapchainGrallocUsageANDROID(VkDevice,
                                         VkFormat,
                                         VkImageUsageFlags,
                                         int* grallocUsage) {
    // The null driver never reads or writes the gralloc buffer
    *grallocUsage = 0;
    return VK_SUCCESS;
}

VkResult AcquireImageANDROID(VkDevice,
                             VkImage,
                             int fence,
                             VkSemaphore,
                             VkFence) {
    close(fence);
    return VK_SUCCESS;
}

VkResult QueueSignalReleaseImageANDROID(VkQueue,
                                        uint32_t,
                                        const VkSemaphore*,
                                        VkImage,
                                        int* fence) {
    *fence = -1;
    return VK_SUCCESS;
}

// -----------------------------------------------------------------------------
// No-op types

@@ -760,33 +821,6 @@ VkResult CreateDebugReportCallbackEXT(VkInstance instance,
    return VK_SUCCESS;
}

VkResult GetSwapchainGrallocUsageANDROID(VkDevice,
                                         VkFormat,
                                         VkImageUsageFlags,
                                         int* grallocUsage) {
    // The null driver never reads or writes the gralloc buffer
    *grallocUsage = 0;
    return VK_SUCCESS;
}

VkResult AcquireImageANDROID(VkDevice,
                             VkImage,
                             int fence,
                             VkSemaphore,
                             VkFence) {
    close(fence);
    return VK_SUCCESS;
}

VkResult QueueSignalReleaseImageANDROID(VkQueue,
                                        uint32_t,
                                        const VkSemaphore*,
                                        VkImage,
                                        int* fence) {
    *fence = -1;
    return VK_SUCCESS;
}

// -----------------------------------------------------------------------------
// No-op entrypoints

@@ -812,16 +846,6 @@ VkResult EnumerateInstanceLayerProperties(uint32_t* pCount, VkLayerProperties* p
    return VK_SUCCESS;
}

VkResult EnumerateDeviceLayerProperties(VkPhysicalDevice physicalDevice, uint32_t* pCount, VkLayerProperties* pProperties) {
    ALOGV("TODO: vk%s", __FUNCTION__);
    return VK_SUCCESS;
}

VkResult EnumerateDeviceExtensionProperties(VkPhysicalDevice physicalDevice, const char* pLayerName, uint32_t* pCount, VkExtensionProperties* pProperties) {
    ALOGV("TODO: vk%s", __FUNCTION__);
    return VK_SUCCESS;
}

VkResult QueueSubmit(VkQueue queue, uint32_t submitCount, const VkSubmitInfo* pSubmitInfo, VkFence fence) {
    return VK_SUCCESS;
}