summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorMiguel <m.i@gmx.at>2025-01-09 21:03:26 +0100
committerMiguel <m.i@gmx.at>2025-01-09 21:06:04 +0100
commitdd5c0ec4c533d603e2149a2739512a22e9aacef6 (patch)
tree002e707b316beb140d970b6ba68f8854ff61ab27
parent0a4ed7140e65d83f3f8a0aca7abebbe8dffa360e (diff)
setup reviewed
-rw-r--r--main.cpp60
1 files changed, 35 insertions, 25 deletions
diff --git a/main.cpp b/main.cpp
index 022243a..196d551 100644
--- a/main.cpp
+++ b/main.cpp
@@ -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;
}