如何比較高效地往vertex shader傳乙個較長的陣列 大概是float4 1024 這樣的量級

時間 2021-05-08 00:27:19

1樓:hziee

移動裝置上,很多裝置支援不到float4[1024]的uniform吧?

我記得es2下, 比較老的裝置只有 256 個 float4

2樓:Steven Liu

NVIDIA 的卡,用 constant buffer 傳比較有效率。AMD 的卡,把資料綁成 SRV 傳入 GPU比較有效率。實際上 AMD GCN 的卡用 SRV 讀取頂點資訊都比用 vertex buffer 讀取頂點資訊更有效率。

手機上貌似不少型號 vertex shader 取樣就不支援,所以只能用 constant buffer 傳?

另外聽你描述貌似是想傳 GI 資料到頂點去,用 SH 的話用 2 階的正好乙個 float4 不行麼?

漏看了,原來你想存骨骼相關的係數。這個係數是否是0-1區間的?每組係數是否像法線一樣是歸一化的?你的係數能否統一縮放到 0-1區間?資訊量太少。

3樓:Ragnarok

我不是很清楚移動端,就說說PC端的一些做法作為參考吧。

首先看vs如何index這些buffer,也就是read bandwidth/cache方面的考量。如果是大規模random access,則推薦使用TBuffer或者使用Texture;如果是sequence access,則使用CBuffer。所以一般骨骼推薦使用TBuffer或者Tex,因為是random access。

其次是cpu->gpu方面的bandwidth的考量。我個人覺得有這種需求的話,應該考慮一下其他的實現方法或者改一種思路了,有這麼大量的資料需要per frame cpu update本身就太奇怪,不知道能否告知為什麼要這麼做。總的來說最好是GPU->GPU的per frame資料,也就是init的時候CPU transfer to GPU,之後的每幀都在GPU裡計算然後GPU再用,類似compute pipeline。

如果真的需要CPU去做,那麼推薦壓縮。8bit的float的精度可能太低而且在GPU中不好decode,如果float是normalized,推薦使用任意bit的fixed point格式。另外在GPU中最好不要做type conversion,效率低到爆。

最後SH是想說什麼問題我沒太看懂。。。

總之還是推薦再考慮一下其他的思路,這種實現本身就自帶不少坑

4樓:大薩比

首先,建議先把東西做出來,profiling結果如果確定頻寬是瓶頸再進行優化。

你所說的頻寬問題可能存在兩方面,buffer的上載頻寬和vs的讀取頻寬問題。

移動平台一般是一體化記憶體,不同於PC,上載不存在複製。只是修改資料時會稍微慢一點。只要資料大小本身合理,一般不會有問題。

如果將buffer改成texture的話vs讀取可能會變慢,至少桌面級GPU上貼圖讀取都是比較慢的操作。

另外如果資料需要補間請考慮texture。

packing的話在資料量,頂點數都很大的情況下效果非常好。結果還是具體問題具體分析。

那種學習方法比較高效?

活在人間 在這裡我想說兩點 1.這是其實個假命題,只要你的智力,精力是正常的,就不可能學習效率低。真正的問題是這真的是你想學的嗎?2.如何分辨 你需要學的知識 和 你以為你需要學的知識 為什麼有些東西學的快?感興趣唄 為什麼感興趣?基本分為兩種 1.帶來身體上,感官上的刺激出現愉悅感 比如吃喝玩樂,...

中級會計怎麼複習比較高效?

幽蘭馨語 想學的高效,我個人覺得有兩點很重要 一是提前做好學習安排,二是網課。提前安排好今天要學的內容,不僅能節省很多沒必要浪費的時間,同時還能督促我們學習。效率就很高。網課我覺得是考試必備的,看網課不僅學習效率高,那些知識點還能學的很紮實。就拿我上年看的南文文核心800題來說。跟著老師一節課學下來...

HR 怎樣篩選簡歷並安排面試比較高效?

鹽鹽在上班 面對大量簡歷,招聘人員能否在較短的時間內挑選出合適的應聘者進入下一輪測試,對於有效招聘具有決定性意義。一些面試官在拿到乙份簡歷時,並不知道該從何看起,先看什麼 後看什麼,重點看哪些內容。在面試的過程中,面試官沒有太多的時間閱讀和分析簡歷,特別是在校園招聘季,面試節奏非常緊張,因此面試官必...