0
  • 聊天消息
  • 系统消息
  • 评论与回复
登录后你可以
  • 下载海量资料
  • 学习在线课程
  • 观看技术视频
  • 写文章/发帖/加入社区
会员中心
创作中心

完善资料让更多小伙伴认识你,还能领取20积分哦,立即完善>

3天内不再提示

一种同时解决目标独立光栅化和可变频率的像素着色器的通用实现方法

集成电路应用杂志 来源:集成电路应用杂志 2020-07-14 11:00 次阅读
加入交流群
微信小助手二维码

扫码添加小助手

加入工程师交流群

一种同时解决目标独立光栅化和可变频率的像素着色器的通用实现方法

0 引言

多点采样抗锯齿(MSAA),目标独立光栅化(TIR),和可变频率像素着色器(VRS)是三种不同的DirectX 特性。

多点采样抗锯齿是一个像素有多个采样点,来达到抗锯齿效果。

目标独立光栅化是Direct11.3提出的新特性,旨在使Direct2D能够将栅格化步骤从CPU移动到GPU,同时仍然保留Direct2D抗锯齿需求。抗锯齿路径的渲染将在GPU上进行2次渲染。第一遍将把每个像素的覆盖率写入一个中间渲染目标纹理。路径将被镶嵌成不重叠的三角形。该GPU将编程使用目标独立光栅化和添加剂混合在第一次通过。第一次使用的像素着色器将简单地计算覆盖掩码中设置的比特数,并输出规范化为[0.0,1.0]的结果。在第二次过程中,GPU将从中间纹理读取数据并写入应用程序的渲染目标。此遍历将路径颜色乘以第一次遍历期间计算的覆盖率。

可变频率的像素着色器是Direct12提出的新特性,由于性能的限制,像素着色器不能总是在输出图像的每个部分都提供相同的质量水平。可变速率着色,或粗略像素着色,是一种机制,使分配渲染性能/功率在不同速率的渲染图像。在视觉上,有些情况下阴影率可以降低,而在可感知的输出质量上几乎没有降低,从而导致“自由”的性能。

一般来说在GPU上对这三种特性进行支持需要不同的逻辑门。多点采样抗锯齿特性提出时间比较早,在很多GPU的功能上已经涵盖了,如何将目标独立光栅化以及可变频率像素着色器这两个特性在已经支持多点采样抗锯齿特性的GPU上实现对架构设计师提出了新的挑战。

1 现有方案存在的问题

在D3D管线中,OM(Output Merger)会收到经过光栅化(Rasterizer)的mask,用来确定哪些像素(Pixel)需要更新,哪些不需要更新;同时OM会收到经过PS(Pixel Shader)计算之后输出的每个像素(Pixel)的颜色值,并将颜色值按照mask输出到对应的内存空间中。

为了得到更好的图形渲染效果,D3D运用了各种反走样算法,其中最常见的就是MSAA(MultiSampling Anti-Aliasing)。简单来说就是将1个像素(Pixel)用多个点去采样,这些新的采样点我们称为Sample,目前1个pixel包含的sample个数可以是1,2,4,8,16. 因为像素被细化,所以可以有效降低图形边界的锯齿现象。按照D3D Spec要求,MSAA 在3D管线中各个阶段的sample个数如表1所示。

其中N的取值是1,2,4,8,16,Rasterizer和OM RT的Sample必须是一样的。RT是指Render Target。

D3D11.3在MSAA的基础上提出了TIR(Target Independent Rasterization)。这个新的特性可以帮助GPU处理2D的反走样。TIR在3D管线中各个阶段的sample个数要求如表2。

其中N的取值是1,2,4,8,16.TIR和MSAA 最大的区别有两点:(1)TIR的时候不要求Rasterizer的sample数和OM RT相同;(2)PS 只能运行在Pixelfrequency模式下,即每个pixel不论包含了多少个sample只能调用一次PS。

D3D12为了兼顾图像质量和硬件性能,对反走样算法提出了更高的要求—VRS(Variable Rate Shading). 这个新的特性主要思想是节省PS的调用,不再是按照pixel或者sample的粒度去调用PS,而是按照coarse pixel的粒度去调用PS,即N个pixel调用一次PS(N可以是2,4,8,16),D3D12称其为Subsampling.VRS在3D管线中各个阶段sample个数要求如表3。

PS调用粒度我们用分数表示,比如1/2表示2个pixel调用一次PS。除了表中列出的组合,其他的情况D3D12不要求支持。

MSAA,TIR和VRS是三个不同的特性,都需要GPU hardware支持。MSAA,TIR和VRS是三个不同的特性,不会同时开启,OM需要支持它们需要三块不同的逻辑单元,如图1所示。

