/*
 * Copyright 2016 Google Inc.
 *
 * Use of this source code is governed by a BSD-style license that can be
 * found in the LICENSE file.
 */

#ifndef GrVkExtensions_DEFINED
#define GrVkExtensions_DEFINED

#include "../private/SkTArray.h"
#include "SkString.h"
#include "vk/GrVkDefines.h"

/**
 * This helper queries the Vulkan driver for available extensions and layers, remembers them,
 * and can be queried. It supports queries for both instance and device extensions and layers.
 */
class SK_API GrVkExtensions {
public:
    GrVkExtensions() : fInstanceExtensionStrings(new SkTArray<SkString>)
                     , fDeviceExtensionStrings(new SkTArray<SkString>)
                     , fInstanceLayerStrings(new SkTArray<SkString>)
                     , fDeviceLayerStrings(new SkTArray<SkString>) {}

    bool initInstance(uint32_t specVersion);
    bool initDevice(uint32_t specVersion, VkInstance, VkPhysicalDevice);

    /**
     * Queries whether an extension or layer is present. Will fail if not initialized.
     */
    bool hasInstanceExtension(const char[]) const;
    bool hasDeviceExtension(const char[]) const;
    bool hasInstanceLayer(const char[]) const;
    bool hasDeviceLayer(const char[]) const;

    void print(const char* sep = "\n") const;

private:
    std::unique_ptr<SkTArray<SkString>>  fInstanceExtensionStrings;
    std::unique_ptr<SkTArray<SkString>>  fDeviceExtensionStrings;
    std::unique_ptr<SkTArray<SkString>>  fInstanceLayerStrings;
    std::unique_ptr<SkTArray<SkString>>  fDeviceLayerStrings;
};

#endif
