@@ -130,6 +130,102 @@ InstanceBuilder &InstanceBuilder::enable_validation_layers(const std::vector<std
130
130
return *this ;
131
131
}
132
132
133
+ InstanceBuilder::InstanceBuilder ()
134
+ {
135
+ std::vector<std::string_view> emabled_layers;
136
+ uint32_t instance_layer_count;
137
+ VK_CHECK (vkEnumerateInstanceLayerProperties (&instance_layer_count, nullptr ));
138
+ std::vector<VkLayerProperties> supported_validation_layers (instance_layer_count);
139
+ VK_CHECK (vkEnumerateInstanceLayerProperties (&instance_layer_count, supported_validation_layers.data ()));
140
+ }
141
+
142
+ InstanceBuilder &InstanceBuilder::optional_extension (std::string_view extension_name, Callback callback)
143
+ {
144
+ if (extension_available (" " , extension_name))
145
+ {
146
+ _optional_extensions.push_back (extension_name);
147
+ callback (true );
148
+ }
149
+ else
150
+ {
151
+ callback (false );
152
+ }
153
+
154
+ return *this ;
155
+ }
156
+
157
+ InstanceBuilder &InstanceBuilder::optional_extension (std::string_view layer_name, std::string_view extension_name, Callback callback)
158
+ {
159
+ if (extension_available (layer_name, extension_name))
160
+ {
161
+ _optional_extensions.push_back (extension_name);
162
+ callback (true );
163
+ }
164
+ else
165
+ {
166
+ callback (false );
167
+ }
168
+
169
+ return *this ;
170
+ }
171
+
172
+ InstanceBuilder &InstanceBuilder::required_extension (std::string_view extension_name)
173
+ {
174
+ if (extension_available (" " , extension_name))
175
+ {
176
+ _required_extensions.push_back (extension_name);
177
+ }
178
+ else
179
+ {
180
+ throw " required extension is not available" ; // TODO: replace this with better error handling
181
+ }
182
+
183
+ return *this ;
184
+ }
185
+
186
+ InstanceBuilder &InstanceBuilder::required_extension (std::string_view layer_name, std::string_view extension_name)
187
+ {
188
+ if (extension_available (layer_name, extension_name))
189
+ {
190
+ _required_extensions.push_back (extension_name);
191
+ }
192
+ else
193
+ {
194
+ throw " required extension is not available" ; // TODO: replace this with better error handling
195
+ }
196
+
197
+ return *this ;
198
+ }
199
+
200
+ InstanceBuilder &InstanceBuilder::optional_layer (std::string_view layer, Callback callback)
201
+ {
202
+ if (layer_available (layer))
203
+ {
204
+ _optional_layers.push_back (layer);
205
+ callback (true );
206
+ }
207
+ else
208
+ {
209
+ callback (false );
210
+ }
211
+
212
+ return *this ;
213
+ }
214
+
215
+ InstanceBuilder &InstanceBuilder::required_layer (std::string_view layer)
216
+ {
217
+ if (layer_available (layer))
218
+ {
219
+ _required_layers.push_back (layer);
220
+ }
221
+ else
222
+ {
223
+ throw " required layer is not available" ; // TODO: replace this with better error handling
224
+ }
225
+
226
+ return *this ;
227
+ }
228
+
133
229
std::vector<std::string_view> InstanceBuilder::collect_enabled_extensions (VkInstanceCreateInfo &info) const
134
230
{
135
231
std::vector<std::string_view> enabled_extensions;
@@ -205,23 +301,6 @@ std::vector<std::string_view> InstanceBuilder::collect_enabled_extensions(VkInst
205
301
return enabled_extensions;
206
302
}
207
303
208
- std::vector<std::string_view> InstanceBuilder::collect_enabled_layers (VkInstanceCreateInfo &info) const
209
- {
210
- std::vector<std::string_view> emabled_layers;
211
-
212
- uint32_t instance_layer_count;
213
- VK_CHECK (vkEnumerateInstanceLayerProperties (&instance_layer_count, nullptr ));
214
-
215
- std::vector<VkLayerProperties> supported_validation_layers (instance_layer_count);
216
- VK_CHECK (vkEnumerateInstanceLayerProperties (&instance_layer_count, supported_validation_layers.data ()));
217
-
218
- std::vector<const char *> requested_validation_layers (required_validation_layers);
219
-
220
- // TODO: process layers
221
-
222
- return enabled_layers;
223
- }
224
-
225
304
InstanceBuilder::Instance InstanceBuilder::Build ()
226
305
{
227
306
VkInstanceCreateInfo instance_info = {VK_STRUCTURE_TYPE_INSTANCE_CREATE_INFO};
0 commit comments