Loading [MathJax]/jax/output/CommonHTML/config.js
首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
社区首页 >问答首页 >在WebGPU中,可以在多个帧中重用相同的呈现传递吗?

在WebGPU中,可以在多个帧中重用相同的呈现传递吗?
EN

Stack Overflow用户
提问于 2021-12-26 13:02:24
回答 1查看 404关注 0票数 1

在WebGPU中,可以通过定义呈现传递描述符来创建呈现传递:

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
const renderPassDesc: GPURenderPassDescriptor = {
  colorAttachments: [
    {
      view: context.getCurrentTexture().createView(),
      loadValue: [0.2, 0.3, 0.5, 1],
      storeOp: "store"
    }
  ]
};

然后通过命令编码器运行并开始录制。

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
const commandEncoder = device.createCommandEncoder();
const renderPass = commandEncoder.beginRenderPass(renderPassDesc);

因此,从本质上说,似乎需要当前的纹理才能开始记录(也就是说,如果不调用context.getCurrentTexture().createView(),就无法创建描述符,而没有描述符就无法开始录制)。但是API似乎表明纹理可以改变每个框架的(请注意,即使在几个月前,当API是不同的并且您将从交换链中检索纹理时,情况也是如此)。因此,基本上看来,不能重用呈现传递跨不同框架的(当然,除非您没有呈现到交换链,而是以屏幕外纹理为目标)。

所以问题是。In WebGPU,您能在多个帧中重用相同的呈现传递吗?

与Vulkan的比较

我的问题源于我对Vulkan的接触。在Vulkan中,您可以重用记录的资源,因为有一种方法可以预先知道交换链中有多少VKImage对象;它们将具有基于0的索引,如012。我不记得确切的语法,但我记得基本上可以记录3个单独的命令缓冲区,每个VKImage一个,然后跨帧重用它们。您所要做的就是在呈现循环中查询当前VKImage的索引,并检索相应的记录命令缓冲区。

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2021-12-28 02:03:46

通过查看有关getCurrentTexture的规范,此时似乎没有对“交换”纹理的数量进行控制。

纹理是在“分配一个新的上下文纹理”步骤中创建的(如果它是null或被破坏的话),因为其中的注释指出:

如果先前显示的上下文纹理与所需的条件匹配,则可以重用其GPU内存。

每次在“更新文档的呈现”步骤中,如果当前的纹理不是null,并且它没有被破坏,那么它将被呈递销毁,并设置为null

规范中的另一个注意事项:

开发人员可以预期,除非调用getCurrentTexture(),否则在同一帧内(即在更新的调用和呈现之间)对getCurrentTexture()的每次调用都会返回相同的getCurrentTexture对象。

所有这些似乎都表明,您必须获得每个帧的当前纹理,并创建所有相关的其他对象。

票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/70489849

