Working ... uh sort of .. on Windows now to try on Linux.
This commit is contained in:
parent
a5c13d8654
commit
8f679dbe65
6 changed files with 66 additions and 37 deletions
|
|
@ -20,7 +20,7 @@ constexpr bool bUseValidationLayers = true;
|
|||
|
||||
VulkanEngine* loadedEngine = nullptr;
|
||||
|
||||
VulkanEngine& VulkanEngine::Get() {
|
||||
VulkanEngine& VulkanEngine::Get() {
|
||||
return *loadedEngine;
|
||||
}
|
||||
|
||||
|
|
@ -29,7 +29,7 @@ void VulkanEngine::init()
|
|||
assert(loadedEngine == nullptr);
|
||||
loadedEngine = this;
|
||||
|
||||
// We initialize SDL and create a window with it.
|
||||
// We initialize SDL and create a window with it.
|
||||
SDL_Init(SDL_INIT_VIDEO);
|
||||
|
||||
SDL_WindowFlags window_flags = (SDL_WindowFlags)(SDL_WINDOW_VULKAN);
|
||||
|
|
@ -54,7 +54,7 @@ void VulkanEngine::init()
|
|||
}
|
||||
|
||||
void VulkanEngine::cleanup()
|
||||
{
|
||||
{
|
||||
if (_isInitialized) {
|
||||
vkDeviceWaitIdle(_device);
|
||||
|
||||
|
|
@ -123,16 +123,16 @@ void VulkanEngine::draw()
|
|||
|
||||
VK_CHECK(vkEndCommandBuffer(cmd));
|
||||
|
||||
//prepare the submission to the queue.
|
||||
//prepare the submission to the queue.
|
||||
//we want to wait on the _presentSemaphore, as that semaphore is signaled when the swapchain is ready
|
||||
//we will signal the _renderSemaphore, to signal that rendering has finished
|
||||
|
||||
VkCommandBufferSubmitInfo cmdinfo = vkinit::command_buffer_submit_info(cmd);
|
||||
VkCommandBufferSubmitInfo cmdinfo = vkinit::command_buffer_submit_info(cmd);
|
||||
|
||||
VkSemaphoreSubmitInfo waitInfo = vkinit::semaphore_submit_info(VK_PIPELINE_STAGE_2_COLOR_ATTACHMENT_OUTPUT_BIT_KHR,get_current_frame()._swapchainSemaphore);
|
||||
VkSemaphoreSubmitInfo signalInfo = vkinit::semaphore_submit_info(VK_PIPELINE_STAGE_2_ALL_GRAPHICS_BIT, get_current_frame()._renderSemaphore);
|
||||
VkSemaphoreSubmitInfo signalInfo = vkinit::semaphore_submit_info(VK_PIPELINE_STAGE_2_ALL_GRAPHICS_BIT, get_current_frame()._renderSemaphore);
|
||||
|
||||
VkSubmitInfo2 submit = vkinit::submit_info(&cmdinfo,&signalInfo,&waitInfo);
|
||||
VkSubmitInfo2 submit = vkinit::submit_info(&cmdinfo,&signalInfo,&waitInfo);
|
||||
|
||||
//submit command buffer to the queue and execute it.
|
||||
// _renderFence will now block until the graphic commands finish execution
|
||||
|
|
@ -140,7 +140,7 @@ void VulkanEngine::draw()
|
|||
|
||||
//prepare present
|
||||
// this will put the image we just rendered to into the visible window.
|
||||
// we want to wait on the _renderSemaphore for that,
|
||||
// we want to wait on the _renderSemaphore for that,
|
||||
// as its necessary that drawing commands have finished before the image is displayed to the user
|
||||
VkPresentInfoKHR presentInfo = {};
|
||||
presentInfo.sType = VK_STRUCTURE_TYPE_PRESENT_INFO_KHR;
|
||||
|
|
@ -171,7 +171,7 @@ void VulkanEngine::run()
|
|||
//Handle events on queue
|
||||
while(SDL_PollEvent(&e) != 0)
|
||||
{
|
||||
//close the window when user alt-f4s or clicks the X button
|
||||
//close the window when user alt-f4s or clicks the X button
|
||||
if(e.type == SDL_QUIT) {
|
||||
bQuit = true;
|
||||
}
|
||||
|
|
@ -216,11 +216,11 @@ void VulkanEngine::init_vulkan() {
|
|||
SDL_Vulkan_CreateSurface(_window, _instance, &_surface);
|
||||
|
||||
//vulkan 1.3 features
|
||||
VkPhysicalDeviceVulkan13Features features{};
|
||||
VkPhysicalDeviceVulkan13Features features13{};
|
||||
|
||||
features.sType = VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_VULKAN_1_3_FEATURES;
|
||||
features.dynamicRendering = true;
|
||||
features.synchronization2 = true;
|
||||
features13.sType = VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_VULKAN_1_3_FEATURES;
|
||||
features13.dynamicRendering = true;
|
||||
features13.synchronization2 = true;
|
||||
|
||||
//vulkan 1.2 features
|
||||
VkPhysicalDeviceVulkan12Features features12{};
|
||||
|
|
@ -231,9 +231,9 @@ void VulkanEngine::init_vulkan() {
|
|||
// use vkbootstrap to select a gpu
|
||||
// We want a gpu that can write to the SDL surface
|
||||
vkb::PhysicalDeviceSelector selector{ vkb_inst };
|
||||
vkb::PhysicalDevice physicalDevice = selector
|
||||
.set_minimum_version(1, 4)
|
||||
.set_required_features_13(features)
|
||||
auto physicalDevice = selector
|
||||
.set_minimum_version(1, 3)
|
||||
.set_required_features_13(features13)
|
||||
.set_required_features_12(features12)
|
||||
.set_surface(_surface)
|
||||
.select()
|
||||
|
|
@ -263,7 +263,7 @@ void VulkanEngine::init_vulkan() {
|
|||
|
||||
void VulkanEngine::create_swapchain(uint32_t width, uint32_t height) {
|
||||
vkb::SwapchainBuilder swapchainBuilder{ _chosenGPU, _device, _surface};
|
||||
|
||||
|
||||
_swapchainImageFormat = VK_FORMAT_B8G8R8A8_UNORM;
|
||||
VkSurfaceFormatKHR surfaceFormat{};
|
||||
surfaceFormat.format=_swapchainImageFormat;
|
||||
|
|
@ -373,8 +373,8 @@ void VulkanEngine::draw_background(VkCommandBuffer cmd)
|
|||
|
||||
|
||||
void VulkanEngine::init_descriptors() {
|
||||
std::vector<DescriptorAllocator::PoolSizeRatio> sizes =
|
||||
{
|
||||
std::vector<DescriptorAllocator::PoolSizeRatio> sizes =
|
||||
{
|
||||
{ VK_DESCRIPTOR_TYPE_STORAGE_IMAGE, 1 }
|
||||
};
|
||||
|
||||
|
|
@ -389,7 +389,7 @@ void VulkanEngine::init_descriptors() {
|
|||
|
||||
// other code
|
||||
//allocate a descriptor set for our draw image
|
||||
_drawImageDescriptors = globalDescriptorAllocator.allocate(_device,_drawImageDescriptorLayout);
|
||||
_drawImageDescriptors = globalDescriptorAllocator.allocate(_device,_drawImageDescriptorLayout);
|
||||
|
||||
VkDescriptorImageInfo imgInfo{};
|
||||
imgInfo.imageLayout = VK_IMAGE_LAYOUT_GENERAL;
|
||||
|
|
@ -442,7 +442,7 @@ void VulkanEngine::init_background_pipelines()
|
|||
stageinfo.stage = VK_SHADER_STAGE_COMPUTE_BIT;
|
||||
stageinfo.module = computeDrawShader;
|
||||
stageinfo.pName = "main";
|
||||
|
||||
|
||||
VkComputePipelineCreateInfo computePipelineCreateInfo{};
|
||||
computePipelineCreateInfo.sType = VK_STRUCTURE_TYPE_COMPUTE_PIPELINE_CREATE_INFO;
|
||||
computePipelineCreateInfo.pNext = nullptr;
|
||||
|
|
|
|||
Loading…
Add table
Add a link
Reference in a new issue