| 1729 | } |
| 1730 | |
| 1731 | static void VulkanGetExtensions(SDL_Window* window, VulkanExtensions* r) |
| 1732 | { |
| 1733 | EXIT_IF(window == nullptr); |
| 1734 | EXIT_IF(r == nullptr); |
| 1735 | |
| 1736 | uint32_t required_extensions_count = 0; |
| 1737 | uint32_t available_extensions_count = 0; |
| 1738 | uint32_t available_layers_count = 0; |
| 1739 | |
| 1740 | auto sdl_result = SDL_Vulkan_GetInstanceExtensions(window, &required_extensions_count, nullptr); |
| 1741 | |
| 1742 | EXIT_NOT_IMPLEMENTED(sdl_result == SDL_FALSE); |
| 1743 | EXIT_NOT_IMPLEMENTED(required_extensions_count == 0); |
| 1744 | |
| 1745 | r->required_extensions = Vector<const char*>(required_extensions_count, false); // @suppress("Ambiguous problem") |
| 1746 | r->required_extensions.Memset(0); |
| 1747 | |
| 1748 | sdl_result = SDL_Vulkan_GetInstanceExtensions(window, &required_extensions_count, r->required_extensions.GetData()); |
| 1749 | |
| 1750 | EXIT_NOT_IMPLEMENTED(sdl_result == SDL_FALSE); |
| 1751 | EXIT_NOT_IMPLEMENTED(required_extensions_count == 0); |
| 1752 | EXIT_NOT_IMPLEMENTED(required_extensions_count != r->required_extensions.Size()); |
| 1753 | |
| 1754 | vkEnumerateInstanceExtensionProperties(nullptr, &available_extensions_count, nullptr); |
| 1755 | |
| 1756 | r->available_extensions = Vector<VkExtensionProperties>(available_extensions_count); // @suppress("Ambiguous problem") |
| 1757 | r->available_extensions.Memset(0); |
| 1758 | |
| 1759 | vkEnumerateInstanceExtensionProperties(nullptr, &available_extensions_count, r->available_extensions.GetData()); |
| 1760 | |
| 1761 | EXIT_NOT_IMPLEMENTED(available_extensions_count != r->available_extensions.Size()); |
| 1762 | |
| 1763 | r->enable_validation_layers = Config::VulkanValidationEnabled(); |
| 1764 | |
| 1765 | if (r->available_extensions.Contains(VK_EXT_DEBUG_UTILS_EXTENSION_NAME, [](auto s, auto l) { return strcmp(s.extensionName, l) == 0; })) |
| 1766 | { |
| 1767 | r->required_extensions.Add(VK_EXT_DEBUG_UTILS_EXTENSION_NAME); |
| 1768 | } else |
| 1769 | { |
| 1770 | r->enable_validation_layers = false; |
| 1771 | } |
| 1772 | |
| 1773 | for (const char* ext: r->required_extensions) |
| 1774 | { |
| 1775 | printf("Vulkan required extension: %s\n", ext); |
| 1776 | } |
| 1777 | |
| 1778 | for (const auto& ext: r->available_extensions) |
| 1779 | { |
| 1780 | printf("Vulkan available extension: %s, version = %u\n", ext.extensionName, ext.specVersion); |
| 1781 | } |
| 1782 | |
| 1783 | vkEnumerateInstanceLayerProperties(&available_layers_count, nullptr); |
| 1784 | |
| 1785 | r->available_layers = Vector<VkLayerProperties>(available_layers_count); // @suppress("Ambiguous problem") |
| 1786 | r->available_layers.Memset(0); |
| 1787 | vkEnumerateInstanceLayerProperties(&available_layers_count, r->available_layers.GetData()); |
| 1788 |
no test coverage detected