- 博客(540)
- 资源 (13)
- 收藏
- 关注
原创 Using Vulkan -- Memory Allocation -- Sparse Resources
Vulkan稀疏资源允许非连续内存绑定,支持动态重新绑定和部分更新。通过vkQueueBindSparse()进行队列操作绑定,不同于普通资源的绑定方式。示例展示了256KB稀疏缓冲的64KB块布局和图像的多级mip绑定。基础示例创建稀疏图像并分段绑定内存,进阶示例则实现数组式纹理图像仅绑定LOD0和元数据。使用稀疏资源需注意同步问题,确保内存访问安全,且释放内存不会自动解除资源绑定。稀疏资源为内存管理提供了灵活性和性能优化空间。
2026-03-20 07:15:00
270
原创 Using Vulkan -- Memory Allocation
Vulkan内存管理是开发关键,建议通过Khronos大会视频学习核心概念。使用VulkanMemoryAllocator等库可简化管理,子分配方案能规避设备分配数量限制和系统开销。需区分独立显卡(需暂存缓冲传输)和UMA系统(共享内存)的性能特点。延迟分配内存技术适用于移动GPU,能优化瓦片架构下的内存使用。掌握这些内存管理策略对提升Vulkan应用性能至关重要。
2026-03-20 07:00:00
339
原创 Synchronization -- Swapchain Semaphore Reuse
原因很可能是:只要稍微偏离 “你触发、我等待” 的最直观同步方式,复杂度就会上升,逻辑变得不明显,进而容易出错。从 Vulkan SDK 1.4.313 开始,校验层会报告 present 等待信号量未被安全使用的情况。的 fence 同步帧缓冲,等待该 fence 即可确认对应命令缓冲与帧资源已不再使用。通过等待呈现 fence,应用可安全释放交换链资源。中指定的信号量)的方式。这里的 “安全” 指 Vulkan 规范保证信号量已不再被使用,可以被复用。,并认为此时删除交换链信号量与交换链本身是安全的。
2026-03-19 07:00:00
688
原创 Synchronization -- Synchronization Examples
本文详细介绍了Vulkan同步API VK_KHR_synchronization2的使用方法,重点分析了计算与图形管线间的常见同步场景。文章通过大量代码示例展示了计算到计算、计算到图形、图形到图形等不同依赖关系的实现方式,包括内存屏障、图像布局转换和子流程依赖等关键技术。特别强调了全局内存屏障的高效性,以及队列所有权转移和图像布局转换等特殊情况的处理。同时提供了CPU与GPU数据传输、交换链图像获取与呈现等实际应用场景的同步方案,并指出完整管线屏障仅适用于调试场景。
2026-03-19 07:00:00
767
原创 Using Vulkan -- Synchronization -- VK_KHR_synchronization2
VK_KHR_synchronization2扩展对Vulkan同步机制进行了重大改进,主要包括:1)统一管线阶段与访问标识到VkDependencyInfoKHR结构体;2)引入64位VkAccessFlags2KHR和VkPipelineStageFlags2KHR类型;3)拆分原有标识并新增合并标识;4)提供两种优化图像布局;5)改进事件设置和提交流程。扩展通过VkQueueSubmit2KHR简化提交操作,支持向后兼容但禁止混合使用新旧API。规范建议开发者迁移到新机制以获得更清晰的同步语义和更好的
2026-03-18 07:15:00
520
原创 Using Vulkan -- pNext and sType
Vulkan API中pNext和sType是关键扩展机制:pNext作为void指针用于构建结构体链表,sType标识结构体类型。基础结构体VkBaseIn/OutStructure分别处理输入/输出数据。通过pNext链式挂载扩展结构体时,必须正确设置sType类型标识。代码示例展示了如何创建并遍历pNext链表,其中加载器/驱动通过sType识别结构体并处理数据。这种机制使Vulkan能够灵活扩展功能,同时保持API的向后兼容性。
2026-03-18 07:00:00
291
原创 Using Vulkan -- Windowing, Audio, and Input
本文介绍了将Vulkan与各种窗口创建和输入处理库集成的方案。主要内容包括:1. 跨平台库集成:详细说明了GLFW、SDL2和SFML三种主流库创建Vulkan窗口、处理输入的方法和代码示例;2. 原生平台API:展示了Windows(Win32)、Linux(XCB/Wayland)、macOS/iOS和Android平台的原生API集成方式;3. 音频处理方案:介绍了OpenAL、FMOD等音频库以及移动平台专用音频API的集成方法;4. 最佳实践:提供了交换链管理、输入处理、跨平台开发和错误处理等方面
2026-03-17 07:15:00
610
原创 Using Vulkan -- Window System Integration (WSI)
Vulkan WSI(窗口系统集成)机制通过平台专用扩展实现跨平台表面创建,核心要点包括:1)VkSurfaceKHR对象提供与平台无关的呈现接口,各平台通过特定函数创建(如Android的vkCreateAndroidSurfaceKHR);2)交换链(VkSwapchainKHR)管理可呈现图像队列,支持多种呈现模式;3)移动设备需处理预旋转问题,可通过交换链方向设置或VK_QCOM_render_pass_transform扩展实现,确保显示方向与物理屏幕匹配。Khronos和Google均提供了相关
2026-03-17 07:00:00
344
原创 Using Vulkan -- Queues
Vulkan中的VkQueue管理机制允许应用程序通过命令缓冲区或稀疏绑定提交工作。提交到同一队列的任务按顺序开始但可乱序完成,不同队列间的任务需要显式同步。队列族(QueueFamily)代表具有相同功能属性的队列组,支持图形、计算、传输等不同类型操作。创建设备时会自动生成队列,通过vkGetDeviceQueue获取句柄。多队列可实现并发执行,但单通用队列也完全可行。开发者需根据操作类型选择合适的队列族,规范中每个操作都标明了支持的队列类型。
2026-03-16 07:15:00
434
原创 Using Vulkan - Querying Properties, Extensions, Features, Limits, and Formats -- Formats
本文概述了Vulkan中的格式(VkFormat)及其使用要点。VkFormat主要用于描述内存布局,支持创建VkImage等多种用途。格式特性通过VkFormatFeatureFlagBits表示,不同实现支持程度各异。文章提供了三种查询格式特性的代码示例(Vulkan 1.0/1.1核心API及扩展方式),并分类介绍了颜色、深度/模板、压缩、平面、打包和外部格式。特别说明了深度/模板格式的特殊处理规则,以及多平面格式通过VK_KHR_sampler_ycbcr_conversion扩展的支持情况。所有格
2026-03-16 07:00:00
479
原创 Using Vulkan -- Querying Properties, Extensions, Features, Limits, and Formats -- Enabling Features
摘要:Vulkan特性启用分为三类:Core 1.0特性(VkPhysicalDeviceFeatures)、后续核心版本特性(如Vulkan 1.1/1.2的专用结构体)和扩展特性(VkPhysicalDevice[ExtensionName]Features)。启用方法包括:1) 使用VkDeviceCreateInfo::pEnabledFields启用Core 1.0特性;2) 推荐使用VkPhysicalDeviceFeatures2通过pNext链式传递所有特性(包括扩展特性)。需先用vkGet
2026-03-15 07:00:00
349
原创 Using Vulkan-Querying Properties, Extensions, Features, Limits, and Formats-Using SPIR-V Extensions
SPIR-V是Vulkan使用的着色器中间语言,拥有独立的扩展和能力体系。使用SPIR-V特性需确保:1)相关SPIR-V扩展和能力在Vulkan中可用;2)检查并启用对应的Vulkan扩展和功能;3)确认高级着色语言是否支持配套扩展。以8位存储为例,需启用VK_KHR_8bit_storage或Vulkan 1.2,并检查uniformAndStorageBuffer8BitAccess功能。GLSL通过GL_EXT_shader_8bit_storage扩展提供支持,编译工具会自动生成正确的SPIR-V
2026-03-15 07:00:00
421
原创 Using Vulkan -- Querying Properties, Extensions, Features, Limits, and Formats --Enabling Extensions
本节讲解启用 extensions 的具体流程。
2026-03-14 09:37:05
459
原创 Using Vulkan -- Layers
Layers 是用于增强 Vulkan 系统的可选组件,以共享库形式打包,由 loader 动态加载。它们可以在 Vulkan 函数从应用程序下发到硬件的过程中,对其进行拦截、检查和修改。例如,Vulkan 驱动本身只做极少的错误检查,而可以帮助开发者定位不正确的用法,并验证应用是否正确使用 API。Layer 以共享库形式存在,由 loader 动态加载并插入在 loader 与应用程序之间。Layer 可以被显式启用,也可以被隐式启用。关于隐式与显式 Layer 的更多信息,见。
2026-03-14 09:31:57
499
原创 Using Vulkan -- Loader
Vulkan加载器(VulkanLoader)负责连接应用程序与Vulkan层及驱动,支持自定义实现。应用程序必须链接加载器,可采用编译时直接链接或运行时间接链接两种方式,后者通过动态符号查找实现更灵活的调用。不同平台(VulkanLoader)的加载机制存在差异:Android内置加载器并提供封装接口,Linux/MacOS/Windows则通过VulkanSDK提供预编译版本,各平台具体加载方式详见SDK文档。开源项目Volk可简化运行时的间接链接流程。
2026-03-13 07:57:04
336
原创 Logistics Overview -- Vulkan Decoder Ring
本文提供了Vulkan API术语与其他图形API(GL/GLES、DirectX、Metal)的对应关系表,按Vulkan术语字母顺序排列。该对照表旨在帮助开发者快速查找熟悉API中的概念在Vulkan中的对应术语,但需注意并非所有术语都能完美匹配。表中涵盖了渲染管线、内存管理、同步对象等核心概念,如Vulkan的buffer对应GL的texturebuffer、DirectX的SRV/UAV;commandbuffer对应DirectX的commandlist;descriptorset对应Metal的
2026-03-13 07:00:00
504
原创 Logistics Overview -- Vulkan Validation Overview
摘要:Vulkan通过ValidUsage(VU)明确定义API的有效用法,避免驱动检查带来的性能开销。违反VU会导致未定义行为,各VU条目配有唯一VUID便于定位。验证分为隐式(自动生成)和显式(手动编写)两类。开发时必须使用Khronos验证层(VK_LAYER_KHRONOS_validation)检测错误,但发布时应移除。各平台提供预编译验证层,特殊用途扩展可通过调试回调过滤警告。Vulkan强调显式控制,通过规范化的验证机制确保开发质量。
2026-03-12 07:15:00
476
原创 Logistics Overview -- Development Environments & IDEs
本文详细介绍了Vulkan开发环境的配置方法,涵盖主流IDE(Visual Studio、VSCode、CLion、Xcode、Android Studio)的集成方案。重点讲解了CMake构建系统的配置流程,包括Vulkan SDK路径设置、库文件链接和平台特定配置。同时提供了着色器调试的完整方案,包括RenderDoc集成、验证层配置和厂商专属工具使用方法。文章还总结了跨平台开发的通用原则和最佳实践,为开发者提供了一套完整的Vulkan开发环境配置指南。
2026-03-12 07:00:00
733
原创 Logistics Overview -- Development Tools
本文介绍了Vulkan开发生态中的关键工具和调试技术。重点包括:Khronos维护的VulkanSamples项目,LunarG开发的VulkanSDK及相关工具;Vulkan层的分类与功能,如Khronos验证层和各类调试层;GPU调试工具(RenderDoc、Nsight等)和着色器调试方法;性能分析工具(厂商专属和跨平台工具)及最佳实践。开发者可借助这些工具进行API验证、性能优化和问题排查。
2026-03-11 07:15:00
812
原创 Logistics Overview -- Vulkan CTS
Vulkan一致性测试套件(CTS)是验证Vulkan实现合规性的标准测试工具。通过测试的实现可列入合规产品列表,并允许使用Vulkan名称和徽标。CTS源代码开放,开发者可遵循规范贡献新测试用例。应用程序可通过VK_KHR_driver_properties扩展查询实现通过的CTS版本。合规实现可免费使用Vulkan规范进行产品开发。
2026-03-11 07:00:00
263
原创 Logistics Overview -- Portability Initiative
Khronos集团推出Vulkan可移植性计划,通过VK_KHR_portability_subset扩展规范实现跨平台支持。该计划旨在让Vulkan能在无原生驱动的平台(如MacOS/iOS)上运行,采用分层API方案解决图形API碎片化问题。支持游戏、3D应用、WebGL等场景,通过转换层兼容Vulkan、DirectX等不同API。图表展示了多平台多API的分层实现方案,包括MoltenVK等工具链。Mozilla正通过gfx-rs推动wgpu-hal接口开发,提升跨平台兼容性。
2026-03-10 07:15:00
565
原创 Logistics Overview -- What is SPIR-V
SPIR-V是Vulkan等图形API使用的二进制中间表示格式。Khronos提供了glslang等官方工具链,可将GLSL/HLSL编译为SPIR-V。SPIRV-Tools、SPIRV-Cross等配套工具支持格式转换、反射分析等功能,形成完整的开发生态。该标准不仅支持Vulkan,还能适配多种图形API,通过编译器工具链实现跨平台着色器开发。相关技术资料包括白皮书、开发者日演讲视频等资源。
2026-03-10 07:00:00
460
原创 Logistics Overview -- Vulkan Release Summary
Vulkan 的每个次版本发布,都会将一系列不同的扩展升级为核心功能。这意味着,若应用程序请求的 Vulkan 版本不低于该次版本(且该版本被实现所支持),开发者无需再手动启用相关扩展,即可直接使用其功能。本摘要列出了各核心版本中新增的扩展列表及其新增原因。该列表内容取自 Vulkan 规范,相关链接会跳转至 Vulkan 指南的对应章节。
2026-03-09 07:15:00
526
原创 Logistics Overview -- Vulkan Profiles
VulkanProfiles是一种标准化机制,通过定义统一的特性集(包括扩展、格式和限制)来解决Vulkan生态的碎片化问题。它作为开发基准,能自动启用所需功能,减少设备检测代码,确保应用在不同平台(如Android和桌面设备)的行为一致性。Khronos维护的官方配置文件(如Android Baseline 2022和LunarG Desktop Baseline 2022)提供跨平台支持,同时支持开发者创建自定义配置文件。该机制通过JSON格式定义能力集,与Vulkan版本互补,显著简化开发流程并提升兼
2026-03-09 07:00:00
449
原创 Using Vulkan -- Deprecated
本文档提供了Vulkan API中已废弃特性的回退实现指南,包含设备层、同步标志位、物理设备查询等多项废弃功能的替代方案。主要内容包括:废弃项的功能说明、推荐的现代替代方案、详细的代码示例及兼容性回退策略。文档重点介绍了VK_KHR_synchronization2扩展带来的同步标志位拆分、动态渲染替代传统渲染通道等关键变更,并提供了检查API版本和扩展可用性的实现方法。开发者可通过本文档了解如何在保持向后兼容性的前提下,逐步迁移到更现代的Vulkan特性实现方案。
2026-03-08 10:31:21
439
原创 Logistics Overview -- Vulkan Versions & Porting Guide
Vulkan版本演进与兼容性指南 Vulkan采用主次补丁三级版本体系,目前发布了1.0至1.4五个次版本,各版本保持向后兼容。开发者可通过vkEnumerateInstanceVersion查询系统支持的版本,并需注意实例级与设备级版本可能不同。所有版本共享统一头文件,建议及时更新至最新版本。每个Vulkan版本对应特定的SPIR-V版本要求,如1.3支持SPIR-V1.6。版本迭代中会将扩展升级为核心功能,开发者应注意结构体/函数命名的变化(如VkPhysicalDeviceFeatures2KHR变为
2026-03-08 07:15:00
852
原创 Logistics Overview -- Checking For Vulkan Support
Vulkan 需要同时具备(Vulkan 加载器)和 Vulkan Driver(Vulkan 驱动程序,也称为 Vulkan 实现)。驱动程序负责将 Vulkan API 调用转换为有效的 Vulkan 具体实现。最常见的场景是 GPU 硬件厂商发布驱动程序,用于在物理 GPU 上运行 Vulkan。需要注意的是,也可以实现纯软件版的 Vulkan,但这会对性能造成显著影响。检查 Vulkan 支持情况时,区分和至关重要。
2026-03-08 07:00:00
417
原创 Logistics Overview -- Platforms
Vulkan跨平台支持情况概览:Vulkan可在Android(7.0+)、Linux、Windows(7+)等主流平台运行,其中Android 10+的64位设备强制要求Vulkan 1.1驱动。iOS和macOS虽无原生支持,但可通过Vulkan Portability Tools适配。任天堂Switch等设备也原生支持Vulkan。不同平台通过特定机制(如Android的HAL层)管理Vulkan实现,部分嵌入式系统也提供了支持。
2026-03-07 07:15:00
132
原创 Logistics Overview -- Vulkan Specification
Vulkan规范是Vulkan API的官方技术文档,提供多种版本和格式选择。开发者可以基于不同Vulkan版本和扩展组合构建自定义规范变体,其中核心版本是最基础的功能集。规范提供HTML和PDF两种主要格式,可通过Khronos官网或Vulkan SDK获取。从1.4版本开始,官方推出持续更新的latest版本规范。建议开发者尽早并频繁查阅这份权威参考资料,以正确使用Vulkan API。
2026-03-07 07:00:00
310
原创 Logistics Overview -- What Vulkan Can Do
Vulkan是一款多功能图形API,支持多种应用场景开发。其核心功能包括2D/3D图形渲染(Graphics)和通用计算(Compute),所有实现必须支持这两项功能。此外,Vulkan还提供光线追踪(Ray Tracing)扩展、视频编解码(Video)功能,并正在探索机器学习(Machine Learning)应用。针对安全关键领域,Vulkan还推出了精简强化的VulkanSC版本。开发者可根据需求灵活选择功能组合,Vulkan的设计理念是提供一套完整且可定制的工具集,支持多种硬件加速应用的开发。
2026-03-06 22:14:35
309
原创 Logistics OverviewWhat is Vulkan?
Vulkan是Khronos Group开发的跨平台图形计算API,提供对现代GPU的高效访问。作为显式API,Vulkan比OpenGL给予开发者更精细的硬件控制权,但开发复杂度更高。其核心是开放规范的API Specification,配套提供C99头文件及多语言绑定支持。开发中常配合辅助库简化流程,官方学习资源包括Vulkan Guide和基础教程。Vulkan适合追求性能优化的开发者,同时保留了跨平台兼容性。
2026-03-06 22:10:07
441
1
原创 OpenGL Shading Language Specification -- Non-Normative SPIR-V Mappings
本文对比了Vulkan与OpenGL在SPIR-V使用中的功能差异,重点分析了移除、保留和新增的特性。Vulkan移除了OpenGL部分功能(如子程序、兼容模式特性),同时引入了推送常量、描述符集等新功能。详细阐述了GLSL到SPIR-V的映射规则,包括专用常量声明、资源绑定方式、存储类转换等核心机制。特别说明了Vulkan特有的功能实现方式,如子pass输入通过input_attachment_index装饰实现,以及原子操作、屏障等指令的SPIR-V对应表示。通过系统化的功能对比和映射说明,为图形编程人
2026-03-05 07:30:00
479
原创 OpenGL Shading Language Specification -- Normative References
1.国际标准 ISO/IEC 14882:1998 (E)《程序设计语言 ——C++》,仅为预处理器部分引用。,发布日期:2022 年 9 月 1 日1.,发布日期:2016 年 11 月 3 日。,发布日期:2016 年 6 月 1 日。
2026-03-05 07:00:00
307
原创 OpenGL Shading Language Specification -- Shading Language Grammar
摘要:本文详细定义了OpenGL着色语言(OpenGL Shading Language)的语法规则,包括词法分析输出的各类Token(如数据类型、操作符、关键字等)及其对应的语法结构。语法规则涵盖了表达式、语句、函数定义、变量声明等核心语言要素,特别说明了GLSL不支持指针、goto语句等特性,但包含向量运算、矩阵操作等图形编程专用语法。该语法规范构成了GLSL的超集,部分语法结构可能被规范其他章节禁用。
2026-03-04 07:30:00
445
原创 OpenGL Shading Language Specification -- Shading Language Grammar
本文摘要介绍了OpenGL着色语言(GLSL)的语法规则,包括词法分析输出的记号类型和语法结构。主要内容涵盖:1)基本表达式和操作符;2)变量声明和函数定义;3)数据类型和修饰符;4)控制流语句;5)着色器结构。该语法定义了从简单表达式到完整着色器程序的构建规则,但某些语法结构可能在其他规范中被禁用。值得注意的是,GLSL不支持指针、枚举、typedef和goto语句等特性。
2026-03-04 07:00:00
635
原创 OpenGL Shading Language Specification -- Built-In Functions
GLSL着色器语言内置函数详解 摘要:本文概述了OpenGL着色器语言(GLSL)的内置函数体系,主要分为三类:1)硬件功能接口函数,如纹理访问;2)高频简单运算函数,如clamp/mix;3)硬件加速运算函数,如三角函数。内置函数支持向量化运算,优于用户实现,可通过函数重载覆盖。文章详细介绍了角度/三角函数、指数函数、通用函数、几何函数等核心功能,并说明其精度处理规则。特别阐述了纹理函数的分层访问机制、原子操作函数的内存同步特性,以及导数函数的差分计算原理。最后介绍了着色器控制函数的内存屏障机制和实例同步
2026-03-03 07:30:00
1501
原创 OpenGL Shading Language Specification -- Built-In Variables
本文摘要: OpenGL着色语言规范详细介绍了各类着色器的内置变量和状态管理机制。顶点着色器通过gl_Position等变量输出顶点坐标和属性;细分着色器使用gl_TessLevelOuter等变量控制细分级别;几何着色器通过gl_Layer实现分层渲染;片元着色器利用gl_FragCoord处理窗口坐标。兼容配置文件额外提供固定功能管线变量如gl_ModelViewMatrix等。规范还定义了各类着色器的最大限制常量,并说明如何通过重新声明gl_PerVertex块来定制接口。这些机制共同构成了OpenG
2026-03-03 07:00:00
1311
原创 OpenGL Shading Language Specification -- Statements and Structure
本文详细介绍了OpenGL着色语言(GLSL)的核心语法结构。主要内容包括:1.基础构建块:语句、函数定义、选择结构(if/switch)、循环结构(for/while/do)和跳转语句(return/break等);2.函数机制:定义规范、参数限定符(in/out/inout)、重载规则及调用约定;3.子例程系统:通过subroutine实现运行时函数切换;4.流程控制:条件选择、各类循环结构及跳转语句的特殊行为。特别强调了片元着色器中discard语句的独特作用,以及函数参数传递、返回值处理的详细规则。
2026-03-02 07:30:00
705
原创 OpenGL Shading Language Specification -- Operators and Expressions
本文详细介绍了OpenGL着色器语言(OpenGL Shading Language)的运算符体系与类型操作规则。主要内容包括:1) 运算符优先级表,涵盖算术、逻辑、位运算等各类运算符;2) 类型转换规则,包括标量、向量、矩阵间的显式/隐式转换;3) 向量和矩阵的分量访问方式,包括分量命名体系、重组操作和length()方法;4) 结构体和数组的特殊操作限制;5) 赋值与表达式求值规则;6) 向量矩阵运算的分量级特性与线性代数例外;7) 越界访问的处理方式;8) Vulkan特有的特化常量运算规则。全文系统
2026-03-02 07:00:00
694
原创 OpenGL Shading Language Specification -- Variables and Types
本文摘要: OpenGL着色语言(GLSL)规范详细定义了变量声明、类型系统和内存管理等核心机制。主要特点包括:1)严格类型安全,所有变量和函数必须预先声明类型;2)支持基础类型(标量/向量/矩阵)、不透明类型(采样器/图像)及用户自定义结构体;3)数组支持显式/隐式大小声明,内存布局遵循列优先原则;4)变量可附加存储限定符(const/in/out等)和内存限定符(coherent/volatile等);5)通过layout限定符控制接口布局,支持变换反馈和特化常量;6)精度限定符在Vulkan目标下影响
2026-03-01 22:12:28
714
现代计算机图形学入门-Games101课件
2024-04-16
WEBGL英文原版教程
2013-08-23
PaaS云计算系统仿真平台及其数据库子系统的设计与实现
2012-10-31
齿轮设计WebCAD系统中STEP标准的应用_孙磊
2013-08-23
jQuery即学即用
2012-10-31
opengl编程指南
2013-07-02
空空如也
TA创建的收藏夹 TA关注的收藏夹
TA关注的人
RSS订阅