簡體   English   中英

DirectX 11着色器資源管理

[英]DirectX 11 Shader Resource Management

我正在創建一個着色器管理系統,而不是使用Effects 11庫。 關於着色器的資源管理,我有幾個問題。

如果在着色器代碼中將某個常量緩沖區設置為某個寄存器,那么在設備上對其進行設置時是否需要將該常量設置為該寄存器? 如果我有多個使用該寄存器的着色器怎么辦?

是在兩次繪制之間在內存中保持不變的緩沖區,還是將其清除? 舉例來說,我有一個常量緩沖區,該緩沖區在上次繪制后沒有更改,是否需要重新設置?

一次設置一個或一次全部設置恆定緩沖區是否較慢?

提前致謝。

是的,您需要設置該寄存器,將其視為恆定的緩沖區插槽。

是的,它會一直保留在那里,直到您切換它為止。

“一次設置一個或一次全部設置恆定緩沖區會更慢嗎?”

“一次全部”是什么意思?

無論如何,請查看此nvidia演示以獲取有關cbuffer管理的詳細信息: https : //developer.nvidia.com/sites/default/files/akamai/gamedev/files/gdc12/Efficient_Buffer_Management_McDonald.pdf

請注意,即使您在hlsl代碼上使用完全相同的“變量”,像素着色器和頂點着色器(不同的着色器類型)也會使用不同的寄存器。 多數民眾贊成為您處理,要注意的是,要使用寄存器d3d的像素着色器版本(VSSetConstantBuffer與PSSetConstantBuffer等)將cbuffer更新到寄存器。 當然,這適用於所有類型的着色器。

因此,例如,在hlsl代碼中,您可以有兩個使用相同插槽(寄存器)的常量緩沖區,但請記住不要在同一個着色器上同時使用它們。或者再次,您可以在兩個着色器上使用相同的常量緩沖區,只記得它不是真的一樣。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM