首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
社区首页 >问答首页 >HLSL中的寄存器是用于什么的?

HLSL中的寄存器是用于什么的?
EN

Game Development用户
提问于 2013-05-11 06:01:43
回答 3查看 8K关注 0票数 9

我读过关于HLSL寄存器的本文件,但它更多的是语法描述,而不是目的解释。

实际上,HLSL中的寄存器是什么?我怎么用,什么时候用?如果我不这样做会发生什么(默认情况是什么)?

EN

回答 3

Game Development用户

发布于 2013-05-11 07:13:57

给定的着色器模型向HLSL公开一组特定的寄存器;这些寄存器是GPU上的底层硬件寄存器,就像CPU寄存器一样,但是有更精确的范围(例如,有专门用于保存采样器的寄存器)。

寄存器是在您的着色器执行过程中存储所有数据的地方(除了存储在GPU的RAM中的纹理或顶点缓冲区数据之外)。在GPU上,在读取和操作内存方面不像在CPU上那样灵活。不存在“将这个值存储到RAM中片刻”,所以所有的东西都必须在寄存器中。这是特别明显的旧着色器组装(从着色器模型1时代)。

数据传输也可以通过这些寄存器,这就是为什么关键字仍然存在于更现代的着色器模型。例如,如果您不使用效果框架,您可以自己管理取样器或常量寄存器的分配(例如,通过SetVertexShaderConstant之类的方法)。类似地,缓冲区中的数据可以映射到寄存器;顶点输入寄存器通常在执行着色器之前将您的顶点缓冲区数据映射到它们。

您可以在MSDN上找到寄存器的列表及其用途。例如,这里是VS5.0的集合。

通常,您不需要直接使用它们,就像CPU寄存器一样。它们将由您在着色代码或API中使用的高级语言结构(如上述效果框架)自动使用。

票数 9
EN

Game Development用户

发布于 2013-12-30 11:10:52

您在语法上处理的特定寄存器将是某种形式的I/O寄存器。乔希很好地解释了什么是寄存器以及为什么在GPU上使用它们。用于在特定寄存器中声明变量的语法用于传输数据。在CPU上创建一个输入布局(GL中的顶点数组对象)或设置制服或取样器/纹理。这会将顶点缓冲区中的值映射到特定的寄存器(通过顶点数据的语义)。C++代码和HLSL代码必须商定哪些数据将在哪些数据中,哪些寄存器用于输入,以及用于MRT等的输出。

如果没有显式指定寄存器,HLSL将为您选择它们。您不应该依赖于它如何选择它们;即使它看起来很稳定,它也可能在将来的版本中发生变化。您可以使用着色器内省API来确定编译器选择了哪些寄存器,这样就可以适当地设置输入布局。这比仅仅在着色代码中声明寄存器效率更低,也更困难。

从本质上说,C++说的是“相机数据在常量缓存寄存器3中”。然后,着色器必须从寄存器3中读取该缓冲区,否则它将无法正常工作。你可以像老GL强迫你那样以名字命名,但你不应该这么做。

这对于最近的GL/GLSL也是一样的,尽管显然语法和API不同。

票数 4
EN

Game Development用户

发布于 2013-05-11 06:35:34

寄存器是位于处理器上的一种存储类型,并且访问速度非常快。它们通常较小,并用作处理器指令的输入和输出位置。HLSL提供了一种从CPU端将数据映射到这些寄存器的方法,以便在GPU上的着色器中使用。当您有需要在GPU中引用的数据时,应该使用它们,但是只有在CPU上运行时才能使用这些数据(如world view投影矩阵),因此必须将其复制到GPU寄存器中。下面是一篇描述非hlsl上下文http://en.wikipedia.org/wiki/Processor_寄存器中寄存器的文章。

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

https://gamedev.stackexchange.com/questions/55319

