• WebGPU 工具分享 - WGSL 代码高亮插件(VSCode)与预处理工具


    WGSL 还在积极讨论中,虽然各位大佬不是很满意这个新生儿。

    不过,社区已经有了基础的实验性工具(VSCode 插件),并支持了较新的语法。

    ① WGSL 插件

    这个插件支持对文件扩展名为 .wgsl 的源代码文件进行高亮显示。

    image

    ② WGSL Literal 插件

    这个插件允许你在 JavaScript / TypeScript 的模板字符串中进行 wgsl 代码高亮,需要加上模板字符串前置块注释:

    const code = /* wgsl */`
      struct FragmentInput {
        @location(0) Color: vec3<f32>;
      };
    
      @stage(fragment)
      fn main(input: FragmentInput) -> @location(0) vec4<f32> {
        return vec4<f32>(input.Color, 1.0);
      }
    `;
    

    image


    遗憾的是,截至 2022年3月25日,这两个插件并没有代码格式化功能(几乎没有),也没有代码智能提示功能。


    ③ WGSL Preprocessor

    这是一个 JavaScript / TypeScript 模板字符串 wgsl 预处理函数包,模板字符串除了可插值外,还可以使用前置函数进行预处理。

    这个函数包目前只是一个 esm 模块文件,以后不排除会变成更大的 npm 包,由 toji(Brandon Jones)维护。

    github.com/toji/wgsl-preprocessor​github.com

    这个使得 wgsl 拥有了 glsl 类似的宏定义等语法:

    目前支持:

    • #if
    • #elif
    • #else
    • #endif

    简单用法:

    import { wgsl } from './wgsl-preprocessor.js';
    
    function getDebugShader(sRGB = false) {
      return wgsl`
      @stage(fragment)
      fn main() -> @location(0) vec4<f32> {
        let color = vec4(1.0, 0.0, 0.0, 1.0);
      #if ${sRGB}
        let rgb = pow(color.rgb, vec3(1.0 / 2.2));
        return vec4(rgb, color.a);
      #else
        return color;
      #endif
      }`;
    }
    `
    

    为什么没有 #define 宏?

    因为模板字符串的插值功能已经可以当 #define 宏使用了,你甚至都不需要使用这个字符串预处理函数。

    const ambientFactor = 1.0;
    const sampleCount = 2;
    
    const source = `
      let ambientFactor = f32(${ambientFactor});
    
      for (var i = 0u; i < ${sampleCount}u; i = i + 1u) {
        // Etc...
      }
    `;
    

    __EOF__

  • 本文作者: 四季留歌
  • 本文链接: https://www.cnblogs.com/onsummer/p/tool-share-webgpu-wgsl.html
  • 关于博主: 评论和私信会在第一时间回复。或者直接私信我。
  • 版权声明: 本博客所有文章除特别声明外,均采用 BY-NC-SA 许可协议。转载请注明出处!
  • 声援博主: 如果您觉得文章对您有帮助,可以点击文章右下角推荐一下。
  • 相关阅读:
    回归预测 | MATLAB实现基于BP-Adaboost的BP神经网络结合AdaBoost多输入单输出回归预测
    南方农业杂志南方农业杂志社南方农业编辑部2022年第19期目录
    RabbitMQ的安装
    当每分钟有1000个请求,接口只能处理500个请求时
    Linux socket编程(4):服务端fork之僵尸进程的处理
    Mysql 45讲学习笔记(十一)字符串字段怎么加索引
    Win11如何删除升级包?Win11删除升级包的方法
    Linux shell printf命令小例子
    php利用ZipArchive类实现文件压缩与解压
    算法模板(5):数学(1):数学知识(2)combination
  • 原文地址:https://www.cnblogs.com/onsummer/p/tool-share-webgpu-wgsl.html