wgpu v25.0.0 发布
wgpu 是一个用于 WebGPU 的跨平台图形和计算 API,它为开发者提供了一个高效且一致的接口,用于在不同的图形后端(如 Vulkan、Metal、DirectX 12、WebGL 等)上进行图形渲染和计算操作。
- 重大特性
- API 移除 HashMap:
PipelineCompilationOptions::constants
和ShaderSource::Glsl::defines
采用键值对切片替代 HashMap,为no_std
支持做准备。 - 所有后端具备特性:Vulkan 和 GLES 后端可禁用,开启 WebGL 特性时,仅在 WebAssembly 使用 GLES 后端。
device.poll
API 重构:显著修改轮询 API,轮询超时时返回错误,重新命名并修改返回结果。wgpu::Device
方法变更:start_capture
重命名为start_graphics_debugger_capture
并设为不安全方法,添加文档说明。- 确保着色器循环有界:确保 SPIR - V 和 HLSL Naga 后端生成的着色器循环有界,可通过
Device::create_shader_module_trusted()
禁用。 - 内部特性拆分:内部拆分
Features
结构体,使用宏重组,不造成破坏式更改。 - WebGPU 兼容双源混合特性:遵循 WebGPU 规范实现官方语法,更新现有着色器,GLSL 着色器支持双源混合。
- 统一 SPIR - V 着色器接口:用通用
create_shader_module_passthrough
函数替代create_shader_module_spirv
函数。 - 无操作后端:无 GPU 时可创建虚拟 wgpu 设备,用于测试图形资源管理代码。
SHADER_F16
特性:Naga 着色器支持该特性,可在多种着色器中使用f16
。
- API 移除 HashMap:
- 新特性
- 通用:为
Buffer
添加对应方法,增加StagingBelt::allocate()
等多个功能。 - Naga:支持无符号类型、
@must_use
属性等多项功能。 - 示例:添加处理大数据集的示例。
- 通用:为
- 变更
- 通用:
wgpu::Instance::request_adapter()
返回Result
类型,支持 BLAS 压缩等。 - Naga:IR 类型移至
naga::ir
模块,重构use
语句等。 - Vulkan:支持 HAL 队列回调。
- 通用:
- 错误修复
- Naga:修复函数验证、结构体字段命名等问题。
- 通用:修复加速结构构建、查询集边界检查等错误。
- Vulkan:避免射线查询未命中时的未定义行为。
- Gles:支持 OpenHarmony 渲染。
- Dx12:修复 HLSL 存储格式生成、3D 存储纹理绑定等问题。
- WebGPU:提高只读缓冲区映射丢弃效率。
Github 仓库:https://github.com/gfx-rs/wgpu
使用 Rust GPU 将 Shadertoy 着色器移植到 Rust
本文介绍了使用 Rust GPU 将一些流行的 Shadertoy 着色器移植到 Rust 的过程及成果:
- Rust GPU 简介:Rust GPU 项目允许用 Rust 语言为 GPU 编写代码,编写的程序可编译成多数 GPU 能理解的 SPIR - V 格式,便于集成到 Vulkan 兼容的工作流程中。
- CPU 与 GPU 代码共享:使用 Rust 可无缝实现 CPU 和 GPU 间的数据共享,借助 bytemuck crate 可轻松完成数据结构定义,很多
no_std
+no_alloc
的 Rust crate 可在 GPU 上使用。 - 特性支持
- 特性(Traits):用于封装着色器特定操作,实现可复用的抽象。
- 泛型(Generics):大多能正常工作,可支持多种通道类型而无需重复逻辑。
- 宏(Macros):能正常使用,可减少重复代码。
- 标准 Rust 工具:可使用如
cargo check
、cargo build
等标准 Rust 工具进行着色器的类型检查、构建等操作,这是 Rust GPU 的一大优势。 - 对生态系统的贡献:在移植着色器过程中,发现并修复了 wgpu 和 naga 中的一些问题,如处理 SPIR - V 时的恐慌、针对 Metal 的某些着色器文字的错误翻译等,惠及所有使用这些库的开发者。
原文:https://rust-gpu.github.io/blog/2025/04/10/shadertoys/
Shadertoy: https://www.shadertoy.com/
Rust GPU: https://github.com/Rust-GPU/rust-gpu/
研究:用于 Rust 的 GC
Rust 语言缺乏垃圾回收(GC)机制,在表达共享所有权数据结构时存在不便。本文提出了一种新的 Rust 语言 GC 设计及实现 ——Alloy,它将现有 Rust 析构函数映射为析构器,解决了传统 GC 在 Rust 中面临的一些问题,如 API 设计和终结器相关难题。Alloy 基于 Boehm-Demers-Weiser GC(BDWGC)进行开发,通过一系列技术手段,包括终结器省略、防止过早终结、终结器安全分析等,提升了 GC 的性能和安全性。性能评估实验表明,Alloy 在运行少量终结器时与其他内存分配方式性能相似,且随着代码库中使用 Gc<T>
类型的比例增加,其性能开销呈下降趋势。
原文:https://arxiv.org/html/2504.01841v2
--
From 日报小组 Yuan YQ
社区学习交流平台订阅:
评论区
写评论还没有评论