From 524c3af1712d6f964741b01da77f597710619a3f Mon Sep 17 00:00:00 2001 From: anunknowperson Date: Wed, 21 May 2025 23:00:46 +0300 Subject: [PATCH 1/5] fix 2 --- src/graphics/vulkan/pipelines.cpp | 29 +++++--- src/graphics/vulkan/vk_pipelines.cpp | 105 ++++++++++++++++----------- vcpkg | 2 +- 3 files changed, 85 insertions(+), 51 deletions(-) diff --git a/src/graphics/vulkan/pipelines.cpp b/src/graphics/vulkan/pipelines.cpp index 8a09370d..f212061e 100644 --- a/src/graphics/vulkan/pipelines.cpp +++ b/src/graphics/vulkan/pipelines.cpp @@ -136,34 +136,45 @@ void Pipelines::init(VkDevice device, _drawImageDescriptorLayout = drawImageDescriptorLayout; _drawImage = drawImage; - // Fix triangle pipeline configuration + // Triangle pipeline config GraphicsPipeline::GraphicsPipelineConfig triangleConfig; triangleConfig.vertexShaderPath = "./shaders/colored_triangle.vert.spv"; triangleConfig.fragmentShaderPath = "./shaders/colored_triangle.frag.spv"; triangleConfig.colorFormat = _drawImage.imageFormat; - triangleConfig.depthFormat = VK_FORMAT_UNDEFINED; // Explicitly undefined since we don't use depth + triangleConfig.depthFormat = VK_FORMAT_UNDEFINED; // No depth testing triangleConfig.depthTest = false; triangleConfig.cullMode = VK_CULL_MODE_NONE; triangleConfig.topology = VK_PRIMITIVE_TOPOLOGY_TRIANGLE_LIST; + // Ensure blending and depth testing setup is consistent + triangleConfig.customPipelineSetup = [](PipelineBuilder& builder) { + builder.disable_blending(); + builder.disable_depthtest(); + builder.set_multisampling_none(); + builder.set_polygon_mode(VK_POLYGON_MODE_FILL); + }; + trianglePipeline = std::make_unique(triangleConfig); trianglePipeline->init(device); - // Fix mesh pipeline configuration + // Mesh pipeline config GraphicsPipeline::GraphicsPipelineConfig meshConfig; meshConfig.vertexShaderPath = "./shaders/colored_triangle_mesh.vert.spv"; meshConfig.fragmentShaderPath = "./shaders/tex_image.frag.spv"; meshConfig.colorFormat = _drawImage.imageFormat; - - // Must use a valid depth format when depth testing is enabled - // Use engine's depth format instead of VK_FORMAT_UNDEFINED - VkFormat depthFormat = VK_FORMAT_D32_SFLOAT; // Use the standard depth format - meshConfig.depthFormat = depthFormat; + meshConfig.depthFormat = VK_FORMAT_D32_SFLOAT; meshConfig.depthTest = true; meshConfig.depthCompareOp = VK_COMPARE_OP_GREATER; meshConfig.cullMode = VK_CULL_MODE_NONE; meshConfig.topology = VK_PRIMITIVE_TOPOLOGY_TRIANGLE_LIST; + // Explicitly setup pipeline details via callback + meshConfig.customPipelineSetup = [](PipelineBuilder& builder) { + builder.enable_depthtest(true, VK_COMPARE_OP_GREATER); + builder.set_multisampling_none(); + builder.set_polygon_mode(VK_POLYGON_MODE_FILL); + }; + VkPushConstantRange bufferRange{}; bufferRange.offset = 0; bufferRange.size = sizeof(GPUDrawPushConstants); @@ -175,7 +186,7 @@ void Pipelines::init(VkDevice device, meshPipeline = std::make_unique(meshConfig); meshPipeline->init(device); - // Initialize gradient pipeline + // Compute pipeline ComputePipeline::ComputePipelineConfig gradientConfig; gradientConfig.descriptorSetLayout = _drawImageDescriptorLayout; gradientConfig.shaderPath = "./shaders/gradient.comp.spv"; diff --git a/src/graphics/vulkan/vk_pipelines.cpp b/src/graphics/vulkan/vk_pipelines.cpp index 872db7cd..985315b3 100644 --- a/src/graphics/vulkan/vk_pipelines.cpp +++ b/src/graphics/vulkan/vk_pipelines.cpp @@ -88,68 +88,76 @@ void PipelineBuilder::clear() { VkPipeline PipelineBuilder::build_pipeline(VkDevice device) const { // make viewport state from our stored viewport and scissor. - // at the moment we wont support multiple viewports or scissors VkPipelineViewportStateCreateInfo viewportState = {}; viewportState.sType = VK_STRUCTURE_TYPE_PIPELINE_VIEWPORT_STATE_CREATE_INFO; viewportState.pNext = nullptr; - viewportState.viewportCount = 1; viewportState.scissorCount = 1; - - // setup dummy color blending. We arent using transparent objects yet - // the blending is just "no blend", but we do write to the color attachment + + // Use dynamic viewport and scissor + VkDynamicState dynamicStates[] = { VK_DYNAMIC_STATE_VIEWPORT, VK_DYNAMIC_STATE_SCISSOR }; + VkPipelineDynamicStateCreateInfo dynamicState = {}; + dynamicState.sType = VK_STRUCTURE_TYPE_PIPELINE_DYNAMIC_STATE_CREATE_INFO; + dynamicState.pDynamicStates = dynamicStates; + dynamicState.dynamicStateCount = 2; + + // setup color blending VkPipelineColorBlendStateCreateInfo colorBlending = {}; - colorBlending.sType = - VK_STRUCTURE_TYPE_PIPELINE_COLOR_BLEND_STATE_CREATE_INFO; + colorBlending.sType = VK_STRUCTURE_TYPE_PIPELINE_COLOR_BLEND_STATE_CREATE_INFO; colorBlending.pNext = nullptr; - colorBlending.logicOpEnable = VK_FALSE; colorBlending.logicOp = VK_LOGIC_OP_COPY; colorBlending.attachmentCount = 1; colorBlending.pAttachments = &_colorBlendAttachment; - // completely clear VertexInputStateCreateInfo, as we have no need for it - constexpr VkPipelineVertexInputStateCreateInfo _vertexInputInfo = { - .sType = VK_STRUCTURE_TYPE_PIPELINE_VERTEX_INPUT_STATE_CREATE_INFO}; + // completely clear VertexInputStateCreateInfo + const VkPipelineVertexInputStateCreateInfo _vertexInputInfo = { + .sType = VK_STRUCTURE_TYPE_PIPELINE_VERTEX_INPUT_STATE_CREATE_INFO + }; + + // Ensure depth format is properly set in rendering info + if (_renderInfo.depthAttachmentFormat == 0) { + // Reset to undefined if not explicitly set + _renderInfo.depthAttachmentFormat = VK_FORMAT_UNDEFINED; + } + + // Ensure rasterizer is properly initialized + if (_rasterizer.lineWidth <= 0.0f) { + _rasterizer.lineWidth = 1.0f; + } + + // Ensure multisampling is properly initialized + if (_multisampling.rasterizationSamples == 0) { + _multisampling.rasterizationSamples = VK_SAMPLE_COUNT_1_BIT; + } + // build the actual pipeline - // we now use all of the info structs we have been writing into into this - // one to create the pipeline - VkGraphicsPipelineCreateInfo pipelineInfo = { - .sType = VK_STRUCTURE_TYPE_GRAPHICS_PIPELINE_CREATE_INFO}; - // connect the renderInfo to the pNext extension mechanism + VkGraphicsPipelineCreateInfo pipelineInfo = {}; + pipelineInfo.sType = VK_STRUCTURE_TYPE_GRAPHICS_PIPELINE_CREATE_INFO; pipelineInfo.pNext = &_renderInfo; - - pipelineInfo.stageCount = (uint32_t)_shaderStages.size(); + pipelineInfo.stageCount = static_cast(_shaderStages.size()); pipelineInfo.pStages = _shaderStages.data(); pipelineInfo.pVertexInputState = &_vertexInputInfo; pipelineInfo.pInputAssemblyState = &_inputAssembly; pipelineInfo.pViewportState = &viewportState; pipelineInfo.pRasterizationState = &_rasterizer; pipelineInfo.pMultisampleState = &_multisampling; - pipelineInfo.pColorBlendState = &colorBlending; pipelineInfo.pDepthStencilState = &_depthStencil; + pipelineInfo.pColorBlendState = &colorBlending; + pipelineInfo.pDynamicState = &dynamicState; pipelineInfo.layout = _pipelineLayout; + pipelineInfo.renderPass = VK_NULL_HANDLE; // We use dynamic rendering + pipelineInfo.subpass = 0; + pipelineInfo.basePipelineHandle = VK_NULL_HANDLE; - constexpr VkDynamicState state[] = {VK_DYNAMIC_STATE_VIEWPORT, - VK_DYNAMIC_STATE_SCISSOR}; - - VkPipelineDynamicStateCreateInfo dynamicInfo = { - .sType = VK_STRUCTURE_TYPE_PIPELINE_DYNAMIC_STATE_CREATE_INFO}; - dynamicInfo.pDynamicStates = &state[0]; - dynamicInfo.dynamicStateCount = 2; - - pipelineInfo.pDynamicState = &dynamicInfo; - - // its easy to error out on create graphics pipeline, so we handle it a bit - // better than the common VK_CHECK case VkPipeline newPipeline; if (vkCreateGraphicsPipelines(device, VK_NULL_HANDLE, 1, &pipelineInfo, nullptr, &newPipeline) != VK_SUCCESS) { - fmt::println("failed to create pipeline"); - return VK_NULL_HANDLE; // failed to create graphics pipeline - } else { - return newPipeline; + // Error handling + return VK_NULL_HANDLE; } + + return newPipeline; } void PipelineBuilder::set_shaders(VkShaderModule vertexShader, @@ -165,15 +173,19 @@ void PipelineBuilder::set_shaders(VkShaderModule vertexShader, void PipelineBuilder::set_input_topology(VkPrimitiveTopology topology) { _inputAssembly.topology = topology; - // we are not going to use primitive restart on the entire tutorial so leave - // it on false + + // Avoid POINT_LIST topology which requires special shader setup + if (topology == VK_PRIMITIVE_TOPOLOGY_POINT_LIST) { + // Fall back to triangle list if point list is requested + _inputAssembly.topology = VK_PRIMITIVE_TOPOLOGY_TRIANGLE_LIST; + } + _inputAssembly.primitiveRestartEnable = VK_FALSE; } void PipelineBuilder::set_polygon_mode(VkPolygonMode mode) { _rasterizer.polygonMode = mode; - // Always set lineWidth to 1.0f to ensure compatibility - _rasterizer.lineWidth = 1.0f; + _rasterizer.lineWidth = 1.0f; // Always set to 1.0 } void PipelineBuilder::set_cull_mode(VkCullModeFlags cullMode, @@ -183,9 +195,10 @@ void PipelineBuilder::set_cull_mode(VkCullModeFlags cullMode, } void PipelineBuilder::set_multisampling_none() { + _multisampling.sType = VK_STRUCTURE_TYPE_PIPELINE_MULTISAMPLE_STATE_CREATE_INFO; + _multisampling.pNext = nullptr; _multisampling.sampleShadingEnable = VK_FALSE; - // Ensure this is explicitly set to avoid zero value issues - _multisampling.rasterizationSamples = VK_SAMPLE_COUNT_1_BIT; + _multisampling.rasterizationSamples = VK_SAMPLE_COUNT_1_BIT; // Explicitly set _multisampling.minSampleShading = 1.0f; _multisampling.pSampleMask = nullptr; _multisampling.alphaToCoverageEnable = VK_FALSE; @@ -209,6 +222,16 @@ void PipelineBuilder::set_color_attachment_format(VkFormat format) { } void PipelineBuilder::set_depth_format(VkFormat format) { + // Ensure format is valid or undefined + if (format != VK_FORMAT_D16_UNORM && + format != VK_FORMAT_D32_SFLOAT && + format != VK_FORMAT_D16_UNORM_S8_UINT && + format != VK_FORMAT_D24_UNORM_S8_UINT && + format != VK_FORMAT_D32_SFLOAT_S8_UINT && + format != VK_FORMAT_UNDEFINED) { + format = VK_FORMAT_UNDEFINED; + } + _renderInfo.depthAttachmentFormat = format; } diff --git a/vcpkg b/vcpkg index 9b75e789..d5ec5288 160000 --- a/vcpkg +++ b/vcpkg @@ -1 +1 @@ -Subproject commit 9b75e789ece3f942159b8500584e35aafe3979ff +Subproject commit d5ec528843d29e3a52d745a64b469f810b2cedbf From 36502c9c75a3a2804a4b8155c9808113841e5449 Mon Sep 17 00:00:00 2001 From: anunknowperson Date: Wed, 21 May 2025 23:08:11 +0300 Subject: [PATCH 2/5] fix att3 --- src/graphics/vulkan/vk_pipelines.cpp | 46 +++++++++++++++------------- 1 file changed, 24 insertions(+), 22 deletions(-) diff --git a/src/graphics/vulkan/vk_pipelines.cpp b/src/graphics/vulkan/vk_pipelines.cpp index 985315b3..f9c11695 100644 --- a/src/graphics/vulkan/vk_pipelines.cpp +++ b/src/graphics/vulkan/vk_pipelines.cpp @@ -87,6 +87,24 @@ void PipelineBuilder::clear() { } VkPipeline PipelineBuilder::build_pipeline(VkDevice device) const { + // Create local copies of struct members that we need to modify + VkPipelineRenderingCreateInfo renderInfo = _renderInfo; + VkPipelineRasterizationStateCreateInfo rasterizer = _rasterizer; + VkPipelineMultisampleStateCreateInfo multisampling = _multisampling; + + // Fix any uninitialized values + if (renderInfo.depthAttachmentFormat == 0) { + renderInfo.depthAttachmentFormat = VK_FORMAT_UNDEFINED; + } + + if (rasterizer.lineWidth <= 0.0f) { + rasterizer.lineWidth = 1.0f; + } + + if (multisampling.rasterizationSamples == 0) { + multisampling.rasterizationSamples = VK_SAMPLE_COUNT_1_BIT; + } + // make viewport state from our stored viewport and scissor. VkPipelineViewportStateCreateInfo viewportState = {}; viewportState.sType = VK_STRUCTURE_TYPE_PIPELINE_VIEWPORT_STATE_CREATE_INFO; @@ -111,37 +129,21 @@ VkPipeline PipelineBuilder::build_pipeline(VkDevice device) const { colorBlending.pAttachments = &_colorBlendAttachment; // completely clear VertexInputStateCreateInfo - const VkPipelineVertexInputStateCreateInfo _vertexInputInfo = { + const VkPipelineVertexInputStateCreateInfo vertexInputInfo = { .sType = VK_STRUCTURE_TYPE_PIPELINE_VERTEX_INPUT_STATE_CREATE_INFO }; - // Ensure depth format is properly set in rendering info - if (_renderInfo.depthAttachmentFormat == 0) { - // Reset to undefined if not explicitly set - _renderInfo.depthAttachmentFormat = VK_FORMAT_UNDEFINED; - } - - // Ensure rasterizer is properly initialized - if (_rasterizer.lineWidth <= 0.0f) { - _rasterizer.lineWidth = 1.0f; - } - - // Ensure multisampling is properly initialized - if (_multisampling.rasterizationSamples == 0) { - _multisampling.rasterizationSamples = VK_SAMPLE_COUNT_1_BIT; - } - // build the actual pipeline VkGraphicsPipelineCreateInfo pipelineInfo = {}; pipelineInfo.sType = VK_STRUCTURE_TYPE_GRAPHICS_PIPELINE_CREATE_INFO; - pipelineInfo.pNext = &_renderInfo; + pipelineInfo.pNext = &renderInfo; // Use our local copy pipelineInfo.stageCount = static_cast(_shaderStages.size()); pipelineInfo.pStages = _shaderStages.data(); - pipelineInfo.pVertexInputState = &_vertexInputInfo; + pipelineInfo.pVertexInputState = &vertexInputInfo; pipelineInfo.pInputAssemblyState = &_inputAssembly; pipelineInfo.pViewportState = &viewportState; - pipelineInfo.pRasterizationState = &_rasterizer; - pipelineInfo.pMultisampleState = &_multisampling; + pipelineInfo.pRasterizationState = &rasterizer; // Use our local copy + pipelineInfo.pMultisampleState = &multisampling; // Use our local copy pipelineInfo.pDepthStencilState = &_depthStencil; pipelineInfo.pColorBlendState = &colorBlending; pipelineInfo.pDynamicState = &dynamicState; @@ -198,7 +200,7 @@ void PipelineBuilder::set_multisampling_none() { _multisampling.sType = VK_STRUCTURE_TYPE_PIPELINE_MULTISAMPLE_STATE_CREATE_INFO; _multisampling.pNext = nullptr; _multisampling.sampleShadingEnable = VK_FALSE; - _multisampling.rasterizationSamples = VK_SAMPLE_COUNT_1_BIT; // Explicitly set + _multisampling.rasterizationSamples = VK_SAMPLE_COUNT_1_BIT; _multisampling.minSampleShading = 1.0f; _multisampling.pSampleMask = nullptr; _multisampling.alphaToCoverageEnable = VK_FALSE; From 3b3584d11ee1fe30ac6b28b3ac1b85da3b102f51 Mon Sep 17 00:00:00 2001 From: anunknowperson Date: Wed, 21 May 2025 23:12:39 +0300 Subject: [PATCH 3/5] fix att4 --- src/graphics/vulkan/vk_pipelines.cpp | 71 +++++++++++++++++++++++----- 1 file changed, 58 insertions(+), 13 deletions(-) diff --git a/src/graphics/vulkan/vk_pipelines.cpp b/src/graphics/vulkan/vk_pipelines.cpp index f9c11695..23c75a05 100644 --- a/src/graphics/vulkan/vk_pipelines.cpp +++ b/src/graphics/vulkan/vk_pipelines.cpp @@ -60,50 +60,95 @@ bool vkutil::load_shader_module(const char* filePath, VkDevice device, } void PipelineBuilder::clear() { - // clear all of the structs we need back to 0 with their correct stype - + // Initialize input assembly with proper defaults _inputAssembly = { - .sType = - VK_STRUCTURE_TYPE_PIPELINE_INPUT_ASSEMBLY_STATE_CREATE_INFO}; + .sType = VK_STRUCTURE_TYPE_PIPELINE_INPUT_ASSEMBLY_STATE_CREATE_INFO, + .topology = VK_PRIMITIVE_TOPOLOGY_TRIANGLE_LIST, + .primitiveRestartEnable = VK_FALSE + }; + // Initialize rasterizer with proper defaults _rasterizer = { - .sType = - VK_STRUCTURE_TYPE_PIPELINE_RASTERIZATION_STATE_CREATE_INFO}; + .sType = VK_STRUCTURE_TYPE_PIPELINE_RASTERIZATION_STATE_CREATE_INFO, + .depthClampEnable = VK_FALSE, + .rasterizerDiscardEnable = VK_FALSE, + .polygonMode = VK_POLYGON_MODE_FILL, + .cullMode = VK_CULL_MODE_NONE, + .frontFace = VK_FRONT_FACE_CLOCKWISE, + .depthBiasEnable = VK_FALSE, + .depthBiasConstantFactor = 0.0f, + .depthBiasClamp = 0.0f, + .depthBiasSlopeFactor = 0.0f, + .lineWidth = 1.0f // CRITICAL: Must be 1.0f, not 0.0f + }; - _colorBlendAttachment = {}; + // Initialize color blend attachment with defaults + _colorBlendAttachment = { + .blendEnable = VK_FALSE, + .colorWriteMask = VK_COLOR_COMPONENT_R_BIT | VK_COLOR_COMPONENT_G_BIT | + VK_COLOR_COMPONENT_B_BIT | VK_COLOR_COMPONENT_A_BIT + }; + // Initialize multisampling with proper defaults _multisampling = { - .sType = VK_STRUCTURE_TYPE_PIPELINE_MULTISAMPLE_STATE_CREATE_INFO}; + .sType = VK_STRUCTURE_TYPE_PIPELINE_MULTISAMPLE_STATE_CREATE_INFO, + .rasterizationSamples = VK_SAMPLE_COUNT_1_BIT, // CRITICAL: Must be valid sample count + .sampleShadingEnable = VK_FALSE, + .minSampleShading = 1.0f, + .pSampleMask = nullptr, + .alphaToCoverageEnable = VK_FALSE, + .alphaToOneEnable = VK_FALSE + }; _pipelineLayout = {}; + // Initialize depth-stencil with proper defaults _depthStencil = { - .sType = - VK_STRUCTURE_TYPE_PIPELINE_DEPTH_STENCIL_STATE_CREATE_INFO}; + .sType = VK_STRUCTURE_TYPE_PIPELINE_DEPTH_STENCIL_STATE_CREATE_INFO, + .depthTestEnable = VK_FALSE, + .depthWriteEnable = VK_FALSE, + .depthCompareOp = VK_COMPARE_OP_LESS, + .depthBoundsTestEnable = VK_FALSE, + .stencilTestEnable = VK_FALSE, + .minDepthBounds = 0.0f, + .maxDepthBounds = 1.0f + }; - _renderInfo = {.sType = VK_STRUCTURE_TYPE_PIPELINE_RENDERING_CREATE_INFO}; + // Initialize rendering info with proper defaults + _renderInfo = { + .sType = VK_STRUCTURE_TYPE_PIPELINE_RENDERING_CREATE_INFO, + .depthAttachmentFormat = VK_FORMAT_UNDEFINED + }; _shaderStages.clear(); } VkPipeline PipelineBuilder::build_pipeline(VkDevice device) const { - // Create local copies of struct members that we need to modify + // Make local copies of struct members that we need to modify VkPipelineRenderingCreateInfo renderInfo = _renderInfo; VkPipelineRasterizationStateCreateInfo rasterizer = _rasterizer; VkPipelineMultisampleStateCreateInfo multisampling = _multisampling; + VkPipelineInputAssemblyStateCreateInfo inputAssembly = _inputAssembly; // Fix any uninitialized values if (renderInfo.depthAttachmentFormat == 0) { renderInfo.depthAttachmentFormat = VK_FORMAT_UNDEFINED; } + // Ensure rasterizer line width is valid if (rasterizer.lineWidth <= 0.0f) { rasterizer.lineWidth = 1.0f; } + // Ensure multisampling uses a valid sample count if (multisampling.rasterizationSamples == 0) { multisampling.rasterizationSamples = VK_SAMPLE_COUNT_1_BIT; } + + // Avoid POINT_LIST topology without PointSize in shader + if (inputAssembly.topology == VK_PRIMITIVE_TOPOLOGY_POINT_LIST) { + inputAssembly.topology = VK_PRIMITIVE_TOPOLOGY_TRIANGLE_LIST; + } // make viewport state from our stored viewport and scissor. VkPipelineViewportStateCreateInfo viewportState = {}; @@ -140,7 +185,7 @@ VkPipeline PipelineBuilder::build_pipeline(VkDevice device) const { pipelineInfo.stageCount = static_cast(_shaderStages.size()); pipelineInfo.pStages = _shaderStages.data(); pipelineInfo.pVertexInputState = &vertexInputInfo; - pipelineInfo.pInputAssemblyState = &_inputAssembly; + pipelineInfo.pInputAssemblyState = &inputAssembly; // Use our local copy pipelineInfo.pViewportState = &viewportState; pipelineInfo.pRasterizationState = &rasterizer; // Use our local copy pipelineInfo.pMultisampleState = &multisampling; // Use our local copy From 56d0b2ea19641868155b2433bc04ce028042d9cf Mon Sep 17 00:00:00 2001 From: anunknowperson Date: Wed, 21 May 2025 23:19:56 +0300 Subject: [PATCH 4/5] Proper error handling --- src/graphics/vulkan/vk_pipelines.cpp | 5 +++-- 1 file changed, 3 insertions(+), 2 deletions(-) diff --git a/src/graphics/vulkan/vk_pipelines.cpp b/src/graphics/vulkan/vk_pipelines.cpp index 23c75a05..945c8749 100644 --- a/src/graphics/vulkan/vk_pipelines.cpp +++ b/src/graphics/vulkan/vk_pipelines.cpp @@ -4,7 +4,7 @@ #include #include #include - +#include "core/Logging.h" #include "graphics/vulkan/vk_initializers.h" bool vkutil::load_shader_module(const char* filePath, VkDevice device, @@ -200,7 +200,8 @@ VkPipeline PipelineBuilder::build_pipeline(VkDevice device) const { VkPipeline newPipeline; if (vkCreateGraphicsPipelines(device, VK_NULL_HANDLE, 1, &pipelineInfo, nullptr, &newPipeline) != VK_SUCCESS) { - // Error handling + + LOGE("Failed to create graphics pipeline in build_pipeline."); return VK_NULL_HANDLE; } From 71047e629a83015164257178bcb71ad1fa2334dd Mon Sep 17 00:00:00 2001 From: anunknowperson Date: Wed, 21 May 2025 23:24:01 +0300 Subject: [PATCH 5/5] Revert vcpkg submodule to original version --- vcpkg | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/vcpkg b/vcpkg index d5ec5288..9b75e789 160000 --- a/vcpkg +++ b/vcpkg @@ -1 +1 @@ -Subproject commit d5ec528843d29e3a52d745a64b469f810b2cedbf +Subproject commit 9b75e789ece3f942159b8500584e35aafe3979ff