WebGPU学习(9)---使用Pipeline Overridable Constants

这篇具有很好参考价值的文章主要介绍了WebGPU学习(9)---使用Pipeline Overridable Constants。希望对大家有所帮助。如果存在错误或未考虑完全的地方,请大家不吝赐教,您也可以点击"举报违法"按钮提交疑问。

使用Pipeline Overridable Constants

WebGPU 的着色器语言是 WGSL,但与 GLSL 和 HLSL 不同,不支持 #ifdef 等宏。为了实现各种着色器变体,迄今为止,宏一直是着色器编程中非常重要的功能。那么应该如何处理没有宏的 WGSL?

WebGPU 和 WGSL 提供了一个名为“Pipeline Overridable Constants”的函数,用于从 JavaScript 端覆盖着色器常量。这种方式可以接近宏的实现了。

程序

1. 在着色器中定义可重写常量

首先,在着色器中定义一个常量。稍后可以从 JavaScript 端覆盖该常量。 这次我们在片段着色器中定义它。

override is_red: bool;
override color_r: f32 = 1.0;
override color_g: f32 = 1.0;
override color_b: f32 = 1.0;

@fragment
fn main() -> @location(0) vec4<f32> {
    if (is_red) {
        return vec4<f32>(1.0, 0.0, 0.0, 1.0);
    } else {
        return vec4<f32>(color_r, color_g, color_b, 1.0);  
    }
}

通过在常量名称之前添加 override,该常量就成为可以从 JavaScript 端覆盖的常量。 是否指定默认值并不重要,但如果不指定,则必须始终从 JavaScript 端覆盖它。 如果不覆盖,将使用着色器端定义的默认值。

2.在JavaScript端覆盖常量

在 JavaScript 方面,为 Pipeline 的 GPUProgrammableStageconstants 属性指定一个常量值。