复制
相关文章
在Vue中创建可重用的 Transition
Vue.js中的transition确实很棒。 毫无疑问,它们可以非常轻松地让应用程序栩栩如生,但是通常必须在每个项目中从头开始编写它们,甚至还需要引入animate.css之类的CSS库来使它们功能更强大。
前端小智@大迁世界
2020/06/04
9.8K0
在Vue中创建可重用的 Transition
jsp中在href中传递参数
<% Configuration conf = new Configuration(); URI uri = new URI("hdfs://192.168.0.52:9010"); FileSystem fileSystem = FileSystem.get(uri, conf); //System.out.println("Hdfs directory is"+"\n"); Path src1 = new Path("hdfs://192.168.0.52:9
闵开慧
2018/03/30
4.6K0
在ASP.NET MVC中如何应用多个相同类型的ValidationAttribute?
ASP.NET MVC采用System.ComponentModel.DataAnnotations提供的元数据验证机制对Model实施验证,我们可以在Model类型或者字段/属性上应用相应的ValidationAttribute。但是在默认情况下,对于同一个类型的ValidationAttribute特性只允许一个应用到目标元素上——即使我们将AllowMultiple属性设置为True。这篇文章的目的就是为了解决这个问题。[源代码从这里下载] 一、一个自定义ValidationAttribute:Ran
蒋金楠
2018/02/07
2.1K0
在ASP.NET MVC中如何应用多个相同类型的ValidationAttribute?
使用 pyenv 可以在一个系统中安装多个python版本
2016.01.06 21:02* 字数 82 阅读 24416评论 11喜欢 12
拓荒者
2019/03/11
3.2K0
【说站】python在函数中传递实参
若要使函数接受不同类型的实参,则必须将接受任意数量实参的形参放在函数定义的最后。首先,Python匹配位置实参和关键词实参,然后将剩余的实参收集到最后一个形参中。
很酷的站长
2022/11/23
1.6K0
【说站】python在函数中传递实参
Spring Batch 可以在一个 Step 中有多个 Tasklet 吗
根据 Spring Batch 的设计,在一个 Step 中只能执行一个 Tasklet。
HoneyMoose
2022/10/15
1.4K0
Spring Batch 可以在一个 Step 中有多个 Tasklet 吗
面试官:sessionStorage可以在多个Tab之间共享数据吗?
英文 | https://fatfish.medium.com/interviewer-can-sessionstorage-share-data-between-multiple-tabs-c30983c61501
五月君
2023/09/06
4400
面试官:sessionStorage可以在多个Tab之间共享数据吗?
企业价值观在ERP中以何种方式呈现?
提供自定义平台,将业务功能模块化、接口标准化(SOA架构设计)。用户可以灵活的按自己需求,编排组合自己的业务流程,从而达到优化现有流程。
明象ERP
2019/03/01
8480
在 Vue 中,父组件中传递数据给子组件
在父组件中传递数据给子组件。在 Vue 中,可以通过 props 属性来实现父组件向子组件传递数据的功能。
王小婷
2023/09/11
3030
在 Vue 中,子组件为何不可以修改父组件传递的 Prop
所有的 prop 都使得其父子 prop 之间形成了一个单向下行绑定:父级 prop 的更新会向下流动到子组件中,但是反过来则不行。这样会防止从子组件意外变更父级组件的状态,从而导致你的应用的数据流向难以理解。
刘嘿哈
2022/10/25
2.3K0
在MapReduce中利用MultipleOutputs输出多个文件
用户在使用Mapreduce时默认以part-*命名,MultipleOutputs可以将不同的键值对输出到用户自定义的不同的文件中。
星哥玩云
2022/07/03
2.1K0
在MapReduce中利用MultipleOutputs输出多个文件
在单链表中删除值相同的多余节点的算法
思路:分别使用两个指针p和q, 因为可能q->val==p->val时,此时要删除q所指向的节点,所以需要一个s指针记录q,防止发生断链。
lexingsen
2022/02/24
2.5K0
PHP在函数体中传递与接收参数
默认情况下,PHP是按值传递参数的。值传递参数调用函数时将常量或变量的值(通常称其为实参)传递给函数的参数(通常称为形参)。值传递的特点是实参与行参分别存储在内存中,是两个不相关的独立变量。因此,在函数内部改变形参的值时,实参的值一般是不会改变的。
用户7657330
2020/08/14
2.7K0
在推荐系统中,我还有隐私吗?联邦学习:你可以有
随着互联网覆盖范围的扩大,越来越多的用户习惯于在网上消费各种形式的内容,推荐系统应运而生。推荐系统在我们的日常生活中无处不在,它们非常有用,既可以节省时间,又可以帮助我们发现与我们的兴趣相关的东西。目前,推荐系统是消费领域最常见的机器学习算法之一[1]。以网络新闻为例,由于每天都有大量的新闻文章发布在网上,在线新闻服务的用户面临着严重的信息过载。不同的用户通常喜欢不同的新闻信息。因此,个性化新闻推荐技术被广泛应用于用户的个性化新闻展示和服务中。关于新闻的推荐算法 / 模型研究已经引起了学术界和产业界的广泛关注。
机器之心
2020/12/03
4.7K0
在推荐系统中,我还有隐私吗?联邦学习:你可以有
【DB笔试面试618】在Oracle中,“OR扩展”可以有查询转换吗?
♣ 题目部分 在Oracle中,“OR扩展”可以有查询转换吗? ♣ 答案部分 同一字段: LHR@orclasm > SELECT * FROM SCOTT.EMP A WHERE A.EMPNO =7369 OR A.EMPNO=1; EMPNO ENAME JOB MGR HIREDATE SAL COMM DEPTNO ---------- ---------- --------- ------
AiDBA宝典
2019/09/29
6.3K0
.NET/C# 中你可以在代码中写多个 Main 函数,然后按需要随时切换
.NET/C# 程序从 Main 函数开始执行,基本上各种书籍资料都是这么写的。不过,我们可以写多个 Main 函数,然后在项目文件中设置应该选择哪一个 Main 函数。
walterlv
2023/10/22
7460
.NET/C# 中你可以在代码中写多个 Main 函数,然后按需要随时切换
在MyBatis中参数的传递4种方式+代码示例
GuaMapper.xml Mapper中:通过resultMap的type定义为entity包下的Orders实体类,映射到orders的数据库表中的字段,select标签采用resultMap的名字aaa拿到这个映射(否则调用dao层方法的时候返回的对象为null)
2020/10/23
3.6K0
在MyBatis中参数的传递4种方式+代码示例
在Java中字符串是通过引用传递的?
这是一个经典的java问题。在stackoverflow上,许多类似的问题已经被问过了,但是许多回答是错误的或不完整的。 如果你不想深入思考的话,这个问题很简单。如果你想明白的更彻底,那么问题可能容易让人迷惑不清。 1. 一段有趣但令人困惑的代码 public static void main(String[] args) { String x = new String("ab"); change(x); System.out.println(x); } public static void c
三哥
2018/06/15
6.2K3
Flask-在Flask中跨请求传递数据资源
利用 Flask的底层Werkzeug是有缓存支持的,不用使用redis等第三方。
用户1558882
2018/10/25
1.3K0
kubernetes 实用技巧: 在 SHELL 中传递信号
在 Kubernetes 中,Pod 停止时 kubelet 会先给容器中的主进程发 SIGTERM 信号来通知进程进行 shutdown 以实现优雅停止,如果超时进程还未完全停止则会使用 SIGKILL 来强行终止。
CNCF
2021/05/27
2.2K0

相似问题

可以在多个活动中重用片段实例吗?

10

CQLinq代码可以在多个查询中重用吗?

11

在多个文件中重用相同的UIColor。

26

在多个调用中重用相同的jvm

23

在多个页面中重用相同的方法。

63
添加站长 进交流群

领取专属 10元无门槛券

AI混元助手 在线答疑

扫码加入开发者社群
关注 腾讯云开发者公众号

洞察 腾讯核心技术

剖析业界实践案例

扫码关注腾讯云开发者公众号
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档
查看详情【社区公告】 技术创作特训营有奖征文