Archived
1
Fork 0

Add Vulkan queue creation

This commit is contained in:
Joshua Goins 2018-09-27 22:47:56 -04:00
parent 44f91d99ea
commit d9db9693b1
3 changed files with 38 additions and 1 deletions

View file

@ -3,6 +3,8 @@ project(Graph)
list(APPEND CMAKE_MODULE_PATH ${CMAKE_SOURCE_DIR}/cmake) list(APPEND CMAKE_MODULE_PATH ${CMAKE_SOURCE_DIR}/cmake)
set(CMAKE_CXX_STANDARD 14)
find_package(SDL2 REQUIRED) find_package(SDL2 REQUIRED)
find_package(Vulkan REQUIRED) find_package(Vulkan REQUIRED)

View file

@ -1,5 +1,8 @@
#include "renderer.h" #include "renderer.h"
#include <set>
#include <vector>
Renderer::Renderer() { Renderer::Renderer() {
createInstance(); createInstance();
createLogicalDevice(); createLogicalDevice();
@ -32,8 +35,39 @@ void Renderer::createLogicalDevice() {
physicalDevice = physicalDevices[i]; physicalDevice = physicalDevices[i];
} }
uint32_t queueFamilyPropertiesCount = 0;
vkGetPhysicalDeviceQueueFamilyProperties(physicalDevice, &queueFamilyPropertiesCount, nullptr);
VkQueueFamilyProperties* queueFamilyProperties = new VkQueueFamilyProperties[queueFamilyPropertiesCount];
vkGetPhysicalDeviceQueueFamilyProperties(physicalDevice, &queueFamilyPropertiesCount, queueFamilyProperties);
uint32_t graphicsFamilyIndex = 0;
for(uint32_t i = 0; i < queueFamilyPropertiesCount; i++) {
if(queueFamilyProperties[i].queueFlags & VK_QUEUE_GRAPHICS_BIT)
graphicsFamilyIndex = i;
}
const std::set<uint32_t> queueFamilyIndices = {graphicsFamilyIndex};
std::vector<VkDeviceQueueCreateInfo> deviceQueueCreateInfos;
for(auto queueFamilyIndex : queueFamilyIndices) {
const float priority = 1.0f;
VkDeviceQueueCreateInfo queueCreateInfo = {};
queueCreateInfo.sType = VK_STRUCTURE_TYPE_DEVICE_CREATE_INFO;
queueCreateInfo.queueFamilyIndex = queueFamilyIndex;
queueCreateInfo.queueCount = 1;
queueCreateInfo.pQueuePriorities = &priority;
deviceQueueCreateInfos.push_back(queueCreateInfo);
}
VkDeviceCreateInfo deviceCreateInfo = {}; VkDeviceCreateInfo deviceCreateInfo = {};
deviceCreateInfo.sType = VK_STRUCTURE_TYPE_DEVICE_CREATE_INFO; deviceCreateInfo.sType = VK_STRUCTURE_TYPE_DEVICE_CREATE_INFO;
deviceCreateInfo.queueCreateInfoCount = deviceQueueCreateInfos.size();
deviceCreateInfo.pQueueCreateInfos = deviceQueueCreateInfos.data();
vkCreateDevice(physicalDevice, &deviceCreateInfo, nullptr, &device_); vkCreateDevice(physicalDevice, &deviceCreateInfo, nullptr, &device_);
vkGetDeviceQueue(device_, graphicsFamilyIndex, 0, &graphicsQueue_);
} }

View file

@ -14,4 +14,5 @@ private:
VkInstance instance_ = nullptr; VkInstance instance_ = nullptr;
VkDevice device_ = nullptr; VkDevice device_ = nullptr;
VkQueue graphicsQueue_ = nullptr;
}; };