const pipeline = g_device.createRenderPipeline({
  layout: 'auto',
  vertex: {
    module: g_device.createShaderModule({
      code: vertWGSL,
    }),
    entryPoint: 'main',
  },
  fragment: {
    module: g_device.createShaderModule({
      code: fragWGSL,
    }),
    entryPoint: 'main',
    constants: {
      'is_red': false,
      'color_r': 0.5,
      'color_g': 0.25,
      'color_b': 1.0,
    }
      ...

有关可以指定的常量的类型和功能的更多详细信息,请参阅WebGPU规范。

结论

通过使用 Pipeline-Overridable-Constants,我们能够覆盖着色器端的常量值。查看示例。文章来源地址https://www.toymoban.com/news/detail-693366.html

到了这里,关于WebGPU学习(9)---使用Pipeline Overridable Constants的文章就介绍完了。如果您还想了解更多内容,请在右上角搜索TOY模板网以前的文章或继续浏览下面的相关文章,希望大家以后多多支持TOY模板网!

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处: 如若内容造成侵权/违法违规/事实不符,请点击违法举报进行投诉反馈,一经查实,立即删除!

领支付宝红包 赞助服务器费用

相关文章

  • 使用redis pipeline提升性能

    本篇来介绍一下redis pipeline,主要是由于最近一次在帮开发同学review代码的时候,发现对redis有个循环操作可以优化。场景大概是这样的,根据某个uid要从redis查询一批数据,每次大概1000个key左右,如果查得到就返回,否则查db,然后写回缓存。由于每次要查的key比较多,虽然

    2024年02月12日
    浏览(30)
  • Jenkins-Pipeline基本使用

    使用Groovy语法 Pipeline 是Jenkins 2.X核心特性,帮助Jenkins实现从CI到CD与DevOps的转变 Pipeline 简而言之,就是一套运行于Jenkins上的工作流框架,将原本独立 运行于单个或者多个节点的任务连接起来,实现单个任务难以完成的复杂流 程编排与可视化 1、声明式(仅在2.5版本后支持)

    2023年04月22日
    浏览(36)
  • jenkins_Pipeline使用测试

    安装jenkins 安装声明式插件Pipeline:Declarative 创建pipeline流水线 样例 1.1 agent(代理) 1.2 stages(阶段) 包含一系列一个或多个 stage 指令,建议 stages 至少包含一个 stage 指令用于连续交付过程的每个离散部分,比如构建,测试,和部署。 1.3 post 定义一个或多个steps,这些阶段根据流水线或阶段

    2024年04月11日
    浏览(30)
  • jenkins pipeline使用Git Parameter

    在 Jenkins Pipeline 中使用 Git Parameter 可以方便地从 Git 仓库中选择分支或标签进行构建。Git Parameter 是 Jenkins 的插件之一,可以在 Jenkins 构建参数中提供一个 Git 版本选择器。 要在 Jenkins Pipeline 中使用 Git Parameter,首先需要安装 Git Parameter 插件。安装完成后,可以在 Jenkins 中创建

    2024年02月16日
    浏览(39)
  • pipeline、lua、redis事务以及操作springboot操作redis的一些学习以及思考

    ai答:在使用 Jedis 进行 Redis 操作时,调用 jedis.close() 的目的是释放与 Redis 服务器的连接并关闭 Jedis 实例,以便释放资源并确保连接的正确关闭。 具体原因如下: 资源释放:调用 jedis.close() 方法会自动释放 Jedis 实例占用的资源,包括网络连接、线程资源等。如果不调用 cl

    2024年02月13日
    浏览(30)
  • 扩散模型Diffusers Pipeline API使用介绍

    大部分扩散模型包含多个独立训练的子模型和组件模块组合而成,例如StableDiffusion 有: 3个独立训练的子模型:Autoencoder、 Conditional Unet、CLIP text encoder 调度器组件scheduler, CLIPImageProcessor, safety checker. 为了让开发者以最简单的方式使用最新最先进的扩散模型, diffusers 开发了

    2024年02月08日
    浏览(54)
  • Redis性能优化:理解与使用Redis Pipeline

    本文已收录至GitHub,推荐阅读 👉 Java随想录 微信公众号:Java随想录 原创不易,注重版权。转载请注明原作者和原文链接 目录 Pipeline介绍 原生批命令(MSET, MGET) VS Pipeline Pipeline的优缺点 一些疑问 Pipeline代码实现 当我们谈论Redis数据处理和存储的优化方法时,「 Redis Pipeline 」

    2024年02月08日
    浏览(39)
  • Elasticsearch:使用 ingest pipeline 来管理索引名称

    在我之前的文章 “Elasticsearch:使用 pipelines 路由文档到想要的 Elasticsearch 索引中去” 我详述了如何使用已有的 date_index_name 处理器来把文档归类到所需要的和文档日期相关的的索引中去。比如,我们想把 2023 年 4 月的所有文档写入到 my-index-2023-04-01 这个索引名称中去。这个

    2024年02月08日
    浏览(33)
  • 使用Gitlab管理Jenkins Pipeline流水线

    1、首先需要将已经调试好的Jenkins pipeline文件上传到git库中,推荐以 Jenkinsfile 命名 放至git库根目录 上传完成后 在git库中可以查看到 如下图所示: 2、配置Jenkins任务 完成后pipeline脚本会存放在git库上面进行管理编辑了,当我们构建此任务时会从git库中获取pipeline流水线进行执

    2024年02月12日
    浏览(44)
  • Elasticsearch:使用 Elasticsearch ingest pipeline 丰富数据

    在我之前的文章: Elasticsearch:如何使用 Elasticsearch ingest 节点来丰富日志和指标 Elasticsearch:enrich processor (7.5发行版新功能) 我有详细描述如何使用 ingest pipeline 来丰富数据。在今天的文章中里,我们来更加详细地使用一个具体的例子来进行展示。更多官方文档描述,我们可

    2024年02月15日
    浏览(35)

觉得文章有用就打赏一下文章作者

支付宝扫一扫打赏

博客赞助

微信扫一扫打赏

请作者喝杯咖啡吧~博客赞助

支付宝扫一扫领取红包,优惠每天领

二维码1

领取红包

二维码2

领红包