vblanco20-1 / vkguide-comments

Storage for the comments of vulkan-guide
0 stars 0 forks source link

Vkguide 2 Beta Comments #14

Open utterances-bot opened 9 months ago

utterances-bot commented 9 months ago

- Vulkan Guide

Practical guide to vulkan graphics programming

https://www.vkguide.dev/docs/new_vkguide/chapter_1/vulkan_mainloop/

nicolasgustafsson commented 4 months ago

With all the basic features for the pipeline builder filled, we can now draw a triangle. For our triangle, we are going to use hardcoded vertex positions in the vertex shader, and the output will be a pure color. [...] In our fragment shader, we will declare an output at layout = 0 (this connects to the render attachments of the render pass), and we have a simple hardcoded red output.

The color is set from the vertex shader, so it's not a pure red color in the updated guide :)

n0F4x commented 4 months ago

You have a typo when spelling alignment. It's wrongly written as alignement in 2 occurrences.

caiovpsilveira commented 4 months ago

I have two points to comment/ask:

  1. Shouldn't the Vulkan instance has to be created with the required SDL instance extensions?

    uint32_t extensionCount;
    SDL_Vulkan_GetInstanceExtensions(m_window, &extensionCount, nullptr);
    std::vector<const char*> requiredExtensions(extensionCount);
    SDL_Vulkan_GetInstanceExtensions(m_window, &extensionCount, requiredExtensions.data());
    
    auto instanceRet = builder.set_app_name("Ignis Application")
                           .request_validation_layers(true)
                           .enable_extensions(requiredExtensions)
                           .use_default_debug_messenger()
                           .require_api_version(1, 3, 0)
                           .build();
  2. I think there is no guarantee that the graphicsQueueFamily is the same as the presentQueueFamily, so you should have two VkQueues.

    auto graphicsQueueIndexRet = vkbDevice.get_queue_index(vkb::QueueType::graphics);
    if (!graphicsQueueIndexRet)
    {
        fmt::println(stderr, "Failed to get graphics queue. Error: {}.", graphicsQueueIndexRet.error().message());
        std::terminate();
    }

    auto presentQueueIndexRet = vkbDevice.get_queue_index(vkb::QueueType::present);
    if (!presentQueueIndexRet)
    {
        fmt::println(stderr, "Failed to get present queue. Error: {}.", presentQueueIndexRet.error().message());
        std::terminate();
    }

    m_graphicsQueueFamilyIndex = graphicsQueueIndexRet.value();
    m_presentQueueFamilyIndex = presentQueueIndexRet.value();

    vkGetDeviceQueue(m_device, m_graphicsQueueFamilyIndex, 0, &m_graphicsQueue);
    vkGetDeviceQueue(m_device, m_presentQueueFamilyIndex, 0, &m_presentQueue);

Also, isn't it required to request the swapchain extension support for the physicalDevice selector?

Great guide overall.

Jecalo commented 4 months ago

In Chapter 3 - Mesh Loading, the code snippet when adding a depth image to the render info uses _windowExtent as render size. This causes an error when resizing the window to a larger size than the draw image (on the last part of chapter 3). In the github repository, _drawExtent is used (which works correctly).

    VkRenderingAttachmentInfo colorAttachment = vkinit::attachment_info(_drawImage.imageView, nullptr, VK_IMAGE_LAYOUT_GENERAL);
    VkRenderingAttachmentInfo depthAttachment = vkinit::depth_attachment_info(_depthImage.imageView, VK_IMAGE_LAYOUT_DEPTH_ATTACHMENT_OPTIMAL);

    VkRenderingInfo renderInfo = vkinit::rendering_info(_windowExtent, &colorAttachment, &depthAttachment);
nicolasgustafsson commented 4 months ago

To get Alpha blending working, I had to change

_colorBlendAttachment.srcColorBlendFactor = VK_BLEND_FACTOR_ONE_MINUS_DST_ALPHA;
_colorBlendAttachment.dstColorBlendFactor = VK_BLEND_FACTOR_DST_ALPHA;

to

_colorBlendAttachment.srcColorBlendFactor = VK_BLEND_FACTOR_SRC_ALPHA;
_colorBlendAttachment.dstColorBlendFactor = VK_BLEND_FACTOR_ONE_MINUS_SRC_ALPHA;

This is also what vulkan-tutorial uses.

TheMartin commented 3 months ago

In 5. GLTF loading / GLTF Textures, the first code snippet contains the following lines:

const std::string path(filePath.uri.path().begin(),
    filePath.uri.path().end()); // Thanks C++.
unsigned char* data = stbi_load(path.c_str(), &width, &height, &nrChannels, 4);

std::string can be constructed directly from a std::string_view (or even any type convertible to a std::string_view, apparently), so the first line can be simplified to const std::string path(filePath.uri.path());

But given that the only use of path is to immediately call c_str() on it, maybe a better solution would be to entirely skip the intermediate std::string (and the associated copy of the contents of filePath.uri), and instead do the following:

unsigned char* data = stbi_load(filePath.uri.path().data(), &width, &height, &nrChannels, 4);
NikChouhan commented 3 months ago

@vblanco20-1 can you please add the steps required to configure with linux based distros? I have tried editing the CMakeLists.txt but it just doesn't work. I have left windows for good, and I am sure many might be in the same boat, and don't want to dual boot for a single application. It would be great if you could help out as I am quite new to cmake

vblanco20-1 commented 3 months ago

@NikChouhan I dont use linux so i cant do that myself. Its strange you have issues there because the cmake provided can even work for nintendo switch. Make sure you have the libraries installed correctly

NikChouhan commented 3 months ago

@vblanco20-1 thanks for the reply tho a redditor has helped me fix that. The cmakelists file in the src directory has a custom command in the end to copy the DLLs to the engine directory. It was useful for the windows configuration but for non DLL based systems like linux, it wasn't needed and hence although everything - building and compiling and linking, occured flawlessly the final step couldn't happen. Thanks for the guide tho, it's wonderful :>

MelloWxD commented 3 months ago

In Chapter 3 Mesh Loading I cant seem to use fastgltf I can include the files but if I use any of the data types or functions from the library I get unresolved externals in the function "std::vector<std::shared_ptr> VkLoad::loadGltfMeshes(VulkanEngine* engine, std::filesystem::path filePath)"

Afaik they're included just fine but wont let me use anything Any ideas on how to fix this plzzz? been driving me crazy.

Latias94 commented 3 months ago

In Chapter 3 Mesh Loading I cant seem to use fastgltf I can include the files but if I use any of the data types or functions from the library I get unresolved externals in the function "std::vector VkLoad::loadGltfMeshes(VulkanEngine* engine, std::filesystem::path filePath)"

Afaik they're included just fine but wont let me use anything Any ideas on how to fix this plzzz? been driving me crazy.

I created the project template https://github.com/Latias94/VulkanGuideTemplate. The build system is xmake, which can automatically download project dependencies and set up the build configuration. You can give it a try.

VikasDagar23 commented 3 months ago

can u help me with this error, i am developing for android

