news 2026/6/23 19:32:06

11章 像素和顶点数据导出 - “Vega“ 7nm Instruction Set ArchitectureReference Guide

作者头像

张小明

前端开发工程师

1.2k 24
文章封面图
11章 像素和顶点数据导出 - “Vega“ 7nm Instruction Set ArchitectureReference Guide

第11章 像素和顶点数据导出

导出指令将像素或顶点着色器数据从VGPR(向量通用寄存器)复制到专用的输出缓冲区。导出指令输出以下类型的数据:

  • 顶点位置

  • 顶点参数

  • 像素颜色

  • 像素深度(Z)

11.1 微码编码

导出指令使用EXP(导出)微码格式。

表46. EXP编码字段描述

字段大小描述
VM1有效掩码(Valid Mask)。设置为1时,表示EXEC掩码代表该波前的有效掩码。每个着色器可以多次发送(使用最终值),但每个像素着色器必须至少发送一次。
DONE1这是程序的最终像素着色器或顶点位置导出。仅用于像素和位置导出。对于参数导出,设置为零。
COMPR1压缩数据。设置时,表示导出的数据每个分量是16位,而不是通常的32位。
TARGET6表示导出数据的类型:
0..7 MRT 0..7
8 Z(深度)
9 空(无数据)
12-15 位置 0..3
32-63 参数 0..31
EN4COMPR==1:导出半双字使能。有效值为:0x0、3、C、F。
[0] 使能VSRC0:来自一个VGPR的R、G分量
[2] 使能VSRC1:来自一个VGPR的B、A分量
COMPR==0:[0-3] = VSRC0..3的使能位。
EN可以为零(当仅向NULL目标导出有效掩码时使用)。
VSRC38读取数据的VGPR。
位置和参数:vsrc0=X,1=Y,2=Z,3=W
MRT:vsrc0=R,1=G,2=B,3=A
VSRC28读取数据的VGPR。
VSRC18读取数据的VGPR。
VSRC08读取数据的VGPR。

11.2 操作

11.2.1 像素着色器导出

导出指令将颜色数据复制到MRT(多重渲染目标)。数据有四个分量(R、G、B、A)。可选地,导出指令也输出深度(Z)数据。

每个像素着色器必须至少有一条导出指令。最后执行的导出指令必须将DONE位设置为1。

EXEC掩码应用于所有导出。只有对应EXEC位设置为1的像素才会将数据导出到输出缓冲区。多次导出的结果会在输出缓冲区中累积。

至少有一个导出必须将VM位设置为1。除了将数据复制到颜色或深度输出缓冲区外,此导出还通知颜色缓冲区哪些像素有效,哪些已被丢弃。EXEC掩码的值传达像素有效掩码。如果发送了多个VM设置为1的导出,则使用最终导出的掩码。如果着色器程序只想更新有效掩码而不发送任何新数据,程序可以向NULL目标执行导出。

11.2.2 顶点着色器导出

顶点着色器使用导出指令将顶点位置数据和顶点参数数据输出到输出缓冲区。这些数据会传递给后续的像素着色器。

每个顶点着色器必须至少输出一个位置向量(x、y、z;w是可选的)到POS0目标。最后一个位置导出必须将DONE位设置为1。顶点着色器可以导出零个或多个参数。为了获得增强的性能,应尽可能早地在顶点着色器中输出所有位置数据。

11.3 依赖性检查

硬件执行导出指令分为两个阶段。首先,指令被选择执行,EXPCNT递增1。此时,硬件请求完成指令所需的内部总线使用权。

当获得总线访问权限时,读取EXEC掩码并发送VGPR数据。在发送完最后一个VGPR数据后,EXPCNT计数器递减1。

使用S_WAITCNT等待EXPCNT,以防止着色器程序在导出操作完成之前覆盖EXEC或保存要导出数据的VGPR。

多个导出指令可以同时处于未完成状态。相同类型的导出(例如:位置)按顺序完成,但不同类型的导出可以乱序完成。

如果STATUS寄存器的SKIP_EXPORT位设置为1,硬件会将所有EXPORT指令视为NOP(空操作)。

版权声明: 本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若内容造成侵权/违法违规/事实不符,请联系邮箱:809451989@qq.com进行投诉反馈,一经查实,立即删除!
网站建设 2026/6/23 7:26:33

15人团队,60天,1000万美金ARR:Lovable正在重新定义“软件开发”

image.png大家好,我是01。最近看了一期Lennys Podcast,嘉宾是Lovable的创始人Anton Osika。Lovable这家瑞典AI初创公司,创造了一个在欧洲创业圈前所未有的增长神话:15个人的团队,在产品发布后的60天内,就做…

作者头像 李华
网站建设 2026/6/23 19:31:54

TensorFlow调试报错看不懂?LobeChat帮你解读

TensorFlow调试报错看不懂?LobeChat帮你解读 在训练一个图像分类模型时,你是否曾被控制台里突然弹出的一长串红色错误信息搞得一头雾水?比如这条: InvalidArgumentError: Incompatible shapes: [32,64] vs [64,32][[node MatMul…

作者头像 李华
网站建设 2026/6/21 23:04:15

2026届秋招AI岗位狂潮:大厂招聘激增10倍,这份成功上岸攻略不容错过!

2025年夏末,一场针对2026届毕业生的AI人才争夺战比往年提前了至少一个月打响。阿里巴巴、腾讯、字节跳动、百度等头部企业纷纷抛出规模空前的招聘计划,其中AI相关岗位占比普遍超过60%,部分业务线甚至高达80%至90%。 一场前所未有的秋招正在拉…

作者头像 李华
网站建设 2026/6/22 23:53:29

1、掌握 Linux 脚本编程:从基础到高级应用

掌握 Linux 脚本编程:从基础到高级应用 1. 技术要求与 Linux 外壳类型 在开始学习脚本编程之前,了解技术要求和不同类型的 Linux 外壳是很重要的。技术要求通常涉及到对一些基本 Linux 命令的熟悉,如 ls 、 cd 和 which 等。而 Linux 有多种外壳,常见的有 Sh 外壳…

作者头像 李华
网站建设 2026/6/23 6:16:45

3、Bash脚本编写:基础与进阶

Bash脚本编写:基础与进阶 1. 带参数运行脚本 在Bash脚本中,我们可以带参数运行脚本。即便脚本未使用这些参数,它们也会被默默忽略。例如运行 hello1.sh 脚本并传入一个参数: $ hello1.sh fred脚本仍会正常运行且不报错,输出保持不变,依然是 Hello World 。 Bash…

作者头像 李华
网站建设 2026/6/23 8:37:55

C#教程(小部分)

C#变量变量是存储数据值的容器。在 C# 中,有不同类型的变量(用不同的关键字定义),例如:int - 存储整数(整数),不带小数,如123或-123double - 存储带小数的浮点数,例如19.…

作者头像 李华