Selecting logical devices en queues
This commit is contained in:
3
Hello_triangle/.gitignore
vendored
Normal file
3
Hello_triangle/.gitignore
vendored
Normal file
@@ -0,0 +1,3 @@
|
||||
.vscode
|
||||
bin
|
||||
|
||||
@@ -2,12 +2,12 @@ CFLAGS = -std=c++17 -O2
|
||||
LDFLAGS = -lglfw3 -lvulkan -ldl -lpthread -lX11 -lXxf86vm -lXrandr -lXi
|
||||
|
||||
VulkanTest: main.cpp
|
||||
g++ $(CFLAGS) -o VulkanTest main.cpp $(LDFLAGS)
|
||||
g++ $(CFLAGS) -o ./bin/VulkanTest main.cpp $(LDFLAGS)
|
||||
|
||||
.PHONY: test clean
|
||||
|
||||
test: VulkanTest
|
||||
./VulkanTest
|
||||
./bin/VulkanTest
|
||||
|
||||
clean:
|
||||
rm -f VulkanTest
|
||||
|
||||
Binary file not shown.
@@ -1,7 +1,6 @@
|
||||
/*
|
||||
Following the vulkan tutorial on :
|
||||
https://vulkan-tutorial.com/en/Drawing_a_triangle/Setup/Instance
|
||||
|
||||
https://vulkan-tutorial.com/en/Drawing_a_triangle/Presentation/Window_surface
|
||||
*/
|
||||
|
||||
#define GLFW_INCLUDE_VULKAN
|
||||
@@ -13,7 +12,6 @@
|
||||
#include <cstring>
|
||||
#include <optional>
|
||||
|
||||
|
||||
const uint32_t WIDTH = 800;
|
||||
const uint32_t HEIGHT = 600;
|
||||
|
||||
@@ -45,6 +43,9 @@ class HelloTriangleApplication{
|
||||
VkInstance instance;
|
||||
VkDebugUtilsMessengerEXT debugMessenger;
|
||||
VkPhysicalDevice physicalDevice = VK_NULL_HANDLE;
|
||||
VkDevice device;
|
||||
VkQueue graphicsQueue;
|
||||
|
||||
|
||||
void initWindow(){
|
||||
glfwInit();
|
||||
@@ -59,8 +60,49 @@ class HelloTriangleApplication{
|
||||
createInstance();
|
||||
setupDebugMessenger();
|
||||
pickPhysicalDevice();
|
||||
createLogicalDevice();
|
||||
|
||||
}
|
||||
|
||||
|
||||
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;
|
||||
|
||||
VkPhysicalDeviceFeatures deviceFeatures{};
|
||||
|
||||
|
||||
VkDeviceCreateInfo createInfo{};
|
||||
createInfo.sType = VK_STRUCTURE_TYPE_DEVICE_CREATE_INFO;
|
||||
createInfo.queueCreateInfoCount = 1;
|
||||
createInfo.pEnabledFeatures = &deviceFeatures;
|
||||
|
||||
createInfo.enabledExtensionCount = 0;
|
||||
if(enableValidationLayers){
|
||||
createInfo.enabledLayerCount = static_cast<uint32_t>(validationLayers.size());
|
||||
createInfo.ppEnabledLayerNames = validationLayers.data();
|
||||
} else{
|
||||
createInfo.enabledLayerCount = 0 ;
|
||||
}
|
||||
|
||||
if (vkCreateDevice(physicalDevice, &createInfo, nullptr, &device) != VK_SUCCESS){
|
||||
throw std::runtime_error("failed to create logical device");
|
||||
}
|
||||
|
||||
|
||||
vkGetDeviceQueue(device, indices.graphicsFamily.value(), 0 , &graphicsQueue);
|
||||
|
||||
}
|
||||
|
||||
|
||||
|
||||
void pickPhysicalDevice(){
|
||||
uint32_t deviceCount = 0;
|
||||
vkEnumeratePhysicalDevices(instance, &deviceCount, nullptr);
|
||||
@@ -255,6 +297,7 @@ class HelloTriangleApplication{
|
||||
}
|
||||
|
||||
void cleanup(){
|
||||
vkDestroyDevice(device, nullptr);
|
||||
if(enableValidationLayers){
|
||||
DestroyDebugUtilsMessengerEXT(instance, debugMessenger, nullptr);
|
||||
}
|
||||
|
||||
Reference in New Issue
Block a user