Skip to content

Commit 18dc000

Browse files
committed
Moved vulkan bootstrap funcs from utils to bootstrap.h
1 parent a9ac932 commit 18dc000

File tree

11 files changed

+295
-318
lines changed

11 files changed

+295
-318
lines changed

include/engine/common.h

Lines changed: 3 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -61,15 +61,15 @@
6161

6262
#define _LOG(msg) \
6363
{ \
64-
std::cout << "VKEngine log: " << msg << std::endl; \
64+
std::cout << "[VKEngine Log] " << msg << std::endl; \
6565
}
6666
#define DEBUG_LOG(msg) \
6767
{ \
68-
std::cout << "VKEngine debug: " << msg << std::endl; \
68+
std::cout << "[VKEngine Debug] " << msg << std::endl; \
6969
}
7070
#define ERR_LOG(msg) \
7171
{ \
72-
std::cerr << "VKEngine error: " << msg << std::endl; \
72+
std::cerr << "[VKEngine Error] " << msg << std::endl; \
7373
}
7474
#define VK_CHECK(x) \
7575
do \

include/engine/graphics/device.h

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -62,7 +62,7 @@ class Device
6262
void immediate_submit(std::function<void(CommandBuffer cmd)>&& function);
6363
void cleanup();
6464
};
65-
UploadContext m_uploadContext = {};
65+
UploadContext m_uploadContext = {};
6666

6767
#ifdef NDEBUG
6868
const bool m_enableValidationLayers{false};

include/engine/graphics/utilities/bootstrap.h

Lines changed: 65 additions & 15 deletions
Original file line numberDiff line numberDiff line change
@@ -13,31 +13,81 @@
1313

1414
VULKAN_ENGINE_NAMESPACE_BEGIN
1515

