diff options
| author | Miguel <m.i@gmx.at> | 2025-01-09 21:03:26 +0100 |
|---|---|---|
| committer | Miguel <m.i@gmx.at> | 2025-01-09 21:06:04 +0100 |
| commit | dd5c0ec4c533d603e2149a2739512a22e9aacef6 (patch) | |
| tree | 002e707b316beb140d970b6ba68f8854ff61ab27 /main.cpp | |
| parent | 0a4ed7140e65d83f3f8a0aca7abebbe8dffa360e (diff) | |
setup reviewed
Diffstat (limited to 'main.cpp')
| -rw-r--r-- | main.cpp | 60 |
1 files changed, 35 insertions, 25 deletions
@@ -564,21 +564,14 @@ private: } void createLogicalDevice() { - QueueFamilyIndices indices = findQueueFamilies(physicalDevice); - VkDeviceQueueCreateInfo queueCreateInfo{}; - queueCreateInfo.sType = VK_STRUCTURE_TYPE_DEVICE_QUEUE_CREATE_INFO; - queueCreateInfo.queueFamilyIndex = indices.graphicsFamily.value(); - queueCreateInfo.queueCount = 1; - float queuePriority = 1.0f; - queueCreateInfo.pQueuePriorities = &queuePriority; + QueueFamilyIndices indices = findQueueFamilies(physicalDevice); + std::set<uint32_t> uniqueQueueFamilies = {indices.graphicsFamily.value(), indices.presentFamily.value()}; VkPhysicalDeviceFeatures deviceFeatures{}; - VkDeviceCreateInfo createInfo{}; + VkDeviceCreateInfo createInfo{}; createInfo.sType = VK_STRUCTURE_TYPE_DEVICE_CREATE_INFO; - createInfo.pQueueCreateInfos = &queueCreateInfo; - createInfo.queueCreateInfoCount = 1; createInfo.pEnabledFeatures = &deviceFeatures; createInfo.enabledExtensionCount = static_cast<uint32_t>(deviceExtensions.size()); createInfo.ppEnabledExtensionNames = deviceExtensions.data(); @@ -592,9 +585,8 @@ private: } std::vector<VkDeviceQueueCreateInfo> queueCreateInfos; - std::set<uint32_t> uniqueQueueFamilies = {indices.graphicsFamily.value(), indices.presentFamily.value()}; - for (uint32_t queueFamily : uniqueQueueFamilies) { + float queuePriority = 1.0f; VkDeviceQueueCreateInfo queueCreateInfo{}; queueCreateInfo.sType = VK_STRUCTURE_TYPE_DEVICE_QUEUE_CREATE_INFO; queueCreateInfo.queueFamilyIndex = queueFamily; @@ -609,11 +601,15 @@ private: if (vkCreateDevice(physicalDevice, &createInfo, nullptr, &device) != VK_SUCCESS) { throw std::runtime_error("failed to create logical device!"); } + vkGetDeviceQueue(device, indices.graphicsFamily.value(), 0, &graphicsQueue); vkGetDeviceQueue(device, indices.presentFamily.value(), 0, &presentQueue); } void pickPhysicalDevice() { + + // we could rate and sort and pick best, but let's keep simple for now. + uint32_t deviceCount = 0; vkEnumeratePhysicalDevices(instance, &deviceCount, nullptr); if (deviceCount == 0) { @@ -622,16 +618,10 @@ private: std::vector<VkPhysicalDevice> devices(deviceCount); vkEnumeratePhysicalDevices(instance, &deviceCount, devices.data()); - for (const auto& device : devices) { - if (isDeviceSuitable(device)) { - physicalDevice = device; - break; - } - } + for (const auto& device : devices) + if (isDeviceSuitable(device)) { physicalDevice = device; break; } - if (physicalDevice == VK_NULL_HANDLE) { - throw std::runtime_error("failed to find a suitable GPU!"); - } + if (physicalDevice == VK_NULL_HANDLE) throw std::runtime_error("failed to find a suitable GPU!"); } bool isDeviceSuitable(VkPhysicalDevice device) { @@ -642,6 +632,9 @@ private: vkGetPhysicalDeviceProperties(device, &deviceProperties); vkGetPhysicalDeviceFeatures(device, &deviceFeatures); + bool discrete = deviceProperties.deviceType == VK_PHYSICAL_DEVICE_TYPE_DISCRETE_GPU; + std::cout << "CHECK: " << deviceProperties.deviceName << " discrete:" << discrete << std::endl; + printQueueFamilies(device); // return deviceProperties.deviceType == VK_PHYSICAL_DEVICE_TYPE_DISCRETE_GPU && deviceFeatures.geometryShader; QueueFamilyIndices indices = findQueueFamilies(device); @@ -850,18 +843,35 @@ private: } }; - QueueFamilyIndices findQueueFamilies(VkPhysicalDevice device) { - - QueueFamilyIndices indices; + static void printQueueFamilies(VkPhysicalDevice device) { uint32_t queueFamilyCount = 0; vkGetPhysicalDeviceQueueFamilyProperties(device, &queueFamilyCount, nullptr); - std::vector<VkQueueFamilyProperties> queueFamilies(queueFamilyCount); vkGetPhysicalDeviceQueueFamilyProperties(device, &queueFamilyCount, queueFamilies.data()); int i = 0; for (const auto& queueFamily : queueFamilies) { + bool gfx = queueFamily.queueFlags & VK_QUEUE_GRAPHICS_BIT; + bool cmp = queueFamily.queueFlags & VK_QUEUE_COMPUTE_BIT; + bool trf = queueFamily.queueFlags & VK_QUEUE_TRANSFER_BIT; + std::cout << "QUEUE FAMILY " << i << " : x " << queueFamily.queueCount << " gfx=" << gfx << " cmp=" << cmp << " trf=" << trf << std::endl; + i++; + } + } + + QueueFamilyIndices findQueueFamilies(VkPhysicalDevice device) { + uint32_t queueFamilyCount = 0; + vkGetPhysicalDeviceQueueFamilyProperties(device, &queueFamilyCount, nullptr); + std::vector<VkQueueFamilyProperties> queueFamilies(queueFamilyCount); + vkGetPhysicalDeviceQueueFamilyProperties(device, &queueFamilyCount, queueFamilies.data()); + + + QueueFamilyIndices indices; + + + int i = 0; + for (const auto& queueFamily : queueFamilies) { if (queueFamily.queueFlags & VK_QUEUE_GRAPHICS_BIT) { indices.graphicsFamily = i; } |
