- 博客(756)
- 资源 (22)
- 收藏
- 关注
原创 驱动开发系列94 - X Display 与 GLX Display Context 以及vkDevice的关系
该架构展示了多个XDisplay(XDisplayA/B/C)通过glx_display管理GLX上下文,每个上下文关联ZinkScreen,进而创建VkDevice并访问VRAM。glx_display统一管理所有glx_display实例,glx_all_contexts则维护所有GLXContext及其关联关系,实现OpenGL与Vulkan的桥接与资源调度。
2026-09-15 11:33:38
102
原创 渲染引擎实践 - UGameEngine 创建与 Tick调用过程
是 commandlet 路径:跑 commandlet 时主循环不走 FEngineLoop::Tick,而是由 commandlet 自己驱动引擎 tick。补充:commandlet 情况在 PreInit 阶段会让 commandlet 先。另外你在 Commandlet.cpp:84 看到的。),只有它没创建才走上面的默认创建。
2026-08-27 09:44:59
45
原创 渲染引擎实践 - UnrealEngine Render 介绍
介绍UnrealEngine Renderer 模块,这个模块的(只有约 40 个头文件,供其他模块 include)。真正的渲染算法实现在同级的目录(123 个 cpp + 几十个子目录)。下面分两部分介绍。
2026-08-24 21:15:17
67
原创 OpenGL进阶24 - 利用有向面积判断三角形朝向及其公式推导
GPU图形渲染中的背面剔除(Backface Culling)通过计算三角形的有向面积(Signed Area)来判断其朝向,而无需计算法线。利用顶点坐标的行列式或叉积公式,有向面积的符号决定了三角形的绕序(CW/CCW),从而区分正面和背面。这种方法高效且适合硬件实现,是图形管线中的基础优化技术。
2026-07-16 22:09:45
78
原创 C++ STL 容器使用的底层数据结构
STL容器底层数据结构及操作复杂度对比:vector基于动态数组,支持O(1)随机访问,尾部插入高效;array为静态数组,不支持扩容。deque采用分段连续存储,两端操作均为O(1)。list为双向链表,插入删除O(1)但查找慢。关联容器set/map使用红黑树实现,操作均为O(logn);无序容器unordered_*基于哈希表,平均O(1)操作。stack/queue默认基于deque实现,priority_queue采用二叉堆,取最大值O(1),插入删除O(logn)。不同容器根据场景选择,平衡访问
2026-07-15 17:28:37
246
原创 渲染引擎实战 - Unreal Engine 5 GPU 性能瓶颈调试方法
本文介绍了在UnrealEngine中分析GPU性能瓶颈的系统方法。首先通过statunit命令区分CPU/GPU瓶颈,若GPU时间显著则确定为GPU瓶颈;其次用statgpu查看各渲染阶段耗时,再通过profilegpu在GPUVisualizer中展开层级结构精确定位耗时节点;建议配合功能开关进行A/B测试验证(如关闭Lumen观察耗时变化);最后推荐使用UnrealInsights工具进行底层分析,通过命令行或运行时开启trace记录CPU/GPU事件,生成.utrace文件进行时间轴分析。该方案提供
2026-07-15 02:30:29
178
原创 Vulkan进阶系列23 - 在 Windows 上编译运行 Vulkan Samples
VulkanSamples是由Khronos维护的开源Vulkan示例集合,包含从基础API使用到高级特性的完整示例(如Compute、RayTracing等),采用C++编写并基于现代Vulkan标准实现。该项目既可作为开发者的学习资料,又能用于验证GPU驱动和硬件平台功能。使用Git克隆代码后,通过CMake进行编译,运行示例程序即可查看效果。示例展示了Vulkan核心功能模块的实现,包括Buffer创建、Pipeline构建、Shader编译、CommandBuffer管理以及CPU/GPU同步机制等
2026-07-13 20:41:19
92
原创 OpenCL 1.0 ~ 3.0 API 一览
本文系统整理了OpenCL API的功能分类与版本信息,主要包含15类核心API:1.平台/设备管理(获取平台设备信息);2.上下文管理(创建/释放计算上下文);3.命令队列管理(任务调度);4.内存对象管理(Buffer/Image操作);5.采样器管理;6.程序编译管理;7.内核管理;8.内核执行;9.内存拷贝/映射;10.事件同步;11.队列同步;12.共享虚拟内存(SVM);13.图形API互操作(GL/EGL/DX);14.计时器功能。各API均标注了其初始支持的OpenCL版本,并说明核心功能,
2026-07-12 13:38:37
401
原创 Vulkan进阶系列22 - Vulkan Surface API 一览
Vulkan Surface API 提供了跨平台的窗口系统集成方案,主要包含四类功能:基础Surface管理(销毁、能力查询)、窗口系统适配(Wayland/XCB/Xlib)、直接显示控制(Display/Headless模式)和多GPU支持。其调用流程从实例创建开始,经过物理设备选择、Surface支持检测,最终实现图像呈现。在Linux系统中,Vulkan通过不同扩展对接Wayland、X11或直接调用DRM/KMS驱动,由WSI层桥接窗口系统与GPU驱动,最终通过内核显示控制器输出到显示器。该AP
2026-07-12 00:50:25
60
原创 Vulkan进阶系列21 - Vulkan 1.1 API 一览
本文汇总了30个关键Vulkan API的功能分类,涵盖实例管理、内存操作、多GPU支持、计算调度、设备查询、资源优化等多个方面。重点包括:vkEnumerateInstanceVersion查询实例版本、vkBindBufferMemory2/vkBindImageMemory2增强内存绑定、多GPU相关API(如vkCmdSetDeviceMask)、计算优化(vkCmdDispatchBase)、设备属性查询增强版(如vkGetPhysicalDeviceProperties2)、内存管理(vkTri
2026-07-11 23:58:44
97
原创 Vulkan进阶系列20 - Vulkan 1.0 API 一览
本文系统整理了Vulkan API的核心功能分类及对应接口,内容涵盖物理设备查询、逻辑设备管理、队列控制、内存操作、同步机制、资源创建与管理、着色器管线、渲染流程和命令缓冲等关键模块。其中物理设备查询接口(如vkGetPhysicalDeviceProperties)可获取GPU硬件信息;资源管理部分包含缓冲区和纹理的创建/绑定;管线控制涉及着色器模块和渲染流程配置;命令缓冲模块详细记录了绘制、计算和数据传输等GPU操作指令。这些接口共同构成了Vulkan图形API的底层硬件抽象层,为高性能图形渲染和通用计
2026-07-11 23:40:46
176
原创 Vulkan进阶系列19 - vkCmdBeginRenderPass 和 vkCmdBeginRendering 差异
本文对比了Vulkan中vkCmdBeginRenderPass()和vkCmdBeginRendering()两种渲染机制的差异。传统vkCmdBeginRenderPass()需要预创建RenderPass和Framebuffer对象,实现图形管线与渲染过程的强绑定,利于Tile-Based GPU的深度优化但灵活性不足。而Vulkan 1.3引入的vkCmdBeginRendering()采用动态渲染机制,运行时直接指定附件信息,解耦了管线与渲染目标,更符合现代渲染引擎的RenderGraph工作流,
2026-07-09 16:54:19
266
原创 Vulkan进阶系列18 - Vulkan 中的同步机制 Barrier 介绍
Vulkan中的PipelineBarrier(管线屏障)是GPU同步机制的核心组件,承担着执行同步、内存同步和资源状态转换三大职责。作为"交通管制员",它明确规定了GPU操作的执行顺序、内存可见性以及资源状态的转换时机,确保数据竞争不会发生。与OpenGL不同,Vulkan需要开发者手动管理这些依赖关系。Barrier通过控制执行顺序(Execution Dependency)保证操作前后顺序,通过内存同步(Memory Dependency)确保数据真正写入内存,同时完成资源状态转换
2026-07-09 16:39:26
261
原创 Vulkan进阶系列17 - Vulkan 中的同步机制 Fence 介绍
本文详细介绍了Vulkan渲染一帧时的完整同步机制。关键点包括:1)使用三种同步对象:Semaphore(GPU内部同步)和Fence(CPU-GPU同步);2)为每个SwapchainImage分配独立资源(Fence、CommandPool、CommandBuffer);3)三个核心操作及其同步:Acquire操作(PresentationEngine→GraphicsQueue)、QueueSubmit(GraphicsQueue→PresentationEngine)、Fence检查(GPU→CPU
2026-07-09 15:51:41
60
原创 Vulkan进阶系列16 - Vulkan 中的同步机制 Semaphore 介绍
Vulkan渲染流程中的Semaphore同步机制通过acquire和release两个信号量实现GPU内部有序执行:acquire_semaphore由显示引擎在图像可用时触发,确保图形队列不会过早写入;release_semaphore由图形队列在渲染完成后触发,防止显示器读取未完成帧。这两个信号量形成闭环同步链,实现显示引擎与图形队列的安全协作,而CPU-GPU同步则通过Fence实现。该机制有效避免了资源竞争和画面撕裂问题。
2026-07-09 15:24:45
71
原创 驱动开发系列93 - mutex
如果你尝试获取一个已经被其他任务持有的 mutex,那么当前任务会被挂起,只有在该 mutex 被释放时才会被唤醒。不过,从中我们可以看到,互斥锁(mutex)是构建在自旋锁(spinlock)之上的。如果 mutex 处于空闲(未加锁)状态,你的任务会立即获得该锁,而不会进入睡眠。在前面的代码片段中,mutex_trylock() 与 if 语句一起使用,从而使驱动程序能够根据获取锁的结果来调整自身的行为。但是,如果该 mutex 已经被其他任务持有,它不会进入睡眠等待,而是会立即返回 0。
2026-04-21 20:14:39
159
原创 驱动开发系列91 - Mesa Zink renderpass 分析
本文摘要了Vulkan渲染相关的关键接口和流程。主要介绍了vkCreateRenderPass2/vkDestroyRenderPass等创建销毁RenderPass的接口,以及vkCmdBeginRenderPass等命令缓冲区操作。详细解析了RenderPass的创建过程,包括状态管理、哈希缓存机制和完整调用链。同时介绍了VK_KHR_dynamic_rendering扩展,该扩展允许动态指定渲染附件而无需预定义RenderPass,是Vulkan 1.3+的推荐方式。文章还分析了zink驱动中的相关实
2026-04-21 19:14:48
343
原创 驱动开发系列90 - Mesa Zink kopper 分析
即:X11 → XCB → Surface → Swapchain → Zink → Vulkan Queue → GPU → Present。把一组渲染附件(color/depth 的 image view)打包成一个可渲染目标,即创建/销毁可渲染目标容器。查询这个Surface(窗口)在创建 swapchain时有哪些 ”硬件能力和限制“把一个X11(XCB)窗口变成Vulkan可以渲染的“Surface”查询这个 Surface (窗口)支持哪些 “显示方式”4. 选择queue family。
2026-04-21 19:13:20
208
原创 驱动开发系列89 - Mesa Zink context 分析
本文摘要:文章介绍了Vulkan API的关键功能和相关数据结构。第一部分列举了12个核心API,包括缓冲区视图创建、采样器管理、渲染控制、数据传输和同步操作等。第二部分重点解析了zink_context数据结构,这是Zink驱动中的核心上下文对象,负责管理渲染状态、命令提交、资源绑定和管线状态。它整合了Vulkan的命令缓冲、管线状态和描述符绑定功能,是实现OpenGL到Vulkan转换的关键组件。第三部分简要说明了从GL调用到Vulkan命令的执行流程,展示了zink_context在绘制过程中的协调作
2026-04-21 19:11:48
140
原创 驱动开发系列88 - Mesa Zink bo 与 resource 分析
本文介绍了Vulkan API中GPU内存管理的核心接口和使用流程。主要包括三类操作:1)内存管理API(分配/释放、映射/解映射);2)资源创建与绑定API(Buffer/Image的创建、视图管理、内存绑定);3)查询与同步API(格式支持查询、内存需求获取、数据同步)。典型使用流程为:查询设备能力→创建资源→分配并绑定内存→可选CPU映射→GPU使用→数据同步→资源共享→资源销毁。关键点包括稀疏内存绑定、YUV-RGB转换、内存导出为文件描述符等特性,体现了Vulkan细粒度控制GPU内存的特点。
2026-04-21 19:09:59
125
原创 驱动开发系列87 - Mesa Zink Batch 与 Fence 分析
如果当前 ctx->batch.state 为空,则创建 3 个备用的 state。vkAllocateCommandBuffers 从命令池分配一个或多个命令缓冲区,vkFreeCommandBuffers 则将这些命令缓冲区返回给命令池并释放它们。向GPU提交命令,是在 zink_flush -> flush_batch -> zink_end_batch 时调用的。也是在在 zink_flush -> flush_batch -> zink_end_batch 时调用的。
2026-04-20 18:52:22
232
原创 驱动开发系列92 - spinlock
摘要:自旋锁是一种基于硬件原子操作的锁机制,主要用于多核系统保护共享资源。其工作原理是CPU通过循环等待获取锁,期间会禁用本地CPU的抢占。文章详细介绍了自旋锁的创建方式(静态定义和动态初始化)、基本操作函数(spin_lock/spin_unlock)及其变种(_irq和_irqsave版本),分析了中断处理可能导致的死锁问题及解决方案。同时指出自旋锁的局限性:持有锁时不能睡眠,且临界区并非完全原子性。文章还阐述了自旋锁与调度器(preempt_count)的交互机制,强调了正确使用自旋锁的注意事项。
2026-04-16 20:44:31
301
原创 驱动开发系列86 - Mesa Zink Query 分析
本文介绍了Vulkan查询接口和Zink查询实现。主要内容包括:1) Vulkan查询接口如vkCreateQueryPool、vkBeginQuery等,支持遮挡查询、时间戳记录等操作;2) Zink查询结构体设计,包含线程上下文支持、查询池管理等;3) 多种查询类型详解,包括遮挡查询(PIPE_QUERY_OCCLUSION_)、时间查询(PIPE_QUERY_TIMESTAMP_)、流输出统计(PIPE_QUERY_SO_*)和管道统计(PIPE_QUERY_PIPELINE_STATISTICS)等
2026-04-16 20:23:37
286
原创 C++ vscode 常用插件
1. One Dark Pro 经典皮肤,对比度高,结构清晰,适合C/C++代码。2. Git Graph 3. Git History 4. GitLens 5. Indent-rainbow 彩虹缩进
2026-04-14 15:40:11
198
原创 Vulkan进阶系列15 - Vulkan 1.2 核心化扩展一览
Vulkan扩展功能摘要 Vulkan API通过一系列扩展功能增强图形处理能力,主要包括: 计算优化:支持8位/16位数据类型(VK_KHR_8bit_storage/shader_float16_int8)和64位原子操作,提升AI推理效率; 内存管理:改进buffer访问(VK_KHR_buffer_device_address)、描述符索引和内存布局优化; 渲染增强:新增renderpass接口、MSAA深度处理和多视口控制; 同步机制:引入时间线信号量(VK_KHR_timeline_semaph
2026-04-14 12:45:56
106
原创 linux内核 - 常用的性能分析命令
这篇文章介绍了5个常用的Linux系统监控命令:1) uptime查看系统运行时间和负载;2) dmesg显示内核日志,包括硬件信息和错误;3) vmstat以MB为单位显示系统整体状态;4) mpstat监控每个CPU核心的使用情况;5) pidstat实时监控各进程的CPU、内存和IO使用情况。这些命令通过不同的参数选项(如时间格式转换、单位指定、刷新频率等)提供了灵活的系统监控方式,帮助管理员全面了解系统运行状态。
2026-04-14 02:03:37
109
原创 Vulkan进阶系列14 - Vulkan 1.3 核心化扩展一览
Vulkan扩展功能摘要:核心扩展包括VK_KHR_copy_commands2统一拷贝命令接口,VK_KHR_dynamic_rendering简化渲染管线,以及VK_KHR_synchronization2优化同步机制。关键性能扩展涉及VK_KHR_shader_integer_dot_product提升计算效率,VK_EXT_extended_dynamic_state系列减少pipeline重建开销。格式支持扩展如VK_EXT_4444_formats和VK_EXT_ycbcr_2plane_444
2026-04-13 14:22:06
304
原创 AI文章阅读 - 大语言模型介绍
人类正处于一个深刻的技术变革阶段。自 2012 年以来,基于深度神经网络的人工智能系统持续快速发展,并在 2010 年代末取得关键突破,催生了能够生成类人文本的模型,如 GPT-2。到了 2022 年,ChatGPT 的发布成为重要里程碑,它不仅展示了语言模型的强大能力,也彻底改变了人们与计算机交互的方式。在短时间内实现大规模用户增长之后,这类模型迅速从简单的对话工具,发展为能够支持编程、写作、翻译、推理以及多模态交互的通用智能助手。
2026-04-13 00:37:04
1015
原创 Vulkan进阶系列13 - VK_KHR_timeline_semaphore 介绍
是 Vulkan 中用于改进同步机制的一个重要扩展,它引入了“时间线信号量(timeline semaphore)”这一更高级、更灵活的同步原语。该扩展的设计初衷,是为了解决传统 Vulkan 同步模型中使用二值信号量(binary semaphore)和栅栏(fence)时所面临的复杂性和可扩展性问题。在传统机制中,二值信号量只有“未触发”和“已触发”两种状态。每一个 GPU 提交(submission)通常需要一个或多个信号量来表示依赖关系,例如一个提交完成后触发信号量,另一个提交再等待该信号量。
2026-04-12 23:38:00
198
原创 驱动开发系列85 - Mesa Zink 绘制流程分析
摘要:Mesa图形库中_mesa_Flush函数实现了OpenGL的glFlush操作。该函数首先获取当前GL上下文并检查不在glBegin/glEnd块中,然后调用内部_mesa_flush函数。_mesa_flush会根据上下文是否包含外部共享图像决定采用异步或同步方式,先通过FLUSH_VERTICES刷新顶点缓存,最后调用底层驱动接口st_glFlush完成命令提交,其中异步模式(PIPE_FLUSH_ASYNC)符合OpenGL规范不等待完成的语义。
2026-04-11 09:52:30
447
原创 Vulkan进阶系列12 - Vulkan 1.4 核心化扩展一览
本文总结了15个Vulkan扩展功能及其应用场景。主要包括:动态渲染读取附件(VK_KHR_dynamic_rendering_local_read)、队列优先级控制(VK_KHR_global_priority)、8位索引支持(VK_KHR_index_type_uint8)、线光栅化统一(VK_KHR_line_rasterization)等图形功能优化;以及内存管理(VK_KHR_map_memory2)、描述符绑定(VK_KHR_push_descriptor)、Shader优化(VK_KHR_sh
2026-04-09 13:51:21
115
原创 linux内核 - request_irq 介绍
GPU通过触发IRQ中断通知CPU任务完成,Linux内核使用request_irq注册中断处理函数到IRQ映射表。当GPU触发中断时,内核查找并执行对应的处理函数。示例代码展示了如何注册共享中断处理程序,包括定义ISR函数、调用request_irq注册中断,以及使用free_irq释放中断。共享中断允许多个设备共用同一IRQ号,需在ISR中区分设备来源。关键步骤包括中断状态判断和清除中断标志。
2026-04-09 00:11:14
169
原创 linux内核 - 判断PCI总线 IOMMU 接口是否可用
Linux内核提供了iommu_present函数用于检测指定总线类型是否支持IOMMU。该函数接收一个bus_type指针参数(如&pci_bus_type),返回布尔值表示该总线是否已启用IOMMU支持。开发者可通过此函数判断是否可以使用IOMMU相关API进行DMA映射等操作,或需要回退到直接物理地址访问方式。典型应用场景包括PCI设备驱动中根据IOMMU支持情况选择不同的内存访问策略。
2026-04-07 23:15:52
207
原创 ubuntu 设置windows风格任务栏
gsettings set org.gnome.shell.extensions.dash-to-dock dock-position 'BOTTOM'gsettings set org.gnome.shell.extensions.dash-to-dock dash-max-icon-size 32
2026-04-02 15:22:32
96
原创 驱动开发系列84 – Mesa NIR 编译器各个 pass 功能介绍
本文介绍了NIR(Nouveau Intermediate Representation)编译器的九种关键优化技术:1)变量初始化拆分;2)返回语句结构化转换;3)函数内联;4)指针访问优化;5)变量SSA转换;6)死变量消除;7)拷贝传播;8)死代码消除;9)公共子表达式消除。这些优化技术通过简化控制流、消除冗余计算、优化内存访问等方式,显著提升中间代码的执行效率,涵盖了从变量处理到代码结构优化的完整编译流程。
2026-03-28 15:11:37
179
原创 驱动开发系列83 – CPU到设备的可见性问题(memset、memcpy与内存屏障)
在普通应用开发中,memset 和 memcpy 可以安全地操作内存。但在驱动开发中(尤其是GPU驱动开发中),这种假设不成立。原因在于CPU写入不等于设备(GPU)立即可见。写入问题主要出现在以下场景:(1)写设备内存(MMIO和显存)。(2)写uncached/write-combine内存。(3) ARM64 等弱内存模型架构。这些场景下如果memset,memcpy使用不当,会出现GPU读取到旧数据,命令缓冲区执行异常以及偶现(极难复现)的bug。
2026-03-28 06:43:26
288
OpenGL Programming Guide (Red Book) 9th Edition Source Code
2024-10-07
Learn LLVM 17 A beginners guide to learnin - Kai Nacke.pdf
2024-07-08
Power and Performance Software Analysis and Optimization pdf
2024-04-09
计算机图形学经典书籍资料-建模部分
2014-11-06
计算机图形学经典书籍资料-渲染部分
2014-11-06
空空如也
TA创建的收藏夹 TA关注的收藏夹
TA关注的人
RSS订阅
3