16-
namespace Graphics
17-
{
16+
namespace Graphics {
1817

19-
namespace Booter
20-
{
18+
namespace Booter {
19+
#pragma region Instance
2120
// Instance
22-
VkInstance create_instance(const char *appName, const char *engineName, bool validation,
23-
std::vector<const char *> validationLayers);
24-
std::vector<const char *> get_required_extensions(bool validation);
25-
// Logger
21+
VkInstance create_instance(const char* appName,
22+
const char* engineName,
23+
bool validation,
24+
std::vector<const char*> validationLayers);
25+
26+
#pragma region Validation
27+
// Validation Logger
2628
VkDebugUtilsMessengerEXT create_debug_messenger(VkInstance instance);
29+
void populate_debug_messenger_create_info(VkDebugUtilsMessengerCreateInfoEXT& createInfo);
30+
inline static VKAPI_ATTR VkBool32 VKAPI_CALL debugCallback(VkDebugUtilsMessageSeverityFlagBitsEXT messageSeverity,
31+
VkDebugUtilsMessageTypeFlagsEXT messageType,
32+
const VkDebugUtilsMessengerCallbackDataEXT* pCallbackData,
33+
void* pUserData) {
34+
35+
DEBUG_LOG("(Validation Layer) " << pCallbackData->pMessage);
36+
37+
return VK_FALSE;
38+
}
39+
VkResult create_debug_utils_messenger_EXT(VkInstance instance,
40+
const VkDebugUtilsMessengerCreateInfoEXT* pCreateInfo,
41+
const VkAllocationCallbacks* pAllocator,
42+
VkDebugUtilsMessengerEXT* pDebugMessenger);
43+
void destroy_debug_utils_messenger_EXT(VkInstance instance,
44+
VkDebugUtilsMessengerEXT debugMessenger,
45+
const VkAllocationCallbacks* pAllocator);
46+
#pragma region GPU
2747
// GPU
28-
VkPhysicalDevice pick_graphics_card_device(VkInstance instance, VkSurfaceKHR surface,
29-
std::vector<const char *> extensions);
48+
VkPhysicalDevice
49+
pick_graphics_card_device(VkInstance instance, VkSurfaceKHR surface, std::vector<const char*> extensions);
50+
int rate_device_suitability(VkPhysicalDevice device, VkSurfaceKHR surface, std::vector<const char*> extensions);
51+
bool check_device_extension_support(VkPhysicalDevice device, std::vector<const char*> extensions);
52+
struct SwapChainSupportDetails {
53+
VkSurfaceCapabilitiesKHR capabilities;
54+
std::vector<VkSurfaceFormatKHR> formats;
55+
std::vector<VkPresentModeKHR> presentModes;
56+
};
57+
SwapChainSupportDetails query_swapchain_support(VkPhysicalDevice device, VkSurfaceKHR surface);
58+
struct QueueFamilyIndices {
59+
std::optional<uint32_t> graphicsFamily;
60+
std::optional<uint32_t> presentFamily;
61+
std::optional<uint32_t> computeFamily;
62+
std::optional<uint32_t> transferFamily;
63+
std::optional<uint32_t> sparseBindingFamily;
3064

31-
int rate_device_suitability(VkPhysicalDevice device, VkSurfaceKHR surface, std::vector<const char *> extensions);
32-
bool check_device_extension_support(VkPhysicalDevice device, std::vector<const char *> extensions);
65+
inline bool isComplete() const {
66+
return graphicsFamily.has_value() && presentFamily.has_value() && computeFamily.has_value();
67+
}
68+
};
69+
QueueFamilyIndices find_queue_families(VkPhysicalDevice device, VkSurfaceKHR surface);
3370

71+
#pragma region Device
3472
// Logical Device
35-
VkDevice create_logical_device(std::unordered_map<QueueType, VkQueue> &queues, VkPhysicalDevice gpu,
36-
VkPhysicalDeviceFeatures features, VkSurfaceKHR surface, bool validation,
37-
std::vector<const char *> validationLayers);
73+
VkDevice create_logical_device(std::unordered_map<QueueType, VkQueue>& queues,
74+
VkPhysicalDevice gpu,
75+
VkPhysicalDeviceFeatures features,
76+
VkSurfaceKHR surface,
77+
bool validation,
78+
std::vector<const char*> validationLayers);
79+
#pragma region VMA
3880
// VMA
3981
VmaAllocator setup_memory(VkInstance instance, VkDevice device, VkPhysicalDevice gpu);
4082

83+
#pragma region Utils
84+
// Utilities
85+
std::vector<const char*> get_required_extensions(bool validation);
86+
bool check_validation_layer_suport(std::vector<const char*> validationLayers);
87+
bool is_instance_extension_supported(const char* extensionName);
88+
bool is_device_extension_supported(VkPhysicalDevice physicalDevice, const char* extensionName);
89+
void log_available_extensions(std::vector<VkExtensionProperties> ext);
90+
void log_available_gpus(std::multimap<int, VkPhysicalDevice> candidates);
4191

4292
}; // namespace Booter
4393

include/engine/graphics/utilities/utils.h

Lines changed: 0 additions & 87 deletions
Original file line numberDiff line numberDiff line change
@@ -24,26 +24,7 @@ namespace Graphics {
2424

2525
namespace Utils {
2626

27-
struct QueueFamilyIndices {
28-
std::optional<uint32_t> graphicsFamily;
29-
std::optional<uint32_t> presentFamily;
30-
std::optional<uint32_t> computeFamily;
31-
std::optional<uint32_t> transferFamily;
32-
std::optional<uint32_t> sparseBindingFamily;
33-
34-
inline bool isComplete() const {
35-
return graphicsFamily.has_value() && presentFamily.has_value() && computeFamily.has_value();
36-
}
37-
};
3827

39-
struct SwapChainSupportDetails {
40-
VkSurfaceCapabilitiesKHR capabilities;
41-
std::vector<VkSurfaceFormatKHR> formats;
42-
std::vector<VkPresentModeKHR> presentModes;
43-
};
44-
45-
QueueFamilyIndices find_queue_families(VkPhysicalDevice device, VkSurfaceKHR surface);
46-
SwapChainSupportDetails query_swapchain_support(VkPhysicalDevice device, VkSurfaceKHR surface);
4728

4829

4930
struct DeletionQueue {
@@ -134,74 +115,6 @@ inline std::vector<uint8_t> read_file_binary(const std::string& pathToFile) {
134115
return fileBufferBytes;
135116
}
136117

137-
VkPhysicalDeviceProperties get_gpu_properties(VkPhysicalDevice gpu);
138-
139-
VkPhysicalDeviceFeatures get_gpu_features(VkPhysicalDevice gpu);
140-
inline bool is_instance_extension_supported(const char* extensionName) {
141-
uint32_t extensionCount;
142-
vkEnumerateInstanceExtensionProperties(nullptr, &extensionCount, nullptr);
143-
144-
std::vector<VkExtensionProperties> extensions(extensionCount);
145-
vkEnumerateInstanceExtensionProperties(nullptr, &extensionCount, extensions.data());
146-
147-
for (const auto& extension : extensions)
148-
{
149-
if (strcmp(extension.extensionName, extensionName) == 0)
150-
{
151-
return true;
152-
}
153-
}
154-
155-
return false;
156-
}
157-
158-
// Check if device extension is supported
159-
inline bool is_device_extension_supported(VkPhysicalDevice physicalDevice, const char* extensionName) {
160-
uint32_t extensionCount;
161-
vkEnumerateDeviceExtensionProperties(physicalDevice, nullptr, &extensionCount, nullptr);
162-
163-
std::vector<VkExtensionProperties> extensions(extensionCount);
164-
vkEnumerateDeviceExtensionProperties(physicalDevice, nullptr, &extensionCount, extensions.data());
165-
166-
for (const auto& extension : extensions)
167-
{
168-
if (strcmp(extension.extensionName, extensionName) == 0)
169-
{
170-
return true;
171-
}
172-
}
173-
174-
return false;
175-
}
176-
177-
uint32_t find_memory_type(VkPhysicalDevice gpu, uint32_t typeFilter, VkMemoryPropertyFlags properties);
178-
179-
bool check_validation_layer_suport(std::vector<const char*> validationLayers);
180-
181-
void populate_debug_messenger_create_info(VkDebugUtilsMessengerCreateInfoEXT& createInfo);
182-
183-
inline static VKAPI_ATTR VkBool32 VKAPI_CALL debugCallback(VkDebugUtilsMessageSeverityFlagBitsEXT messageSeverity,
184-
VkDebugUtilsMessageTypeFlagsEXT messageType,
185-
const VkDebugUtilsMessengerCallbackDataEXT* pCallbackData,
186-
void* pUserData) {
187-
188-
std::cerr << "Validation layer: " << pCallbackData->pMessage << std::endl;
189-
190-
return VK_FALSE;
191-
}
192-
193-
VkResult create_debug_utils_messenger_EXT(VkInstance instance,
194-
const VkDebugUtilsMessengerCreateInfoEXT* pCreateInfo,
195-
const VkAllocationCallbacks* pAllocator,
196-
VkDebugUtilsMessengerEXT* pDebugMessenger);
197-
198-
void destroy_debug_utils_messenger_EXT(VkInstance instance,
199-
VkDebugUtilsMessengerEXT debugMessenger,
200-
const VkAllocationCallbacks* pAllocator);
201-
202-
void log_available_extensions(std::vector<VkExtensionProperties> ext);
203-
204-
void log_available_gpus(std::multimap<int, VkPhysicalDevice> candidates);
205118

206119
Vec3 get_tangent_gram_smidt(Vec3& p1, Vec3& p2, Vec3& p3, glm::vec2& uv1, glm::vec2& uv2, glm::vec2& uv3, Vec3 normal);
207120

resources/shaders/include/BRDFs/disney_BSSDF_2015.glsl

Lines changed: 1 addition & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -26,8 +26,6 @@ struct DisneyBSSDFSettings {
2626
vec2 samples[32];
2727
};
2828

29-
30-
3129
float random(vec2 st) {
3230
return fract(sin(dot(st.xy, vec2(12.9898, 78.233))) * 43758.5453123);
3331
}
@@ -56,7 +54,7 @@ vec3 evalDisneyBSSDF(
5654
) {
5755

5856
const float EPS = 0.0001;
59-
57+
6058
//SETTINGS
6159
const int sampleCount = 4;
6260
const float worldUnitScale = 1.0;

src/graphics/device.cpp

Lines changed: 13 additions & 9 deletions
Original file line numberDiff line numberDiff line change
@@ -17,17 +17,25 @@ void Device::init(void* windowHandle,
1717
m_instance = Booter::create_instance("xxx", "VulkanDevice", m_enableValidationLayers, m_validationLayers);
1818
if (m_enableValidationLayers)
1919
m_debugMessenger = Booter::create_debug_messenger(m_instance);
20+
2021
// Surface
2122
Extent2D actualExtent = m_swapchain.create_surface(m_instance, windowHandle, windowingSystem);
23+
2224
// Get gpu
2325
m_gpu = Booter::pick_graphics_card_device(m_instance, m_swapchain.get_surface(), m_extensions);
26+
// Store properties
27+
vkGetPhysicalDeviceProperties(m_gpu, &m_properties);
28+
vkGetPhysicalDeviceFeatures(m_gpu, &m_features);
29+
vkGetPhysicalDeviceMemoryProperties(m_gpu, &m_memoryProperties);
30+
2431
// Create logical device
2532
m_handle = Booter::create_logical_device(m_queues,
2633
m_gpu,
27-
Utils::get_gpu_features(m_gpu),
34+
m_features,
2835
m_swapchain.get_surface(),
2936
m_enableValidationLayers,
3037
m_validationLayers);
38+
3139
// Setup VMA
3240
m_allocator = Booter::setup_memory(m_instance, m_handle, m_gpu);
3341

@@ -43,10 +51,6 @@ void Device::init(void* windowHandle,
4351
create_upload_context();
4452
load_extensions(m_handle, m_instance);
4553

46-
// Get properties
47-
vkGetPhysicalDeviceProperties(m_gpu, &m_properties);
48-
vkGetPhysicalDeviceFeatures(m_gpu, &m_features);
49-
vkGetPhysicalDeviceMemoryProperties(m_gpu, &m_memoryProperties);
5054

5155
//------<<<
5256
}
@@ -76,7 +80,7 @@ void Device::cleanup() {
7680

7781
if (m_enableValidationLayers)
7882
{
79-
Utils::destroy_debug_utils_messenger_EXT(m_instance, m_debugMessenger, nullptr);
83+
Booter::destroy_debug_utils_messenger_EXT(m_instance, m_debugMessenger, nullptr);
8084
}
8185

8286
m_swapchain.destroy_surface(m_instance);
@@ -185,13 +189,13 @@ CommandPool Device::create_command_pool(QueueType QueueType, CommandPoolCreateFl
185189
switch (QueueType)
186190
{
187191
case QueueType::GRAPHIC_QUEUE:
188-
poolInfo.queueFamilyIndex = Utils::find_queue_families(m_gpu, m_swapchain.get_surface()).graphicsFamily.value();
192+
poolInfo.queueFamilyIndex = Booter::find_queue_families(m_gpu, m_swapchain.get_surface()).graphicsFamily.value();
189193
break;
190194
case QueueType::COMPUTE_QUEUE:
191-
poolInfo.queueFamilyIndex = Utils::find_queue_families(m_gpu, m_swapchain.get_surface()).computeFamily.value();
195+
poolInfo.queueFamilyIndex = Booter::find_queue_families(m_gpu, m_swapchain.get_surface()).computeFamily.value();
192196
break;
193197
case QueueType::PRESENT_QUEUE:
194-
poolInfo.queueFamilyIndex = Utils::find_queue_families(m_gpu, m_swapchain.get_surface()).presentFamily.value();
198+
poolInfo.queueFamilyIndex = Booter::find_queue_families(m_gpu, m_swapchain.get_surface()).presentFamily.value();
195199
break;
196200
}
197201
pool.queue = m_queues[QueueType];

src/graphics/swapchain.cpp

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -31,8 +31,8 @@ void Swapchain::create(VkPhysicalDevice &gpu, VkDevice &device, VkExtent2D actua
3131
if (m_initialized)
3232
cleanup();
3333

34-
Utils::SwapChainSupportDetails swapChainSupport = Utils::query_swapchain_support(gpu, m_surface);
35-
Utils::QueueFamilyIndices indices = Utils::find_queue_families(gpu, m_surface);
34+
Booter::SwapChainSupportDetails swapChainSupport = Booter::query_swapchain_support(gpu, m_surface);
35+
Booter::QueueFamilyIndices indices = Booter::find_queue_families(gpu, m_surface);
3636
uint32_t queueFamilyIndices[] = {indices.graphicsFamily.value(), indices.presentFamily.value()};
3737

3838
VkSurfaceFormatKHR surfaceFormat = choose_swap_surface_format(swapChainSupport.formats, userDefinedcolorFormat);

0 commit comments

Comments
 (0)