一種同時解決目標(biāo)獨立光柵化和可變頻率的像素著色器的通用實現(xiàn)方法
0 引言
多點采樣抗鋸齒(MSAA),目標(biāo)獨立光柵化(TIR),和可變頻率像素著色器(VRS)是三種不同的DirectX 特性。
多點采樣抗鋸齒是一個像素有多個采樣點,來達(dá)到抗鋸齒效果。
目標(biāo)獨立光柵化是Direct11.3提出的新特性,旨在使Direct2D能夠?qū)鸥窕襟E從CPU移動到GPU,同時仍然保留Direct2D抗鋸齒需求??逛忼X路徑的渲染將在GPU上進(jìn)行2次渲染。第一遍將把每個像素的覆蓋率寫入一個中間渲染目標(biāo)紋理。路徑將被鑲嵌成不重疊的三角形。該GPU將編程使用目標(biāo)獨立光柵化和添加劑混合在第一次通過。第一次使用的像素著色器將簡單地計算覆蓋掩碼中設(shè)置的比特數(shù),并輸出規(guī)范化為[0.0,1.0]的結(jié)果。在第二次過程中,GPU將從中間紋理讀取數(shù)據(jù)并寫入應(yīng)用程序的渲染目標(biāo)。此遍歷將路徑顏色乘以第一次遍歷期間計算的覆蓋率。
可變頻率的像素著色器是Direct12提出的新特性,由于性能的限制,像素著色器不能總是在輸出圖像的每個部分都提供相同的質(zhì)量水平??勺兯俾手?,或粗略像素著色,是一種機(jī)制,使分配渲染性能/功率在不同速率的渲染圖像。在視覺上,有些情況下陰影率可以降低,而在可感知的輸出質(zhì)量上幾乎沒有降低,從而導(dǎo)致“自由”的性能。
一般來說在GPU上對這三種特性進(jìn)行支持需要不同的邏輯門。多點采樣抗鋸齒特性提出時間比較早,在很多GPU的功能上已經(jīng)涵蓋了,如何將目標(biāo)獨立光柵化以及可變頻率像素著色器這兩個特性在已經(jīng)支持多點采樣抗鋸齒特性的GPU上實現(xiàn)對架構(gòu)設(shè)計師提出了新的挑戰(zhàn)。
1 現(xiàn)有方案存在的問題
在D3D管線中,OM(Output Merger)會收到經(jīng)過光柵化(Rasterizer)的mask,用來確定哪些像素(Pixel)需要更新,哪些不需要更新;同時OM會收到經(jīng)過PS(Pixel Shader)計算之后輸出的每個像素(Pixel)的顏色值,并將顏色值按照mask輸出到對應(yīng)的內(nèi)存空間中。
為了得到更好的圖形渲染效果,D3D運用了各種反走樣算法,其中最常見的就是MSAA(MultiSampling Anti-Aliasing)。簡單來說就是將1個像素(Pixel)用多個點去采樣,這些新的采樣點我們稱為Sample,目前1個pixel包含的sample個數(shù)可以是1,2,4,8,16. 因為像素被細(xì)化,所以可以有效降低圖形邊界的鋸齒現(xiàn)象。按照D3D Spec要求,MSAA 在3D管線中各個階段的sample個數(shù)如表1所示。
其中N的取值是1,2,4,8,16,Rasterizer和OM RT的Sample必須是一樣的。RT是指Render Target。
D3D11.3在MSAA的基礎(chǔ)上提出了TIR(Target Independent Rasterization)。這個新的特性可以幫助GPU處理2D的反走樣。TIR在3D管線中各個階段的sample個數(shù)要求如表2。
其中N的取值是1,2,4,8,16.TIR和MSAA 最大的區(qū)別有兩點:(1)TIR的時候不要求Rasterizer的sample數(shù)和OM RT相同;(2)PS 只能運行在Pixelfrequency模式下,即每個pixel不論包含了多少個sample只能調(diào)用一次PS。
D3D12為了兼顧圖像質(zhì)量和硬件性能,對反走樣算法提出了更高的要求—VRS(Variable Rate Shading). 這個新的特性主要思想是節(jié)省PS的調(diào)用,不再是按照pixel或者sample的粒度去調(diào)用PS,而是按照coarse pixel的粒度去調(diào)用PS,即N個pixel調(diào)用一次PS(N可以是2,4,8,16),D3D12稱其為Subsampling.VRS在3D管線中各個階段sample個數(shù)要求如表3。
PS調(diào)用粒度我們用分?jǐn)?shù)表示,比如1/2表示2個pixel調(diào)用一次PS。除了表中列出的組合,其他的情況D3D12不要求支持。
MSAA,TIR和VRS是三個不同的特性,都需要GPU hardware支持。MSAA,TIR和VRS是三個不同的特性,不會同時開啟,OM需要支持它們需要三塊不同的邏輯單元,如圖1所示。
MSAA, TIR 和VRS是三個不同的特性,不會同時開啟,OM如果用三個不同的邏輯單元去處理會增加硬件設(shè)計的邏輯門。
2 算法設(shè)計
本文希望實現(xiàn)一種統(tǒng)一的算法能處理這三個不同的特性,達(dá)到簡化邏輯節(jié)省gatecount的目的。
在OM入口處增加兩個簡單的處理單元,一個處理單元根據(jù)Rasterizer的samplemode調(diào)整coveragemask和坐標(biāo);另一個處理單元根據(jù)PS的samplemode調(diào)整輸出的data。然后將經(jīng)過調(diào)整的coveragemask和color輸入到一個統(tǒng)一的邏輯單元,這個邏輯單元可以用一套邏輯處理所有MSAA,TIR, VRS情況。具體設(shè)計如圖2。
Unitive Unit只用處理MSAA的所有Case。Rasterizer到OM的帶寬是固定的,也就是說Rasterizer輸出的maskbit位是不變的,在這種情況下Unitive Unit需要能處理各種sample mode的情形。我們約定Rasterizer送出門的mask代表的第一個pixel為左上點,那么這個左上點的坐標(biāo)(x,y)必須根據(jù)Rasterizer到OM的帶寬滿足對齊(aligned)的規(guī)則。
假設(shè)Rasterizer到OM帶寬是maskWidth, 一般來說maskWidth大于等于16并且是2的冪,否則就沒辦法在16x的情況下一次性表示一個完整的pixel。N是Rasterizer的samplenum.
Raster mask能表示的RT pixel個數(shù):
rasterPixelNum=(maskWidth>>log2N)
x對齊規(guī)則:
1<<(((log2rasterPixelNum)>>1)+
((log2 rasterPixelNum)&1))
y對齊規(guī)則:
1<<(((log2rasterPixelNum)>>1))(1)
以Rasterizer到OM的帶寬是16bits為例,那么在不同MSAA模式下收到的pixel左上點坐標(biāo)和PS的color筆數(shù)如表4。
為了能讓TIR和VRS共用可以處理MSAA 的Unitive Unit,我們需要調(diào)整Rasterizer輸出的mask和左上點pixel的坐標(biāo),以及PS輸出的color,使它們能滿足Unitive Unit的輸入要求,以16bits帶寬為例,即滿足表4。
2.1 Processmask Unit
首先看Processmask Unit,這個模塊需要根據(jù)Rasterizer Samplenum.和OM RT Samplenum.來調(diào)整mask和pixel坐標(biāo)。綜合前文里關(guān)于TIR和VRS的內(nèi)容,Rasterizer Sample num.和OM RT Samplenum.只有表5所示的三種組合。
Unitive Unit能處理MSAA特性,MSAA要求Rasterizer Samplenum.和OM RT Samplenum.是一樣的,所以對于TIR和VRS,在進(jìn)入Unitive Unit之前需要Processmask Unit將Rasterizer輸出的mask和pixel左上點坐標(biāo)按照OM RT標(biāo)準(zhǔn)進(jìn)行調(diào)整。也就是需要支持兩種調(diào)整:Nx Rasterizer mask進(jìn)行down-sample調(diào)整到1x OM RT的mask,或者1x Rasterizer mask進(jìn)行up-sample調(diào)整到Nx OM RT的mask.
2.2 Down-sample
Rasterizer Sample num.是N,OM RT Samplenum.是1。假設(shè)Rasterizer輸出的mask為rasterMask,pixel左上點坐標(biāo)是(x,y)。
經(jīng)過Process mask Unit調(diào)整后輸出的mask為finalMask,其寬度和rasterMask相同,調(diào)整后的pixel左上點坐標(biāo)是(finalX, finalY)。
調(diào)整的方法用偽代碼表示如下。
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。再根據(jù)pixel左上點坐標(biāo)對pixelmask進(jìn)行移位。
調(diào)整pixel左上點的坐標(biāo),OM RT Samplenum.為1時,16bit的mask是(4,4)對齊的,所以需要將表5-1???中Rasterizersamplenum.等于N對齊的坐標(biāo)調(diào)整成(4, 4)對齊的pixel坐標(biāo)。
以N=4為例,假設(shè)Rasterizer輸出的mask是b’0100 1011 0000 1111, pixel 坐標(biāo)(6,12), Pixel坐標(biāo)要從(2,2)對齊調(diào)整到(4,4)對齊,那么兩個坐標(biāo)分別在低兩位與上b'00,調(diào)整為(4,12)。mask每4bit調(diào)整成1bit,變成b'1101,然后根據(jù)坐標(biāo)確定這個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筆送進(jìn)Unitive Unit。
假設(shè)Rasterizer輸出的mask為rasterMask,pixel左上點坐標(biāo)是(x,y)。
經(jīng)過Process mask Unit調(diào)整后輸出N筆mask分別為finalMask_i,i∈[0,N-1],其寬度均和rasterMask相同,調(diào)整后的N筆pixel左上點坐標(biāo)分別是(finalX_i, finalY_i),i∈[0,N-1]。
調(diào)整的方法用下面?zhèn)未a來表示。
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(tǒng)+y_offset*y_stride;
}
以Rasterizer到OM的帶寬是16bits,N=4為例,假設(shè)Rasterizer輸出的mask是b'0100 1011 0000 1111, pixel 坐標(biāo)(24,12).這一筆數(shù)據(jù)會被拆分成4筆數(shù)據(jù)送進(jìn)Unitive Uint,如圖4所示。
2.4 Processcolor Unit
Process color Unit需要根據(jù)PS sample mode和OM RT samplemode將PS 輸出的color進(jìn)行復(fù)制,匹配Unitive Unitdataentry的輸入。綜合表1、表2、表3,只需要對VRS的color進(jìn)行展開,將PS 輸出的coarse pixel的color轉(zhuǎn)成pixel的color。
PS是1/2samplemode,一個color復(fù)制成兩份轉(zhuǎn)成1samplemode。
PS是1/4samplemode,一個color復(fù)制成四份轉(zhuǎn)成1samplemode。
PS是1/8samplemode,一個color復(fù)制成八份轉(zhuǎn)成1samplemode。
PS是1/16samplemode,一個color復(fù)制成十六份轉(zhuǎn)成1samplemode。
經(jīng)過上述的轉(zhuǎn)化Unitive Unit會認(rèn)為PS 是MSAA 的Pixel frequency,然后進(jìn)行相應(yīng)的處理。設(shè)計的時候也可以根據(jù)Unitive Unit的具體實現(xiàn)將color復(fù)制更多份(和OM RT sample mode相對應(yīng)),使Unitive Unit認(rèn)為PS是MSAA的Samplec frequency。
3 結(jié)語:算法優(yōu)點
對于已經(jīng)支持MSAA 特性的GPU,如果想升級支持D3D11.3的TIR和D3D12的VRS,在OM模塊部分不需要設(shè)計全新的邏輯,可以對這兩種新的特性進(jìn)行巧妙的轉(zhuǎn)化,然后共用MSAA的邏輯處理單元。這樣既省去了復(fù)雜的邏輯設(shè)計和驗證,也節(jié)省了gatecount。
-
光柵
+關(guān)注
關(guān)注
0文章
303瀏覽量
28470 -
gpu
+關(guān)注
關(guān)注
28文章
5194瀏覽量
135463 -
圖像
+關(guān)注
關(guān)注
2文章
1096瀏覽量
42330
原文標(biāo)題:一種同時解決目標(biāo)獨立光柵化和可變頻率的像素著色器的通用實現(xiàn)方法
文章出處:【微信號:appic-cn,微信公眾號:集成電路應(yīng)用雜志】歡迎添加關(guān)注!文章轉(zhuǎn)載請注明出處。
發(fā)布評論請先 登錄
變頻器同時帶動2個同型號電機(jī)速度不一致的解決方法
變頻器常用的頻率參數(shù)有哪些
采用電位器怎樣控制變頻器的頻率
薄膜濾波器與陣列波導(dǎo)光柵技術(shù)的比較
工程型變頻器和通用型變頻器有何區(qū)別?
目標(biāo)追蹤的簡易實現(xiàn):模板匹配
一種帶通濾波器在無位置傳感器轉(zhuǎn)子檢測中的應(yīng)用
變頻器的頻率怎么調(diào)整?
西門子變頻器維修的五種實用方法
VirtualLab:光柵的優(yōu)化與分析
VirtualLab 應(yīng)用:傾斜光柵的參數(shù)優(yōu)化及公差分析
變頻器六大調(diào)速方法的詳解及適用場景
一種同時解決目標(biāo)獨立光柵化和可變頻率的像素著色器的通用實現(xiàn)方法
評論