MSAA, TIR 和VRS是三个不同的特性,不会同时开启,OM如果用三个不同的逻辑单元去处理会增加硬件设计的逻辑门。

2 算法设计

本文希望实现一种统一的算法能处理这三个不同的特性,达到简化逻辑节省gatecount的目的。

在OM入口处增加两个简单的处理单元,一个处理单元根据Rasterizer的samplemode调整coveragemask和坐标;另一个处理单元根据PS的samplemode调整输出的data。然后将经过调整的coveragemask和color输入到一个统一的逻辑单元,这个逻辑单元可以用一套逻辑处理所有MSAA,TIR, VRS情况。具体设计如图2。

Unitive Unit只用处理MSAA的所有Case。Rasterizer到OM的带宽是固定的,也就是说Rasterizer输出的maskbit位是不变的,在这种情况下Unitive Unit需要能处理各种sample mode的情形。我们约定Rasterizer送出门的mask代表的第一个pixel为左上点,那么这个左上点的坐标(x,y)必须根据Rasterizer到OM的带宽满足对齐(aligned)的规则。

假设Rasterizer到OM带宽是maskWidth, 一般来说maskWidth大于等于16并且是2的幂,否则就没办法在16x的情况下一次性表示一个完整的pixel。N是Rasterizer的samplenum.

Raster mask能表示的RT pixel个数:

rasterPixelNum=(maskWidth>>log2N)

x对齐规则:

1<<(((log2rasterPixelNum)>>1)+

((log2 rasterPixelNum)&1))

y对齐规则:

1<<(((log2rasterPixelNum)>>1))(1)

以Rasterizer到OM的带宽是16bits为例,那么在不同MSAA模式下收到的pixel左上点坐标和PS的color笔数如表4。

为了能让TIR和VRS共用可以处理MSAA 的Unitive Unit,我们需要调整Rasterizer输出的mask和左上点pixel的坐标,以及PS输出的color,使它们能满足Unitive Unit的输入要求,以16bits带宽为例,即满足表4。

2.1 Processmask Unit

首先看Processmask Unit,这个模块需要根据Rasterizer Samplenum.和OM RT Samplenum.来调整mask和pixel坐标。综合前文里关于TIR和VRS的内容,Rasterizer Sample num.和OM RT Samplenum.只有表5所示的三种组合。

Unitive Unit能处理MSAA特性,MSAA要求Rasterizer Samplenum.和OM RT Samplenum.是一样的,所以对于TIR和VRS,在进入Unitive Unit之前需要Processmask Unit将Rasterizer输出的mask和pixel左上点坐标按照OM RT标准进行调整。也就是需要支持两种调整:Nx Rasterizer mask进行down-sample调整到1x OM RT的mask,或者1x Rasterizer mask进行up-sample调整到Nx OM RT的mask.

2.2 Down-sample

Rasterizer Sample num.是N,OM RT Samplenum.是1。假设Rasterizer输出的mask为rasterMask,pixel左上点坐标是(x,y)。

经过Process mask Unit调整后输出的mask为finalMask,其宽度和rasterMask相同,调整后的pixel左上点坐标是(finalX, finalY)。

调整的方法用伪代码表示如下。

index_size_x=(log2N>>1)+(log2N&1);

index_size_y=(log2N>>1);

aligned_size_x=((log2rasterPixelNum)>>1)+((log2rasterPixelNum)&1);

aligned_size_y=(log2rasterPixelNum)>>1;

block_index=0;

finalX=(~((1<<(index_size_x+aligned_size_x))-1))&x;

finalY=(~((1<<(index_size_y+aligned_size_y))-1)) & y;

for(i=0;i<=index_size_x;i++)

block_index|=((((x>>aligned_size_x)>>i)&1)<<(i*2));

for(j=0;j <=index_size_y;j++)

block_index|=((((y>>aligned_size_y)>>j)&1)<<(j*2+1));

pixel_mask=0;

