From 7288c5790e2e42779f7b6e25eb09cfacfba57928 Mon Sep 17 00:00:00 2001 From: Tobias Frisch <tfrisch@uni-koblenz.de> Date: Tue, 7 Sep 2021 17:52:58 +0200 Subject: [PATCH] [#71] Renamed pipeline to graphics pipeline Signed-off-by: Tobias Frisch <tfrisch@uni-koblenz.de> --- config/Sources.cmake | 6 +- include/vkcv/Core.hpp | 29 ++++----- ...eConfig.hpp => GraphicsPipelineConfig.hpp} | 2 +- include/vkcv/Handles.hpp | 4 +- modules/scene/include/vkcv/scene/Scene.hpp | 2 +- modules/scene/src/vkcv/scene/Scene.cpp | 2 +- projects/first_mesh/src/main.cpp | 4 +- projects/first_scene/src/main.cpp | 4 +- projects/first_triangle/src/main.cpp | 4 +- projects/indirect_dispatch/src/AppSetup.cpp | 2 +- projects/indirect_dispatch/src/AppSetup.hpp | 2 +- projects/mesh_shader/src/main.cpp | 8 +-- projects/particle_simulation/src/main.cpp | 4 +- projects/voxelization/src/ShadowMapping.cpp | 2 +- projects/voxelization/src/ShadowMapping.hpp | 2 +- projects/voxelization/src/Voxelization.cpp | 4 +- projects/voxelization/src/Voxelization.hpp | 4 +- projects/voxelization/src/main.cpp | 14 ++--- src/vkcv/Core.cpp | 34 ++++++++--- ...anager.cpp => GraphicsPipelineManager.cpp} | 60 +++++++++---------- ...anager.hpp => GraphicsPipelineManager.hpp} | 36 +++++------ 21 files changed, 123 insertions(+), 106 deletions(-) rename include/vkcv/{PipelineConfig.hpp => GraphicsPipelineConfig.hpp} (98%) rename src/vkcv/{PipelineManager.cpp => GraphicsPipelineManager.cpp} (92%) rename src/vkcv/{PipelineManager.hpp => GraphicsPipelineManager.hpp} (62%) diff --git a/config/Sources.cmake b/config/Sources.cmake index 46ac4f00..b51b37b5 100644 --- a/config/Sources.cmake +++ b/config/Sources.cmake @@ -51,14 +51,14 @@ set(vkcv_sources ${vkcv_include}/vkcv/ShaderProgram.hpp ${vkcv_source}/vkcv/ShaderProgram.cpp - ${vkcv_include}/vkcv/PipelineConfig.hpp + ${vkcv_include}/vkcv/GraphicsPipelineConfig.hpp ${vkcv_include}/vkcv/ComputePipelineConfig.hpp ${vkcv_source}/vkcv/ComputePipelineManager.hpp ${vkcv_source}/vkcv/ComputePipelineManager.cpp - ${vkcv_source}/vkcv/PipelineManager.hpp - ${vkcv_source}/vkcv/PipelineManager.cpp + ${vkcv_source}/vkcv/GraphicsPipelineManager.hpp + ${vkcv_source}/vkcv/GraphicsPipelineManager.cpp ${vkcv_include}/vkcv/CommandResources.hpp ${vkcv_source}/vkcv/CommandResources.cpp diff --git a/include/vkcv/Core.hpp b/include/vkcv/Core.hpp index 5ebc6d15..b82d2eda 100644 --- a/include/vkcv/Core.hpp +++ b/include/vkcv/Core.hpp @@ -14,7 +14,7 @@ #include "Handles.hpp" #include "Buffer.hpp" #include "Image.hpp" -#include "PipelineConfig.hpp" +#include "GraphicsPipelineConfig.hpp" #include "ComputePipelineConfig.hpp" #include "CommandResources.hpp" #include "SyncResources.hpp" @@ -31,7 +31,7 @@ namespace vkcv // forward declarations class PassManager; - class PipelineManager; + class GraphicsPipelineManager; class ComputePipelineManager; class DescriptorManager; class BufferManager; @@ -66,14 +66,14 @@ namespace vkcv Swapchain m_swapchain; Window& m_window; - std::unique_ptr<PassManager> m_PassManager; - std::unique_ptr<PipelineManager> m_PipelineManager; - std::unique_ptr<ComputePipelineManager> m_ComputePipelineManager; - std::unique_ptr<DescriptorManager> m_DescriptorManager; - std::unique_ptr<BufferManager> m_BufferManager; - std::unique_ptr<SamplerManager> m_SamplerManager; - std::unique_ptr<ImageManager> m_ImageManager; - std::unique_ptr<CommandStreamManager> m_CommandStreamManager; + std::unique_ptr<PassManager> m_PassManager; + std::unique_ptr<GraphicsPipelineManager> m_PipelineManager; + std::unique_ptr<ComputePipelineManager> m_ComputePipelineManager; + std::unique_ptr<DescriptorManager> m_DescriptorManager; + std::unique_ptr<BufferManager> m_BufferManager; + std::unique_ptr<SamplerManager> m_SamplerManager; + std::unique_ptr<ImageManager> m_ImageManager; + std::unique_ptr<CommandStreamManager> m_CommandStreamManager; CommandResources m_CommandResources; SyncResources m_SyncResources; @@ -154,7 +154,7 @@ namespace vkcv * @return True if pipeline creation was successful, False if not */ [[nodiscard]] - PipelineHandle createGraphicsPipeline(const PipelineConfig &config); + GraphicsPipelineHandle createGraphicsPipeline(const GraphicsPipelineConfig &config); /** * Creates a basic vulkan compute pipeline using @p shader program and returns it using the @p handle. @@ -261,7 +261,7 @@ namespace vkcv void recordDrawcallsToCmdStream( const CommandStreamHandle& cmdStreamHandle, const PassHandle& renderpassHandle, - const PipelineHandle pipelineHandle, + const GraphicsPipelineHandle &pipelineHandle, const PushConstants &pushConstants, const std::vector<DrawcallInfo> &drawcalls, const std::vector<ImageHandle> &renderTargets); @@ -269,7 +269,7 @@ namespace vkcv void recordMeshShaderDrawcalls( const CommandStreamHandle& cmdStreamHandle, const PassHandle& renderpassHandle, - const PipelineHandle pipelineHandle, + const GraphicsPipelineHandle &pipelineHandle, const PushConstants& pushConstantData, const std::vector<MeshShaderDrawcall>& drawcalls, const std::vector<ImageHandle>& renderTargets); @@ -339,7 +339,8 @@ namespace vkcv void setDebugLabel(const BufferHandle &handle, const std::string &label); void setDebugLabel(const PassHandle &handle, const std::string &label); - void setDebugLabel(const PipelineHandle &handle, const std::string &label); + void setDebugLabel(const GraphicsPipelineHandle &handle, const std::string &label); + void setDebugLabel(const ComputePipelineHandle &handle, const std::string &label); void setDebugLabel(const DescriptorSetHandle &handle, const std::string &label); void setDebugLabel(const SamplerHandle &handle, const std::string &label); void setDebugLabel(const ImageHandle &handle, const std::string &label); diff --git a/include/vkcv/PipelineConfig.hpp b/include/vkcv/GraphicsPipelineConfig.hpp similarity index 98% rename from include/vkcv/PipelineConfig.hpp rename to include/vkcv/GraphicsPipelineConfig.hpp index 33a2027b..6d466c4a 100644 --- a/include/vkcv/PipelineConfig.hpp +++ b/include/vkcv/GraphicsPipelineConfig.hpp @@ -22,7 +22,7 @@ namespace vkcv { // alternatively we could expose the blend factors directly enum class BlendMode{ None, Additive }; - struct PipelineConfig { + struct GraphicsPipelineConfig { ShaderProgram m_ShaderProgram; uint32_t m_Width; uint32_t m_Height; diff --git a/include/vkcv/Handles.hpp b/include/vkcv/Handles.hpp index 437a5606..4a1df585 100644 --- a/include/vkcv/Handles.hpp +++ b/include/vkcv/Handles.hpp @@ -73,8 +73,8 @@ namespace vkcv using Handle::Handle; }; - class PipelineHandle : public Handle { - friend class PipelineManager; + class GraphicsPipelineHandle : public Handle { + friend class GraphicsPipelineManager; private: using Handle::Handle; }; diff --git a/modules/scene/include/vkcv/scene/Scene.hpp b/modules/scene/include/vkcv/scene/Scene.hpp index 429c0bcf..b0afec48 100644 --- a/modules/scene/include/vkcv/scene/Scene.hpp +++ b/modules/scene/include/vkcv/scene/Scene.hpp @@ -58,7 +58,7 @@ namespace vkcv::scene { void recordDrawcalls(CommandStreamHandle &cmdStream, const camera::Camera &camera, const PassHandle &pass, - const PipelineHandle &pipeline, + const GraphicsPipelineHandle &pipeline, size_t pushConstantsSizePerDrawcall, const RecordMeshDrawcallFunction &record, const std::vector<ImageHandle> &renderTargets); diff --git a/modules/scene/src/vkcv/scene/Scene.cpp b/modules/scene/src/vkcv/scene/Scene.cpp index c0065af5..0cb4efd2 100644 --- a/modules/scene/src/vkcv/scene/Scene.cpp +++ b/modules/scene/src/vkcv/scene/Scene.cpp @@ -112,7 +112,7 @@ namespace vkcv::scene { void Scene::recordDrawcalls(CommandStreamHandle &cmdStream, const camera::Camera &camera, const PassHandle &pass, - const PipelineHandle &pipeline, + const GraphicsPipelineHandle &pipeline, size_t pushConstantsSizePerDrawcall, const RecordMeshDrawcallFunction &record, const std::vector<ImageHandle> &renderTargets) { diff --git a/projects/first_mesh/src/main.cpp b/projects/first_mesh/src/main.cpp index a87c9544..c1bce3db 100644 --- a/projects/first_mesh/src/main.cpp +++ b/projects/first_mesh/src/main.cpp @@ -113,7 +113,7 @@ int main(int argc, const char** argv) { vkcv::DescriptorSetHandle descriptorSet = core.createDescriptorSet(setLayoutHandle); - const vkcv::PipelineConfig firstMeshPipelineConfig { + const vkcv::GraphicsPipelineConfig firstMeshPipelineConfig { firstMeshProgram, UINT32_MAX, UINT32_MAX, @@ -122,7 +122,7 @@ int main(int argc, const char** argv) { { core.getDescriptorSetLayout(setLayoutHandle).vulkanHandle }, true }; - vkcv::PipelineHandle firstMeshPipeline = core.createGraphicsPipeline(firstMeshPipelineConfig); + vkcv::GraphicsPipelineHandle firstMeshPipeline = core.createGraphicsPipeline(firstMeshPipelineConfig); if (!firstMeshPipeline) { std::cerr << "Error. Could not create graphics pipeline. Exiting." << std::endl; diff --git a/projects/first_scene/src/main.cpp b/projects/first_scene/src/main.cpp index 37cefd33..c7d4fcac 100644 --- a/projects/first_scene/src/main.cpp +++ b/projects/first_scene/src/main.cpp @@ -81,7 +81,7 @@ int main(int argc, const char** argv) { const auto& material0 = scene.getMaterial(0); - const vkcv::PipelineConfig scenePipelineDefinition{ + const vkcv::GraphicsPipelineConfig scenePipelineDefinition{ sceneShaderProgram, UINT32_MAX, UINT32_MAX, @@ -89,7 +89,7 @@ int main(int argc, const char** argv) { {sceneLayout}, { core.getDescriptorSetLayout(material0.getDescriptorSetLayout()).vulkanHandle }, true }; - vkcv::PipelineHandle scenePipeline = core.createGraphicsPipeline(scenePipelineDefinition); + vkcv::GraphicsPipelineHandle scenePipeline = core.createGraphicsPipeline(scenePipelineDefinition); if (!scenePipeline) { std::cout << "Error. Could not create graphics pipeline. Exiting." << std::endl; diff --git a/projects/first_triangle/src/main.cpp b/projects/first_triangle/src/main.cpp index 1bfb2edc..b083af4a 100644 --- a/projects/first_triangle/src/main.cpp +++ b/projects/first_triangle/src/main.cpp @@ -61,7 +61,7 @@ int main(int argc, const char** argv) { const auto swapchainExtent = core.getSwapchain().getExtent(); - const vkcv::PipelineConfig trianglePipelineDefinition { + const vkcv::GraphicsPipelineConfig trianglePipelineDefinition { triangleShaderProgram, swapchainExtent.width, swapchainExtent.height, @@ -71,7 +71,7 @@ int main(int argc, const char** argv) { false }; - vkcv::PipelineHandle trianglePipeline = core.createGraphicsPipeline(trianglePipelineDefinition); + vkcv::GraphicsPipelineHandle trianglePipeline = core.createGraphicsPipeline(trianglePipelineDefinition); if (!trianglePipeline) { diff --git a/projects/indirect_dispatch/src/AppSetup.cpp b/projects/indirect_dispatch/src/AppSetup.cpp index 00eea0fa..e1b29ad5 100644 --- a/projects/indirect_dispatch/src/AppSetup.cpp +++ b/projects/indirect_dispatch/src/AppSetup.cpp @@ -131,7 +131,7 @@ bool loadGraphicPass( } - vkcv::PipelineConfig pipelineConfig{ + vkcv::GraphicsPipelineConfig pipelineConfig{ shaderProgram, UINT32_MAX, UINT32_MAX, diff --git a/projects/indirect_dispatch/src/AppSetup.hpp b/projects/indirect_dispatch/src/AppSetup.hpp index f3839d08..b0ade431 100644 --- a/projects/indirect_dispatch/src/AppSetup.hpp +++ b/projects/indirect_dispatch/src/AppSetup.hpp @@ -8,7 +8,7 @@ struct AppRenderTargets { }; struct GraphicPassHandles { - vkcv::PipelineHandle pipeline; + vkcv::GraphicsPipelineHandle pipeline; vkcv::PassHandle renderPass; vkcv::DescriptorSetLayoutHandle descriptorSetLayout; vkcv::DescriptorSetHandle descriptorSet; diff --git a/projects/mesh_shader/src/main.cpp b/projects/mesh_shader/src/main.cpp index c3f9210d..6c3bc2f4 100644 --- a/projects/mesh_shader/src/main.cpp +++ b/projects/mesh_shader/src/main.cpp @@ -208,7 +208,7 @@ int main(int argc, const char** argv) { auto swapchainExtent = core.getSwapchain().getExtent(); - const vkcv::PipelineConfig bunnyPipelineDefinition { + const vkcv::GraphicsPipelineConfig bunnyPipelineDefinition { bunnyShaderProgram, swapchainExtent.width, swapchainExtent.height, @@ -229,7 +229,7 @@ int main(int argc, const char** argv) { vertexShaderDescriptorWrites.storageBufferWrites = { vkcv::BufferDescriptorWrite(0, matrixBuffer.getHandle()) }; core.writeDescriptorSet(vertexShaderDescriptorSet, vertexShaderDescriptorWrites); - vkcv::PipelineHandle bunnyPipeline = core.createGraphicsPipeline(bunnyPipelineDefinition); + vkcv::GraphicsPipelineHandle bunnyPipeline = core.createGraphicsPipeline(bunnyPipelineDefinition); if (!bunnyPipeline) { @@ -258,7 +258,7 @@ int main(int argc, const char** argv) { vkcv::DescriptorSetHandle meshShaderDescriptorSet = core.createDescriptorSet(meshShaderDescriptorSetLayout); const vkcv::VertexLayout meshShaderLayout(bindings); - const vkcv::PipelineConfig meshShaderPipelineDefinition{ + const vkcv::GraphicsPipelineConfig meshShaderPipelineDefinition{ meshShaderProgram, swapchainExtent.width, swapchainExtent.height, @@ -268,7 +268,7 @@ int main(int argc, const char** argv) { false }; - vkcv::PipelineHandle meshShaderPipeline = core.createGraphicsPipeline(meshShaderPipelineDefinition); + vkcv::GraphicsPipelineHandle meshShaderPipeline = core.createGraphicsPipeline(meshShaderPipelineDefinition); if (!meshShaderPipeline) { diff --git a/projects/particle_simulation/src/main.cpp b/projects/particle_simulation/src/main.cpp index 52356612..ff249e4e 100644 --- a/projects/particle_simulation/src/main.cpp +++ b/projects/particle_simulation/src/main.cpp @@ -119,7 +119,7 @@ int main(int argc, const char **argv) { const vkcv::VertexLayout particleLayout(bindings); - vkcv::PipelineConfig particlePipelineDefinition{ + vkcv::GraphicsPipelineConfig particlePipelineDefinition{ particleShaderProgram, UINT32_MAX, UINT32_MAX, @@ -135,7 +135,7 @@ int main(int argc, const char **argv) { vertexBuffer.fill(vertices); - vkcv::PipelineHandle particlePipeline = core.createGraphicsPipeline(particlePipelineDefinition); + vkcv::GraphicsPipelineHandle particlePipeline = core.createGraphicsPipeline(particlePipelineDefinition); vkcv::ComputePipelineHandle computePipeline = core.createComputePipeline({ computeShaderProgram, {core.getDescriptorSetLayout(computeDescriptorSetLayout).vulkanHandle} }); diff --git a/projects/voxelization/src/ShadowMapping.cpp b/projects/voxelization/src/ShadowMapping.cpp index 3e55f0bb..55fb781c 100644 --- a/projects/voxelization/src/ShadowMapping.cpp +++ b/projects/voxelization/src/ShadowMapping.cpp @@ -166,7 +166,7 @@ ShadowMapping::ShadowMapping(vkcv::Core* corePtr, const vkcv::VertexLayout& vert m_shadowMapPass = corePtr->createPass(shadowPassConfig); // pipeline - vkcv::PipelineConfig shadowPipeConfig{ + vkcv::GraphicsPipelineConfig shadowPipeConfig{ shadowShader, shadowMapResolution, shadowMapResolution, diff --git a/projects/voxelization/src/ShadowMapping.hpp b/projects/voxelization/src/ShadowMapping.hpp index 9543daf6..3a577a75 100644 --- a/projects/voxelization/src/ShadowMapping.hpp +++ b/projects/voxelization/src/ShadowMapping.hpp @@ -43,7 +43,7 @@ private: vkcv::Buffer<LightInfo> m_lightInfoBuffer; vkcv::PassHandle m_shadowMapPass; - vkcv::PipelineHandle m_shadowMapPipe; + vkcv::GraphicsPipelineHandle m_shadowMapPipe; vkcv::ComputePipelineHandle m_depthToMomentsPipe; vkcv::DescriptorSetLayoutHandle m_depthToMomentsDescriptorSetLayout; diff --git a/projects/voxelization/src/Voxelization.cpp b/projects/voxelization/src/Voxelization.cpp index 013f8c0e..668dc859 100644 --- a/projects/voxelization/src/Voxelization.cpp +++ b/projects/voxelization/src/Voxelization.cpp @@ -104,7 +104,7 @@ Voxelization::Voxelization( vkcv::DescriptorSetLayoutHandle dummyPerMeshDescriptorSetLayout = m_corePtr->createDescriptorSetLayout(voxelizationShader.getReflectedDescriptors().at(1)); vkcv::DescriptorSetHandle dummyPerMeshDescriptorSet = m_corePtr->createDescriptorSet(dummyPerMeshDescriptorSetLayout); - const vkcv::PipelineConfig voxelizationPipeConfig{ + const vkcv::GraphicsPipelineConfig voxelizationPipeConfig{ voxelizationShader, voxelResolution, voxelResolution, @@ -150,7 +150,7 @@ Voxelization::Voxelization( voxelVisualisationPassDefinition.msaa = msaa; m_visualisationPass = m_corePtr->createPass(voxelVisualisationPassDefinition); - vkcv::PipelineConfig voxelVisualisationPipeConfig{ + vkcv::GraphicsPipelineConfig voxelVisualisationPipeConfig{ voxelVisualisationShader, 0, 0, diff --git a/projects/voxelization/src/Voxelization.hpp b/projects/voxelization/src/Voxelization.hpp index c1724510..c099581a 100644 --- a/projects/voxelization/src/Voxelization.hpp +++ b/projects/voxelization/src/Voxelization.hpp @@ -55,7 +55,7 @@ private: vkcv::Image m_dummyRenderTarget; vkcv::PassHandle m_voxelizationPass; - vkcv::PipelineHandle m_voxelizationPipe; + vkcv::GraphicsPipelineHandle m_voxelizationPipe; vkcv::DescriptorSetLayoutHandle m_voxelizationDescriptorSetLayout; vkcv::DescriptorSetHandle m_voxelizationDescriptorSet; @@ -68,7 +68,7 @@ private: vkcv::DescriptorSetHandle m_bufferToImageDescriptorSet; vkcv::PassHandle m_visualisationPass; - vkcv::PipelineHandle m_visualisationPipe; + vkcv::GraphicsPipelineHandle m_visualisationPipe; vkcv::ComputePipelineHandle m_secondaryBouncePipe; vkcv::DescriptorSetLayoutHandle m_secondaryBounceDescriptorSetLayout; diff --git a/projects/voxelization/src/main.cpp b/projects/voxelization/src/main.cpp index 58bde04f..795acb17 100644 --- a/projects/voxelization/src/main.cpp +++ b/projects/voxelization/src/main.cpp @@ -303,7 +303,7 @@ int main(int argc, const char** argv) { auto swapchainExtent = core.getSwapchain().getExtent(); - vkcv::PipelineConfig prepassPipelineConfig{ + vkcv::GraphicsPipelineConfig prepassPipelineConfig{ depthPrepassShader, swapchainExtent.width, swapchainExtent.height, @@ -318,10 +318,10 @@ int main(int argc, const char** argv) { prepassPipelineConfig.m_depthTest = vkcv::DepthTest::LessEqual; prepassPipelineConfig.m_alphaToCoverage = true; - vkcv::PipelineHandle prepassPipeline = core.createGraphicsPipeline(prepassPipelineConfig); + vkcv::GraphicsPipelineHandle prepassPipeline = core.createGraphicsPipeline(prepassPipelineConfig); // forward pipeline - vkcv::PipelineConfig forwardPipelineConfig { + vkcv::GraphicsPipelineConfig forwardPipelineConfig { forwardProgram, swapchainExtent.width, swapchainExtent.height, @@ -337,7 +337,7 @@ int main(int argc, const char** argv) { forwardPipelineConfig.m_depthTest = vkcv::DepthTest::Equal; forwardPipelineConfig.m_depthWrite = false; - vkcv::PipelineHandle forwardPipeline = core.createGraphicsPipeline(forwardPipelineConfig); + vkcv::GraphicsPipelineHandle forwardPipeline = core.createGraphicsPipeline(forwardPipelineConfig); if (!forwardPipeline) { std::cout << "Error. Could not create graphics pipeline. Exiting." << std::endl; @@ -376,7 +376,7 @@ int main(int argc, const char** argv) { skyShader.addShader(shaderStage, path); }); - vkcv::PipelineConfig skyPipeConfig; + vkcv::GraphicsPipelineConfig skyPipeConfig; skyPipeConfig.m_ShaderProgram = skyShader; skyPipeConfig.m_Width = swapchainExtent.width; skyPipeConfig.m_Height = swapchainExtent.height; @@ -387,7 +387,7 @@ int main(int argc, const char** argv) { skyPipeConfig.m_multisampling = msaa; skyPipeConfig.m_depthWrite = false; - vkcv::PipelineHandle skyPipe = core.createGraphicsPipeline(skyPipeConfig); + vkcv::GraphicsPipelineHandle skyPipe = core.createGraphicsPipeline(skyPipeConfig); // render targets vkcv::ImageHandle depthBuffer = core.createImage( @@ -961,7 +961,7 @@ int main(int argc, const char** argv) { newForwardProgram.addShader(shaderStage, path); }); forwardPipelineConfig.m_ShaderProgram = newForwardProgram; - vkcv::PipelineHandle newPipeline = core.createGraphicsPipeline(forwardPipelineConfig); + vkcv::GraphicsPipelineHandle newPipeline = core.createGraphicsPipeline(forwardPipelineConfig); if (newPipeline) { forwardPipeline = newPipeline; diff --git a/src/vkcv/Core.cpp b/src/vkcv/Core.cpp index 47be399a..e55fb9cb 100644 --- a/src/vkcv/Core.cpp +++ b/src/vkcv/Core.cpp @@ -8,7 +8,7 @@ #include "vkcv/Core.hpp" #include "PassManager.hpp" -#include "PipelineManager.hpp" +#include "GraphicsPipelineManager.hpp" #include "ComputePipelineManager.hpp" #include "vkcv/BufferManager.hpp" #include "SamplerManager.hpp" @@ -94,7 +94,7 @@ namespace vkcv m_swapchain(swapChain), m_window(window), m_PassManager{std::make_unique<PassManager>(m_Context.m_Device)}, - m_PipelineManager{std::make_unique<PipelineManager>(m_Context.m_Device)}, + m_PipelineManager{std::make_unique<GraphicsPipelineManager>(m_Context.m_Device)}, m_ComputePipelineManager{std::make_unique<ComputePipelineManager>(m_Context.m_Device)}, m_DescriptorManager(std::make_unique<DescriptorManager>(m_Context.m_Device)), m_BufferManager{std::unique_ptr<BufferManager>(new BufferManager())}, @@ -135,8 +135,8 @@ namespace vkcv m_Context.m_Device.destroySwapchainKHR(m_swapchain.getSwapchain()); m_Context.m_Instance.destroySurfaceKHR(m_swapchain.getSurface()); } - - PipelineHandle Core::createGraphicsPipeline(const PipelineConfig &config) + + GraphicsPipelineHandle Core::createGraphicsPipeline(const GraphicsPipelineConfig &config) { return m_PipelineManager->createPipeline(config, *m_PassManager); } @@ -331,7 +331,7 @@ namespace vkcv void Core::recordDrawcallsToCmdStream( const CommandStreamHandle& cmdStreamHandle, const PassHandle& renderpassHandle, - const PipelineHandle pipelineHandle, + const GraphicsPipelineHandle &pipelineHandle, const PushConstants &pushConstantData, const std::vector<DrawcallInfo> &drawcalls, const std::vector<ImageHandle> &renderTargets) { @@ -373,7 +373,7 @@ namespace vkcv cmdBuffer.bindPipeline(vk::PipelineBindPoint::eGraphics, pipeline, {}); - const PipelineConfig &pipeConfig = m_PipelineManager->getPipelineConfig(pipelineHandle); + const GraphicsPipelineConfig &pipeConfig = m_PipelineManager->getPipelineConfig(pipelineHandle); if (pipeConfig.m_UseDynamicViewport) { recordDynamicViewport(cmdBuffer, width, height); } @@ -396,7 +396,7 @@ namespace vkcv void Core::recordMeshShaderDrawcalls( const CommandStreamHandle& cmdStreamHandle, const PassHandle& renderpassHandle, - const PipelineHandle pipelineHandle, + const GraphicsPipelineHandle &pipelineHandle, const PushConstants& pushConstantData, const std::vector<MeshShaderDrawcall>& drawcalls, const std::vector<ImageHandle>& renderTargets) { @@ -438,7 +438,7 @@ namespace vkcv cmdBuffer.bindPipeline(vk::PipelineBindPoint::eGraphics, pipeline, {}); - const PipelineConfig& pipeConfig = m_PipelineManager->getPipelineConfig(pipelineHandle); + const GraphicsPipelineConfig& pipeConfig = m_PipelineManager->getPipelineConfig(pipelineHandle); if (pipeConfig.m_UseDynamicViewport) { recordDynamicViewport(cmdBuffer, width, height); } @@ -924,7 +924,7 @@ namespace vkcv ); } - void Core::setDebugLabel(const PipelineHandle &handle, const std::string &label) { + void Core::setDebugLabel(const GraphicsPipelineHandle &handle, const std::string &label) { if (!handle) { vkcv_log(LogLevel::WARNING, "Can't set debug label to invalid handle"); return; @@ -940,6 +940,22 @@ namespace vkcv ); } + void Core::setDebugLabel(const ComputePipelineHandle &handle, const std::string &label) { + if (!handle) { + vkcv_log(LogLevel::WARNING, "Can't set debug label to invalid handle"); + return; + } + + setDebugObjectLabel( + m_Context.getDevice(), + vk::ObjectType::ePipeline, + uint64_t(static_cast<VkPipeline>( + m_ComputePipelineManager->getVkPipeline(handle) + )), + label + ); + } + void Core::setDebugLabel(const DescriptorSetHandle &handle, const std::string &label) { if (!handle) { vkcv_log(LogLevel::WARNING, "Can't set debug label to invalid handle"); diff --git a/src/vkcv/PipelineManager.cpp b/src/vkcv/GraphicsPipelineManager.cpp similarity index 92% rename from src/vkcv/PipelineManager.cpp rename to src/vkcv/GraphicsPipelineManager.cpp index 7705c7c4..cb7dd31d 100644 --- a/src/vkcv/PipelineManager.cpp +++ b/src/vkcv/GraphicsPipelineManager.cpp @@ -1,16 +1,16 @@ -#include "PipelineManager.hpp" +#include "GraphicsPipelineManager.hpp" #include "vkcv/Image.hpp" #include "vkcv/Logger.hpp" namespace vkcv { - - PipelineManager::PipelineManager(vk::Device device) noexcept : + + GraphicsPipelineManager::GraphicsPipelineManager(vk::Device device) noexcept : m_Device{device}, m_Pipelines{} {} - - PipelineManager::~PipelineManager() noexcept + + GraphicsPipelineManager::~GraphicsPipelineManager() noexcept { for (uint64_t id = 0; id < m_Pipelines.size(); id++) { destroyPipelineById(id); @@ -135,7 +135,7 @@ namespace vkcv std::vector<vk::VertexInputAttributeDescription> &vertexAttributeDescriptions, std::vector<vk::VertexInputBindingDescription> &vertexBindingDescriptions, const bool existsVertexShader, - const PipelineConfig &config) { + const GraphicsPipelineConfig &config) { if (existsVertexShader) { const VertexLayout& layout = config.m_VertexLayout; @@ -184,7 +184,7 @@ namespace vkcv * @param config provides data for primitive topology. * @return Pipeline Input Assembly State Create Info Struct */ - vk::PipelineInputAssemblyStateCreateInfo createPipelineInputAssemblyStateCreateInfo(const PipelineConfig &config) { + vk::PipelineInputAssemblyStateCreateInfo createPipelineInputAssemblyStateCreateInfo(const GraphicsPipelineConfig &config) { vk::PipelineInputAssemblyStateCreateInfo pipelineInputAssemblyStateCreateInfo( {}, primitiveTopologyToVulkanPrimitiveTopology(config.m_PrimitiveTopology), @@ -199,7 +199,7 @@ namespace vkcv * @param config provides with and height of the output window * @return Pipeline Viewport State Create Info Struct */ - vk::PipelineViewportStateCreateInfo createPipelineViewportStateCreateInfo(const PipelineConfig &config) { + vk::PipelineViewportStateCreateInfo createPipelineViewportStateCreateInfo(const GraphicsPipelineConfig &config) { static vk::Viewport viewport; static vk::Rect2D scissor; @@ -237,7 +237,7 @@ namespace vkcv * @param config sets Depth Clamping and Culling Mode * @return Pipeline Rasterization State Create Info Struct */ - vk::PipelineRasterizationStateCreateInfo createPipelineRasterizationStateCreateInfo(const PipelineConfig &config) { + vk::PipelineRasterizationStateCreateInfo createPipelineRasterizationStateCreateInfo(const GraphicsPipelineConfig &config) { vk::CullModeFlags cullMode; switch (config.m_culling) { case CullMode::None: @@ -288,7 +288,7 @@ namespace vkcv * @param config set MSAA Sample Count Flag * @return Pipeline Multisample State Create Info Struct */ - vk::PipelineMultisampleStateCreateInfo createPipelineMultisampleStateCreateInfo(const PipelineConfig &config) { + vk::PipelineMultisampleStateCreateInfo createPipelineMultisampleStateCreateInfo(const GraphicsPipelineConfig &config) { vk::PipelineMultisampleStateCreateInfo pipelineMultisampleStateCreateInfo( {}, msaaToVkSampleCountFlag(config.m_multisampling), @@ -308,7 +308,7 @@ namespace vkcv * @param config sets blend mode * @return */ - vk::PipelineColorBlendStateCreateInfo createPipelineColorBlendStateCreateInfo(const PipelineConfig &config) { + vk::PipelineColorBlendStateCreateInfo createPipelineColorBlendStateCreateInfo(const GraphicsPipelineConfig &config) { // currently set to additive, if not disabled // BlendFactors must be set as soon as additional BlendModes are added static vk::PipelineColorBlendAttachmentState colorBlendAttachmentState ( @@ -344,7 +344,7 @@ namespace vkcv * @param config sets Push Constant Size and Descriptor Layouts. * @return Pipeline Layout Create Info Struct */ - vk::PipelineLayoutCreateInfo createPipelineLayoutCreateInfo(const PipelineConfig &config) { + vk::PipelineLayoutCreateInfo createPipelineLayoutCreateInfo(const GraphicsPipelineConfig &config) { static vk::PushConstantRange pushConstantRange; const size_t pushConstantSize = config.m_ShaderProgram.getPushConstantSize(); @@ -370,7 +370,7 @@ namespace vkcv * @param config sets if depth test in enabled or not. * @return Pipeline Layout Create Info Struct */ - vk::PipelineDepthStencilStateCreateInfo createPipelineDepthStencilStateCreateInfo(const PipelineConfig &config) { + vk::PipelineDepthStencilStateCreateInfo createPipelineDepthStencilStateCreateInfo(const GraphicsPipelineConfig &config) { const vk::PipelineDepthStencilStateCreateInfo pipelineDepthStencilCreateInfo( vk::PipelineDepthStencilStateCreateFlags(), config.m_depthTest != DepthTest::None, @@ -392,7 +392,7 @@ namespace vkcv * @param config sets whenever a dynamic viewport is used or not. * @return Pipeline Dynamic State Create Info Struct */ - vk::PipelineDynamicStateCreateInfo createPipelineDynamicStateCreateInfo(const PipelineConfig &config) { + vk::PipelineDynamicStateCreateInfo createPipelineDynamicStateCreateInfo(const GraphicsPipelineConfig &config) { static std::vector<vk::DynamicState> dynamicStates; dynamicStates.clear(); @@ -410,7 +410,7 @@ namespace vkcv return dynamicStateCreateInfo; } - PipelineHandle PipelineManager::createPipeline(const PipelineConfig &config, PassManager& passManager) { + GraphicsPipelineHandle GraphicsPipelineManager::createPipeline(const GraphicsPipelineConfig &config, PassManager& passManager) { const vk::RenderPass &pass = passManager.getVkPass(config.m_PassHandle); const bool existsTaskShader = config.m_ShaderProgram.existsShader(ShaderStage::TASK); @@ -423,12 +423,12 @@ namespace vkcv if (!validGeometryStages) { vkcv_log(LogLevel::ERROR, "Requires vertex or task and mesh shader"); - return PipelineHandle(); + return GraphicsPipelineHandle(); } if (!existsFragmentShader) { vkcv_log(LogLevel::ERROR, "Requires fragment shader code"); - return PipelineHandle(); + return GraphicsPipelineHandle(); } std::vector<vk::PipelineShaderStageCreateInfo> shaderStages; @@ -452,7 +452,7 @@ namespace vkcv } else { destroyShaderModules(); - return PipelineHandle(); + return GraphicsPipelineHandle(); } } @@ -469,7 +469,7 @@ namespace vkcv } else { destroyShaderModules(); - return PipelineHandle(); + return GraphicsPipelineHandle(); } } @@ -486,7 +486,7 @@ namespace vkcv } else { destroyShaderModules(); - return PipelineHandle(); + return GraphicsPipelineHandle(); } } @@ -503,7 +503,7 @@ namespace vkcv } else { destroyShaderModules(); - return PipelineHandle(); + return GraphicsPipelineHandle(); } } @@ -520,7 +520,7 @@ namespace vkcv } else { destroyShaderModules(); - return PipelineHandle(); + return GraphicsPipelineHandle(); } } @@ -566,7 +566,7 @@ namespace vkcv vk::PipelineLayout vkPipelineLayout{}; if (m_Device.createPipelineLayout(&pipelineLayoutCreateInfo, nullptr, &vkPipelineLayout) != vk::Result::eSuccess) { destroyShaderModules(); - return PipelineHandle(); + return GraphicsPipelineHandle(); } // Depth Stencil @@ -610,7 +610,7 @@ namespace vkcv // Catch runtime error if the creation of the pipeline fails. // Destroy everything to keep the memory clean. destroyShaderModules(); - return PipelineHandle(); + return GraphicsPipelineHandle(); } // Clean Up @@ -619,10 +619,10 @@ namespace vkcv // Hand over Handler to main Application const uint64_t id = m_Pipelines.size(); m_Pipelines.push_back({ vkPipeline, vkPipelineLayout, config }); - return PipelineHandle(id, [&](uint64_t id) { destroyPipelineById(id); }); + return GraphicsPipelineHandle(id, [&](uint64_t id) { destroyPipelineById(id); }); } - vk::Pipeline PipelineManager::getVkPipeline(const PipelineHandle &handle) const + vk::Pipeline GraphicsPipelineManager::getVkPipeline(const GraphicsPipelineHandle &handle) const { const uint64_t id = handle.getId(); @@ -635,7 +635,7 @@ namespace vkcv return pipeline.m_handle; } - vk::PipelineLayout PipelineManager::getVkPipelineLayout(const PipelineHandle &handle) const + vk::PipelineLayout GraphicsPipelineManager::getVkPipelineLayout(const GraphicsPipelineHandle &handle) const { const uint64_t id = handle.getId(); @@ -648,7 +648,7 @@ namespace vkcv return pipeline.m_layout; } - void PipelineManager::destroyPipelineById(uint64_t id) { + void GraphicsPipelineManager::destroyPipelineById(uint64_t id) { if (id >= m_Pipelines.size()) { return; } @@ -666,12 +666,12 @@ namespace vkcv } } - const PipelineConfig& PipelineManager::getPipelineConfig(const PipelineHandle &handle) const + const GraphicsPipelineConfig& GraphicsPipelineManager::getPipelineConfig(const GraphicsPipelineHandle &handle) const { const uint64_t id = handle.getId(); if (id >= m_Pipelines.size()) { - static PipelineConfig dummyConfig; + static GraphicsPipelineConfig dummyConfig; vkcv_log(LogLevel::ERROR, "Invalid handle"); return dummyConfig; } diff --git a/src/vkcv/PipelineManager.hpp b/src/vkcv/GraphicsPipelineManager.hpp similarity index 62% rename from src/vkcv/PipelineManager.hpp rename to src/vkcv/GraphicsPipelineManager.hpp index c71cb034..a08e6493 100644 --- a/src/vkcv/PipelineManager.hpp +++ b/src/vkcv/GraphicsPipelineManager.hpp @@ -11,23 +11,23 @@ #include <vulkan/vulkan.hpp> #include <vector> #include "vkcv/Handles.hpp" -#include "vkcv/PipelineConfig.hpp" +#include "vkcv/GraphicsPipelineConfig.hpp" #include "PassManager.hpp" namespace vkcv { - class PipelineManager + class GraphicsPipelineManager { public: - PipelineManager() = delete; // no default ctor - explicit PipelineManager(vk::Device device) noexcept; // ctor - ~PipelineManager() noexcept; // dtor - - PipelineManager(const PipelineManager &other) = delete; // copy-ctor - PipelineManager(PipelineManager &&other) = delete; // move-ctor; - - PipelineManager & operator=(const PipelineManager &other) = delete; // copy-assign op - PipelineManager & operator=(PipelineManager &&other) = delete; // move-assign op + GraphicsPipelineManager() = delete; // no default ctor + explicit GraphicsPipelineManager(vk::Device device) noexcept; // ctor + ~GraphicsPipelineManager() noexcept; // dtor + + GraphicsPipelineManager(const GraphicsPipelineManager &other) = delete; // copy-ctor + GraphicsPipelineManager(GraphicsPipelineManager &&other) = delete; // move-ctor; + + GraphicsPipelineManager & operator=(const GraphicsPipelineManager &other) = delete; // copy-assign op + GraphicsPipelineManager & operator=(GraphicsPipelineManager &&other) = delete; // move-assign op /** * Creates a Graphics Pipeline based on the set shader stages in the Config Struct. @@ -38,7 +38,7 @@ namespace vkcv * @param passManager Hands over the corresponding render pass. * @return A Handler to the created Graphics Pipeline Object. */ - PipelineHandle createPipeline(const PipelineConfig &config, PassManager& passManager); + GraphicsPipelineHandle createPipeline(const GraphicsPipelineConfig &config, PassManager& passManager); /** * Returns a vk::Pipeline object by handle. @@ -46,7 +46,7 @@ namespace vkcv * @return vk::Pipeline. */ [[nodiscard]] - vk::Pipeline getVkPipeline(const PipelineHandle &handle) const; + vk::Pipeline getVkPipeline(const GraphicsPipelineHandle &handle) const; /** * Returns a vk::PipelineLayout object by handle. @@ -54,7 +54,7 @@ namespace vkcv * @return vk::PipelineLayout. */ [[nodiscard]] - vk::PipelineLayout getVkPipelineLayout(const PipelineHandle &handle) const; + vk::PipelineLayout getVkPipelineLayout(const GraphicsPipelineHandle &handle) const; /** * Returns the corresponding Pipeline Config Struct of a pipeline object directed by the given Handler. @@ -62,17 +62,17 @@ namespace vkcv * @return Pipeline Config Struct */ [[nodiscard]] - const PipelineConfig &getPipelineConfig(const PipelineHandle &handle) const; + const GraphicsPipelineConfig &getPipelineConfig(const GraphicsPipelineHandle &handle) const; private: - struct Pipeline { + struct GraphicsPipeline { vk::Pipeline m_handle; vk::PipelineLayout m_layout; - PipelineConfig m_config; + GraphicsPipelineConfig m_config; }; vk::Device m_Device; - std::vector<Pipeline> m_Pipelines; + std::vector<GraphicsPipeline> m_Pipelines; void destroyPipelineById(uint64_t id); -- GitLab