Timo Aaltonen pushed to branch upstream-unstable at X Strike Force / vulkan / vulkan-loader
Commits:
-
d7452989
by Mark Young at 2019-01-10T16:54:41Z
-
0cb5b295
by Lenny Komow at 2019-01-10T21:18:55Z
-
627f77f8
by Lenny Komow at 2019-01-16T00:16:33Z
-
faf01fe0
by Mike Schuchardt at 2019-01-18T16:35:24Z
-
e1eafa18
by Lenny Komow at 2019-02-05T22:25:39Z
-
55fc2b8c
by Shannon McPherson at 2019-02-11T18:35:47Z
-
d2ed0170
by Shannon McPherson at 2019-02-14T21:53:39Z
-
5d18b85a
by KarenGhavam-lunarG at 2019-02-15T18:56:31Z
-
15fa85d9
by Shannon McPherson at 2019-02-20T20:52:37Z
-
96e0d1f1
by KarenGhavam-lunarG at 2019-02-25T22:43:51Z
-
4b1bb589
by Lenny Komow at 2019-02-26T17:38:26Z
-
d0b340bb
by Shannon McPherson at 2019-03-01T03:45:30Z
9 changed files:
- .travis.yml
- − COPYRIGHT.txt
- LICENSE.txt
- loader/LoaderAndLayerInterface.md
- loader/loader.c
- loader/loader.h
- loader/loader.rc
- scripts/known_good.json
- scripts/loader_genvk.py
Changes:
... | ... | @@ -50,11 +50,6 @@ before_install: |
50 | 50 |
sudo apt-get -qq update
|
51 | 51 |
sudo apt-get -y install libxkbcommon-dev libwayland-dev libxrandr-dev libx11-xcb-dev
|
52 | 52 |
fi
|
53 |
- - |
|
|
54 |
- if [[ "$VULKAN_BUILD_TARGET" == "MACOS" ]]; then
|
|
55 |
- # We need to upgrade to a newer python
|
|
56 |
- brew upgrade python3
|
|
57 |
- fi
|
|
58 | 53 |
- |
|
59 | 54 |
if [[ "$VULKAN_BUILD_TARGET" == "LINUX" ]] || [[ "$VULKAN_BUILD_TARGET" == "MACOS" ]]; then
|
60 | 55 |
# Install dependencies
|
1 |
-This file contains other licenses and their copyrights that appear in this
|
|
2 |
-repository besides Apache 2.0 license.
|
|
3 |
- |
|
4 |
-===================================================
|
|
5 |
-/*
|
|
6 |
- Copyright (c) 2009 Dave Gamble
|
|
7 |
- |
|
8 |
- Permission is hereby granted, free of charge, to any person obtaining a copy
|
|
9 |
- of this software and associated documentation files (the "Software"), to deal
|
|
10 |
- in the Software without restriction, including without limitation the rights
|
|
11 |
- to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
|
|
12 |
- copies of the Software, and to permit persons to whom the Software is
|
|
13 |
- furnished to do so, subject to the following conditions:
|
|
14 |
- |
|
15 |
- The above copyright notice and this permission notice shall be included in
|
|
16 |
- all copies or substantial portions of the Software.
|
|
17 |
- |
|
18 |
- THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
|
|
19 |
- IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
|
|
20 |
- FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
|
|
21 |
- AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
|
|
22 |
- LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
|
|
23 |
- OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN
|
|
24 |
- THE SOFTWARE.
|
|
25 |
-*/
|
|
26 |
- |
|
27 |
-===================================================
|
|
28 |
-/*
|
|
29 |
- |
|
30 |
- Copyright Kevlin Henney, 1997, 2003, 2012. All rights reserved.
|
|
31 |
- |
|
32 |
- Permission to use, copy, modify, and distribute this software and its
|
|
33 |
- documentation for any purpose is hereby granted without fee, provided
|
|
34 |
- that this copyright and permissions notice appear in all copies and
|
|
35 |
- derivatives.
|
|
36 |
-
|
|
37 |
- This software is supplied "as is" without express or implied warranty.
|
|
38 |
- |
|
39 |
- But that said, if there are any problems please get in touch.
|
|
40 |
- |
|
41 |
-*/
|
|
42 |
- |
|
43 |
-===================================================
|
|
44 |
-Copyright 2008, Google Inc.
|
|
45 |
-All rights reserved.
|
|
46 |
- |
|
47 |
-Redistribution and use in source and binary forms, with or without
|
|
48 |
-modification, are permitted provided that the following conditions are
|
|
49 |
-met:
|
|
50 |
- |
|
51 |
- * Redistributions of source code must retain the above copyright
|
|
52 |
-notice, this list of conditions and the following disclaimer.
|
|
53 |
- * Redistributions in binary form must reproduce the above
|
|
54 |
-copyright notice, this list of conditions and the following disclaimer
|
|
55 |
-in the documentation and/or other materials provided with the
|
|
56 |
-distribution.
|
|
57 |
- * Neither the name of Google Inc. nor the names of its
|
|
58 |
-contributors may be used to endorse or promote products derived from
|
|
59 |
-this software without specific prior written permission.
|
|
60 |
- |
|
61 |
-THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS
|
|
62 |
-"AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT
|
|
63 |
-LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR
|
|
64 |
-A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT
|
|
65 |
-OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,
|
|
66 |
-SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT
|
|
67 |
-LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,
|
|
68 |
-DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY
|
|
69 |
-THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
|
|
70 |
-(INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
|
|
71 |
-OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
|
|
72 |
- |
|
73 |
-===================================================
|
|
74 |
-Copyright 2000-2009 Kitware, Inc., Insight Software Consortium
|
|
75 |
-All rights reserved.
|
|
76 |
- |
|
77 |
-Redistribution and use in source and binary forms, with or without
|
|
78 |
-modification, are permitted provided that the following conditions
|
|
79 |
-are met:
|
|
80 |
- |
|
81 |
-* Redistributions of source code must retain the above copyright
|
|
82 |
- notice, this list of conditions and the following disclaimer.
|
|
83 |
- |
|
84 |
-* Redistributions in binary form must reproduce the above copyright
|
|
85 |
- notice, this list of conditions and the following disclaimer in the
|
|
86 |
- documentation and/or other materials provided with the distribution.
|
|
87 |
- |
|
88 |
-* Neither the names of Kitware, Inc., the Insight Software Consortium,
|
|
89 |
- nor the names of their contributors may be used to endorse or promote
|
|
90 |
- products derived from this software without specific prior written
|
|
91 |
- permission.
|
|
92 |
- |
|
93 |
-THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS
|
|
94 |
-"AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT
|
|
95 |
-LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR
|
|
96 |
-A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT
|
|
97 |
-HOLDER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,
|
|
98 |
-SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT
|
|
99 |
-LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,
|
|
100 |
-DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY
|
|
101 |
-THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
|
|
102 |
-(INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
|
|
103 |
-OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
|
|
104 |
- |
|
105 |
-===================================================
|
|
106 |
-Copyright (c) 2011 Fredrik Höglund <fredrik@kde.org>
|
|
107 |
-Copyright (c) 2008 Helio Chissini de Castro, <helio@kde.org>
|
|
108 |
-Copyright (c) 2007 Matthias Kretz, <kretz@kde.org>
|
|
109 |
- |
|
110 |
-Redistribution and use is allowed according to the terms of the BSD license.
|
|
111 |
- |
|
112 |
-===================================================
|
|
113 |
-/// Copyright (c) 2005 - 2014 G-Truc Creation (www.g-truc.net)
|
|
114 |
-/// Permission is hereby granted, free of charge, to any person obtaining a copy
|
|
115 |
-/// of this software and associated documentation files (the "Software"), to deal
|
|
116 |
-/// in the Software without restriction, including without limitation the rights
|
|
117 |
-/// to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
|
|
118 |
-/// copies of the Software, and to permit persons to whom the Software is
|
|
119 |
-/// furnished to do so, subject to the following conditions:
|
|
120 |
-///
|
|
121 |
-/// The above copyright notice and this permission notice shall be included in
|
|
122 |
-/// all copies or substantial portions of the Software.
|
|
123 |
-///
|
|
124 |
-/// THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
|
|
125 |
-/// IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
|
|
126 |
-/// FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
|
|
127 |
-/// AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
|
|
128 |
-/// LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
|
|
129 |
-/// OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN
|
|
130 |
-/// THE SOFTWARE.
|
|
131 |
-///
|
1 |
+The majority of files in this project use the Apache 2.0 License.
|
|
2 |
+There are a few exceptions and their license can be found in the source.
|
|
3 |
+Any license deviations from Apache 2.0 are "more permissive" licenses.
|
|
4 |
+ |
|
5 |
+===========================================================================================
|
|
1 | 6 |
|
2 | 7 |
Apache License
|
3 | 8 |
Version 2.0, January 2004
|
1 |
+<!-- markdownlint-disable MD041 -->
|
|
2 |
+[![Khronos Vulkan][1]][2]
|
|
3 |
+ |
|
4 |
+[1]: https://vulkan.lunarg.com/img/Vulkan_100px_Dec16.png "https://www.khronos.org/vulkan/"
|
|
5 |
+[2]: https://www.khronos.org/vulkan/
|
|
6 |
+ |
|
1 | 7 |
# Architecture of the Vulkan Loader Interfaces
|
8 |
+[![Creative Commons][3]][4]
|
|
9 |
+ |
|
10 |
+<!-- Copyright © 2015-2019 LunarG, Inc. -->
|
|
11 |
+ |
|
2 | 12 |
|
13 |
+[3]: https://i.creativecommons.org/l/by-nd/4.0/88x31.png "Creative Commons License"
|
|
14 |
+[4]: https://creativecommons.org/licenses/by-nd/4.0/
|
|
3 | 15 |
## Table of Contents
|
4 | 16 |
* [Overview](#overview)
|
5 | 17 |
* [Who Should Read This Document](#who-should-read-this-document)
|
1 | 1 |
/*
|
2 | 2 |
*
|
3 |
- * Copyright (c) 2014-2018 The Khronos Group Inc.
|
|
4 |
- * Copyright (c) 2014-2018 Valve Corporation
|
|
5 |
- * Copyright (c) 2014-2018 LunarG, Inc.
|
|
3 |
+ * Copyright (c) 2014-2019 The Khronos Group Inc.
|
|
4 |
+ * Copyright (c) 2014-2019 Valve Corporation
|
|
5 |
+ * Copyright (c) 2014-2019 LunarG, Inc.
|
|
6 | 6 |
* Copyright (C) 2015 Google Inc.
|
7 | 7 |
*
|
8 | 8 |
* Licensed under the Apache License, Version 2.0 (the "License");
|
... | ... | @@ -1005,6 +1005,7 @@ static struct loader_layer_properties *loaderGetNextLayerPropertySlot(const stru |
1005 | 1005 |
return NULL;
|
1006 | 1006 |
}
|
1007 | 1007 |
layer_list->list = new_ptr;
|
1008 |
+ memset((uint8_t *)layer_list->list + layer_list->capacity, 0, layer_list->capacity);
|
|
1008 | 1009 |
layer_list->capacity *= 2;
|
1009 | 1010 |
}
|
1010 | 1011 |
|
... | ... | @@ -1048,6 +1049,17 @@ static bool loaderFindLayerNameInMetaLayer(const struct loader_instance *inst, c |
1048 | 1049 |
return false;
|
1049 | 1050 |
}
|
1050 | 1051 |
|
1052 |
+// Search the override layer's blacklist for a layer matching the given layer name
|
|
1053 |
+static bool loaderFindLayerNameInBlacklist(const struct loader_instance *inst, const char *layer_name,
|
|
1054 |
+ struct loader_layer_list *layer_list, struct loader_layer_properties *meta_layer_props) {
|
|
1055 |
+ for (uint32_t black_layer = 0; black_layer < meta_layer_props->num_blacklist_layers; black_layer++) {
|
|
1056 |
+ if (!strcmp(meta_layer_props->blacklist_layer_names[black_layer], layer_name)) {
|
|
1057 |
+ return true;
|
|
1058 |
+ }
|
|
1059 |
+ }
|
|
1060 |
+ return false;
|
|
1061 |
+}
|
|
1062 |
+ |
|
1051 | 1063 |
// Remove all layer properties entries from the list
|
1052 | 1064 |
void loaderDeleteLayerListAndProperties(const struct loader_instance *inst, struct loader_layer_list *layer_list) {
|
1053 | 1065 |
uint32_t i, j, k;
|
... | ... | @@ -1056,6 +1068,10 @@ void loaderDeleteLayerListAndProperties(const struct loader_instance *inst, stru |
1056 | 1068 |
if (!layer_list) return;
|
1057 | 1069 |
|
1058 | 1070 |
for (i = 0; i < layer_list->count; i++) {
|
1071 |
+ if (NULL != layer_list->list[i].blacklist_layer_names) {
|
|
1072 |
+ loader_instance_heap_free(inst, layer_list->list[i].blacklist_layer_names);
|
|
1073 |
+ layer_list->list[i].blacklist_layer_names = NULL;
|
|
1074 |
+ }
|
|
1059 | 1075 |
if (NULL != layer_list->list[i].component_layer_names) {
|
1060 | 1076 |
loader_instance_heap_free(inst, layer_list->list[i].component_layer_names);
|
1061 | 1077 |
layer_list->list[i].component_layer_names = NULL;
|
... | ... | @@ -1087,9 +1103,9 @@ void loaderDeleteLayerListAndProperties(const struct loader_instance *inst, stru |
1087 | 1103 |
}
|
1088 | 1104 |
}
|
1089 | 1105 |
|
1090 |
-// Remove all layers in the layer list that are not found inside the override layer.
|
|
1106 |
+// Remove all layers in the layer list that are blacklisted by the override layer.
|
|
1091 | 1107 |
// NOTE: This should only be called if an override layer is found and not expired.
|
1092 |
-void loaderRemoveLayersNotInOverride(const struct loader_instance *inst, struct loader_layer_list *layer_list) {
|
|
1108 |
+void loaderRemoveLayersInBlacklist(const struct loader_instance *inst, struct loader_layer_list *layer_list) {
|
|
1093 | 1109 |
struct loader_layer_properties *override_prop = loaderFindLayerProperty(VK_OVERRIDE_LAYER_NAME, layer_list);
|
1094 | 1110 |
if (NULL == override_prop) {
|
1095 | 1111 |
return;
|
... | ... | @@ -1104,17 +1120,18 @@ void loaderRemoveLayersNotInOverride(const struct loader_instance *inst, struct |
1104 | 1120 |
continue;
|
1105 | 1121 |
}
|
1106 | 1122 |
|
1107 |
- // If not found in the override layer, remove it
|
|
1108 |
- if (!loaderFindLayerNameInMetaLayer(inst, cur_layer_name, layer_list, override_prop)) {
|
|
1123 |
+ // If found in the override layer's blacklist, remove it
|
|
1124 |
+ if (loaderFindLayerNameInBlacklist(inst, cur_layer_name, layer_list, override_prop)) {
|
|
1109 | 1125 |
loader_log(inst, VK_DEBUG_REPORT_DEBUG_BIT_EXT, 0,
|
1110 |
- "loaderRemoveLayersNotInOverride : Override layer is active, and layer %s is not list"
|
|
1111 |
- " inside of it. So removing layer from current layer list.",
|
|
1112 |
- cur_layer_name);
|
|
1126 |
+ "loaderRemoveLayersInBlacklist: Override layer is active and layer % is in the blacklist"
|
|
1127 |
+ " inside of it. Removing that layer from current layer list.",
|
|
1128 |
+ cur_layer_name);
|
|
1113 | 1129 |
|
1114 | 1130 |
if (cur_layer_prop.type_flags & VK_LAYER_TYPE_FLAG_META_LAYER) {
|
1115 | 1131 |
// Delete the component layers
|
1116 | 1132 |
loader_instance_heap_free(inst, cur_layer_prop.component_layer_names);
|
1117 | 1133 |
loader_instance_heap_free(inst, cur_layer_prop.override_paths);
|
1134 |
+ // Never need to free the blacklist, since it can only exist in the override layer
|
|
1118 | 1135 |
}
|
1119 | 1136 |
|
1120 | 1137 |
// Remove the current invalid meta-layer from the layer list. Use memmove since we are
|
... | ... | @@ -1174,7 +1191,7 @@ void loaderRemoveLayersNotInImplicitMetaLayers(const struct loader_instance *ins |
1174 | 1191 |
struct loader_layer_properties cur_layer_prop = layer_list->list[i];
|
1175 | 1192 |
if (!cur_layer_prop.keep) {
|
1176 | 1193 |
loader_log(inst, VK_DEBUG_REPORT_DEBUG_BIT_EXT, 0,
|
1177 |
- "loaderRemoveLayersNotInOverride : Implicit meta-layers are active, and layer %s is not list"
|
|
1194 |
+ "loaderRemoveLayersNotInImplicitMetaLayers : Implicit meta-layers are active, and layer %s is not list"
|
|
1178 | 1195 |
" inside of any. So removing layer from current layer list.",
|
1179 | 1196 |
cur_layer_prop.info.layerName);
|
1180 | 1197 |
|
... | ... | @@ -2567,6 +2584,9 @@ static void VerifyAllMetaLayers(struct loader_instance *inst, struct loader_laye |
2567 | 2584 |
|
2568 | 2585 |
// Delete the component layers
|
2569 | 2586 |
loader_instance_heap_free(inst, prop->component_layer_names);
|
2587 |
+ if (prop->blacklist_layer_names != NULL) {
|
|
2588 |
+ loader_instance_heap_free(inst, prop->blacklist_layer_names);
|
|
2589 |
+ }
|
|
2570 | 2590 |
|
2571 | 2591 |
// Remove the current invalid meta-layer from the layer list. Use memmove since we are
|
2572 | 2592 |
// overlapping the source and destination addresses.
|
... | ... | @@ -2602,7 +2622,7 @@ static VkResult loaderReadLayerJson(const struct loader_instance *inst, struct l |
2602 | 2622 |
char *temp;
|
2603 | 2623 |
char *name, *type, *library_path_str, *api_version;
|
2604 | 2624 |
char *implementation_version, *description;
|
2605 |
- cJSON *ext_item, *library_path, *component_layers, *override_paths;
|
|
2625 |
+ cJSON *ext_item, *library_path, *component_layers, *override_paths, *blacklisted_layers;
|
|
2606 | 2626 |
VkExtensionProperties ext_prop;
|
2607 | 2627 |
VkResult result = VK_ERROR_INITIALIZATION_FAILED;
|
2608 | 2628 |
struct loader_layer_properties *props = NULL;
|
... | ... | @@ -2849,6 +2869,42 @@ static VkResult loaderReadLayerJson(const struct loader_instance *inst, struct l |
2849 | 2869 |
goto out;
|
2850 | 2870 |
}
|
2851 | 2871 |
|
2872 |
+ props->num_blacklist_layers = 0;
|
|
2873 |
+ props->blacklist_layer_names = NULL;
|
|
2874 |
+ blacklisted_layers = cJSON_GetObjectItem(layer_node, "blacklisted_layers");
|
|
2875 |
+ if (blacklisted_layers != NULL && strcmp(name, VK_OVERRIDE_LAYER_NAME)) {
|
|
2876 |
+ loader_log(inst, VK_DEBUG_REPORT_WARNING_BIT_EXT, 0,
|
|
2877 |
+ "Layer %s contains a blacklist, but a blacklist can only be provided by the override metalayer. "
|
|
2878 |
+ "This blacklist will be ignored.", name);
|
|
2879 |
+ } else if (blacklisted_layers != NULL) {
|
|
2880 |
+ props->num_blacklist_layers = cJSON_GetArraySize(blacklisted_layers);
|
|
2881 |
+ |
|
2882 |
+ // Allocate the blacklist array
|
|
2883 |
+ props->blacklist_layer_names = loader_instance_heap_alloc(
|
|
2884 |
+ inst, sizeof(char[MAX_STRING_SIZE]) * props->num_blacklist_layers, VK_SYSTEM_ALLOCATION_SCOPE_INSTANCE);
|
|
2885 |
+ if (props->blacklist_layer_names == NULL) {
|
|
2886 |
+ result = VK_ERROR_OUT_OF_HOST_MEMORY;
|
|
2887 |
+ goto out;
|
|
2888 |
+ }
|
|
2889 |
+ |
|
2890 |
+ // Copy the blacklisted layers into the array
|
|
2891 |
+ for (i = 0; i < (int)props->num_blacklist_layers; ++i) {
|
|
2892 |
+ cJSON *black_layer = cJSON_GetArrayItem(blacklisted_layers, i);
|
|
2893 |
+ if (black_layer == NULL) {
|
|
2894 |
+ continue;
|
|
2895 |
+ }
|
|
2896 |
+ temp = cJSON_Print(black_layer);
|
|
2897 |
+ if (temp == NULL) {
|
|
2898 |
+ result = VK_ERROR_OUT_OF_HOST_MEMORY;
|
|
2899 |
+ goto out;
|
|
2900 |
+ }
|
|
2901 |
+ temp[strlen(temp) - 1] = '\0';
|
|
2902 |
+ strncpy(props->blacklist_layer_names[i], temp + 1, MAX_STRING_SIZE - 1);
|
|
2903 |
+ props->blacklist_layer_names[i][MAX_STRING_SIZE - 1] = '\0';
|
|
2904 |
+ cJSON_Free(temp);
|
|
2905 |
+ }
|
|
2906 |
+ }
|
|
2907 |
+ |
|
2852 | 2908 |
override_paths = cJSON_GetObjectItem(layer_node, "override_paths");
|
2853 | 2909 |
if (NULL != override_paths) {
|
2854 | 2910 |
if (version.major == 1 && (version.minor < 1 || version.patch < 1)) {
|
... | ... | @@ -3136,12 +3192,17 @@ out: |
3136 | 3192 |
#undef GET_JSON_OBJECT
|
3137 | 3193 |
|
3138 | 3194 |
if (VK_SUCCESS != result && NULL != props) {
|
3195 |
+ if (NULL != props->blacklist_layer_names) {
|
|
3196 |
+ loader_instance_heap_free(inst, props->blacklist_layer_names);
|
|
3197 |
+ }
|
|
3139 | 3198 |
if (NULL != props->component_layer_names) {
|
3140 | 3199 |
loader_instance_heap_free(inst, props->component_layer_names);
|
3141 | 3200 |
}
|
3142 | 3201 |
if (NULL != props->override_paths) {
|
3143 | 3202 |
loader_instance_heap_free(inst, props->override_paths);
|
3144 | 3203 |
}
|
3204 |
+ props->num_blacklist_layers = 0;
|
|
3205 |
+ props->blacklist_layer_names = NULL;
|
|
3145 | 3206 |
props->num_component_layers = 0;
|
3146 | 3207 |
props->component_layer_names = NULL;
|
3147 | 3208 |
props->num_override_paths = 0;
|
... | ... | @@ -4239,7 +4300,7 @@ void loaderScanForLayers(struct loader_instance *inst, struct loader_layer_list |
4239 | 4300 |
VerifyAllMetaLayers(inst, instance_layers, &override_layer_valid);
|
4240 | 4301 |
|
4241 | 4302 |
if (override_layer_valid) {
|
4242 |
- loaderRemoveLayersNotInOverride(inst, instance_layers);
|
|
4303 |
+ loaderRemoveLayersInBlacklist(inst, instance_layers);
|
|
4243 | 4304 |
if (NULL != inst) {
|
4244 | 4305 |
inst->override_layer_present = true;
|
4245 | 4306 |
}
|
... | ... | @@ -4346,7 +4407,7 @@ void loaderScanForImplicitLayers(struct loader_instance *inst, struct loader_lay |
4346 | 4407 |
|
4347 | 4408 |
// If either the override layer or an implicit meta-layer are present, we need to add
|
4348 | 4409 |
// explicit layer info as well. Not to worry, though, all explicit layers not included
|
4349 |
- // in the override layer will be removed below in loaderRemoveLayersNotInOverride().
|
|
4410 |
+ // in the override layer will be removed below in loaderRemoveLayersInBlacklist().
|
|
4350 | 4411 |
if (override_layer_valid || implicit_metalayer_present) {
|
4351 | 4412 |
if (VK_SUCCESS != loaderGetDataFiles(inst, LOADER_DATA_FILE_MANIFEST_LAYER, true, "VK_LAYER_PATH", override_paths,
|
4352 | 4413 |
VK_ELAYERS_INFO_REGISTRY_LOC, VK_ELAYERS_INFO_RELATIVE_DIR, &manifest_files)) {
|
... | ... | @@ -4383,7 +4444,7 @@ void loaderScanForImplicitLayers(struct loader_instance *inst, struct loader_lay |
4383 | 4444 |
VerifyAllMetaLayers(inst, instance_layers, &override_layer_valid);
|
4384 | 4445 |
|
4385 | 4446 |
if (override_layer_valid) {
|
4386 |
- loaderRemoveLayersNotInOverride(inst, instance_layers);
|
|
4447 |
+ loaderRemoveLayersInBlacklist(inst, instance_layers);
|
|
4387 | 4448 |
if (NULL != inst) {
|
4388 | 4449 |
inst->override_layer_present = true;
|
4389 | 4450 |
}
|
1 | 1 |
/*
|
2 | 2 |
*
|
3 |
- * Copyright (c) 2014-2017 The Khronos Group Inc.
|
|
4 |
- * Copyright (c) 2014-2017 Valve Corporation
|
|
5 |
- * Copyright (c) 2014-2017 LunarG, Inc.
|
|
3 |
+ * Copyright (c) 2014-2019 The Khronos Group Inc.
|
|
4 |
+ * Copyright (c) 2014-2019 Valve Corporation
|
|
5 |
+ * Copyright (c) 2014-2019 LunarG, Inc.
|
|
6 | 6 |
* Copyright (C) 2015 Google Inc.
|
7 | 7 |
*
|
8 | 8 |
* Licensed under the Apache License, Version 2.0 (the "License");
|
... | ... | @@ -22,6 +22,7 @@ |
22 | 22 |
* Author: Chia-I Wu <olvaffe@gmail.com>
|
23 | 23 |
* Author: Chia-I Wu <olv@lunarg.com>
|
24 | 24 |
* Author: Mark Lobodzinski <mark@LunarG.com>
|
25 |
+ * Author: Lenny Komow <lenny@lunarg.com>
|
|
25 | 26 |
*
|
26 | 27 |
*/
|
27 | 28 |
|
... | ... | @@ -152,6 +153,8 @@ struct loader_layer_properties { |
152 | 153 |
bool has_expiration;
|
153 | 154 |
struct loader_override_expiration expiration;
|
154 | 155 |
bool keep;
|
156 |
+ uint32_t num_blacklist_layers;
|
|
157 |
+ char (*blacklist_layer_names)[MAX_STRING_SIZE];
|
|
155 | 158 |
};
|
156 | 159 |
|
157 | 160 |
struct loader_layer_list {
|
1 | 1 |
//
|
2 |
-// Copyright (c) 2014-2017 The Khronos Group Inc.
|
|
3 |
-// Copyright (c) 2014-2017 Valve Corporation
|
|
4 |
-// Copyright (c) 2014-2017 LunarG, Inc.
|
|
2 |
+// Copyright (c) 2014-2019 The Khronos Group Inc.
|
|
3 |
+// Copyright (c) 2014-2019 Valve Corporation
|
|
4 |
+// Copyright (c) 2014-2019 LunarG, Inc.
|
|
5 | 5 |
//
|
6 | 6 |
// Licensed under the Apache License, Version 2.0 (the "License");
|
7 | 7 |
// you may not use this file except in compliance with the License.
|
... | ... | @@ -86,7 +86,7 @@ BEGIN |
86 | 86 |
BEGIN
|
87 | 87 |
VALUE "FileDescription", VER_FILE_DESCRIPTION_STR
|
88 | 88 |
VALUE "FileVersion", VER_FILE_VERSION_STR
|
89 |
- VALUE "LegalCopyright", "Copyright (C) 2015-2018"
|
|
89 |
+ VALUE "LegalCopyright", "Copyright (C) 2015-2019"
|
|
90 | 90 |
VALUE "ProductName", "Vulkan Runtime"
|
91 | 91 |
VALUE "ProductVersion", VER_FILE_VERSION_STR
|
92 | 92 |
END
|
... | ... | @@ -6,7 +6,7 @@ |
6 | 6 |
"sub_dir" : "Vulkan-Headers",
|
7 | 7 |
"build_dir" : "Vulkan-Headers/build",
|
8 | 8 |
"install_dir" : "Vulkan-Headers/build/install",
|
9 |
- "commit" : "v1.1.97"
|
|
9 |
+ "commit" : "v1.1.101"
|
|
10 | 10 |
}
|
11 | 11 |
],
|
12 | 12 |
"install_names" : {
|
1 | 1 |
#!/usr/bin/python3
|
2 | 2 |
#
|
3 |
-# Copyright (c) 2013-2018 The Khronos Group Inc.
|
|
3 |
+# Copyright (c) 2013-2019 The Khronos Group Inc.
|
|
4 | 4 |
#
|
5 | 5 |
# Licensed under the Apache License, Version 2.0 (the "License");
|
6 | 6 |
# you may not use this file except in compliance with the License.
|
... | ... | @@ -21,12 +21,13 @@ startTime = None |
21 | 21 |
|
22 | 22 |
def startTimer(timeit):
|
23 | 23 |
global startTime
|
24 |
- startTime = time.process_time()
|
|
24 |
+ if timeit:
|
|
25 |
+ startTime = time.process_time()
|
|
25 | 26 |
|
26 | 27 |
def endTimer(timeit, msg):
|
27 | 28 |
global startTime
|
28 |
- endTime = time.process_time()
|
|
29 |
- if (timeit):
|
|
29 |
+ if timeit:
|
|
30 |
+ endTime = time.process_time()
|
|
30 | 31 |
write(msg, endTime - startTime, file=sys.stderr)
|
31 | 32 |
startTime = None
|
32 | 33 |
|
... | ... | @@ -81,7 +82,7 @@ def makeGenOpts(args): |
81 | 82 |
# Copyright text prefixing all headers (list of strings).
|
82 | 83 |
prefixStrings = [
|
83 | 84 |
'/*',
|
84 |
- '** Copyright (c) 2015-2018 The Khronos Group Inc.',
|
|
85 |
+ '** Copyright (c) 2015-2019 The Khronos Group Inc.',
|
|
85 | 86 |
'**',
|
86 | 87 |
'** Licensed under the Apache License, Version 2.0 (the "License");',
|
87 | 88 |
'** you may not use this file except in compliance with the License.',
|