Add library for handling validation layers solely, added dimple escher cube model for experimenting

This commit is contained in:
Lillian Salehi 2024-10-04 23:07:53 -05:00
parent 04997fa682
commit 47ad14f028
4 changed files with 68 additions and 32 deletions

BIN
escher.blend Normal file

Binary file not shown.

View File

@ -0,0 +1,46 @@
#include <iostream>
#define GLFW_INCLUDE_VULKAN
#include <GLFW/glfw3.h>
#include "VulkanDebugLibs.h"
using namespace AgnosiaEngine;
#include <vector>
#include <cstring>
#include <vulkan/vulkan_core.h>
const std::vector<const char*> validationLayers = {
"VK_LAYER_KHRONOS_validation"
};
void VulkanDebugLibs::vulkanDebugSetup(VkInstanceCreateInfo& createInfo) {
createInfo.enabledLayerCount = static_cast<uint32_t>(validationLayers.size());
createInfo.ppEnabledLayerNames = validationLayers.data();
}
bool VulkanDebugLibs::checkValidationLayerSupport() { // This function is used to check Validation Layer Support, validation layers are the debug trace tools in the Vulkan SDK.
uint32_t layerCount; // layerCount will be used as the var to keep track of the number of requested validation layerk
vkEnumerateInstanceLayerProperties(&layerCount, nullptr); // Set layerCount to the number of validation layers requested when pProperties is NULLPTR
std::vector<VkLayerProperties> availableLayers(layerCount); // VkLayerProperties is a structure with data on the layername, desc, versions and etc.
vkEnumerateInstanceLayerProperties(&layerCount, availableLayers.data());// Now that we have a VkLayerProperties fed in, as well as the num. of properties, we can fill layerCount with the VkResult
for(const char* layerName : validationLayers) { // Pretty straightforward from here, just enumerate over all the VkResult data and see if we have any validationLayers
bool layerFound = false;
for(const auto& layerProperties : availableLayers) {
if(strcmp(layerName, layerProperties.layerName) == 0) {
layerFound = true;
break;
}
}
if(!layerFound) {
return false;
}
}
return true;
}

View File

@ -0,0 +1,10 @@
#include <vulkan/vulkan_core.h>
namespace AgnosiaEngine {
class VulkanDebugLibs {
public:
void vulkanDebugSetup(VkInstanceCreateInfo& createInfo);
bool checkValidationLayerSupport();
};
}

View File

@ -1,9 +1,13 @@
#include <cstdint>
#include <cstring>
#include <vector>
#define GLFW_INCLUDE_VULKAN #define GLFW_INCLUDE_VULKAN
#include <vulkan/vulkan_core.h>
#include <GLFW/glfw3.h> #include <GLFW/glfw3.h>
#include "debug/VulkanDebugLibs.h"
using namespace AgnosiaEngine;
#include <cstdint>
#include <cstring>
#include <cstdlib> #include <cstdlib>
#include <iostream> #include <iostream>
#include <stdexcept> #include <stdexcept>
@ -13,10 +17,6 @@ class TriangleTestApplication {
const uint32_t WIDTH = 800; const uint32_t WIDTH = 800;
const uint32_t HEIGHT = 600; const uint32_t HEIGHT = 600;
const std::vector<const char*> validationLayers = {
"VK_LAYER_KHRONOS_validation"
};
#ifdef DEBUG #ifdef DEBUG
const bool enableValidationLayers = true; const bool enableValidationLayers = true;
#else #else
@ -51,7 +51,9 @@ private:
} }
void createInstance() { void createInstance() {
if(enableValidationLayers && !checkValidationLayerSupport()) { VulkanDebugLibs debug;
if(enableValidationLayers && !debug.checkValidationLayerSupport()) {
throw std::runtime_error("Validation layers requested, but not available!"); throw std::runtime_error("Validation layers requested, but not available!");
} }
@ -81,8 +83,7 @@ private:
createInfo.ppEnabledExtensionNames = glfwExtensions; createInfo.ppEnabledExtensionNames = glfwExtensions;
if(enableValidationLayers) { // If we have validation layers, add them now, otherwise set it to 0 if(enableValidationLayers) { // If we have validation layers, add them now, otherwise set it to 0
createInfo.enabledLayerCount = static_cast<uint32_t>(validationLayers.size()); debug.vulkanDebugSetup(createInfo);
createInfo.ppEnabledLayerNames = validationLayers.data();
} else { } else {
createInfo.enabledLayerCount = 0; createInfo.enabledLayerCount = 0;
} }
@ -92,30 +93,8 @@ private:
throw std::runtime_error("Failed to create vulkan instance!"); throw std::runtime_error("Failed to create vulkan instance!");
} }
} }
bool checkValidationLayerSupport() { // This function is used to check Validation Layer Support, validation layers are the debug trace tools in the Vulkan SDK.
uint32_t layerCount; // layerCount will be used as the var to keep track of the number of requested validation layerk
vkEnumerateInstanceLayerProperties(&layerCount, nullptr); // Set layerCount to the number of validation layers requested when pProperties is NULLPTR
std::vector<VkLayerProperties> availableLayers(layerCount); // VkLayerProperties is a structure with data on the layername, desc, versions and etc.
vkEnumerateInstanceLayerProperties(&layerCount, availableLayers.data());// Now that we have a VkLayerProperties fed in, as well as the num. of properties, we can fill layerCount with the VkResult
for(const char* layerName : validationLayers) { // Pretty straightforward from here, just enumerate over all the VkResult data and see if we have any validationLayers
bool layerFound = false;
for(const auto& layerProperties : availableLayers) {
if(strcmp(layerName, layerProperties.layerName) == 0) {
layerFound = true;
break;
}
}
if(!layerFound) {
return false;
}
}
return true;
}
void mainLoop() { void mainLoop() {
// Update window whilst open // Update window whilst open
@ -144,3 +123,4 @@ int main() {
} }
return EXIT_SUCCESS; return EXIT_SUCCESS;
} }