Use application wide submit info and semaphores (Fixes #66, Fixes #65, Fixes#60), removed no longer functional code loading GLSL (Fixes #62)
This commit is contained in:
parent
0240cde57a
commit
8cd5041111
26 changed files with 226 additions and 961 deletions
|
|
@ -20,7 +20,6 @@
|
|||
#include "vulkanexamplebase.h"
|
||||
|
||||
#define VERTEX_BUFFER_BIND_ID 0
|
||||
//#define USE_GLSL
|
||||
#define ENABLE_VALIDATION false
|
||||
|
||||
// Texture properties
|
||||
|
|
@ -654,16 +653,6 @@ public:
|
|||
|
||||
vkCmdEndRenderPass(drawCmdBuffers[i]);
|
||||
|
||||
VkImageMemoryBarrier prePresentBarrier = vkTools::prePresentBarrier(swapChain.buffers[i].image);
|
||||
vkCmdPipelineBarrier(
|
||||
drawCmdBuffers[i],
|
||||
VK_PIPELINE_STAGE_ALL_COMMANDS_BIT,
|
||||
VK_PIPELINE_STAGE_TOP_OF_PIPE_BIT,
|
||||
VK_FLAGS_NONE,
|
||||
0, nullptr,
|
||||
0, nullptr,
|
||||
1, &prePresentBarrier);
|
||||
|
||||
err = vkEndCommandBuffer(drawCmdBuffers[i]);
|
||||
assert(!err);
|
||||
}
|
||||
|
|
@ -672,40 +661,32 @@ public:
|
|||
void draw()
|
||||
{
|
||||
VkResult err;
|
||||
VkSemaphore presentCompleteSemaphore;
|
||||
VkSemaphoreCreateInfo presentCompleteSemaphoreCreateInfo = vkTools::initializers::semaphoreCreateInfo();
|
||||
|
||||
err = vkCreateSemaphore(device, &presentCompleteSemaphoreCreateInfo, nullptr, &presentCompleteSemaphore);
|
||||
assert(!err);
|
||||
|
||||
// Get next image in the swap chain (back/front buffer)
|
||||
err = swapChain.acquireNextImage(presentCompleteSemaphore, ¤tBuffer);
|
||||
err = swapChain.acquireNextImage(semaphores.presentComplete, ¤tBuffer);
|
||||
assert(!err);
|
||||
|
||||
submitPostPresentBarrier(swapChain.buffers[currentBuffer].image);
|
||||
|
||||
// Gather command buffers to be sumitted to the queue
|
||||
std::vector<VkCommandBuffer> submitCmdBuffers = {
|
||||
offScreenCmdBuffer,
|
||||
drawCmdBuffers[currentBuffer],
|
||||
};
|
||||
|
||||
VkSubmitInfo submitInfo = vkTools::initializers::submitInfo();
|
||||
submitInfo.waitSemaphoreCount = 1;
|
||||
submitInfo.pWaitSemaphores = &presentCompleteSemaphore;
|
||||
submitInfo.commandBufferCount = submitCmdBuffers.size();
|
||||
submitInfo.pCommandBuffers = submitCmdBuffers.data();
|
||||
|
||||
// Submit to queue
|
||||
err = vkQueueSubmit(queue, 1, &submitInfo, VK_NULL_HANDLE);
|
||||
assert(!err);
|
||||
|
||||
err = swapChain.queuePresent(queue, currentBuffer);
|
||||
submitPrePresentBarrier(swapChain.buffers[currentBuffer].image);
|
||||
|
||||
err = swapChain.queuePresent(queue, currentBuffer, semaphores.renderComplete);
|
||||
assert(!err);
|
||||
|
||||
vkDestroySemaphore(device, presentCompleteSemaphore, nullptr);
|
||||
|
||||
submitPostPresentBarrier(swapChain.buffers[currentBuffer].image);
|
||||
|
||||
err = vkQueueWaitIdle(queue);
|
||||
assert(err == VK_SUCCESS);
|
||||
assert(!err);
|
||||
}
|
||||
|
||||
void loadMeshes()
|
||||
|
|
@ -938,13 +919,8 @@ public:
|
|||
// Load shaders
|
||||
std::array<VkPipelineShaderStageCreateInfo, 2> shaderStages;
|
||||
|
||||
#ifdef USE_GLSL
|
||||
shaderStages[0] = loadShaderGLSL("./../data/shaders/shadowmapomni/scene.vert", VK_SHADER_STAGE_VERTEX_BIT);
|
||||
shaderStages[1] = loadShaderGLSL("./../data/shaders/shadowmapomni/scene.frag", VK_SHADER_STAGE_FRAGMENT_BIT);
|
||||
#else
|
||||
shaderStages[0] = loadShader("./../data/shaders/shadowmapomni/scene.vert.spv", VK_SHADER_STAGE_VERTEX_BIT);
|
||||
shaderStages[1] = loadShader("./../data/shaders/shadowmapomni/scene.frag.spv", VK_SHADER_STAGE_FRAGMENT_BIT);
|
||||
#endif
|
||||
|
||||
VkGraphicsPipelineCreateInfo pipelineCreateInfo =
|
||||
vkTools::initializers::pipelineCreateInfo(
|
||||
|
|
@ -967,29 +943,17 @@ public:
|
|||
assert(!err);
|
||||
|
||||
// Cube map display pipeline
|
||||
#ifdef USE_GLSL
|
||||
shaderStages[0] = loadShaderGLSL("./../data/shaders/shadowmapomni/cubemapdisplay.vert", VK_SHADER_STAGE_VERTEX_BIT);
|
||||
shaderStages[1] = loadShaderGLSL("./../data/shaders/shadowmapomni/cubemapdisplay.frag", VK_SHADER_STAGE_FRAGMENT_BIT);
|
||||
#else
|
||||
shaderStages[0] = loadShader("./../data/shaders/shadowmapomni/cubemapdisplay.vert.spv", VK_SHADER_STAGE_VERTEX_BIT);
|
||||
shaderStages[1] = loadShader("./../data/shaders/shadowmapomni/cubemapdisplay.frag.spv", VK_SHADER_STAGE_FRAGMENT_BIT);
|
||||
#endif
|
||||
rasterizationState.cullMode = VK_CULL_MODE_FRONT_BIT;
|
||||
err = vkCreateGraphicsPipelines(device, pipelineCache, 1, &pipelineCreateInfo, nullptr, &pipelines.cubeMap);
|
||||
assert(!err);
|
||||
|
||||
// Offscreen pipeline
|
||||
#ifdef USE_GLSL
|
||||
shaderStages[0] = loadShaderGLSL("./../data/shaders/shadowmapomni/offscreen.vert", VK_SHADER_STAGE_VERTEX_BIT);
|
||||
shaderStages[1] = loadShaderGLSL("./../data/shaders/shadowmapomni/offscreen.frag", VK_SHADER_STAGE_FRAGMENT_BIT);
|
||||
#else
|
||||
shaderStages[0] = loadShader("./../data/shaders/shadowmapomni/offscreen.vert.spv", VK_SHADER_STAGE_VERTEX_BIT);
|
||||
shaderStages[1] = loadShader("./../data/shaders/shadowmapomni/offscreen.frag.spv", VK_SHADER_STAGE_FRAGMENT_BIT);
|
||||
#endif
|
||||
|
||||
rasterizationState.cullMode = VK_CULL_MODE_BACK_BIT;
|
||||
pipelineCreateInfo.layout = pipelineLayouts.offscreen;
|
||||
|
||||
err = vkCreateGraphicsPipelines(device, pipelineCache, 1, &pipelineCreateInfo, nullptr, &pipelines.offscreen);
|
||||
assert(!err);
|
||||
}
|
||||
|
|
|
|||
Loading…
Add table
Add a link
Reference in a new issue