Debug Markers
Introduction
- 使用官方Samples中的教程
- git: https://github.com/KhronosGroup/Vulkan-Samples.git
- build 编译好后, 在VS->vulkan_samples->属性->调试->命令参数输入sample的名称运行即可
- sample 的名称在samples.h中维护.
- 找到 debug_utils
prepare
- ApiVulkanSample::prepare(platform)
- 初始化vulkan资源
- camera
- 相机参数初始化
- debug_check_extension
- 检测debug扩展
- instance->get_extensions(): 获取扩展信息
- for (auto &enabled_extension : enabled_instance_extensions)
- 遍历扩展信息
- strcmp(enabled_extension, VK_EXT_DEBUG_UTILS_EXTENSION_NAME) == 0
- 是否有debug扩展
- yes debug_utils_supported = true;
- for (auto &enabled_extension : enabled_instance_extensions)
- instance->get_extensions(): 获取扩展信息
- 检测debug扩展
- load_assets: 加载球模型和纹理贴图
- prepare_uniform_buffers
- update_uniform_buffers
- prepare_offscreen_buffer
- prepare G-Buffer
- create_attachment: color
- create_attachment: color
- create_attachment: depth
- vkCreateRenderPass
- vkCreateFramebuffer
- vkCreateSampler
- setup_descriptor_set_layout
- vkCreateDescriptorSetLayout
- vkCreatePipelineLayout
- prepare_pipelines
- Full screen pipelines
- vkCreateGraphicsPipelines
- Bloom pass
- vkCreateGraphicsPipelines
- Second blur pass
- vkCreateGraphicsPipelines
- kysphere pipeline
- vkCreateGraphicsPipelines
- Flip cull mode
- vkCreateGraphicsPipelines
- Full screen pipelines
- setup_descriptor_pool
- vkCreateDescriptorPool
- setup_descriptor_sets
- Sphere model object descriptor set
- vkAllocateDescriptorSets
- write_descriptor_set
- vkUpdateDescriptorSets
- Sky sphere descriptor set
- vkAllocateDescriptorSets
- write_descriptor_set
- vkUpdateDescriptorSets
- Bloom filter
- vkAllocateDescriptorSets
- write_descriptor_set
- vkUpdateDescriptorSets
- Composition descriptor set
- vkAllocateDescriptorSets
- write_descriptor_set
- vkUpdateDescriptorSets
- Sphere model object descriptor set
- build_command_buffers: 本节重点, debug设置在这里
- loop
- vkBeginCommandBuffer
- First pass: Render scene to offscreen framebuffer
- cmd_begin_label: 重点
- VkDebugUtilsLabelEXT
- vkCmdBeginDebugUtilsLabelEXT
- vkCmdBeginRenderPass
- vkCmdSetViewport
- vkCmdSetScissor
- display_skysphere
- cmd_insert_label: 重点
- VkDebugUtilsLabelEXT
- vkCmdInsertDebugUtilsLabelEXT
- vkCmdBindPipeline
- vkCmdPushConstants
- vkCmdBindDescriptorSets
- draw_model
- vkCmdBindVertexBuffers
- vkCmdBindIndexBuffer
- vkCmdDrawIndexed
- cmd_insert_label: 重点
- Spheres
- vkCmdBindPipeline
- vkCmdBindDescriptorSets
- vkCmdPushConstants
- cmd_insert_label: 重点
- draw_model
- vkCmdEndRenderPass
- cmd_end_label: 重点
- vkCmdEndDebugUtilsLabelEXT
- cmd_begin_label: 重点
- debug_name_objects: 重点
- set_object_name
- VkDebugUtilsObjectNameInfoEXT
- vkSetDebugUtilsObjectNameEXT
- set_object_name
- loop
render
- draw
- queue_begin_label: 重点
- VkDebugUtilsLabelEXT
- vkQueueBeginDebugUtilsLabelEXT
- ApiVulkanSample::prepare_frame
- vkQueueSubmit
- ApiVulkanSample::submit_frame
- queue_end_label:重点
- vkQueueEndDebugUtilsLabelEXT
- queue_begin_label: 重点
- update_uniform_buffers
shader
- shader存放在Vulkan-Samples\shaders\debug_utils
- 延迟渲染的基础管线, 可以忽略
小结
本节主要讲 debug 扩展使用方法。 需要反复研究一下, 调试程序的基本方法, 必须掌握.
Vulkan Gears & Vulkan demo scene
虽然使用的是最基本的渲染流程, 但还是有必要阅读一下#109