add .gitignore and update Vulkan instance creation for portability support

This commit is contained in:
hoenking 2025-12-14 12:10:39 +08:00
parent 20224f19c3
commit b5c15637ec
3 changed files with 32 additions and 5 deletions

3
.gitignore vendored Normal file
View File

@ -0,0 +1,3 @@
.idea/
.vscode/
VulkanTest

View File

@ -1,5 +1,6 @@
CFLAGS = -std=c++17 -o2 -I. -I$(VULKAN_SDK_PATH)/include
LDFLAGS = -L$(VULKAN_SDK_PATH)/lib `pkg-config --static --libs glfw3` -lvulkan -ldl -lpthread -lX11 -lXrandr -lXi
VULKAN_SDK_PATH = /Users/wanghao/VulkanSDK/1.4.328.1/macOS
CFLAGS = -std=c++17 -o2 -I. -I$(VULKAN_SDK_PATH)/include -I/opt/local/include
LDFLAGS = -L$(VULKAN_SDK_PATH)/lib -L/opt/local/lib `pkg-config --static --libs glfw3` -lvulkan -ldl -lpthread -lX11
# create list of all spv files and set as dependency
vertSources = $(shell find ./shaders -type f -name "*.vert")

View File

@ -92,11 +92,12 @@ namespace hk
appInfo.applicationVersion = VK_MAKE_VERSION(1, 0, 0);
appInfo.pEngineName = "No Engine";
appInfo.engineVersion = VK_MAKE_VERSION(1, 0, 0);
appInfo.apiVersion = VK_API_VERSION_1_0;
appInfo.apiVersion = VK_API_VERSION_1_1;
VkInstanceCreateInfo createInfo = {};
createInfo.sType = VK_STRUCTURE_TYPE_INSTANCE_CREATE_INFO;
createInfo.pApplicationInfo = &appInfo;
createInfo.flags |= VK_INSTANCE_CREATE_ENUMERATE_PORTABILITY_BIT_KHR;
auto extensions = getRequiredExtensions();
createInfo.enabledExtensionCount = static_cast<uint32_t>(extensions.size());
@ -183,8 +184,27 @@ namespace hk
createInfo.pQueueCreateInfos = queueCreateInfos.data();
createInfo.pEnabledFeatures = &deviceFeatures;
createInfo.enabledExtensionCount = static_cast<uint32_t>(deviceExtensions.size());
createInfo.ppEnabledExtensionNames = deviceExtensions.data();
// Add device extensions, including portability subset if available (needed for MoltenVK)
std::vector<const char*> enabledExtensions(deviceExtensions.begin(), deviceExtensions.end());
// Check if VK_KHR_portability_subset is available and add it if needed
uint32_t extensionCount;
vkEnumerateDeviceExtensionProperties(physicalDevice, nullptr, &extensionCount, nullptr);
std::vector<VkExtensionProperties> availableExtensions(extensionCount);
vkEnumerateDeviceExtensionProperties(physicalDevice, nullptr, &extensionCount, availableExtensions.data());
for (const auto &extension : availableExtensions)
{
if (strcmp(extension.extensionName, "VK_KHR_portability_subset") == 0)
{
enabledExtensions.push_back("VK_KHR_portability_subset");
break;
}
}
createInfo.enabledExtensionCount = static_cast<uint32_t>(enabledExtensions.size());
createInfo.ppEnabledExtensionNames = enabledExtensions.data();
// might not really be necessary anymore because device specific validation layers
// have been deprecated
@ -314,6 +334,9 @@ namespace hk
extensions.push_back(VK_EXT_DEBUG_UTILS_EXTENSION_NAME);
}
// Required for macOS MoltenVK portability
extensions.push_back(VK_KHR_PORTABILITY_ENUMERATION_EXTENSION_NAME);
return extensions;
}