for(n0;n

{

temp_mask=0;

for(m=0;m

{

temp_mask|=((rasterMask>> (m+n))&1);

}

pixel_mask|=(temp_mask<<(n/N));

}

finalMask=pixel_mask<<(block_index*(maskWidth/N));

以Rasterizer到OM的带宽是16bits为例。

从N个sampledown-sample到1个samplemask。把Nbit的samplemask全部用或运算最后得到1bit的pixelmask。再根据pixel左上点坐标对pixelmask进行移位。

调整pixel左上点的坐标,OM RT Samplenum.为1时,16bit的mask是(4,4)对齐的,所以需要将表5-1???中Rasterizersamplenum.等于N对齐的坐标调整成(4, 4)对齐的pixel坐标。

以N=4为例,假设Rasterizer输出的mask是b’0100 1011 0000 1111, pixel 坐标(6,12), Pixel坐标要从(2,2)对齐调整到(4,4)对齐,那么两个坐标分别在低两位与上b'00,调整为(4,12)。mask每4bit调整成1bit,变成b'1101,然后根据坐标确定这个2×2是4×4里的第几个2×2,将mask移位,最后得到b'0000 0000 1101 0000。如图3。

2.3 Up-sample

Rasterizer Sample num.是1,OM RT Samplenum.是N。一笔Rasterizer的输出会被Processmask Unit拆成N笔送进Unitive Unit。

假设Rasterizer输出的mask为rasterMask,pixel左上点坐标是(x,y)。

经过Process mask Unit调整后输出N笔mask分别为finalMask_i,i∈[0,N-1],其宽度均和rasterMask相同,调整后的N笔pixel左上点坐标分别是(finalX_i, finalY_i),i∈[0,N-1]。

调整的方法用下面伪代码来表示。

sample_mask_per_pixel=(1<

aligned_size_x=((log2rasterPixelNum)>>1)+((log2rasterPixelNum)&1);

aligned_size_y=(log2rasterPixelNum)>>1;

x_stride=1<

y_stride=1<

for(i=0;i

{

for(j=0;j

{

if((rasterMask>>(i*N+j))==1)

finalMask_i=sample_mask_per_pixel<<(j*N);

}

x_offset=((i&1)|(((i>>2)&1)<<1));

y_offset=(((i>>1)&1)| (((i>>3)&1)<<1));

finalX_i=x+x_offset*x_stride;

finalY_i=y+y_offset*y_stride;

}

以Rasterizer到OM的带宽是16bits,N=4为例,假设Rasterizer输出的mask是b'0100 1011 0000 1111, pixel 坐标(24,12).这一笔数据会被拆分成4笔数据送进Unitive Uint,如图4所示。

2.4 Processcolor Unit

Process color Unit需要根据PS sample mode和OM RT samplemode将PS 输出的color进行复制,匹配Unitive Unitdataentry的输入。综合表1、表2、表3,只需要对VRS的color进行展开,将PS 输出的coarse pixel的color转成pixel的color。

PS是1/2samplemode,一个color复制成两份转成1samplemode。

PS是1/4samplemode,一个color复制成四份转成1samplemode。

PS是1/8samplemode,一个color复制成八份转成1samplemode。

PS是1/16samplemode,一个color复制成十六份转成1samplemode。

经过上述的转化Unitive Unit会认为PS 是MSAA 的Pixel frequency,然后进行相应的处理。设计的时候也可以根据Unitive Unit的具体实现将color复制更多份(和OM RT sample mode相对应),使Unitive Unit认为PS是MSAA的Samplec frequency。

3 结语:算法优点

对于已经支持MSAA 特性的GPU,如果想升级支持D3D11.3的TIR和D3D12的VRS,在OM模块部分不需要设计全新的逻辑,可以对这两种新的特性进行巧妙的转化,然后共用MSAA的逻辑处理单元。这样既省去了复杂的逻辑设计和验证,也节省了gatecount。

声明:本文内容及配图由入驻作者撰写或者入驻合作网站授权转载。文章观点仅代表作者本人,不代表电子发烧友网立场。文章及其配图仅供工程师学习之用,如有内容侵权或者其他违规问题,请联系本站处理。 举报投诉
  • 光栅
    +关注

    关注

    0

    文章

    307

    浏览量

    28533
  • gpu
    gpu
    +关注

    关注

    28

    文章

    5271

    浏览量

    136068
  • 图像
    +关注

    关注

    2

    文章

    1096

    浏览量

    42438

原文标题:一种同时解决目标独立光栅化和可变频率的像素着色器的通用实现方法

文章出处:【微信号:appic-cn,微信公众号:集成电路应用杂志】欢迎添加关注!文章转载请注明出处。

收藏 人收藏
加入交流群
微信小助手二维码

扫码添加小助手

加入工程师交流群

    评论

    相关推荐
    热点推荐

    [VirtualLab] 具有连续调制光栅区域的光波导

    (RCWA) 严格计算的。 您可以在以下位置找到有关如何设置的更多信息: 如何使用真实光栅结构设置个波导 **均匀性探测 ** 均匀性探测评估局部区域内(称为光瞳)的能量强度
    发表于 04-24 08:31

    如何给变频器恢复出厂设置

    变频器恢复出厂设置(也叫参数初始)没有通用的固定步骤,因为不同品牌、不同型号的变频器,操作方法
    的头像 发表于 03-21 15:41 1203次阅读
    如何给<b class='flag-5'>变频器</b>恢复出厂设置

    变频器对电机的频率设定

    变频器对电机输出频率的设定,主要有 面板操作、外部端子控制和通信给定 三方式。你可以根据对控制精度、操作距离和自动程度的具体要求来选择最合适的
    的头像 发表于 03-20 12:04 191次阅读
    <b class='flag-5'>变频器</b>对电机的<b class='flag-5'>频率</b>设定

    分析变频器的抱闸控制方法

    变频器的抱闸控制是提升机、起重机等位能性负载传动控制的关键技术,其核心在于精确协调电气输出与机械制动的动作时序,以防止负载在启动时溜钩或停止时滑落。控制方法主要分为三类:依赖于外部PLC的通用型方案、集成专用逻辑的工程型方案,以
    的头像 发表于 03-14 07:40 214次阅读
    分析<b class='flag-5'>变频器</b>的抱闸控制<b class='flag-5'>方法</b>

    变频器同时带动2个同型号电机速度不致的解决方法

    在工业自动控制系统中,变频器驱动多台电机的应用场景十分常见。然而,当使用变频器同时带动两台同型号电机时,经常会出现两台电机转速不
    的头像 发表于 03-06 17:24 2780次阅读

    变频器常用的频率参数有哪些

    变频器作为现代工业控制中的核心设备,其频率参数的设置直接关系到电机运行的效率、稳定性和能耗表现。在实际应用中,工程师需要根据不同的负载特性和工艺要求,合理配置变频器频率参数。
    的头像 发表于 03-02 17:26 1036次阅读
    <b class='flag-5'>变频器</b>常用的<b class='flag-5'>频率</b>参数有哪些

    采用电位怎样控制变频器频率

    在工业自动控制系统中,变频器作为电机调速的核心设备,其频率控制方式多样,其中通过电位模拟量输入实现调速是
    的头像 发表于 03-02 17:17 941次阅读
    采用电位<b class='flag-5'>器</b>怎样控制<b class='flag-5'>变频器</b>的<b class='flag-5'>频率</b>

    薄膜滤波与阵列波导光栅技术的比较

    波分复用 (WDM) 是一种提高光纤带宽和传输能力的关键技术。它通过同时传输多个工作在不同波长的光信号来实现一目标。目前常用的 WDM 技术包括薄膜滤波
    的头像 发表于 12-19 14:42 655次阅读
    薄膜滤波<b class='flag-5'>器</b>与阵列波导<b class='flag-5'>光栅</b>技术的比较

    工程型变频器通用变频器有何区别?

    、设计定位与性能差异 1. 硬件架构差异 工程型变频器采用模块设计,支持功率单元、控制单元分离。其IGBT模块通常采用高过载设计,如150%-200%瞬时过载能力,而通用般为12
    的头像 发表于 11-20 07:33 643次阅读

    目标追踪的简易实现:模板匹配

    片 50 * 50 的像素区域与模板进行比较,而不用访问存储中原视频的帧数据;并且我可以同时对 2500 个像素点作减法,这在
    发表于 10-28 07:21

    高压变频器输出频率无故下降原因分析

    决方案三个维度,系统分析这现象背后的深层原因。 、核心机理:频率控制的闭环逻辑漏洞 变频器的输出频率并非
    的头像 发表于 07-27 22:18 2468次阅读
    高压<b class='flag-5'>变频器</b>输出<b class='flag-5'>频率</b>无故下降原因分析

    变频器频率怎么调整?

    变频器作为现代工业控制中的重要设备,其频率调整直接关系到电机转速和生产效率。本文将系统介绍变频器频率调整的原理、方法、注意事项及典型应用场景
    的头像 发表于 07-13 17:41 6688次阅读
    <b class='flag-5'>变频器</b>的<b class='flag-5'>频率</b>怎么调整?

    西门子变频器维修的五实用方法

    西门子变频器作为工业自动领域的核心设备,其稳定运行直接关系到生产线的效率。然而,长期高负荷运转或环境因素可能导致故障频发。本文将系统介绍五经过实践验证的维修方法,结合西门子官方技术
    的头像 发表于 07-13 17:30 3254次阅读
    西门子<b class='flag-5'>变频器</b>维修的五<b class='flag-5'>种</b>实用<b class='flag-5'>方法</b>

    VirtualLab:光栅的优化与分析

    水平。这些方法的范围从严格的傅里叶模态法(FMM)到适用于具有浅浮雕大型结构的薄元近似法(TEA)。 薄元素近似法(TEA)对比傅里叶模态法(FMM)进行光栅建模 研究了两常用但原理不同的分析
    发表于 05-23 08:49

    VirtualLab 应用:倾斜光栅的参数优化及公差分析

    摘要 对于背光系统、光内连和近眼显示等许多应用来说,将光高效地耦合到引导结构中是个重要的问题。对于这种应用,倾斜光栅以能够高效地耦合单色光而闻名。在本例中,提出了利用严格傅里叶模
    发表于 05-22 08:52