Skip to content

Commit 94dd11d

Browse files
rudybearmeta-codesync[bot]
authored andcommitted
igl | vulkan | Add missing tests for extension management methods in VulkanFeatures
Reviewed By: corporateshark Differential Revision: D109849813 fbshipit-source-id: 6ce579fe638c699a88c22f102eb89cce89ec8b7a
1 parent dfc5295 commit 94dd11d

1 file changed

Lines changed: 72 additions & 0 deletions

File tree

‎src/igl/tests/vulkan/VulkanFeaturesTest.cpp‎

Lines changed: 72 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -257,4 +257,76 @@ TEST_F(VulkanFeaturesTest, CheckSelectedFeatures_MissingShaderDrawParameters) {
257257
#endif
258258
}
259259

260+
// allAvailableExtensions initial state ********************************************
261+
TEST_F(VulkanFeaturesTest, AllAvailableExtensionsInitiallyEmpty) {
262+
const igl::vulkan::VulkanContextConfig config;
263+
const igl::vulkan::VulkanFeatures features(config);
264+
265+
EXPECT_TRUE(features.allAvailableExtensions(igl::vulkan::VulkanFeatures::ExtensionType::Instance)
266+
.empty());
267+
EXPECT_TRUE(
268+
features.allAvailableExtensions(igl::vulkan::VulkanFeatures::ExtensionType::Device).empty());
269+
}
270+
271+
// available initial state **********************************************************
272+
TEST_F(VulkanFeaturesTest, AvailableReturnsFalseWhenNoExtensionsEnumerated) {
273+
const igl::vulkan::VulkanContextConfig config;
274+
const igl::vulkan::VulkanFeatures features(config);
275+
276+
EXPECT_FALSE(
277+
features.available("VK_KHR_swapchain", igl::vulkan::VulkanFeatures::ExtensionType::Device));
278+
EXPECT_FALSE(features.available(VK_KHR_SURFACE_EXTENSION_NAME,
279+
igl::vulkan::VulkanFeatures::ExtensionType::Instance));
280+
}
281+
282+
// enableCommonInstanceExtensions without available extensions *********************
283+
TEST_F(VulkanFeaturesTest, EnableCommonInstanceExtensionsNoAvailableExtensions) {
284+
const igl::vulkan::VulkanContextConfig config;
285+
igl::vulkan::VulkanFeatures features(config);
286+
287+
// Without enumerate(), extensions_ is empty, so enable() is a no-op for all ext.
288+
features.enableCommonInstanceExtensions(config);
289+
290+
EXPECT_FALSE(features.has_VK_KHR_portability_enumeration);
291+
EXPECT_FALSE(features.has_VK_KHR_get_surface_capabilities2);
292+
EXPECT_FALSE(features.has_VK_EXT_headless_surface);
293+
}
294+
295+
// enableCommonDeviceExtensions without available extensions / descriptor buffer always off
296+
TEST_F(VulkanFeaturesTest, EnableCommonDeviceExtensionsNoAvailableExtensions) {
297+
const igl::vulkan::VulkanContextConfig config;
298+
igl::vulkan::VulkanFeatures features(config);
299+
300+
features.enableCommonDeviceExtensions(config);
301+
302+
EXPECT_FALSE(features.has_VK_EXT_index_type_uint8);
303+
EXPECT_FALSE(features.has_VK_KHR_timeline_semaphore);
304+
EXPECT_FALSE(features.has_VK_KHR_synchronization2);
305+
EXPECT_FALSE(features.has_VK_KHR_8bit_storage);
306+
EXPECT_FALSE(features.has_VK_KHR_buffer_device_address);
307+
// Descriptor buffer is intentionally always disabled (hardcoded false in
308+
// enableCommonDeviceExtensions).
309+
EXPECT_FALSE(features.has_VK_EXT_descriptor_buffer);
310+
}
311+
312+
// checkSelectedFeatures negative case with descriptor indexing enabled ***********
313+
TEST_F(VulkanFeaturesTest, CheckSelectedFeaturesDescriptorIndexingEnabledMissingFeature) {
314+
igl::setDebugBreakEnabled(false);
315+
316+
igl::vulkan::VulkanContextConfig config;
317+
config.enableDescriptorIndexing = true;
318+
319+
const igl::vulkan::VulkanFeatures requested(config);
320+
igl::vulkan::VulkanFeatures available(config);
321+
// Remove one of the required descriptor-indexing features from "available"
322+
available.featuresDescriptorIndexing.shaderSampledImageArrayNonUniformIndexing = VK_FALSE;
323+
324+
const igl::Result result = requested.checkSelectedFeatures(available);
325+
#if IGL_PLATFORM_APPLE
326+
EXPECT_TRUE(result.isOk());
327+
#else
328+
EXPECT_FALSE(result.isOk());
329+
#endif
330+
}
331+
260332
} // namespace igl::tests

0 commit comments

Comments
 (0)