在渲染處理的過程中,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...