最近一段時間用計算著色器完成一些影象處理的任務,遇到了不少bug,因為用cs做影象處理的資料較少,很多問題都是通過自己不斷定位,嘗試解決的。有些問題可能對別人有些參考,所以記錄一下,隨時更新。
計算著色器的計算是很快的,但是我的程式在測試的時候,會有幾十ms的延時。並且奇怪的是,同樣的電腦,vs2017版本,兩個程式,乙個重複計算幾百次有一次延時,乙個每次都有延時。最開始我認為是gpu返回太快,導致cpu掛起不成立導致延時。
後面通過不斷的注釋程式,發現是有乙個著色器程式導致了延時問題,仔細檢視。原因是我在著色器中用了執行緒組同步函式
groupmemorybarrierwithgroupsync();
並且,我在程式開始宣告的執行緒組為1024,但是我實際要處理的資料小於1024,為768。我猜測是因為處理不存在的資料(大於768)時,這時的執行緒使用執行緒組同步函式時,無法跳出,導致一直等待同步,從而造成了延時。我修改了宣告的執行緒組數後,延時已經消除。此外,上面提到兩個程式情況不一樣,程式不同在於使用的windows kit版本不一,每次都有延時使用了8.1的sdk,而另外乙個時10.***x的sdk,猜測後者可能存在某些機制,避免這種同步的bug。 著色器 unity3d教程
unity3d教程手冊 如下圖所示,在project面板中新建乙個new material.這樣子就準備好了乙個空白的著色器。它能支援的型別也就在shader中全部顯示出來。不得不說,很好很強大。所有這些pixel 畫素 著色器,預設的diffuse算是資源開銷較小的渲染選擇。隨後那些帶有凹凸貼圖的...
Unity3D內建著色器
unity內部提供了一些可以直接使用的著色器,這些內建著色器包括以下6個方面 1 performance of unity shaders specular 高光,強度和camera的觀察角度有關,main tex的alpha通道可以用來做specular map 反射貼圖,也稱gloss map ...
D3D11之快取更新 update buffer
話說這兩天我寫程式遇到乙個bug,是關於如何建立的id3d11buffer的應該以一種怎樣的方式在每幀渲染進行快取資源的更新 我總結為下 填充 頂點 快取形容結構體和子資源資料結構體,並建立頂點快取 這裡用的是動態快取 d3d11 buffer desc vertexbufferdesc verte...