DX12學習筆記 龍書 (小點1 資源與描述符)

2021-10-06 15:29:49 字數 2196 閱讀 3385

在渲染處理的過程中,gpu可能會對資源進行讀(從存有3d場景中集合體位置資訊的緩衝區中讀取資料)

和 寫(向後台緩衝區或深度/模板緩衝區寫入資料)兩種操作。

在發出繪製命令之前,我們需要,將本次繪製調調用相關的資源link-bind到渲染流水線上。

——————————————解釋【渲染流水線】

部分資源在每次繪製呼叫是都會有變化,所以我們也就要按每次按需更新繫結。

但是gpu資源並非直接與渲染流水線相繫結

gpu---->(取)------渲染流水線(不對)

gpu----<(描述符 descriptor)------渲染流水線。

描述符可以被看做一種對送往gpu的資源進行描述的輕量級結構。被指定後,gpu可以獲得實際資料,也了解這個資料的資訊。

所以,我們將把繪製呼叫需要引用的資源,通過指定描述符的方式繫結到渲染流水線。

就是說,我們在做

-----描述符,資源》(放入)渲染流水線。這樣的工作。

這樣方便到時候取。

我們通過建立【描述符堆】來儲存程式中要用到的描述符/檢視。

id3d12descriptorheap介面來表示描述符堆。並用id3d12device::createdescriptorheap方法來建立它。

comptrmptvheap;

d3d12_descriptor_heap_desc rtvheapdesc;(我猜這個應該是對將要形成的heap進行配置的乙個結構體)

rtvheapdesc.numdescriptors=swapchainbuffercount;有幾個描述符,一般有幾個緩衝區資源就要有幾個描述符

rtvheapdesc.type=d3d12_descriptor_heap_type_rtv(表示rtv上的情況)

rtvheapdesc.flags=d3d12_descriptor_heap_flag_none;

rtvheapdesc.nodemask=0

開始生成啦!

throwiffailed(md3ddevice->createdescriptorheap(&rtvheapdesc,iid_ppv_args(mrtvheap.getaddressof()))

(把配置的內容、mptvheap的位址傳了了進去。

那麼,我的問題是,最後需要呼叫資料的時候,被呼叫的是mrtvheap?還是直接呼叫……(有人會規定好位置)。

符建立好了。但是它似乎什麼都沒有。對不,它只有乙個標記。

但是它可以從mrtvheap這裡進行訪問和處理,莫非mrtv就是那個來處理的東西?

它需要繫結到資源。然後gpu通過叫它的名字來獲得資源!?一定是如此了。

建立的描述符之後,還要能訪問。在程式中,我們通過控制代碼來引用描述符的,並以id3d12descriptorheap::getcpudescriptorhandleforheapstart方法來獲得描述符堆 中 第乙個描述符的控制代碼。

return cd3dx12_cpu_descriptor_handle(

mrtvheap->getcpudescriptorhandleforheapstart(),

mcurrbackbuffer,(!!!!!!這是啥) 這是偏移至後台緩衝區描述符控制代碼的索引。難道只是堆裡面的索引嘛。那倒是可以理解,因為乙個堆裡面也許有很多個符。通過這個找到對應的那個符

mrtvdescriptorsize)

為啥我覺得mcurrbackbuffer可以表示偏移呢。因為如果不給getcpudescriptorhandleforheapstart填後面兩個值,也是可以。比如乙個只存了乙個描述符的描述符堆。它獲得控制代碼的方式就是

mdsvheap->getcpudescriptorhandleforheapstart()

所以這個mrtvdescriptorsize,必須存在,因為為了用偏移量找到當前後台緩衝區的rtv描述符,我們必須要知道rtv描述符的大小。

控制代碼=getcpudescriptorhandleforheapstart()+mcurrbackbuffer

因為有些時候不太懂cd3dx12_cpu_descriptor_handle這是個啥玩意,是乙個函式沒錯^ ^

DX12學習筆記

d3d12中的資源許可權問題 圖形 計算類 直接命令佇列,計算命令佇列 複製類 複製命令佇列 資源可以看成是一種子資源的序列,以及每份子資源關聯的兩份許可權,圖形計算類和複製類 這兩種資源許可權的體現 cpu執行緒執行直接命令佇列 計算命令佇列中的命令時訪問子資源 cpu執行緒執行複製命令佇列中的命...

龍書dx9 紋理

本章cube例子與前面不同 使用了規範的類定義。筆記一 標頭檔案中class const static成員變數的問題 vertex.h struct vertext vertext float x,float y,float z,float nx,float ny,float nz,float u ...

DX12 混合和幾何著色器

第十章及第十二章 混合兩步即可實現 首先建立乙個pipeline stage d3d12 graphics pipeline state desc transparentpsodesc opaquepsodesc d3d12 render target blend desc transparency...