diff --git a/config/Sources.cmake b/config/Sources.cmake index 46ac4f0096e0584398111ccd15629fbe8a22884d..b51b37b5eb734021663184c813cdb350018999d9 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 5ebc6d15e419f0e1eb79c42bdc5857a883594845..b82d2edad914a632c5e2ea1be2d08f56b3a912e4 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 33a2027bd3ad85c5a8d5058469c5df0d81c184b7..6d466c4aa3893049eb0b3e770c2e4dde6b6199e3 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 437a5606b8895c82deb12884a5ca9d0ef1994313..4a1df5852adc0fc8fe924041cb7879ec0e376001 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 429c0bcf729f9afb7dd76cdd58c54931862e1a4a..b0afec4819105e4a27f7e6a635cb9ca70b0db2c5 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 c0065af5928d9ad2e2c9afd1a1ea44c35d94d799..0cb4efd2c50e6d013f817949241476e848b4a151 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 a87c95447b24d19faff6c00356cdcb57348a257e..c1bce3dbd6315cd7014f4dcfb1df821f871c58f3 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 37cefd3323c9ef13a4124450d9f08c76c9661836..c7d4fcac5aa1748b9407b003eba3f35f418169f3 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 1bfb2edca776eafac9a94422f87d0401e698fa82..b083af4a9f4578ea62888d3be9139928204d67ac 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 00eea0fa34c139e9ecc911c5f6ced05716c9edb9..e1b29ad5990d371535794fa72a1d80e2b653045b 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 f3839d0893b435694af7d35b0def794484a8b0b9..b0ade4317b125fea581016bf9924cd740a443c35 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 c3f9210d371cc56a4220c094186faa51490da678..6c3bc2f40090c87ae967499e4ff53bf0af81b9ff 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 52356612682111c6e9aab89a04821d0cb73ffe54..ff249e4e8efe2ca60c7773d32a66a05d12f06c3a 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 3e55f0bb2ca1db9360bb007aa6ad472899d8c0f4..55fb781c52049fd18722f263033d78f7e0e9bebd 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 9543daf61265ceaf0ea0658d6c9225842966af75..3a577a75c6a374fb41bf02056efe64eef331fcdc 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 013f8c0e2c91d669eeeb40d1dc6a5acaeb7e9ec5..668dc8596951356e97535f09d9a74d8d15ae2003 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 c1724510b01a146d9c01ca41baeb8d20b22117ce..c099581a527045a7cb51e4de144f3c181fee53b1 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 58bde04fc6f07e5903e2d955c691c2ec8263a9a8..795acb1795e7d9242fe9e9c4969a8833cb8c1175 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 47be399a0578478367348fc4b91d01618535b886..e55fb9cb53a001f71e756e0f2d04195e9e237f6d 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 7705c7c4d614b1ea245607c196637fe9f466c083..cb7dd31dddd3a5c0742f95e8429175724aa26454 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 c71cb034a7eb7c7a71d4df3941d481d03db9ae95..a08e64939dc967511095f22862c52de05148d7e9 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);