复制
相关文章
FTP协议是一种用于什么的协议
FTP(File Transfer Protocol,文件传输协议) 是 TCP/IP 协议组中的协议之一。复FTP协议包括两个组成部分,其一为FTP服务器,其二为FTP客户端。
全栈程序员站长
2022/07/04
1K0
FTP协议是一种用于什么的协议
kafka 中 zookeeper 具体是做什么的?
zookeeper 是 kafka 不可分割的一部分,可见其重要程度,所以我们有必要了解一下 zookeeper 在 kafka 中的具体工作内容。
dys
2019/12/15
1.7K0
在Hadoop中ResourceManager是干什么的?
ResourceManager:马克-to-win @ 马克java社区:防盗版实名手机尾号:73203。当应用程序对集群资源需求时,ResourceManager是Yarn集群主控节点,负责协调和管理整个集群(所有NodeManager)的资源。
马克java社区
2021/06/24
8840
在Hadoop中Container是干什么的?
Container:马 克-to-win @ 马克java社区:前面我们总提资源分配。而资源分配的体现就要用到一个抽象概念“容器”(Container)表示,Container将内存、 CPU、磁盘、网络等资源封装在一起,这样可以起到限定资源边界的作用。比如给你一个Container的资源,里面包含3个G的内存,1G硬盘。当销毁 你的Container时,连带的内存,硬盘都没有了。
马克java社区
2021/06/24
7880
在Hadoop中NodeManager是干什么的?
NodeManager:马克-to-win @ 马克java社区:NodeManager管理一个YARN集群中的每一个节点。比如监视资源使用情况( CPU,内存,硬盘,网络),跟踪节点健康等。
马克java社区
2021/06/24
8350
在Hadoop中ApplicationMaster是干什么的?
ApplicationMaster:马 克-to-win @ 马克java社区:想了解ApplicationMaster,我们需要了解一下它工作的过程。 用户向YARN集群提交应用程序时:(包含ApplicationMaster程序,ApplicationMaster启动命令,用户自己的程序)后, ApplicationMaster向资源调度器申请执行任务的资源容器Container,运行用户自己的程序任务job(我们可以用浏览器看yarn 里的job进展),监控整个任务的执行,跟踪整个任务的状态,处理任务失败以异常情况。
马克java社区
2021/06/24
1K0
链路层是做什么的?
最大传输单元。链路层[以太网(1500字节)和802.3(1492字节)]对数据帧的长度存在限制。
爬蜥
2019/07/09
1.3K0
StringTypeHandler 是做什么的
StringTypeHandler 是 MyBatis 框架中的一个类型处理器(TypeHandler),用于处理 Java 类型与数据库中的字符串类型之间的转换。
一写代码就开心
2023/11/02
2190
java中trim()方法是用来干什么的?
trim()的作用是去掉字符串两端的多余的空格,注意,是两端的空格,且无论两端的空格有多少个都会去掉,当然中间的那些空格不会被去掉,如:
瑞新
2020/07/07
1.3K0
大数据开发是干什么的(大数据开发是做什么的)
据数联寻英发布《大数据人才报告》显示,目前全国的大数据人才仅46万,未来3-5年内大数据人才的缺口将高达150万,越来越多人加入到大数据培训,都希望在大数据培训机构中学习最前沿的知识,找一份不错的工作。
全栈程序员站长
2022/07/31
1.4K0
进程管理中的active_mm是做什么的?
在Linux内核中,进程管理涉及到许多复杂的数据结构和机制,其中active_mm是与内存管理相关的一个关键概念。理解active_mm需要先了解与之相关的一些基本内核结构和概念。
233333
2024/06/06
2960
docker是啥?是干什么的?
docker有3大核心:镜像、容器、仓库。 鲸鱼是操作系统。 要交付的应用程序是各种货物,要将各种形状和尺寸不同的货物放到大鲸鱼上,得考虑每件货物怎么安放(应用程序配套的环境),还得考虑货物和货物之间能否重叠起来(应用程序依赖的环境是否会冲突)。 现在使用了集装箱(容器)把每件货物都放到集装箱里,这样大鲸鱼可以用同样地方式安放、堆叠集装了,省事省力。 即:打包放到鲸鱼上,鲸鱼放到服务器上。也就是“build——ship——run”,这样在自己的电脑上怎么运行,在服务器上也会怎么运行。 用docker运行一个程序的过程: 去仓库把镜像拉到本地,然后用一条命令把镜像运行起来,变成容器。
兔子吖
2019/10/14
1.5K0
docker是啥?是干什么的?
Actor模型是做什么的?
问题 用户A的操作 (1)开始事务 (2)操作资源1 (3)操作资源2 (4)提交事务 用户B的操作 (1)开始事务 (2)操作资源2 (3)操作资源1 (4)提交事务 如果用户A和用户B的两个事务同时发生,A锁住了资源1,B锁住了资源2,互相等待,陷入死锁 如果采用同步锁synchronized,可能会出现破坏逻辑一致性的问题 这个问题的根本原因:数据是被动的被处理 在读多写少,较少涉及事务机制的场景下,这个问题不明显,否则就面临此问题 Actor模型 Actor模型就是用来解决事务
dys
2018/04/03
1.3K0
serialVersionUID 是干什么的?
我们有时候在写代码的时候,对于一个需要序列化的类,如果不去写 serialVersionUID,编译器可能就会提示我们 The serializable class ClassName does not declare a static final serialVersionUID field of type long。
做棵大树
2022/09/27
1.3K0
Docker是用来干什么的?
Docker目前只能在Linux下运行 下面的例子我自己经常使用,当然你有更好的案例也可以分享给我。
爱吃大橘
2022/12/27
1.2K0
seo网站优化是做什么的?
🔍在这个信息爆炸的时代,越来越多的企业开始关注自己的线上形象。而一个好的网站,不仅能提升企业的品牌形象,还能为企业带来更多的商机。那么,什么是SEO网站优化呢?它又是如何帮助我们提升网站的竞争力呢?接下来,就让我们一起来揭开SEO网站优化的神秘面纱吧!🤖
用户10637139
2024/04/27
3910
什么是NoSQL?什么是redis?redis是做什么的?
NoSQL数据库的选择通常取决于具体的应用需求,包括数据模型、性能要求、可伸缩性需求以及对一致性和事务的要求。
人不走空
2024/02/20
2200
什么是NoSQL?什么是redis?redis是做什么的?
csproj 文件中那个空的 NuGetPackageImportStamp 是干什么的?
当我们在传统格式的 csproj 项目文件中安装 NuGet 包后,有时会在项目文件中发现空的 NuGetPackageImportStamp 节点。这个空的节点让我们这波强迫症患者觉得有点难以接受,关键是手工删除之后也没发现有什么副作用。
walterlv
2023/10/22
3140
csproj 文件中那个空的 NuGetPackageImportStamp 是干什么的?
数据产品经理是做什么的?
作为一名 B 端产品经理,一直致力于研究企业内部效率工具的实施与搭建,热衷于使用以数据指标为引擎的各类增长方法。应该说,平时我的工作方法与数据产品经理非常接近,今天看到这道题,忍不住顺手答一下,很多想法不太成熟,还请数据大佬们轻拍。
蒋川
2021/08/10
1.3K0
数据产品经理是做什么的?
什么是BI系统?_bi是做什么的
BI软件是商业智能(Business Intelligence)软件的英文缩写。目前,商业智能通常被理解为将企业中现有的数据转化为知识,帮助企业做出明智的业务经营决策的工具。商务智能系统中的数据来自企业其他业务系统。例如商贸型企业,其商务智能系统数据包括业务系统的订单、库存、交易账目、客户和供应商信息等,以及企业所处行业和竞争对手的数据、其他外部环境数据。而这些数据可能来自企业的CRM、SCM、进销存等业务系统。
全栈程序员站长
2022/09/20
1.3K0

相似问题

HLSL寄存器和插槽

10

关于HLSL中的寄存器保留字或半词

10

HLSL中的逆矩阵

30

SlerpUnclamped是做什么的?

10

将HLSL代码拆分为单独的函数会增加所需临时寄存器的数量。

10
添加站长 进交流群

领取专属 10元无门槛券

AI混元助手 在线答疑

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

洞察 腾讯核心技术

剖析业界实践案例

扫码关注腾讯云开发者公众号
领券
社区富文本编辑器全新改版!诚邀体验~
全新交互,全新视觉,新增快捷键、悬浮工具栏、高亮块等功能并同时优化现有功能,全面提升创作效率和体验
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档
查看详情【社区公告】 技术创作特训营有奖征文