From 85152561628da85ebf00fbdf2ced48b58aa8b031 Mon Sep 17 00:00:00 2001 From: JimmyBinoculars Date: Fri, 20 Feb 2026 11:01:18 +0000 Subject: [PATCH] Set up most of the pipeline, seg fault --- a.out | Bin 72272 -> 72600 bytes cve_pipeline.cpp | 127 ++++++++++++++++++++++++++++++++++++++++++++++- cve_pipeline.hpp | 15 +++++- 3 files changed, 138 insertions(+), 4 deletions(-) diff --git a/a.out b/a.out index 6b96b74fcf10a38bbd94191fd581c35d16c0faa5..6e2043e2c73a5989e840a43d2ce1633b7ff07ebc 100755 GIT binary patch delta 17751 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 diff --git a/cve_pipeline.cpp b/cve_pipeline.cpp index 20014da..2466a49 100644 --- a/cve_pipeline.cpp +++ b/cve_pipeline.cpp @@ -10,6 +10,12 @@ namespace cve { createGraphicsPipeline(vertFilepath, fragFilepath, configInfo); } + CvePipeline::~CvePipeline() { + vkDestroyShaderModule(cveDevice.device(), vertShaderModule, nullptr); + vkDestroyPipeline(cveDevice.device(), graphicsPipeline, nullptr); + vkDestroyShaderModule(cveDevice.device(), fragShaderModule, nullptr); + } + std::vector CvePipeline::readFile(const std::string& filepath) { std::ifstream file{filepath, std::ios::ate | std::ios::binary}; @@ -32,8 +38,57 @@ namespace cve { auto vertCode = readFile(vertFilepath); auto fragCode = readFile(fragFilepath); - std::cout << "Vertex shader code size: " << vertCode.size() << '\n'; - std::cout << "Fragment shader code size: " << fragCode.size() << '\n'; + createShaderModule(vertCode, &vertShaderModule); + createShaderModule(fragCode, &fragShaderModule); + + VkPipelineShaderStageCreateInfo shaderStages[2]; + shaderStages[0].sType = VK_STRUCTURE_TYPE_PIPELINE_SHADER_STAGE_CREATE_INFO; + shaderStages[0].stage = VK_SHADER_STAGE_VERTEX_BIT; + shaderStages[0].module = vertShaderModule; + shaderStages[0].pName = "main"; + shaderStages[0].flags = 0; + shaderStages[0].pName = nullptr; + shaderStages[0].pSpecializationInfo = nullptr; + + shaderStages[0].sType = VK_STRUCTURE_TYPE_PIPELINE_SHADER_STAGE_CREATE_INFO; + shaderStages[0].stage = VK_SHADER_STAGE_FRAGMENT_BIT; + shaderStages[0].module = fragShaderModule; + shaderStages[0].pName = "main"; + shaderStages[0].flags = 0; + shaderStages[0].pName = nullptr; + shaderStages[0].pSpecializationInfo = nullptr; + + VkPipelineVertexInputStateCreateInfo vertexInputInfo{}; + vertexInputInfo.sType = VK_STRUCTURE_TYPE_PIPELINE_VERTEX_INPUT_STATE_CREATE_INFO; + vertexInputInfo.vertexBindingDescriptionCount = 0; + vertexInputInfo.vertexAttributeDescriptionCount = 0; + vertexInputInfo.pVertexBindingDescriptions = nullptr; + vertexInputInfo.pVertexAttributeDescriptions = nullptr; + + 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 = &configInfo.viewportInfo; + pipelineInfo.pRasterizationState = &configInfo.rasterizationInfo; + pipelineInfo.pMultisampleState = &configInfo.multisampleInfo; + pipelineInfo.pColorBlendState = &configInfo.colorBlendInfo; + pipelineInfo.pDepthStencilState = &configInfo.depthStencilInfo; + pipelineInfo.pDynamicState = nullptr; + + pipelineInfo.layout = configInfo.pipelineLayout; + pipelineInfo.renderPass = configInfo.renderPass; + pipelineInfo.subpass = configInfo.subpass; + + pipelineInfo.basePipelineIndex = -1; + pipelineInfo.basePipelineHandle = VK_NULL_HANDLE; + + if (vkCreateGraphicsPipelines(cveDevice.device(), VK_NULL_HANDLE, 1, &pipelineInfo, nullptr, &graphicsPipeline) + != VK_SUCCESS) { + throw std::runtime_error("Failed to create graphics pipeline."); + } } void CvePipeline::createShaderModule(const std::vector& code, VkShaderModule *shaderModule) { @@ -54,6 +109,74 @@ namespace cve { configInfo.inputAssemblyInfo.topology = VK_PRIMITIVE_TOPOLOGY_TRIANGLE_LIST; configInfo.inputAssemblyInfo.primitiveRestartEnable = VK_FALSE; + configInfo.viewport.x = 0.0f; + configInfo.viewport.y = 0.0f; + configInfo.viewport.width = static_cast(width); + configInfo.viewport.height = static_cast(height); + configInfo.viewport.minDepth = 0.0f; + configInfo.viewport.maxDepth = 1.0f; + + 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; + configInfo.rasterizationInfo.polygonMode = VK_POLYGON_MODE_FILL; + configInfo.rasterizationInfo.lineWidth = 1.0f; + configInfo.rasterizationInfo.cullMode = VK_CULL_MODE_NONE; + configInfo.rasterizationInfo.frontFace = VK_FRONT_FACE_CLOCKWISE; + configInfo.rasterizationInfo.depthBiasEnable = VK_FALSE; + configInfo.rasterizationInfo.depthBiasConstantFactor = 0.0f; + configInfo.rasterizationInfo.depthBiasClamp = 0.0f; + configInfo.rasterizationInfo.depthBiasSlopeFactor = 0.0f; + + configInfo.multisampleInfo.sType = VK_STRUCTURE_TYPE_PIPELINE_MULTISAMPLE_STATE_CREATE_INFO; + configInfo.multisampleInfo.sampleShadingEnable = VK_FALSE; + configInfo.multisampleInfo.rasterizationSamples = VK_SAMPLE_COUNT_1_BIT; + configInfo.multisampleInfo.minSampleShading = 1.0f; // Optional + configInfo.multisampleInfo.pSampleMask = nullptr; // Optional + configInfo.multisampleInfo.alphaToCoverageEnable = VK_FALSE; // Optional + configInfo.multisampleInfo.alphaToOneEnable = VK_FALSE; // Optional + + configInfo.colorBlendAttachment.colorWriteMask = + VK_COLOR_COMPONENT_R_BIT | VK_COLOR_COMPONENT_G_BIT | VK_COLOR_COMPONENT_B_BIT | + VK_COLOR_COMPONENT_A_BIT; + configInfo.colorBlendAttachment.blendEnable = VK_FALSE; + configInfo.colorBlendAttachment.srcColorBlendFactor = VK_BLEND_FACTOR_ONE; // Optional + configInfo.colorBlendAttachment.dstColorBlendFactor = VK_BLEND_FACTOR_ZERO; // Optional + configInfo.colorBlendAttachment.colorBlendOp = VK_BLEND_OP_ADD; // Optional + configInfo.colorBlendAttachment.srcAlphaBlendFactor = VK_BLEND_FACTOR_ONE; // Optional + configInfo.colorBlendAttachment.dstAlphaBlendFactor = VK_BLEND_FACTOR_ZERO; // Optional + configInfo.colorBlendAttachment.alphaBlendOp = VK_BLEND_OP_ADD; // Optional + + configInfo.colorBlendInfo.sType = VK_STRUCTURE_TYPE_PIPELINE_COLOR_BLEND_STATE_CREATE_INFO; + configInfo.colorBlendInfo.logicOpEnable = VK_FALSE; + configInfo.colorBlendInfo.logicOp = VK_LOGIC_OP_COPY; // Optional + configInfo.colorBlendInfo.attachmentCount = 1; + configInfo.colorBlendInfo.pAttachments = &configInfo.colorBlendAttachment; + configInfo.colorBlendInfo.blendConstants[0] = 0.0f; // Optional + configInfo.colorBlendInfo.blendConstants[1] = 0.0f; // Optional + configInfo.colorBlendInfo.blendConstants[2] = 0.0f; // Optional + configInfo.colorBlendInfo.blendConstants[3] = 0.0f; // Optional + + configInfo.depthStencilInfo.sType = VK_STRUCTURE_TYPE_PIPELINE_DEPTH_STENCIL_STATE_CREATE_INFO; + configInfo.depthStencilInfo.depthTestEnable = VK_TRUE; + configInfo.depthStencilInfo.depthWriteEnable = VK_TRUE; + configInfo.depthStencilInfo.depthCompareOp = VK_COMPARE_OP_LESS; + configInfo.depthStencilInfo.depthBoundsTestEnable = VK_FALSE; + configInfo.depthStencilInfo.minDepthBounds = 0.0f; // Optional + configInfo.depthStencilInfo.maxDepthBounds = 1.0f; // Optional + configInfo.depthStencilInfo.stencilTestEnable = VK_FALSE; + configInfo.depthStencilInfo.front = {}; // Optional + configInfo.depthStencilInfo.back = {}; // Optional + return configInfo; } } diff --git a/cve_pipeline.hpp b/cve_pipeline.hpp index fa8c2b1..f029047 100644 --- a/cve_pipeline.hpp +++ b/cve_pipeline.hpp @@ -7,13 +7,24 @@ namespace cve { struct PipelineConfigInfo { - VkPipelineInputAssemblyStateCreateInfo inputAssemblyInfo{}; + VkViewport viewport; + VkRect2D scissor; + VkPipelineViewportStateCreateInfo viewportInfo; + VkPipelineInputAssemblyStateCreateInfo inputAssemblyInfo; + VkPipelineRasterizationStateCreateInfo rasterizationInfo; + VkPipelineMultisampleStateCreateInfo multisampleInfo; + VkPipelineColorBlendAttachmentState colorBlendAttachment; + VkPipelineColorBlendStateCreateInfo colorBlendInfo; + VkPipelineDepthStencilStateCreateInfo depthStencilInfo; + VkPipelineLayout pipelineLayout = nullptr; + VkRenderPass renderPass = nullptr; + uint32_t subpass = 0; }; class CvePipeline { public: CvePipeline(CveDevice &device, const std::string& vertFilepath, const std::string& fragFilepath, const PipelineConfigInfo &configInfo); - ~CvePipeline() {}; + ~CvePipeline(); CvePipeline(const CvePipeline&) = delete; void operator=(const CvePipeline&) = delete;