Validation ERROR: [VUID-VkGraphicsPipelineCreateInfo-pNext-pNext] Code 395890785 : Validation Error: [ VUID-VkGraphicsPipelineCreateInfo-pNext-pNext ] Object 0: handle = 0xb400007e706ef6b0, type = VK_OBJECT_TYPE_INSTANCE; | MessageID = 0x1798d061 | vkCreateGraphicsPipelines(): pCreateInfos[0].pNext includes a pointer to a VkStructureType (VK_STRUCTURE_TYPE_PIPELINE_RENDERING_CREATE_INFO), but its parent extension VK_KHR_dynamic_rendering has not been enabled. The Vulkan spec states: Each pNext member of any structure (including this one) in the pNext chain must be either NULL or a pointer to a valid instance of VkAttachmentSampleCountInfoAMD, VkExternalFormatANDROID, VkGraphicsPipelineLibraryCreateInfoEXT, VkGraphicsPipelineShaderGroupsCreateInfoNV, VkMultiviewPerViewAttributesInfoNVX, VkPipelineCompilerControlCreateInfoAMD, VkPipelineCreateFlags2CreateInfoKHR, VkPipelineCreationFeedbackCreateInfo, VkPipelineDiscardRectangleStateCreateInfoEXT, VkPipelineFragmentShadingRateEnumStateCreateInfoNV, VkPipelineFra 2024-06-04 16:48:01.883 10236-10281 AppName org.libsdl.kavacch E Validation ERROR: [VUID-VkGraphicsPipelineCreateInfo-dynamicRendering-06576] Code 264898451 : Validation Error: [ VUID-VkGraphicsPipelineCreateInfo-dynamicRendering-06576 ] | MessageID = 0xfca0793 | vkCreateGraphicsPipelines(): pCreateInfos[0].renderPass is NULL, but the dynamicRendering feature was not enabled. The Vulkan spec states: If the dynamicRendering feature is not enabled and the pipeline requires pre-rasterization shader state, fragment shader state, or fragment output interface state, renderPass must not be VK_NULL_HANDLE (https://www.khronos.org/registry/vulkan/specs/1.3-extensions/html/vkspec.html#VUID-VkGraphicsPipelineCreateInfo-dynamicRendering-06576) 2024-06-04 16:48:01.884 10236-10281 AppName org.libsdl.kavacch W Validation WARNING: [Undefined-Value-ShaderOutputNotConsumed] Code -1744492148 : Validation Warning: [ Undefined-Value-ShaderOutputNotConsumed ] Object 0: handle = 0xb097c90000000027, type = VK_OBJECT_TYPE_SHADER_MODULE; | MessageID = 0x9805298c | vkCreateGraphicsPipelines(): pCreateInfos[0] fragment shader writes to output location 0 with no matching attachment 2024-06-04 16:48:01.884 10236-10281 VulkanApp org.libsdl.kavacch E Failed to create pipeline. Error code: -1000011001 2024-06-04 16:48:01.884 10236-10281 AppName org.libsdl.kavacch E Validation ERROR: [UNASSIGNED-GeneralParameterError-RequiredHandle] Code -1881362053 : Validation Error: [ UNASSIGNED-GeneralParameterError-RequiredHandle ] | MessageID = 0x8fdcb17b | vkGetPipelineCacheData(): pipelineCache is VK_NULL_HANDLE. 2024-06-04 16:48:01.885 10236-10281 AppName org.libsdl.kavacch E Validation ERROR: [VUID-vkGetPipelineCacheData-pipelineCache-parameter] Code 404435007 : Validation Error: [ VUID-vkGetPipelineCacheData-pipelineCache-parameter ] Object 0: handle = 0xb400007e706ef6b0, type = VK_OBJECT_TYPE_INSTANCE; | MessageID = 0x181b303f | vkGetPipelineCacheData(): pipelineCache Invalid VkPipelineCache Object 0x0. The Vulkan spec states: pipelineCache must be a valid VkPipelineCache handle (https://www.khronos.org/registry/vulkan/specs/1.3-extensions/html/vkspec.html#VUID-vkGetPipelineCacheData-pipelineCache-parameter) 2024-06-04 16:48:01.885 10236-10281 libc org.libsdl.kavacch A

VikasDagar23 commented 3 months ago

okay solved the previous error now stuck on next error

Validation ERROR: [VUID-VkMemoryAllocateFlagsInfo-flags-parameter] Code 804476961 : Validation Error: [ VUID-VkMemoryAllocateFlagsInfo-flags-parameter ] | MessageID = 0x2ff35821 | vkAllocateMemory(): pAllocateInfo->pNext.flags (0x2) has VkMemoryAllocateFlagBits values that requires the extensions VK_KHR_buffer_device_address. The Vulkan spec states: flags must be a valid combination of VkMemoryAllocateFlagBits values (https://www.khronos.org/registry/vulkan/specs/1.3-extensions/html/vkspec.html#VUID-VkMemoryAllocateFlagsInfo-flags-parameter) Validation ERROR: [VUID-VkDescriptorSetLayoutCreateInfo-pNext-pNext] Code 729054019 : Validation Error: [ VUID-VkDescriptorSetLayoutCreateInfo-pNext-pNext ] Object 0: handle = 0xb400007e706f75e0, type = VK_OBJECT_TYPE_INSTANCE; | MessageID = 0x2b747b43 | vkCreateDescriptorSetLayout(): pCreateInfo->pNext includes a pointer to a VkStructureType (VK_STRUCTURE_TYPE_DESCRIPTOR_SET_LAYOUT_BINDING_FLAGS_CREATE_INFO), but its parent extension VK_EXT_descriptor_indexing has not been enabled. The Vulkan spec states: Each pNext member of any structure (including this one) in the pNext chain must be either NULL or a pointer to a valid instance of VkDescriptorSetLayoutBindingFlagsCreateInfo or VkMutableDescriptorTypeCreateInfoEXT (https://www.khronos.org/registry/vulkan/specs/1.3-extensions/html/vkspec.html#VUID-VkDescriptorSetLayoutCreateInfo-pNext-pNext) 2024-06-04 17:42:18.627 16006-16081 AppName org.libsdl.kavacch E Validation ERROR: [VUID-VkDescriptorSetLayoutCreateInfo-pNext-pNext] Code 729054019 : Validation Error: [ VUID-VkDescriptorSetLayoutCreateInfo-pNext-pNext ] Object 0: handle = 0xb400007e706f75e0, type = VK_OBJECT_TYPE_INSTANCE; | MessageID = 0x2b747b43 | vkCreateDescriptorSetLayout(): pCreateInfo->pNext extended struct requires the extensions VK_EXT_descriptor_indexing. The Vulkan spec states: Each pNext member of any structure (including this one) in the pNext chain must be either NULL or a pointer to a valid instance of VkDescriptorSetLayoutBindingFlagsCreateInfo or VkMutableDescriptorTypeCreateInfoEXT (https://www.khronos.org/registry/vulkan/specs/1.3-extensions/html/vkspec.html#VUID-VkDescriptorSetLayoutCreateInfo-pNext-pNext)

vblanco20-1 commented 3 months ago

All validation errors on destruction and cleanup have been fixed on the example code up to chapter 4. Multiple other errors have been fixed too like wrong blending logic. The tutorial text will take a bit more to doublecheck but you can check the sourcecode as example

aaalloc commented 2 months ago

I've created a meson build start project for this tutorial : https://github.com/Siirko/vkguide_meson It maybe not perfect but for some people it may simplify things for building !

rwf93 commented 2 months ago

In regards to the command pools, are you sure that each FrameData should have it's own command pool. I was under the assumption that each buffer shared the same pool (similar to how the legacy tutorial showed it).

AdamSturge commented 2 months ago

I'm on chapter 2 "Improving the render loop" and I'm noticing 2 Vulkan validation errors

Validation Error: [ VUID-VkBlitImageInfo2-srcImageLayout-00221 ] Object 0: handle = 0xb8dbd38, type = VK_OBJECT_TYPE_COMMAND_BUFFER; Object 1: handle = 0xcfef35000000000a, type = VK_OBJECT_TYPE_IMAGE; | MessageID = 0x57213153 | vkCmdBlitImage2(): pBlitImageInfo->srcImage Cannot use VkImage 0xcfef35000000000a[] (layer=0 mip=0) with specific layout VK_IMAGE_LAYOUT_TRANSFER_SRC_OPTIMAL that doesn't match the previous known layout VK_IMAGE_LAYOUT_PRESENT_SRC_KHR. The Vulkan spec states: srcImageLayout must specify the layout of the image subresources of srcImage specified in pRegions at the time this command is executed on a VkDevice (https://vulkan.lunarg.com/doc/view/1.3.283.0/windows/1.3-extensions/vkspec.html#VUID-VkBlitImageInfo2-srcImageLayout-00221)
[ERROR: Validation]
Validation Error: [ VUID-VkBlitImageInfo2-dstImageLayout-00226 ] Object 0: handle = 0xb8dbd38, type = VK_OBJECT_TYPE_COMMAND_BUFFER; Object 1: handle = 0xe7f79a0000000005, type = VK_OBJECT_TYPE_IMAGE; | MessageID = 0x5faa9482 | vkCmdBlitImage2(): pBlitImageInfo->dstImage Cannot use VkImage 0xe7f79a0000000005[] (layer=0 mip=0) with specific layout VK_IMAGE_LAYOUT_TRANSFER_DST_OPTIMAL that doesn't match the previous known layout VK_IMAGE_LAYOUT_PRESENT_SRC_KHR. The Vulkan spec states: dstImageLayout must specify the layout of the image subresources of dstImage specified in pRegions at the time this command is executed on a VkDevice (https://vulkan.lunarg.com/doc/view/1.3.283.0/windows/1.3-extensions/vkspec.html#VUID-VkBlitImageInfo2-dstImageLayout-00226)
[ERROR: Validation]
AdamSturge commented 2 months ago

Also

Validation Error: [ VUID-VkImageMemoryBarrier2-oldLayout-01197 ] Object 0: handle = 0xb8dbd38, type = VK_OBJECT_TYPE_COMMAND_BUFFER; | MessageID = 0x2c8c6e7d | vkCmdPipelineBarrier2(): pDependencyInfo->pImageMemoryBarriers[0].image (VkNonDispatchableHandle 0xe7f79a0000000005[]) cannot transition the layout of aspect=1, level=0, layer=0 from VK_IMAGE_LAYOUT_TRANSFER_DST_OPTIMAL when the previous known layout is VK_IMAGE_LAYOUT_PRESENT_SRC_KHR. The Vulkan spec states: If srcQueueFamilyIndex and dstQueueFamilyIndex define a queue family ownership transfer or oldLayout and newLayout define an image layout transition, oldLayout must be VK_IMAGE_LAYOUT_UNDEFINED or the current layout of the image subresources affected by the barrier (https://vulkan.lunarg.com/doc/view/1.3.283.0/windows/1.3-extensions/vkspec.html#VUID-VkImageMemoryBarrier2-oldLayout-01197)    
[ERROR: Validation]
vblanco20-1 commented 2 months ago

@rwf93 each frame in flight having its own command pool is critical. Its not done in the tutorial, but its very common to have multiple command buffers in one frame. By having 1 pool per frame, you can delete all of them at once by resetting the command pool, and you can avoid using the VK_COMMAND_POOL_CREATE_RESET_COMMAND_BUFFER_BIT flag which can complicate the driver memory management (resetting pool only and not commands is recommended by both amd and nvidia).

rwf93 commented 2 months ago

That makes much more sense, which also gives context for using VK_COMMAND_BUFFER_USAGE_ONE_TIME_SUBMIT_BIT for the command buffer flags. Which was originally used for onetime submitting if I recall correctly.

I am however also encountering an issue with this validation error:

Validation Error: [ VUID-vkAcquireNextImageKHR-semaphore-01779 ] Object 0: handle = 0xdcc8fd0000000012, type = VK_OBJECT_TYPE_SEMAPHORE; | MessageID = 0x5717e75b | vkAcquireNextImageKHR(): Semaphore must not have any pending operations. The Vulkan spec states: If semaphore is not VK_NULL_HANDLE it must not have any uncompleted signal or wait operations pending (https://vulkan.lunarg.com/doc/view/1.3.283.0/windows/1.3-extensions/vkspec.html#VUID-vkAcquireNextImageKHR-semaphore-01779)

Which doesn't exactly make sense considering I am waiting for the fence to complete here, and am presenting submitting/presenting the queue here

As you can see, the code doesn't follow the tutorial 1:1, which I apologize for, but cannot figure out this issue. If you could shed some light on it then that would be a great deal of help. In essence, commandpool.get functions use the current_frame (which is basically just the frameNumber % max_flying_frames), and swapchain._get uses the image_index.

lou000 commented 2 months ago

Hey guys if anyone not using the template has a problem with the monkey head incorrectly rendering in Chapter 3 - Mesh Loading then enable GLM_FORCE_DEPTH_ZERO_TO_ONE for glm::perspective. Vulkan has depth values from 0 to1 not from -1 to 1 like opengl. I didn't see a mention of it in the chapter, maybe it was mentioned somewhere else but really should be explicitly said when first using glm::perspective.

Also as soon as I enabled the depth testing Vulkan was really mad about pipeline not having a depth image format in VkPipelineRenderingCreateInfo, which was confusing because it was definitely there. Turns out it was about imgui pipeline, so if you similarly to me skipped immediate rendering imgui chapter and used dynamic rendering then remember to draw imgui WITHOUT depth attachment.

vblanco20-1 commented 2 months ago

@lou000 that macro is done in the cmake setup scripts. If you dont follow from starter-point-2 branch, you might run into it.

https://github.com/vblanco20-1/vulkan-guide/blob/starting-point-2/src/CMakeLists.txt#L23

wusticality commented 2 months ago

Isn't this implementation fragile if you have multiple monitors and / or monitors of different sizes? I have 3 4k displays, and if I drag my window size greater than the size of one monitor, things will blow up. For most games, I don't see a way around resizing all of your attachments, otherwise you could end up with crashes unless I'm missing something.

minggo commented 2 months ago
//wait until the gpu has finished rendering the last frame. Timeout of 1 second
    VK_CHECK(vkWaitForFences(_device, 1, &get_current_frame()._renderFence, true, 1000000000));

Is it a problem? Let me explain:

But there is only one VkImage shared by two frames. Does it have problem?

NikChouhan commented 2 months ago

what should the working directory be set to run the individual chapter project application provided in the github, through RenderDoc. I have learned a quite from RenderDoc while I was learning OpenGL, but am finding it almost impossible to run the applications through it. Getting the following error. The Working dir in the attached example is the default one. image

Matty-KD commented 1 month ago

I have setup all external dependencies by hand. As such you might find that later versions of fastgltf have slightly changed function names and the namespace scope of some structures. Great tutorial by the way looking forward to later chapters. Also in chapter 5 stimate should be estimate. Truly appreciate your work

Matty-KD commented 1 month ago

also i had a bug where couldn't get my GLTF textures loaded, they would all fail, i had to change [&](fastgltf::sources::Vector& vector) {
to
[&](fastgltf::sources::Array& array) {
in the last std::visit()

rafal-mi commented 1 week ago

I get build error E1696 cannot open source file "SDL.h" imgui C:\Users...\starting-point\third_party\imgui\imgui_impl_sdl.cpp 50

rafal-mi commented 1 week ago

The file vk_types.h holds nothing of the above.

NikChouhan commented 1 week ago

@rafal-mi don't think if its a solution but worth trying. Change all your imgui header, cpp files to the latest version used in the tutorial. I once had a similar issue resolved

molamolamola commented 1 week ago

With code of Mainloop Code, I got this: VUID-vkCmdClearColorImage-imageLayout-00004(ERROR / SPEC): msgNum: 1142431921 - Validation Error: [ VUID-vkCmdClearColorImage-imageLayout-00004 ] Object 0: handle = 0x1710b03a420, type = VK_OBJECT_TYPE_COMMAND_BUFFER; Object 1: handle = 0xfa21a40000000003, type = VK_OBJECT_TYPE_IMAGE; | MessageID = 0x441820b1 | vkCmdClearColorImage(): pRanges[0] Cannot clear an image whose layout is VK_IMAGE_LAYOUT_TRANSFER_DST_OPTIMAL and doesn't match the previous known layout VK_IMAGE_LAYOUT_GENERAL. The Vulkan spec states: imageLayout must specify the layout of the image subresource ranges of image specified in pRanges at the time this command is executed on a VkDevice (https://vulkan.lunarg.com/doc/view/1.3.290.0/windows/1.3-extensions/vkspec.html#VUID-vkCmdClearColorImage-imageLayout-00004) Objects: 2 [0] 0x1710b03a420, type: 6, name: NULL [1] 0xfa21a40000000003, type: 10, name: NULL VUID-vkCmdClearColorImage-image-00002(ERROR / SPEC): msgNum: 1668253329 - Validation Error: [ VUID-vkCmdClearColorImage-image-00002 ] Object 0: handle = 0x1710b03a420, type = VK_OBJECT_TYPE_COMMAND_BUFFER; Object 1: handle = 0xfa21a40000000003, type = VK_OBJECT_TYPE_IMAGE; | MessageID = 0x636f8691 | vkCmdClearColorImage(): image (VkImage 0xfa21a40000000003[]) was created with usage VK_IMAGE_USAGE_COLOR_ATTACHMENT_BIT (missing VK_IMAGE_USAGE_TRANSFER_DST_BIT). The Vulkan spec states: image must have been created with VK_IMAGE_USAGE_TRANSFER_DST_BIT usage flag (https://vulkan.lunarg.com/doc/view/1.3.290.0/windows/1.3-extensions/vkspec.html#VUID-vkCmdClearColorImage-image-00002) Objects: 2 [0] 0x1710b03a420, type: 6, name: NULL [1] 0xfa21a40000000003, type: 10, name: NULL

ro-kue commented 5 days ago

I think it would make sense to mention that GLM needs GLM_FORCE_DEPTH_ZERO_TO_ONE as a compiler definition. If you follow this tutorial without the project, you'll just not get the monkey once you add a projection matrix which is pretty difficult to debug.

darbyford commented 3 days ago

Just downloaded https://github.com/vblanco20-1/vulkan-guide/archive/all-chapters-2.zip

Used cMake to Configure (added build directory), Generate, and Open Project in VS 2022.

The VS solution does not contain the vulkan_guide project you show above.

This is what the VS solution contains:

screenshot

darbyford commented 3 days ago

The screenshot image didn't work here for some reason, but the vulkan_guide project is missing.

These are the only projects in the solution: ALL_BUILD chapter_0 chapter_1 chapter_2 chapter_3 chapter_4 chapter_5 chapter_6 fastgltf fastgltf_simdjson fmt imgui INSTALL sdl_headers_copy SDL2 Shaders vkbootstrap vkguide_shared ZERO_CHECK