一共有四個方法進行對資源進行更新:
cpu呼叫:
id3d11devicecontext::map
gpu呼叫:
id3d11devicecontext::copysubresourceregion
id3d11devicecontext::copyresource
id3d11devicecontext::updatesubresource
首先如果想更新gpu中的resource,1是可以通過map()函式來讓cpu讀寫gpu的資料;2還可以通過id3d11devicecontext::copyresource(),id3d11devicecontext::updatesubresource()等來直接讓gpu寫更新它自己的resource。
資源建立時都會描述資源的d3d11_usage 特性:
d3d11_usage_default
d3d11_usage_immutable
d3d11_usage_dynamic
d3d11_usage_staging
這四種針對不同的cpu和gpu訪問許可權的情況
copysubresourceregion:
void copysubresourceregion(
[in] id3d10resource *pdstresource, // 目標
[in] uint dstsubresource, // 目標的子
[in] uint dstx, // 左上角開始的起始位置
[in] uint dsty,
[in] uint dstz,
[in] id3d10resource *psrcresource, // 源
[in] uint srcsubresource, // 源的子
[in] const d3d10_box *psrcbox // box 描述拷貝資源的區域
);
如果可以的話,盡量全部拷貝,常見使用即可,微軟的東西不穩定。d3d11_subresource_data 根本就不能直接賦值2d紋理,如果很難用不如不提供。
copyresource:
void copyresource(
[in] id3d10resource *pdstresource,
[in] id3d10resource *psrcresource
);
copysubresourceregion的簡潔版
updatesubresource:
void updatesubresource(
[in] id3d10resource *pdstresource,
[in] uint dstsubresource,
[in] const d3d10_box *pdstbox,
[in] const void *psrcdata,
[in] uint srcrowpitch,
[in] uint srcdepthpitch
);
其實copysubresourceregion針對的是d3d建立的資源,這些資源或者就儲存在gpu裡面,而updatesubresource跟多的是把記憶體中的一些外來物種溶於到裡面去,所以叫更新值。這裡讓描述源每行的跨度,而不是像d3d11_subresource_data 要求描述目標的跨度,目標的跨度並不等於每一行的畫素,它是大於的。
補充:default用於gpu快速讀寫,並且只能用updatesubresource()來更新。immutable用於被gpu唯讀,其中存放的資料不可變。dynamic提供快速的cpu寫和較慢的gpu讀。只能用map()來更新。staging提供了一種方法讓你可以讀取gpu寫回的資料。扼要歸納綜合來說:必要cpu常常更新的資料用dynamic,必要cpu常常更新的可用default,完全不必要cpu更新的資料用immutable,cpu必要讀的用staging。綜上所述,我們的cb一樣平常是要常常被更新的,以是用dynamic較為符合,進而可推斷,用map較符合,同時nvdia也表達保舉利用dynamic+map。這個跟硬體實現其實關係也挺大。updatesubresource()必要體系記憶體和特別的拷貝操縱,而map()則不必要這些。
CPU和GPU的區別
cpu 即 處理器,解釋計算機指令以及處理計算機軟體中的資料 gpu即圖形處理器,專門處理和繪製圖形相關的硬體。gpu時專為執行複雜的數學和 集合計算而設計的,有了它,cpu就從圖形處理的任務中解放出來,可以執行其他更多的 系統任務。硬體加速 在計算機中把計算量非常大的工作非陪給專門的硬體處理,減輕...
CPU和GPU的區別
個人認為cpu和gpu各有自己的適應領域。cpu central processing unit 計算核心較少,通常是雙核 四核 八核,但是擁有大量的共享快取 亂序執行等優化,可以做邏輯非常複雜的計算任務。這一點就當前的gpu來說,仍然難以做到。會犧牲大量的效能 造成大量的能耗開銷,而且增加了程式設...
組成 GPU與CPU的比較
不管是cpu還是gpu都是很高速的裝置,然而從主存中取資料會很慢很慢,為了充分利用高速裝置,二者都使用了快取,程式設計一定要考慮的是電腦程式的區域性性 locality 的基本屬性 時間區域性性與空間區域性性。多核時代和gpu並行運算時代來臨,另外乙個影響程式執行的速度的關鍵因素 快取一致性 cac...