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
|
LDFLAGS = -lglfw3 -lvulkan -ldl -lpthread -lX11 -lXxf86vm -lXrandr -lXi
|
||||||
|
|
||||||
VulkanTest: main.cpp
|
VulkanTest: main.cpp
|
||||||
g++ $(CFLAGS) -o VulkanTest main.cpp $(LDFLAGS)
|
g++ $(CFLAGS) -o ./bin/VulkanTest main.cpp $(LDFLAGS)
|
||||||
|
|
||||||
.PHONY: test clean
|
.PHONY: test clean
|
||||||
|
|
||||||
test: VulkanTest
|
test: VulkanTest
|
||||||
./VulkanTest
|
./bin/VulkanTest
|
||||||
|
|
||||||
clean:
|
clean:
|
||||||
rm -f VulkanTest
|
rm -f VulkanTest
|
||||||
|
|||||||
Binary file not shown.
@@ -1,7 +1,6 @@
|
|||||||
/*
|
/*
|
||||||
Following the vulkan tutorial on :
|
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
|
#define GLFW_INCLUDE_VULKAN
|
||||||
@@ -12,8 +11,7 @@
|
|||||||
#include <vector>
|
#include <vector>
|
||||||
#include <cstring>
|
#include <cstring>
|
||||||
#include <optional>
|
#include <optional>
|
||||||
|
|
||||||
|
|
||||||
const uint32_t WIDTH = 800;
|
const uint32_t WIDTH = 800;
|
||||||
const uint32_t HEIGHT = 600;
|
const uint32_t HEIGHT = 600;
|
||||||
|
|
||||||
@@ -45,6 +43,9 @@ class HelloTriangleApplication{
|
|||||||
VkInstance instance;
|
VkInstance instance;
|
||||||
VkDebugUtilsMessengerEXT debugMessenger;
|
VkDebugUtilsMessengerEXT debugMessenger;
|
||||||
VkPhysicalDevice physicalDevice = VK_NULL_HANDLE;
|
VkPhysicalDevice physicalDevice = VK_NULL_HANDLE;
|
||||||
|
VkDevice device;
|
||||||
|
VkQueue graphicsQueue;
|
||||||
|
|
||||||
|
|
||||||
void initWindow(){
|
void initWindow(){
|
||||||
glfwInit();
|
glfwInit();
|
||||||
@@ -59,8 +60,49 @@ class HelloTriangleApplication{
|
|||||||
createInstance();
|
createInstance();
|
||||||
setupDebugMessenger();
|
setupDebugMessenger();
|
||||||
pickPhysicalDevice();
|
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(){
|
void pickPhysicalDevice(){
|
||||||
uint32_t deviceCount = 0;
|
uint32_t deviceCount = 0;
|
||||||
vkEnumeratePhysicalDevices(instance, &deviceCount, nullptr);
|
vkEnumeratePhysicalDevices(instance, &deviceCount, nullptr);
|
||||||
@@ -255,6 +297,7 @@ class HelloTriangleApplication{
|
|||||||
}
|
}
|
||||||
|
|
||||||
void cleanup(){
|
void cleanup(){
|
||||||
|
vkDestroyDevice(device, nullptr);
|
||||||
if(enableValidationLayers){
|
if(enableValidationLayers){
|
||||||
DestroyDebugUtilsMessengerEXT(instance, debugMessenger, nullptr);
|
DestroyDebugUtilsMessengerEXT(instance, debugMessenger, nullptr);
|
||||||
}
|
}
|
||||||
|
|||||||
Reference in New Issue
Block a user