layers_extensions.h revision 25700b452535ce7ae838bfe832392b46ed555ed2
1c96880f2cd1d34ffb9e3d10d80f0a3ddcc5579a8Chia-I Wu/*
2c96880f2cd1d34ffb9e3d10d80f0a3ddcc5579a8Chia-I Wu * Copyright 2015 The Android Open Source Project
3c96880f2cd1d34ffb9e3d10d80f0a3ddcc5579a8Chia-I Wu *
4c96880f2cd1d34ffb9e3d10d80f0a3ddcc5579a8Chia-I Wu * Licensed under the Apache License, Version 2.0 (the "License");
5c96880f2cd1d34ffb9e3d10d80f0a3ddcc5579a8Chia-I Wu * you may not use this file except in compliance with the License.
6c96880f2cd1d34ffb9e3d10d80f0a3ddcc5579a8Chia-I Wu * You may obtain a copy of the License at
7c96880f2cd1d34ffb9e3d10d80f0a3ddcc5579a8Chia-I Wu *
8c96880f2cd1d34ffb9e3d10d80f0a3ddcc5579a8Chia-I Wu *      http://www.apache.org/licenses/LICENSE-2.0
9c96880f2cd1d34ffb9e3d10d80f0a3ddcc5579a8Chia-I Wu *
10c96880f2cd1d34ffb9e3d10d80f0a3ddcc5579a8Chia-I Wu * Unless required by applicable law or agreed to in writing, software
11c96880f2cd1d34ffb9e3d10d80f0a3ddcc5579a8Chia-I Wu * distributed under the License is distributed on an "AS IS" BASIS,
12c96880f2cd1d34ffb9e3d10d80f0a3ddcc5579a8Chia-I Wu * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
13c96880f2cd1d34ffb9e3d10d80f0a3ddcc5579a8Chia-I Wu * See the License for the specific language governing permissions and
14c96880f2cd1d34ffb9e3d10d80f0a3ddcc5579a8Chia-I Wu * limitations under the License.
15c96880f2cd1d34ffb9e3d10d80f0a3ddcc5579a8Chia-I Wu */
16c96880f2cd1d34ffb9e3d10d80f0a3ddcc5579a8Chia-I Wu
17c96880f2cd1d34ffb9e3d10d80f0a3ddcc5579a8Chia-I Wu#ifndef LIBVULKAN_LAYERS_EXTENSIONS_H
18c96880f2cd1d34ffb9e3d10d80f0a3ddcc5579a8Chia-I Wu#define LIBVULKAN_LAYERS_EXTENSIONS_H 1
19c96880f2cd1d34ffb9e3d10d80f0a3ddcc5579a8Chia-I Wu
20c96880f2cd1d34ffb9e3d10d80f0a3ddcc5579a8Chia-I Wu#include <vulkan/vulkan.h>
21c96880f2cd1d34ffb9e3d10d80f0a3ddcc5579a8Chia-I Wu
22c96880f2cd1d34ffb9e3d10d80f0a3ddcc5579a8Chia-I Wunamespace vulkan {
23c96880f2cd1d34ffb9e3d10d80f0a3ddcc5579a8Chia-I Wunamespace api {
24c96880f2cd1d34ffb9e3d10d80f0a3ddcc5579a8Chia-I Wu
25c96880f2cd1d34ffb9e3d10d80f0a3ddcc5579a8Chia-I Wustruct Layer;
2625700b452535ce7ae838bfe832392b46ed555ed2Chia-I Wu
27c96880f2cd1d34ffb9e3d10d80f0a3ddcc5579a8Chia-I Wuclass LayerRef {
28c96880f2cd1d34ffb9e3d10d80f0a3ddcc5579a8Chia-I Wu   public:
29bea09db9c2165f06771f3a3da423f4f85ac6347eChia-I Wu    LayerRef(const Layer* layer, bool is_instance);
30c96880f2cd1d34ffb9e3d10d80f0a3ddcc5579a8Chia-I Wu    LayerRef(LayerRef&& other);
31c96880f2cd1d34ffb9e3d10d80f0a3ddcc5579a8Chia-I Wu    ~LayerRef();
32c96880f2cd1d34ffb9e3d10d80f0a3ddcc5579a8Chia-I Wu    LayerRef(const LayerRef&) = delete;
33c96880f2cd1d34ffb9e3d10d80f0a3ddcc5579a8Chia-I Wu    LayerRef& operator=(const LayerRef&) = delete;
34c96880f2cd1d34ffb9e3d10d80f0a3ddcc5579a8Chia-I Wu
35c96880f2cd1d34ffb9e3d10d80f0a3ddcc5579a8Chia-I Wu    const char* GetName() const;
3683506d84d00bbb35ecebb44261b2139bc40ef3e2Chia-I Wu    uint32_t GetSpecVersion() const;
37c96880f2cd1d34ffb9e3d10d80f0a3ddcc5579a8Chia-I Wu
38c96880f2cd1d34ffb9e3d10d80f0a3ddcc5579a8Chia-I Wu    // provides bool-like behavior
39c96880f2cd1d34ffb9e3d10d80f0a3ddcc5579a8Chia-I Wu    operator const Layer*() const { return layer_; }
40c96880f2cd1d34ffb9e3d10d80f0a3ddcc5579a8Chia-I Wu
41c96880f2cd1d34ffb9e3d10d80f0a3ddcc5579a8Chia-I Wu    PFN_vkGetInstanceProcAddr GetGetInstanceProcAddr() const;
42c96880f2cd1d34ffb9e3d10d80f0a3ddcc5579a8Chia-I Wu    PFN_vkGetDeviceProcAddr GetGetDeviceProcAddr() const;
43c96880f2cd1d34ffb9e3d10d80f0a3ddcc5579a8Chia-I Wu
44c96880f2cd1d34ffb9e3d10d80f0a3ddcc5579a8Chia-I Wu    bool SupportsExtension(const char* name) const;
45c96880f2cd1d34ffb9e3d10d80f0a3ddcc5579a8Chia-I Wu
46c96880f2cd1d34ffb9e3d10d80f0a3ddcc5579a8Chia-I Wu   private:
4783506d84d00bbb35ecebb44261b2139bc40ef3e2Chia-I Wu    const Layer* layer_;
48bea09db9c2165f06771f3a3da423f4f85ac6347eChia-I Wu    bool is_instance_;
49c96880f2cd1d34ffb9e3d10d80f0a3ddcc5579a8Chia-I Wu};
50c96880f2cd1d34ffb9e3d10d80f0a3ddcc5579a8Chia-I Wu
51c96880f2cd1d34ffb9e3d10d80f0a3ddcc5579a8Chia-I Wuvoid DiscoverLayers();
5225700b452535ce7ae838bfe832392b46ed555ed2Chia-I Wu
5325700b452535ce7ae838bfe832392b46ed555ed2Chia-I Wuuint32_t GetLayerCount();
5425700b452535ce7ae838bfe832392b46ed555ed2Chia-I Wuconst Layer& GetLayer(uint32_t index);
5525700b452535ce7ae838bfe832392b46ed555ed2Chia-I Wu
5625700b452535ce7ae838bfe832392b46ed555ed2Chia-I Wuconst VkLayerProperties& GetLayerProperties(const Layer& layer);
5725700b452535ce7ae838bfe832392b46ed555ed2Chia-I Wubool IsLayerGlobal(const Layer& layer);
5825700b452535ce7ae838bfe832392b46ed555ed2Chia-I Wu
59c96880f2cd1d34ffb9e3d10d80f0a3ddcc5579a8Chia-I Wuvoid GetInstanceLayerExtensions(const char* name,
60c96880f2cd1d34ffb9e3d10d80f0a3ddcc5579a8Chia-I Wu                                const VkExtensionProperties** properties,
61c96880f2cd1d34ffb9e3d10d80f0a3ddcc5579a8Chia-I Wu                                uint32_t* count);
62c96880f2cd1d34ffb9e3d10d80f0a3ddcc5579a8Chia-I Wuvoid GetDeviceLayerExtensions(const char* name,
63c96880f2cd1d34ffb9e3d10d80f0a3ddcc5579a8Chia-I Wu                              const VkExtensionProperties** properties,
64c96880f2cd1d34ffb9e3d10d80f0a3ddcc5579a8Chia-I Wu                              uint32_t* count);
65c96880f2cd1d34ffb9e3d10d80f0a3ddcc5579a8Chia-I WuLayerRef GetInstanceLayerRef(const char* name);
66c96880f2cd1d34ffb9e3d10d80f0a3ddcc5579a8Chia-I WuLayerRef GetDeviceLayerRef(const char* name);
67c96880f2cd1d34ffb9e3d10d80f0a3ddcc5579a8Chia-I Wu
68c96880f2cd1d34ffb9e3d10d80f0a3ddcc5579a8Chia-I Wu}  // namespace api
69c96880f2cd1d34ffb9e3d10d80f0a3ddcc5579a8Chia-I Wu}  // namespace vulkan
70c96880f2cd1d34ffb9e3d10d80f0a3ddcc5579a8Chia-I Wu
71c96880f2cd1d34ffb9e3d10d80f0a3ddcc5579a8Chia-I Wu#endif  // LIBVULKAN_LAYERS_EXTENSIONS_H
72