From 58cc92037d3e28e459616ea45bd9c9f4d152790f Mon Sep 17 00:00:00 2001 From: Artur Wasmut <awasmut@uni-koblenz.de> Date: Fri, 4 Jun 2021 16:23:05 +0200 Subject: [PATCH] save pipeline config and check against pipeline's dimensions when dynamically setting viewport and scissor. --- src/vkcv/Core.cpp | 9 +++++++-- src/vkcv/PipelineManager.cpp | 12 ++++++++++-- src/vkcv/PipelineManager.hpp | 5 +++++ 3 files changed, 22 insertions(+), 4 deletions(-) diff --git a/src/vkcv/Core.cpp b/src/vkcv/Core.cpp index 292e71cd..27e84ee5 100644 --- a/src/vkcv/Core.cpp +++ b/src/vkcv/Core.cpp @@ -183,6 +183,7 @@ namespace vkcv const vk::ImageView imageView = m_swapchainImageViews[m_currentSwapchainImageIndex]; const vk::Pipeline pipeline = m_PipelineManager->getVkPipeline(pipelineHandle); const vk::PipelineLayout pipelineLayout = m_PipelineManager->getVkPipelineLayout(pipelineHandle); + const vkcv::PipelineConfig pipelineConfig = m_PipelineManager->getPipelineConfig(pipelineHandle); const vk::Rect2D renderArea(vk::Offset2D(0, 0), vk::Extent2D(width, height)); const vk::Buffer vulkanIndexBuffer = m_BufferManager->getBuffer(indexBuffer); @@ -244,8 +245,12 @@ namespace vkcv cmdBuffer.beginRenderPass(beginInfo, subpassContents, {}); cmdBuffer.bindPipeline(vk::PipelineBindPoint::eGraphics, pipeline, {}); - cmdBuffer.setViewport(0, 1, &dynamicViewport); - cmdBuffer.setScissor(0, 1, &dynamicScissor); + + if(pipelineConfig.m_Height == UINT32_MAX && pipelineConfig.m_Width == UINT32_MAX) + { + cmdBuffer.setViewport(0, 1, &dynamicViewport); + cmdBuffer.setScissor(0, 1, &dynamicScissor); + } for (uint32_t i = 0; i < vertexBufferBindings.size(); i++) { const auto &vertexBinding = vertexBufferBindings[i]; diff --git a/src/vkcv/PipelineManager.cpp b/src/vkcv/PipelineManager.cpp index 344e541c..16b08b7a 100644 --- a/src/vkcv/PipelineManager.cpp +++ b/src/vkcv/PipelineManager.cpp @@ -5,7 +5,8 @@ namespace vkcv PipelineManager::PipelineManager(vk::Device device) noexcept : m_Device{device}, - m_Pipelines{} + m_Pipelines{}, + m_Configs{} {} PipelineManager::~PipelineManager() noexcept @@ -258,6 +259,7 @@ namespace vkcv const uint64_t id = m_Pipelines.size(); m_Pipelines.push_back({ vkPipeline, vkPipelineLayout }); + m_Configs.push_back(config); return PipelineHandle(id, [&](uint64_t id) { destroyPipelineById(id); }); } @@ -304,5 +306,11 @@ namespace vkcv pipeline.m_layout = nullptr; } } - + + const PipelineConfig &PipelineManager::getPipelineConfig(const PipelineHandle &handle) const + { + const uint64_t id = handle.getId(); + return m_Configs.at(id); + } + } \ No newline at end of file diff --git a/src/vkcv/PipelineManager.hpp b/src/vkcv/PipelineManager.hpp index 950df0be..e243151f 100644 --- a/src/vkcv/PipelineManager.hpp +++ b/src/vkcv/PipelineManager.hpp @@ -18,6 +18,7 @@ namespace vkcv vk::Device m_Device; std::vector<Pipeline> m_Pipelines; + std::vector<PipelineConfig> m_Configs; void destroyPipelineById(uint64_t id); @@ -36,7 +37,11 @@ namespace vkcv [[nodiscard]] vk::Pipeline getVkPipeline(const PipelineHandle &handle) const; + [[nodiscard]] vk::PipelineLayout getVkPipelineLayout(const PipelineHandle &handle) const; + + [[nodiscard]] + const PipelineConfig &getPipelineConfig(const PipelineHandle &handle) const; }; } -- GitLab