From a867ab39c43ccc89ca744db84137df179b41daa7 Mon Sep 17 00:00:00 2001 From: brendan Date: Tue, 2 Feb 2021 08:33:20 -0500 Subject: [PATCH] PipelineConfigInfo self references Bug fix --- littleVulkanEngine/tutorial/first_app.cpp | 7 +++++-- littleVulkanEngine/tutorial/lve_pipeline.cpp | 22 ++++++++------------ littleVulkanEngine/tutorial/lve_pipeline.hpp | 7 ++++++- 3 files changed, 20 insertions(+), 16 deletions(-) diff --git a/littleVulkanEngine/tutorial/first_app.cpp b/littleVulkanEngine/tutorial/first_app.cpp index 46f2a4b..4179863 100644 --- a/littleVulkanEngine/tutorial/first_app.cpp +++ b/littleVulkanEngine/tutorial/first_app.cpp @@ -37,8 +37,11 @@ void FirstApp::createPipelineLayout() { } void FirstApp::createPipeline() { - auto pipelineConfig = - LvePipeline::defaultPipelineConfigInfo(lveSwapChain.width(), lveSwapChain.height()); + PipelineConfigInfo pipelineConfig{}; + LvePipeline::defaultPipelineConfigInfo( + pipelineConfig, + lveSwapChain.width(), + lveSwapChain.height()); pipelineConfig.renderPass = lveSwapChain.getRenderPass(); pipelineConfig.pipelineLayout = pipelineLayout; lvePipeline = std::make_unique( diff --git a/littleVulkanEngine/tutorial/lve_pipeline.cpp b/littleVulkanEngine/tutorial/lve_pipeline.cpp index 688e009..20629a9 100644 --- a/littleVulkanEngine/tutorial/lve_pipeline.cpp +++ b/littleVulkanEngine/tutorial/lve_pipeline.cpp @@ -80,20 +80,13 @@ void LvePipeline::createGraphicsPipeline( vertexInputInfo.pVertexAttributeDescriptions = nullptr; vertexInputInfo.pVertexBindingDescriptions = nullptr; - VkPipelineViewportStateCreateInfo viewportInfo{}; - viewportInfo.sType = VK_STRUCTURE_TYPE_PIPELINE_VIEWPORT_STATE_CREATE_INFO; - viewportInfo.viewportCount = 1; - viewportInfo.pViewports = &configInfo.viewport; - viewportInfo.scissorCount = 1; - viewportInfo.pScissors = &configInfo.scissor; - VkGraphicsPipelineCreateInfo pipelineInfo{}; pipelineInfo.sType = VK_STRUCTURE_TYPE_GRAPHICS_PIPELINE_CREATE_INFO; pipelineInfo.stageCount = 2; pipelineInfo.pStages = shaderStages; pipelineInfo.pVertexInputState = &vertexInputInfo; pipelineInfo.pInputAssemblyState = &configInfo.inputAssemblyInfo; - pipelineInfo.pViewportState = &viewportInfo; + pipelineInfo.pViewportState = &configInfo.viewportInfo; pipelineInfo.pRasterizationState = &configInfo.rasterizationInfo; pipelineInfo.pMultisampleState = &configInfo.multisampleInfo; pipelineInfo.pColorBlendState = &configInfo.colorBlendInfo; @@ -133,9 +126,8 @@ void LvePipeline::bind(VkCommandBuffer commandBuffer) { vkCmdBindPipeline(commandBuffer, VK_PIPELINE_BIND_POINT_GRAPHICS, graphicsPipeline); } -PipelineConfigInfo LvePipeline::defaultPipelineConfigInfo(uint32_t width, uint32_t height) { - PipelineConfigInfo configInfo{}; - +void LvePipeline::defaultPipelineConfigInfo( + PipelineConfigInfo& configInfo, uint32_t width, uint32_t height) { configInfo.inputAssemblyInfo.sType = VK_STRUCTURE_TYPE_PIPELINE_INPUT_ASSEMBLY_STATE_CREATE_INFO; configInfo.inputAssemblyInfo.topology = VK_PRIMITIVE_TOPOLOGY_TRIANGLE_LIST; configInfo.inputAssemblyInfo.primitiveRestartEnable = VK_FALSE; @@ -150,6 +142,12 @@ PipelineConfigInfo LvePipeline::defaultPipelineConfigInfo(uint32_t width, uint32 configInfo.scissor.offset = {0, 0}; configInfo.scissor.extent = {width, height}; + configInfo.viewportInfo.sType = VK_STRUCTURE_TYPE_PIPELINE_VIEWPORT_STATE_CREATE_INFO; + configInfo.viewportInfo.viewportCount = 1; + configInfo.viewportInfo.pViewports = &configInfo.viewport; + configInfo.viewportInfo.scissorCount = 1; + configInfo.viewportInfo.pScissors = &configInfo.scissor; + configInfo.rasterizationInfo.sType = VK_STRUCTURE_TYPE_PIPELINE_RASTERIZATION_STATE_CREATE_INFO; configInfo.rasterizationInfo.depthClampEnable = VK_FALSE; configInfo.rasterizationInfo.rasterizerDiscardEnable = VK_FALSE; @@ -201,8 +199,6 @@ PipelineConfigInfo LvePipeline::defaultPipelineConfigInfo(uint32_t width, uint32 configInfo.depthStencilInfo.stencilTestEnable = VK_FALSE; configInfo.depthStencilInfo.front = {}; // Optional configInfo.depthStencilInfo.back = {}; // Optional - - return configInfo; } } // namespace lve \ No newline at end of file diff --git a/littleVulkanEngine/tutorial/lve_pipeline.hpp b/littleVulkanEngine/tutorial/lve_pipeline.hpp index 70f087a..732db35 100644 --- a/littleVulkanEngine/tutorial/lve_pipeline.hpp +++ b/littleVulkanEngine/tutorial/lve_pipeline.hpp @@ -9,8 +9,12 @@ namespace lve { struct PipelineConfigInfo { + PipelineConfigInfo(const PipelineConfigInfo&) = delete; + PipelineConfigInfo& operator=(const PipelineConfigInfo&) = delete; + VkViewport viewport; VkRect2D scissor; + VkPipelineViewportStateCreateInfo viewportInfo; VkPipelineInputAssemblyStateCreateInfo inputAssemblyInfo; VkPipelineRasterizationStateCreateInfo rasterizationInfo; VkPipelineMultisampleStateCreateInfo multisampleInfo; @@ -36,7 +40,8 @@ class LvePipeline { void bind(VkCommandBuffer commandBuffer); - static PipelineConfigInfo defaultPipelineConfigInfo(uint32_t width, uint32_t height); + static void defaultPipelineConfigInfo( + PipelineConfigInfo& configInfo, uint32_t width, uint32_t height); private: static std::vector readFile(const std::string& filepath);