簡體   English   中英

將着色器資源發送到DirectX 11中的GPU

[英]Sending shader resource to GPU in DirectX 11

可以說我有一個簡單的2D紋理(着色器資源)

ID3D11ShaderResourceView* srvTexture;

和默認(立即)設備上下文

ID3D11DeviceContext* dc;

現在,我像這樣在Pixel Shader中設置紋理

ID3D11ShaderResourceView* srvArrayTexture[1];
srvArrayTexture[0] = srvTexture; 

dc->PSSetShaderResources(
0,                 // start slot (not important in this case)
1,                 // nb of views (one texture)
srvArrayTexture);  // my texture as array (because DirectX wants array)

我將這個過程理解為將實際紋理從RAM內存發送到GPU內存。 我徘徊,為什么還有類似的方法,例如VSSetShaderResources,GSSetShaderResources等。 這是否意味着每個流水線階段(VS,GS等)都有自己的GPU內存?

如果我打電話

dc->VSSetShaderResources(A);
dc->GSSetShaderResources(A);
dc->PSSetShaderResources(A);

這是否意味着我要發送三次相同的數據? 還是我的數據發送概念效率低下?

這三個功能只是將資源緩沖區中的特定資源綁定(而不是復制)到不同的着色器(頂點着色器,像素着色器,幾何着色器)。 可以在管道的不同階段讀取資源緩沖區。 在您的示例中,只有一個緩沖區“ A”。 但是,綁定到此緩沖區的着色器都有權讀取此緩沖區。

暫無
暫無

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

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