< 返回版块

Yuan YQ 发表于 2025-04-11 10:47

wgpu v25.0.0 发布

wgpu 是一个用于 WebGPU 的跨平台图形和计算 API,它为开发者提供了一个高效且一致的接口,用于在不同的图形后端(如 Vulkan、Metal、DirectX 12、WebGL 等)上进行图形渲染和计算操作。

  1. 重大特性
    • API 移除 HashMapPipelineCompilationOptions::constantsShaderSource::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
  2. 新特性
    • 通用:为 Buffer 添加对应方法,增加 StagingBelt::allocate() 等多个功能。
    • Naga:支持无符号类型、@must_use 属性等多项功能。
    • 示例:添加处理大数据集的示例。
  3. 变更
    • 通用wgpu::Instance::request_adapter() 返回 Result 类型,支持 BLAS 压缩等。
    • Naga:IR 类型移至 naga::ir 模块,重构 use 语句等。
    • Vulkan:支持 HAL 队列回调。
  4. 错误修复
    • Naga:修复函数验证、结构体字段命名等问题。
    • 通用:修复加速结构构建、查询集边界检查等错误。
    • Vulkan:避免射线查询未命中时的未定义行为。
    • Gles:支持 OpenHarmony 渲染。
    • Dx12:修复 HLSL 存储格式生成、3D 存储纹理绑定等问题。
    • WebGPU:提高只读缓冲区映射丢弃效率。

Github 仓库:https://github.com/gfx-rs/wgpu

使用 Rust GPU 将 Shadertoy 着色器移植到 Rust

本文介绍了使用 Rust GPU 将一些流行的 Shadertoy 着色器移植到 Rust 的过程及成果:

  1. Rust GPU 简介:Rust GPU 项目允许用 Rust 语言为 GPU 编写代码,编写的程序可编译成多数 GPU 能理解的 SPIR - V 格式,便于集成到 Vulkan 兼容的工作流程中。
  2. CPU 与 GPU 代码共享:使用 Rust 可无缝实现 CPU 和 GPU 间的数据共享,借助 bytemuck crate 可轻松完成数据结构定义,很多 no_std + no_alloc 的 Rust crate 可在 GPU 上使用。
  3. 特性支持
    • 特性(Traits):用于封装着色器特定操作,实现可复用的抽象。
    • 泛型(Generics):大多能正常工作,可支持多种通道类型而无需重复逻辑。
    • 宏(Macros):能正常使用,可减少重复代码。
  4. 标准 Rust 工具:可使用如 cargo checkcargo build 等标准 Rust 工具进行着色器的类型检查、构建等操作,这是 Rust GPU 的一大优势。
  5. 对生态系统的贡献:在移植着色器过程中,发现并修复了 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

社区学习交流平台订阅:

评论区

写评论

还没有评论

1 共 0 条评论, 1 页