18 个版本
| 0.1.17 | 2023 年 5 月 1 日 |
|---|---|
| 0.1.16 | 2023 年 4 月 30 日 |
#62 在 渲染
用于 2 crate
1MB
17K SLoC
vulk
vulk 是一个高度实验性的 Vulkan 绑定库,除了只包括最新的特性和扩展,如光线追踪、网格着色器、描述符缓冲区、着色器对象等。当一个新的 Vulkan 扩展完全取代了一个功能时,vulk 将不会保持向后兼容性。例如,在 vulk 中,您不能使用顶点着色器,因为网格着色器是所有几何阶段的超集。
vulk 的设计灵感来自 ash,这也是您应该用于生产用例而不是 vulk 的原因。
目前,唯一支持的驱动程序是 2023 年 4 月 27 日的最新 NVIDIA 驱动程序。
lib.rs:
vulk
命令
初始化
vk::GetInstanceProcAddr返回一个命令的函数指针vk::GetDeviceProcAddr返回一个命令的函数指针vk::CreateInstance创建一个新的 Vulkan 实例vk::DestroyInstance销毁一个 Vulkan 实例
设备和队列
vk::EnumeratePhysicalDevices列出 Vulkan 实例可访问的物理设备vk::GetPhysicalDeviceProperties2返回物理设备的属性vk::GetPhysicalDeviceQueueFamilyProperties2报告指定物理设备队列的属性vk::CreateDevice创建新的设备实例vk::DestroyDevice销毁逻辑设备vk::GetDeviceQueue2从设备获取队列句柄
命令缓冲区
vk::CreateCommandPool创建新的命令池对象vk::ResetCommandPool重置命令池vk::DestroyCommandPool销毁命令池对象vk::AllocateCommandBuffers从现有命令池分配命令缓冲区vk::ResetCommandBuffer将命令缓冲区重置到初始状态vk::FreeCommandBuffers释放命令缓冲区vk::BeginCommandBuffer开始记录命令缓冲区vk::EndCommandBuffer完成记录命令缓冲区vk::QueueSubmit2将命令缓冲区提交到队列
同步和缓存控制
vk::CreateSemaphore创建新的队列信号量对象vk::DestroySemaphore销毁信号量对象vk::GetSemaphoreCounterValue查询时间线信号量的当前状态vk::WaitSemaphores在主机上等待时间线信号量vk::SignalSemaphore在主机上发出时间线信号量vk::CmdPipelineBarrier2插入内存依赖vk::QueueWaitIdle等待队列变为空闲vk::DeviceWaitIdle等待设备变为空闲vk::GetCalibratedTimestampsEXT查询校准时间戳
渲染通道
vk::CmdBeginRendering开始动态渲染通道实例vk::CmdEndRendering结束动态渲染通道实例
着色器
vk::CreateShadersEXT创建一个或多个新的着色器vk::CmdBindShadersEXT将着色器对象绑定到命令缓冲区vk::DestroyShaderEXT销毁着色器对象vk::CreateShaderModule创建一个新的着色器模块对象vk::DestroyShaderModule销毁着色器模块
管道
vk::CreateRayTracingPipelinesKHR创建一个新的光线追踪管道对象vk::GetRayTracingShaderGroupHandlesKHR查询光线追踪管道着色器组句柄vk::DestroyPipeline销毁管道对象vk::CmdBindPipeline将管道对象绑定到命令缓冲区
内存分配
vk::GetPhysicalDeviceMemoryProperties2报告指定物理设备的内存信息vk::AllocateMemory分配设备内存vk::FreeMemory释放设备内存vk::MapMemory2KHR将内存对象映射到应用程序地址空间vk::UnmapMemory2KHR解除之前映射的内存对象
资源创建
vk::CreateBuffer创建一个新的缓冲区对象vk::DestroyBuffer销毁缓冲区对象vk::CreateImage创建一个新的图像对象vk::DestroyImage销毁图像对象vk::CreateImageView从现有的图像创建图像视图vk::DestroyImageView销毁图像视图对象vk::CreateAccelerationStructureKHR创建一个新的加速结构对象vk::GetAccelerationStructureBuildSizesKHR获取加速结构的所需大小vk::DestroyAccelerationStructureKHR销毁加速结构对象vk::GetAccelerationStructureDeviceAddressKHR查询加速结构的地址vk::GetDeviceBufferMemoryRequirements返回指定Vulkan对象的内存需求vk::GetDeviceImageMemoryRequirements返回指定Vulkan对象的内存需求vk::BindBufferMemory2将设备内存绑定到缓冲区对象vk::BindImageMemory2将设备内存绑定到图像对象
采样器
vk::CreateSampler创建一个新的采样器对象vk::DestroySampler销毁采样器对象
资源描述符
vk::CreateDescriptorSetLayout创建一个新的描述符集布局vk::DestroyDescriptorSetLayout销毁描述符集布局对象vk::CreatePipelineLayout创建一个新的管线布局对象vk::DestroyPipelineLayout销毁管线布局对象vk::CmdPushConstants更新推送常量的值vk::GetBufferDeviceAddress查询缓冲区的地址vk::GetDescriptorSetLayoutSizeEXT获取描述符集布局在内存中的大小vk::GetDescriptorSetLayoutBindingOffsetEXT获取描述符集布局中绑定的偏移量vk::GetDescriptorEXT获取要放入缓冲区的描述符vk::CmdBindDescriptorBuffersEXT将描述符缓冲区绑定到命令缓冲区vk::CmdSetDescriptorBufferOffsetsEXT在命令缓冲区中设置描述符缓冲区偏移量
查询
vk::CreateQueryPool创建一个新的查询池对象vk::DestroyQueryPool销毁查询池对象vk::ResetQueryPool重置查询池中的查询vk::CmdBeginQuery开始查询vk::CmdEndQuery结束查询vk::GetQueryPoolResults将查询池中的查询结果复制到主机内存区域vk::CmdWriteTimestamp2将设备时间戳写入查询对象
复制命令
vk::CmdCopyBuffer2在缓冲区区域之间复制数据vk::CmdCopyImage2在图像之间复制数据vk::CmdCopyBufferToImage2从缓冲区复制数据到图像vk::CmdCopyImageToBuffer2将图像数据复制到缓冲区
绘图命令
vk::CmdDrawMeshTasksEXT绘制网格任务工作项vk::CmdDrawMeshTasksIndirectEXT向命令缓冲区发出间接网格任务绘制vk::CmdDrawMeshTasksIndirectCountEXT使用来自缓冲区的绘制计数执行间接网格任务绘制
固定功能顶点后处理
vk::CmdSetViewportWithCount为命令缓冲区动态设置视口计数和视口vk::CmdSetScissorWithCount为命令缓冲区动态设置裁剪计数和裁剪矩形边界
光栅化
vk::CmdSetRasterizationSamplesEXT为命令缓冲区动态指定光栅化样本vk::CmdSetFrontFace为命令缓冲区动态设置前向面方向vk::CmdSetCullMode为命令缓冲区动态设置剔除模式
片段操作
vk::CmdSetDepthTestEnable为命令缓冲区动态设置深度测试启用vk::CmdSetDepthCompareOp为命令缓冲区动态设置深度比较运算符vk::CmdSetDepthWriteEnable动态设置命令缓冲区深度写入使能
帧缓冲区
vk::CmdSetColorBlendEnableEXT动态指定命令缓冲区每个附件的pname:blendEnablevk::CmdSetColorBlendEquationEXT动态指定命令缓冲区的混合因子和操作vk::CmdSetColorWriteMaskEXT动态指定命令缓冲区每个附件的颜色写入掩码
命令分发
vk::CmdDispatch分发计算工作项vk::CmdDispatchIndirect使用间接参数分发计算工作项
窗口系统集成(WSI)
vk::CreateWin32SurfaceKHR为Win32原生窗口创建VkSurfaceKHR对象vk::DestroySurfaceKHR销毁VkSurfaceKHR对象vk::GetPhysicalDeviceSurfaceSupportKHR查询是否支持呈现vk::GetPhysicalDeviceSurfaceCapabilitiesKHR查询表面能力vk::GetPhysicalDeviceSurfaceFormatsKHR查询表面支持的颜色格式vk::GetPhysicalDeviceSurfacePresentModesKHR查询支持的呈现模式vk::CreateSwapchainKHR创建交换链vk::DestroySwapchainKHR销毁交换链对象vk::GetSwapchainImagesKHR获取与交换链关联的可呈现图像数组vk::AcquireNextImage2KHR获取下一个可呈现图像的索引vk::QueuePresentKHR将图像排队进行呈现
加速结构
光线追踪
vk::CmdTraceRaysKHR初始化光线追踪调度vk::CmdTraceRaysIndirect2KHR使用间接着色器绑定表初始化间接光线追踪调度
附加功能
调试
vk::CreateDebugUtilsMessengerEXT创建调试信使对象vk::DestroyDebugUtilsMessengerEXT销毁调试信使对象
扩展
VK_KHR_surfaceVK_KHR_swapchainVK_KHR_win32_surfaceVK_EXT_debug_utilsVK_KHR_acceleration_structureVK_KHR_ray_tracing_pipelineVK_KHR_ray_queryVK_EXT_calibrated_timestampsVK_EXT_validation_featuresVK_KHR_deferred_host_operationsVK_KHR_map_memory2VK_KHR_pipeline_libraryVK_KHR_synchronization2VK_EXT_descriptor_bufferVK_EXT_mesh_shaderVK_KHR_ray_tracing_maintenance1VK_EXT_shader_object
依赖关系
~0.4–6MB
~19K SLoC