@@ -1892,6 +1892,10 @@ core::smart_refctd_ptr<ILogicalDevice> CVulkanPhysicalDevice::createLogicalDevic
18921892 extensionStrings[i++] = feature.c_str ();
18931893 }
18941894
1895+ // remove inheritedQueries since llvmpipe doesn't support it
1896+ vk_deviceFeatures2.features .inheritedQueries = VK_FALSE;
1897+ // vk_deviceFeatures2.features = VkPhysicalDeviceFeatures{};
1898+
18951899 // Create Device
18961900 VkDeviceCreateInfo vk_createInfo = { VK_STRUCTURE_TYPE_DEVICE_CREATE_INFO };
18971901 vk_createInfo.pNext = &vk_deviceFeatures2;
@@ -1913,7 +1917,32 @@ core::smart_refctd_ptr<ILogicalDevice> CVulkanPhysicalDevice::createLogicalDevic
19131917 }
19141918 vk_createInfo.queueCreateInfoCount = queueCreateInfos.size ();
19151919 vk_createInfo.pQueueCreateInfos = queueCreateInfos.data ();
1916-
1920+
1921+ // erase extensions not supported by llvm
1922+ {
1923+ core::vector<const char *> llvmUnsupportedExtensions = {
1924+ " VK_NV_shader_image_footprint" ,
1925+ " VK_KHR_fragment_shader_barycentric" ,
1926+ " VK_EXT_conservative_rasterization" ,
1927+ " VK_KHR_external_memory_win32" ,
1928+ " VK_KHR_shader_subgroup_uniform_control_flow" ,
1929+ " VK_EXT_pci_bus_info" ,
1930+ " VK_KHR_external_fence_win32" ,
1931+ " VK_KHR_external_semaphore_win32" ,
1932+ " VK_KHR_win32_keyed_mutex" ,
1933+ " VK_EXT_discard_rectangles"
1934+ " VK_NV_compute_shader_derivatives" ,
1935+ " VK_NV_shader_sm_builtins"
1936+ };
1937+
1938+ for (const char * extension : llvmUnsupportedExtensions)
1939+ {
1940+ auto it = std::find_if (extensionStrings.begin (), extensionStrings.end (), [extension](const char * s) { return std::strcmp (s, extension) == 0 ; });
1941+ if (it != extensionStrings.end ())
1942+ extensionStrings.erase (it);
1943+ }
1944+ }
1945+
19171946 vk_createInfo.enabledExtensionCount = static_cast <uint32_t >(extensionStrings.size ());
19181947 vk_createInfo.ppEnabledExtensionNames = extensionStrings.data ();
19191948
0 commit comments