mirror of
https://github.com/bailwillharr/engine.git
synced 2024-09-21 04:51:18 +00:00
Make changes (overrite)
This commit is contained in:
parent
cd617e8619
commit
7d1de98acf
@ -155,9 +155,6 @@ namespace engine {
|
|||||||
// single-threaded game loop
|
// single-threaded game loop
|
||||||
while (m_window->isRunning()) {
|
while (m_window->isRunning()) {
|
||||||
|
|
||||||
/* begin rendering */
|
|
||||||
renderData.drawBuffer = gfx()->beginRender();
|
|
||||||
|
|
||||||
/* logic */
|
/* logic */
|
||||||
m_sceneManager->updateActiveScene(m_window->dt());
|
m_sceneManager->updateActiveScene(m_window->dt());
|
||||||
|
|
||||||
|
@ -49,7 +49,7 @@ inline static void checkVulkanError(VkResult errorCode, int lineNo)
|
|||||||
|
|
||||||
namespace engine {
|
namespace engine {
|
||||||
|
|
||||||
static constexpr uint32_t FRAMES_IN_FLIGHT = 2; // This improved FPS by 5x! (on Intel IGPU)
|
static constexpr uint32_t FRAMES_IN_FLIGHT = 1; // This improved FPS by 5x! (on Intel IGPU)
|
||||||
|
|
||||||
static constexpr size_t PUSH_CONSTANT_MAX_SIZE = 128; // bytes
|
static constexpr size_t PUSH_CONSTANT_MAX_SIZE = 128; // bytes
|
||||||
static constexpr VkIndexType INDEX_TYPE = VK_INDEX_TYPE_UINT32;
|
static constexpr VkIndexType INDEX_TYPE = VK_INDEX_TYPE_UINT32;
|
||||||
@ -93,7 +93,7 @@ namespace engine {
|
|||||||
FrameData frameData{};
|
FrameData frameData{};
|
||||||
uint32_t currentFrameIndex = 0; // corresponds to the frameData
|
uint32_t currentFrameIndex = 0; // corresponds to the frameData
|
||||||
uint32_t imageIndex = 0; // for swapchain present
|
uint32_t imageIndex = 0; // for swapchain present
|
||||||
std::vector<VkSemaphore> copySemaphores{};
|
std::unordered_set<gfx::DescriptorBuffer*>* buffersToWrite = nullptr;
|
||||||
};
|
};
|
||||||
|
|
||||||
struct gfx::DescriptorSetLayout {
|
struct gfx::DescriptorSetLayout {
|
||||||
@ -745,7 +745,10 @@ namespace engine {
|
|||||||
|
|
||||||
/* first empty the descriptor buffer write queue */
|
/* first empty the descriptor buffer write queue */
|
||||||
auto& writeQueue = pimpl->descriptorBufferWriteQueues[currentFrameIndex];
|
auto& writeQueue = pimpl->descriptorBufferWriteQueues[currentFrameIndex];
|
||||||
//if (writeQueue.empty() == false) vkQueueWaitIdle(pimpl->device.queues.drawQueues[0]);
|
if (writeQueue.empty() == false) {
|
||||||
|
LOG_TRACE("write queue size: {}", writeQueue.size());
|
||||||
|
// vkQueueWaitIdle(pimpl->device.queues.drawQueues[0]);
|
||||||
|
}
|
||||||
for (gfx::DescriptorBuffer* buffer : writeQueue) {
|
for (gfx::DescriptorBuffer* buffer : writeQueue) {
|
||||||
|
|
||||||
// record the command buffer
|
// record the command buffer
|
||||||
@ -759,6 +762,8 @@ namespace engine {
|
|||||||
res = vkAllocateCommandBuffers(pimpl->device.device, &allocInfo, &commandBuffer);
|
res = vkAllocateCommandBuffers(pimpl->device.device, &allocInfo, &commandBuffer);
|
||||||
assert(res == VK_SUCCESS);
|
assert(res == VK_SUCCESS);
|
||||||
|
|
||||||
|
LOG_TRACE(" write command buffer: {}", (void*)commandBuffer);
|
||||||
|
|
||||||
VkCommandBufferBeginInfo beginInfo{};
|
VkCommandBufferBeginInfo beginInfo{};
|
||||||
beginInfo.sType = VK_STRUCTURE_TYPE_COMMAND_BUFFER_BEGIN_INFO;
|
beginInfo.sType = VK_STRUCTURE_TYPE_COMMAND_BUFFER_BEGIN_INFO;
|
||||||
beginInfo.flags = VK_COMMAND_BUFFER_USAGE_ONE_TIME_SUBMIT_BIT;
|
beginInfo.flags = VK_COMMAND_BUFFER_USAGE_ONE_TIME_SUBMIT_BIT;
|
||||||
@ -771,7 +776,7 @@ namespace engine {
|
|||||||
copyRegion.size = buffer->stagingBuffer.size;
|
copyRegion.size = buffer->stagingBuffer.size;
|
||||||
vkCmdCopyBuffer(commandBuffer, buffer->stagingBuffer.buffer, buffer->gpuBuffers[currentFrameIndex].buffer, 1, ©Region);
|
vkCmdCopyBuffer(commandBuffer, buffer->stagingBuffer.buffer, buffer->gpuBuffers[currentFrameIndex].buffer, 1, ©Region);
|
||||||
|
|
||||||
/* barrier to perform ownership transfer from transferQueue to drawQueue */
|
/* barrier to perform ownership transfer from transferQueue to drawQueue (RELEASE) */
|
||||||
VkBufferMemoryBarrier bufferMemoryBarrier{};
|
VkBufferMemoryBarrier bufferMemoryBarrier{};
|
||||||
bufferMemoryBarrier.sType = VK_STRUCTURE_TYPE_BUFFER_MEMORY_BARRIER;
|
bufferMemoryBarrier.sType = VK_STRUCTURE_TYPE_BUFFER_MEMORY_BARRIER;
|
||||||
bufferMemoryBarrier.pNext = nullptr;
|
bufferMemoryBarrier.pNext = nullptr;
|
||||||
@ -786,7 +791,7 @@ namespace engine {
|
|||||||
vkCmdPipelineBarrier(
|
vkCmdPipelineBarrier(
|
||||||
commandBuffer,
|
commandBuffer,
|
||||||
VK_PIPELINE_STAGE_TRANSFER_BIT, // srcStageMask
|
VK_PIPELINE_STAGE_TRANSFER_BIT, // srcStageMask
|
||||||
VK_PIPELINE_STAGE_BOTTOM_OF_PIPE_BIT, // dstStageMask
|
VK_PIPELINE_STAGE_TRANSFER_BIT, // dstStageMask
|
||||||
0,
|
0,
|
||||||
0,
|
0,
|
||||||
nullptr,
|
nullptr,
|
||||||
@ -806,14 +811,12 @@ namespace engine {
|
|||||||
submitInfo.pCommandBuffers = &commandBuffer;
|
submitInfo.pCommandBuffers = &commandBuffer;
|
||||||
submitInfo.signalSemaphoreCount = 1;
|
submitInfo.signalSemaphoreCount = 1;
|
||||||
submitInfo.pSignalSemaphores = &buffer->copySemaphores[currentFrameIndex];
|
submitInfo.pSignalSemaphores = &buffer->copySemaphores[currentFrameIndex];
|
||||||
submitInfo.waitSemaphoreCount = 1;
|
submitInfo.waitSemaphoreCount = 0;
|
||||||
submitInfo.pWaitSemaphores = &frameData.renderSemaphore;
|
submitInfo.pWaitSemaphores = nullptr;
|
||||||
|
|
||||||
res = vkQueueSubmit(pimpl->device.queues.transferQueues[1], 1, &submitInfo, VK_NULL_HANDLE);
|
res = vkQueueSubmit(pimpl->device.queues.transferQueues[1], 1, &submitInfo, VK_NULL_HANDLE);
|
||||||
assert(res == VK_SUCCESS);
|
assert(res == VK_SUCCESS);
|
||||||
|
|
||||||
drawBuffer->copySemaphores.push_back(buffer->copySemaphores[currentFrameIndex]);
|
|
||||||
|
|
||||||
}
|
}
|
||||||
|
|
||||||
uint32_t swapchainImageIndex;
|
uint32_t swapchainImageIndex;
|
||||||
@ -863,7 +866,7 @@ namespace engine {
|
|||||||
|
|
||||||
vkCmdPipelineBarrier(
|
vkCmdPipelineBarrier(
|
||||||
frameData.drawBuf,
|
frameData.drawBuf,
|
||||||
VK_PIPELINE_STAGE_TOP_OF_PIPE_BIT, // srcStageMask
|
VK_PIPELINE_STAGE_VERTEX_SHADER_BIT, // srcStageMask
|
||||||
VK_PIPELINE_STAGE_VERTEX_SHADER_BIT, // dstStageMask
|
VK_PIPELINE_STAGE_VERTEX_SHADER_BIT, // dstStageMask
|
||||||
0,
|
0,
|
||||||
0,
|
0,
|
||||||
@ -874,7 +877,6 @@ namespace engine {
|
|||||||
nullptr
|
nullptr
|
||||||
);
|
);
|
||||||
}
|
}
|
||||||
writeQueue.clear();
|
|
||||||
|
|
||||||
std::array<VkClearValue, 2> clearValues{}; // Using same value for all components enables compression according to NVIDIA Best Practices
|
std::array<VkClearValue, 2> clearValues{}; // Using same value for all components enables compression according to NVIDIA Best Practices
|
||||||
clearValues[0].color.float32[0] = 1.0f;
|
clearValues[0].color.float32[0] = 1.0f;
|
||||||
@ -914,6 +916,7 @@ namespace engine {
|
|||||||
drawBuffer->frameData = frameData;
|
drawBuffer->frameData = frameData;
|
||||||
drawBuffer->currentFrameIndex = currentFrameIndex;
|
drawBuffer->currentFrameIndex = currentFrameIndex;
|
||||||
drawBuffer->imageIndex = swapchainImageIndex;
|
drawBuffer->imageIndex = swapchainImageIndex;
|
||||||
|
drawBuffer->buffersToWrite = &writeQueue;
|
||||||
return drawBuffer;
|
return drawBuffer;
|
||||||
|
|
||||||
}
|
}
|
||||||
@ -933,19 +936,22 @@ namespace engine {
|
|||||||
|
|
||||||
// SUBMIT
|
// SUBMIT
|
||||||
|
|
||||||
|
std::vector<VkSemaphore> waitSemaphores{};
|
||||||
std::vector<VkPipelineStageFlags> waitDstStageMasks{};
|
std::vector<VkPipelineStageFlags> waitDstStageMasks{};
|
||||||
for (size_t i = 0; i < drawBuffer->copySemaphores.size(); i++) {
|
|
||||||
|
for (const gfx::DescriptorBuffer* buffer : *drawBuffer->buffersToWrite) {
|
||||||
|
waitSemaphores.push_back(buffer->copySemaphores[drawBuffer->currentFrameIndex]);
|
||||||
waitDstStageMasks.push_back(VK_PIPELINE_STAGE_VERTEX_SHADER_BIT);
|
waitDstStageMasks.push_back(VK_PIPELINE_STAGE_VERTEX_SHADER_BIT);
|
||||||
}
|
}
|
||||||
|
|
||||||
drawBuffer->copySemaphores.push_back(drawBuffer->frameData.presentSemaphore);
|
waitSemaphores.push_back(drawBuffer->frameData.presentSemaphore);
|
||||||
waitDstStageMasks.push_back(VK_PIPELINE_STAGE_COLOR_ATTACHMENT_OUTPUT_BIT);
|
waitDstStageMasks.push_back(VK_PIPELINE_STAGE_COLOR_ATTACHMENT_OUTPUT_BIT);
|
||||||
|
|
||||||
VkSubmitInfo submitInfo{
|
VkSubmitInfo submitInfo{
|
||||||
.sType = VK_STRUCTURE_TYPE_SUBMIT_INFO,
|
.sType = VK_STRUCTURE_TYPE_SUBMIT_INFO,
|
||||||
.pNext = nullptr,
|
.pNext = nullptr,
|
||||||
.waitSemaphoreCount = (uint32_t)drawBuffer->copySemaphores.size(),
|
.waitSemaphoreCount = (uint32_t)waitSemaphores.size(),
|
||||||
.pWaitSemaphores = drawBuffer->copySemaphores.data(),
|
.pWaitSemaphores = waitSemaphores.data(),
|
||||||
.pWaitDstStageMask = waitDstStageMasks.data(),
|
.pWaitDstStageMask = waitDstStageMasks.data(),
|
||||||
.commandBufferCount = 1,
|
.commandBufferCount = 1,
|
||||||
.pCommandBuffers = &drawBuffer->frameData.drawBuf,
|
.pCommandBuffers = &drawBuffer->frameData.drawBuf,
|
||||||
@ -977,6 +983,9 @@ namespace engine {
|
|||||||
|
|
||||||
pimpl->FRAMECOUNT++;
|
pimpl->FRAMECOUNT++;
|
||||||
|
|
||||||
|
/* empty the buffersToWrite queue */
|
||||||
|
drawBuffer->buffersToWrite->clear();
|
||||||
|
|
||||||
delete drawBuffer;
|
delete drawBuffer;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -54,7 +54,7 @@ namespace engine {
|
|||||||
RenderData::SetOneBuffer setOneBuffer{
|
RenderData::SetOneBuffer setOneBuffer{
|
||||||
.view = viewMatrix
|
.view = viewMatrix
|
||||||
};
|
};
|
||||||
//m_gfx->writeDescriptorBuffer(renderData.setOneBuffer, 0, sizeof(RenderData::SetOneBuffer), &setOneBuffer);
|
m_gfx->writeDescriptorBuffer(renderData.setOneBuffer, 0, sizeof(RenderData::SetOneBuffer), &setOneBuffer);
|
||||||
|
|
||||||
/* render all renderable entities */
|
/* render all renderable entities */
|
||||||
|
|
||||||
@ -92,6 +92,9 @@ namespace engine {
|
|||||||
|
|
||||||
}
|
}
|
||||||
|
|
||||||
|
/* begin rendering */
|
||||||
|
renderData.drawBuffer = m_gfx->beginRender();
|
||||||
|
|
||||||
/* these descriptor set bindings should persist across pipeline changes */
|
/* these descriptor set bindings should persist across pipeline changes */
|
||||||
const gfx::Pipeline* firstPipeline = pipelineDrawCalls.begin()->first;
|
const gfx::Pipeline* firstPipeline = pipelineDrawCalls.begin()->first;
|
||||||
m_gfx->cmdBindDescriptorSet(renderData.drawBuffer, firstPipeline, renderData.setZero, 0);
|
m_gfx->cmdBindDescriptorSet(renderData.drawBuffer, firstPipeline, renderData.setZero, 0);
|
||||||
|
Loading…
Reference in New Issue
Block a user