假設金屬頂點着色器A
更新緩衝區buf
。另外假設我有第二個頂點着色器B
,它在A
之後編碼。 B
可以使用buf
中的結果嗎?B
可能會在A
結束之前開始執行,這意味着緩衝區的內容尚未準備好?金屬在下一個頂點着色器執行之前是否完成一個頂點着色器?
回答
第二個頂點着色器B
可以在頂點着色器A
之前自由執行,如果它們編碼在相同的MTLRenderCommandEncoder
。如果您想要讀取B
中的A
的輸出,那麼它們必須由單獨的MTLRenderCommandEncoder
編碼。
但是,請注意,相同的是而不是在MTLComputeCommandEncoder
內的計算調度的真實性。所述relevant part of the doc狀態:
執行計算命令
爲了編碼命令來執行一個計算 功能,調用dispatchThreadgroups:threadsPerThreadgroup:方法MTLComputeCommandEncoder的 並指定線程組的尺寸和 線程組的數目。您可以查詢MTLComputePipelineState的threadExecutionWidth和 maxTotalThreadsPerThreadgroup屬性爲 優化此設備上計算功能的執行。
對於compute函數的最高效的執行,設置由threadsPerThreadgroup參數傳遞給 dispatchThreadgroups指定的線程的總數 :threadsPerThreadgroup:方法來 threadExecutionWidth的倍數。線程組中的線程總數爲 threadsPerThreadgroup組件的乘積: threadsPerThreadgroup.width * threadsPerThreadgroup.height * threadsPerThreadgroup.depth。 maxTotalThreadsPerThreadgroup 屬性指定在單個線程組中可以在該設備上執行此計算功能的最大線程數。
計算命令按其編碼爲 的順序執行到命令緩衝區中。當與命令完成執行相關聯的所有 線程組以及所有 結果寫入內存時,compute命令將結束執行。由於這種排序,計算命令的結果 可用於在命令緩衝區中編碼後的任何命令。
要結束計算命令編碼器的編碼命令,請調用MTLComputeCommandEncoder的endEncoding方法。 結束前一個命令編碼器後,可以創建任何類型的新命令編碼器 以將其他命令編碼到命令緩衝區中。
- 1. GLSL:頂點着色器無片段着色片段着色器
- 2. 從頂點着色器
- 3. 頂點着色器問題
- 4. 表面着色器中的統一着色器頂點格式
- 5. OpenglES 2.0頂點着色器屬性
- 6. 在同一個程序中使用多個頂點着色器
- 7. GLSL點燃頂點着色器
- 8. 更改頂點着色器中頂點的顏色
- 9. 頂點着色器和片段着色器
- 10. 不同的頂點格式的金屬着色器
- 11. 用金屬調用頂點着色器多少次?
- 12. GLSL頂點着色器崩潰電腦
- 13. DirectX 11頂點着色器反射
- 14. GLSL頂點着色器gl_Position值
- 15. GLSL頂點着色器編譯錯誤
- 16. 頂點着色器輸入順序
- 17. 如何乘頂點着色器
- 18. 加載頂點着色器錯誤
- 19. 粒子系統的頂點着色器
- 20. 使用這個頂點着色器通過着色器值,以全局變量
- 21. C++/OpenGL/SFML頂點着色
- 22. SCN着色器金屬修改器 - 通過統一着色器
- 23. 如何將每個頂點屬性傳遞給GLSL着色器
- 24. 僅用於某些頂點的頂點着色器
- 25. OpenGL:使用頂點着色器添加頂點
- 26. 頂點着色器中的Direct3D11錯誤頂點轉換
- 27. 無法將頂點着色器中的顏色傳遞給片段着色器
- 28. ID3D11DeviceContext :: DrawIndexed方法是否等待頂點和像素着色器操作完成?
- 29. 在THREE.js頂點着色器之後得到變換後的頂點位置
- 30. 確定哪個渲染器用於頂點着色器
寫入一個渲染命令編碼器在隨後的命令編碼器中可見。在平局級別沒有這樣的保證。 – warrenm
頂點着色器輸出點。您也可以將它們用作生成將由片段着色器進行插值的數據的機會。你沒有用它們寫入緩衝區。你在着色器中寫什麼緩衝區?頂點着色器如何更新緩衝區?你是否想要問一個計算着色器而不是頂點着色器? –
您可以從頂點着色器寫入設備緩衝區,就像在計算着色器中一樣。看起來我可以通過更新頂點着色器中的某些緩衝區而不是寫入專用計算着色器來節省一些開銷。只是不確定在完成先前繪圖命令之前GPU是否開始處理下一個繪圖命令,從而使得從頂點着色器更新的設備緩衝器的內容不可預測。 Apple文檔似乎沒有解決這個問題,因爲它不符合頂點着色器的典型用法。 – gloo