青青草原综合久久大伊人导航_色综合久久天天综合_日日噜噜夜夜狠狠久久丁香五月_热久久这里只有精品

維爾福

游戲開發(fā)者
隨筆 - 26, 文章 - 0, 評論 - 10, 引用 - 0
數(shù)據(jù)加載中……

D3D資源管理

摘要

受管貼圖(Managed textures,也就是我們通常所謂的“自動管理貼圖”),在DX6中首次被引入,經(jīng)過一系列的改進(jìn)和增強(qiáng),在DX9中自動管理的資源類型增加到貼圖,頂點緩沖,頂點索引緩沖,所有這些資源使用統(tǒng)一的公共接口。通過使用D3D資源管理器,應(yīng)用程序可以輕松的處理設(shè)備丟失、處理稍微過量的顯存使用。

有時開發(fā)者在使用受管資源會遇到一些困難,這部分歸咎與系統(tǒng)的抽象特性。在大多數(shù)情況下使用受管對象是不錯的選擇,但有時出于性能考慮也會使用非托管資源。這篇文章將討論一般情況下如何處理資源,受管與非受管資源的行為差別。

 

內(nèi)容

l         顯示內(nèi)存

l         受管資源

l         驅(qū)動管制資源

l         默認(rèn)資源

l         系統(tǒng)內(nèi)存資源

l         一般性的建議

 

顯示內(nèi)存

為了使得資源可以利用顯存,GPU需要通過內(nèi)存訪問定位他。GPU訪問(Local video memory)顯存是非常高效的,并且某些資源(例如RenderTarget,深度、模板緩沖)必須在本地顯存(Local video memory)定位。由于AGP的出現(xiàn),GPU可以直接訪問部分系統(tǒng)內(nèi)存,而這部分系統(tǒng)內(nèi)存區(qū)域就是所謂的非本地顯存(non-local video memory),當(dāng)然這部分內(nèi)存(顯存)也是不能挪做它用的。非本地顯存僅能被GPU訪問,與訪問本地顯存相比,其效率低一些。需要明確的是,所有AGP內(nèi)存在設(shè)備丟失時都會失效,都需要在恢復(fù)他們。

一些集成顯卡使用統(tǒng)一內(nèi)存結(jié)構(gòu)(Unified Memory Architecture),這樣主內(nèi)存可以被系統(tǒng)任何一個設(shè)備尋址。D3D支持UMA而不需要修改任何代碼,這樣我們把系統(tǒng)內(nèi)存配置為本地顯存,硬件確保資源的定位就像傳統(tǒng)的結(jié)構(gòu)一樣進(jìn)行工作。

受管資源

大部分資源應(yīng)該使用POOL_MANAGED方式創(chuàng)建,即受管資源。所有受管資源將被創(chuàng)建在系統(tǒng)內(nèi)存,在需要的時候復(fù)制到顯存。當(dāng)發(fā)生設(shè)備丟失時會自動copy系統(tǒng)內(nèi)存到顯存。既然不是所有受管資源都需要一次送入顯存,這樣你可以提交超過渲染每幀所必須使用的最小內(nèi)存容量,但是這樣會使得大量顯存內(nèi)容因為分頁操作而寫到磁盤上,這是非常耗時的。這也是為什么恢復(fù)設(shè)備如此耗時,因為需要將大量磁盤數(shù)據(jù)復(fù)制到顯存。

DX會為每份資源在最后一次使用時加上時間戳,這樣當(dāng)顯存分配失敗時,它會釋放那些最近最少使用的資源(LRU算法)。使用SetPriority函數(shù)可以標(biāo)記資源的重要程度,重要的資源優(yōu)于時間戳的判斷,所以那些比較常用的資源應(yīng)該設(shè)置高優(yōu)先級,而不用擔(dān)心因為時間戳過期而導(dǎo)致資源被釋放。在DX9中,驅(qū)動程序提供的顯存管理信息是非常有限的,運行時可能不得不清除大量資源用于分配足夠的內(nèi)存。設(shè)置適合的優(yōu)先級是非常有用的,這樣D3D不會清除那些馬上又需要使用的資源。應(yīng)用程序可以強(qiáng)制調(diào)用EvictManagedResources清除所有受管資源,但是如果下一幀又需要重新加載這些資源,這將是非常耗時的,不過這個函數(shù)在那些場景明顯需要改變(比如進(jìn)入下一個關(guān)卡)的情況下,還是非常有用的。

如果“當(dāng)前幀”內(nèi)需要非常多資源用于渲染,這將是件麻煩的事情,用前面的LRU方式調(diào)度資源效率就不太理想了,這個時候使用MRU資源調(diào)度方式取代,即優(yōu)先清理那些比較活躍的資源。注意,這里“當(dāng)前幀”的概念是指BeginSceneEndScene之間的需要渲染的幀。

開發(fā)人員如果想得到關(guān)于受管資源的更多信息,可以通過IDirect3DQuery9接口查詢,但是這個接口僅能用于調(diào)試模式(debug runtimes),在發(fā)布版本中,應(yīng)用程序不能依靠改接口的信息做任何假定。

了解資源管理如何工作可以幫助我們調(diào)試、調(diào)整程序,重要的是應(yīng)用程序不要太過依賴當(dāng)前的運行庫(或者驅(qū)動程序)的資源管理方式,驅(qū)動更新有可能導(dǎo)致其行為發(fā)生變化,將來的D3D將會有套久經(jīng)考驗的資源管理方式。

驅(qū)動程序管理的資源

D3D驅(qū)動可以自由的實現(xiàn)“由驅(qū)動管理貼圖”的特性,通過D3DCAPS2_CANMANAGERESOURCE段可以查詢硬件驅(qū)動是否支持這個特性,這樣驅(qū)動將代替D3D運行庫管理資源。對于級少數(shù)的硬件是支持這個特性的,對于大多數(shù)硬件則不盡相同,你可以咨詢你的產(chǎn)品提供商獲得這方面信息。一般情況下,你可是使用D3DCREATE_DISABLE_DRIVER_MANAGEMENT方式創(chuàng)建設(shè)備,這樣將由D3D運行庫來管理資源。

缺省資源管理(非受管資源)

雖然受管資源非常簡單,容易使用,高效,但是有時我們希望直接往顯存里寫東西,這種情況下我們需要使用POOL_DEFAULT方式創(chuàng)建資源。使用這種方式會增加程序的復(fù)雜性,代碼需要應(yīng)付所有設(shè)備丟失的情況,并需要謹(jǐn)慎考慮何時復(fù)制數(shù)據(jù)到顯存。錯誤的指定USAGE_WRITEONLY標(biāo)記或者鎖定渲染目標(biāo)(Render Target)將嚴(yán)重影響性能。

鎖定POOL_DEFAULT類型的資源很可能導(dǎo)致GPU停止運轉(zhuǎn),這與POOL_MANAGED類型的資源是不同的,除非使用一些特性的指示標(biāo)記。根據(jù)資源當(dāng)前的位置不同,鎖定后得到的指針也不相同,可能是一塊臨時的系統(tǒng)內(nèi)存,也可能直接指向AGP內(nèi)存。如果是臨時的系統(tǒng)內(nèi)存,Unlock后將把這段數(shù)據(jù)送入顯存,這是因為如果顯卡資源不是只寫的(write-only),Lock的時候數(shù)據(jù)將不得不被送入一段臨時的內(nèi)存;如果指向的AGP內(nèi)存區(qū)域,臨時的拷貝是可以避免的,但是cache的行為將會降低性能。

為了避免在寫入一整行數(shù)據(jù)(a full cache line of data)進(jìn)入AGP內(nèi)存區(qū)導(dǎo)致write-combing性能下降(一般是由于發(fā)生了一次讀寫周期),順序的訪問AGP內(nèi)存是推薦的做法,如果你的程序需要隨機(jī)的訪問AGP內(nèi)存,而你又不希望使用受管資源,那么你可以使用系統(tǒng)內(nèi)存作為替代方案,這樣當(dāng)你生成了數(shù)據(jù)之后,可以lock后拷貝,這樣不會帶來太大的性能損失,這里的性能損失一般是由緩沖的“寫搜索”操作引起。(注,這里關(guān)于詞匯cache write-combing譯者也不知道對應(yīng)的中文含義,只能按照字面意思翻譯,見諒)

對于某些類型的資源,使用LOCK_NOOVERWRITE標(biāo)記會使添加數(shù)據(jù)比較有效率,但是多次的LockUnlock同一資源還是需要盡量避免的,適當(dāng)?shù)睦枚喾N不同的鎖定標(biāo)記對于效率優(yōu)化使非常重要的,就像填充鎖定內(nèi)存區(qū)域最好使用cache友好的(cache-friendly)數(shù)據(jù)訪問方式一樣。

受管資源和缺省資源混合使用

受管資源與非受管資源的混合分配使用可能導(dǎo)致顯存碎塊,并且擾亂受管資源使用的內(nèi)存區(qū)域。最好在使用受管資源前使用非受管資源,或者使用受管資源后使用EvictManagedResources函數(shù)清除那些受管資源再使用非受管資源。記住,所有非受管資源都會常駐顯存,這樣其他內(nèi)存需求就不能使用了。

注意,與以往的DX版本不同,在顯存缺乏時,如果分配非受管資源失敗,DX9會自動清除受管資源,這有可能導(dǎo)致潛在的顯存碎塊,甚至把資源放入不適當(dāng)?shù)牡胤剑ū热绶潜镜貎?nèi)存的靜態(tài)貼圖區(qū))。所以,最好在使用受管資源之前分配全部的非受管資源。

動態(tài)缺省資源

如果數(shù)據(jù)需要很高頻率更新,那最好使用非受管資源,并使用USAGE_DYNAMIC標(biāo)記,這樣驅(qū)動會決定最適合的地方放置這些需要經(jīng)常更新的數(shù)據(jù)。這通常意味著放置在非本地顯存中,這樣對于GPU來說,訪問速度可能相對要慢一些。而對于UMA架構(gòu),驅(qū)動將會選擇CPU訪問效率較高的特殊地方放置這些數(shù)據(jù)。

這種用法(動態(tài)缺省資源類型)一般用于軟蒙皮和基于CPU計算的粒子系統(tǒng)的頂點/頂點索引的Buffer填充,LOCK_DISCARD標(biāo)記可以保證資源仍被使用的時候,鎖定操作不會導(dǎo)致系統(tǒng)停止暫停工作。在這種情況下,使用受管資源會更新系統(tǒng)內(nèi)存,然后拷貝到顯存。對于系統(tǒng)的非本地內(nèi)存,多余拷貝是不需要的。

標(biāo)準(zhǔn)的貼圖是不允許鎖定的,僅僅可以通過UpdateSurfaceUpdateTexture函數(shù)更新。一些系統(tǒng)支持動態(tài)貼圖,它可以通過配合使用LOCK_DISCARD標(biāo)記進(jìn)行鎖定,但這需要檢查D3DCAPS2_DYNAMICTEXTURES硬件能力。對于高動態(tài)貼圖(如視頻、程序生成貼圖),最好使用非受管資源和系統(tǒng)內(nèi)存資源,并且通過UpdateTexture函數(shù)更新貼圖。對于高頻度的粒子更新,UpdateTexture函數(shù)可能是最好的選擇。

在有限的總線-內(nèi)存帶寬下,靜態(tài)貼圖資源應(yīng)該使用POOL_MANAGED方式,這樣可以確保它最好的利用本地顯存,并有較好的效率。對于“半靜態(tài)”資源,使用動態(tài)類型資源有時會獲得更好的效率。

系統(tǒng)內(nèi)存資源

資源可以使用POOL_SYSTEMMEM方式創(chuàng)建。但他們不能用于圖形管線,他們僅能做為源數(shù)據(jù)用于更新POOL_DEFAULT類型的資源,這是通過UpdateSurfaceUpdateTexture函數(shù)完成的。他們的鎖定操作也非常簡單,盡管他們同樣可能因為前面提到的原因?qū)е孪到y(tǒng)停止運轉(zhuǎn)。

雖然是在系統(tǒng)內(nèi)存中創(chuàng)建資源,但POOL_SYSTEMMEM所支持的資源格式和能力(比如最大尺寸)是受硬件、驅(qū)動限制的。同樣是在系統(tǒng)內(nèi)存中創(chuàng)建資源的POOL_SCRATCH則沒有這方面限制,它支持所有格式和能力,但設(shè)備卻不能直接訪問它。SCRATCH類型資源一般用于內(nèi)容創(chuàng)建工具。

一般性的建議

了解資源管理的技術(shù)實現(xiàn)細(xì)節(jié)對達(dá)成你的程序的性能目標(biāo)是有非常大的幫助的,規(guī)劃你的資源如何交給D3D并設(shè)計好的結(jié)構(gòu)以便能及時加載必要的數(shù)據(jù)是一件非常復(fù)雜的工作,為此我們給出一些好的實踐經(jīng)驗做為一般性的原則:

l         預(yù)處理你的資源。不要將耗時的加載資源、資源轉(zhuǎn)換、資源優(yōu)化丟給用戶去做,雖然這樣便于開發(fā),但確讓用戶無法忍受。預(yù)處理這些資源可以加快加載,更快使用,你的用戶也會發(fā)現(xiàn)你的程序跑的更快了。

l         避免在每幀創(chuàng)建過多的資源。對于過多的資源加載,可以把他們分到多幀里完成或者不要急于釋放那些暫時不用的資源。

l         確保在一幀結(jié)束時已經(jīng)斷開了所有資源通道。(比如,頂點流,texture stages,頂點索引)。

l         對于貼圖,建議使用壓縮貼圖(DXTn)格式,建議使用mip-map或者將小貼圖拼接為大貼圖使用。

l         建議使用頂點索引,這將減少數(shù)據(jù)傳輸量。

l         對于過渡的優(yōu)化資源管理是需要謹(jǐn)慎的。如果你的程序過分依賴驅(qū)動、硬件和操作系統(tǒng)的某些特征,那么這些程序、硬件的修改將會導(dǎo)致潛在的性能問題。
http://m.shnenglu.com/richardhe/articles/69204.html

posted on 2012-03-09 15:33 weierfu 閱讀(432) 評論(0)  編輯 收藏 引用


只有注冊用戶登錄后才能發(fā)表評論。
網(wǎng)站導(dǎo)航: 博客園   IT新聞   BlogJava   博問   Chat2DB   管理


青青草原综合久久大伊人导航_色综合久久天天综合_日日噜噜夜夜狠狠久久丁香五月_热久久这里只有精品
  • <ins id="pjuwb"></ins>
    <blockquote id="pjuwb"><pre id="pjuwb"></pre></blockquote>
    <noscript id="pjuwb"></noscript>
          <sup id="pjuwb"><pre id="pjuwb"></pre></sup>
            <dd id="pjuwb"></dd>
            <abbr id="pjuwb"></abbr>
            亚洲欧美电影在线观看| 欧美激情精品久久久久久黑人| 久久综合九色九九| 亚洲欧美激情视频| 日韩午夜免费视频| 欧美电影资源| 久久精品国产77777蜜臀| 亚洲精品男同| 又紧又大又爽精品一区二区| 久久精品最新地址| 欧美aⅴ一区二区三区视频| 开元免费观看欧美电视剧网站| 亚洲一区高清| 欧美伊人久久久久久久久影院| 亚洲激情社区| 91久久精品一区二区别| 亚洲承认在线| 亚洲国产成人久久| 国产综合亚洲精品一区二| 亚洲国产乱码最新视频| 亚洲日本免费| 亚洲欧美日韩综合| 麻豆91精品91久久久的内涵| 亚洲美女视频网| 欧美在线资源| 欧美大片一区二区三区| 国产精品一区二区三区免费观看| 国产视频丨精品|在线观看| 国产一区999| 含羞草久久爱69一区| 国产主播一区二区三区| 午夜欧美大片免费观看| 亚洲高清一区二| 久久久久一区| 最新中文字幕一区二区三区| 亚洲精品一区二区三区蜜桃久| 午夜影院日韩| 欧美日本一道本| 国产精品任我爽爆在线播放 | 国产亚洲欧美激情| 国产欧美亚洲日本| 国产欧美日韩一区二区三区在线观看 | 亚洲性感激情| 亚洲精品美女91| 免费高清在线一区| 国产综合av| 亚洲一区二区网站| 欧美~级网站不卡| 在线亚洲电影| 欧美成人在线网站| 国产一区高清视频| 欧美激情一区二区在线 | 久久久久久久久一区二区| 亚洲欧美日韩视频一区| 国产精品影片在线观看| 欧美影院视频| 一区二区三区视频在线| 欧美日韩高清不卡| 午夜精品国产| 久久久久免费观看| 久久综合久久美利坚合众国| 欧美成人午夜激情视频| 一区二区日韩伦理片| 亚洲一区二区成人在线观看| 国产精品久久999| 欧美一区二区三区在线播放| 亚洲愉拍自拍另类高清精品| 欧美日韩国产电影| 久久综合色一综合色88| 国产精品一区二区三区久久| 欧美成人午夜激情在线| 欧美日韩在线综合| 久久午夜激情| 欧美午夜精品久久久久久孕妇| 亚洲主播在线观看| 亚洲视频 欧洲视频| 欧美中文字幕久久| 国产精品xxxxx| 亚洲欧洲精品一区二区精品久久久| 国产日韩综合一区二区性色av| 99精品国产福利在线观看免费 | 影音先锋亚洲电影| 亚洲欧美激情诱惑| 亚洲精品国产拍免费91在线| 国产精品综合av一区二区国产馆| 亚洲狼人综合| 亚洲国产三级网| 亚洲欧美在线x视频| 欧美freesex8一10精品| 狠狠综合久久av一区二区小说 | 亚洲激情综合| 一区二区三区欧美激情| 日韩视频在线免费| 欧美专区18| 久久精品国产精品| 欧美午夜视频网站| 91久久一区二区| 快播亚洲色图| 一区二区三区四区五区精品| 欧美三级视频在线| 在线一区二区视频| 午夜精品久久久久久久久久久久 | 亚洲国内精品| 一本一本久久a久久精品综合麻豆 一本一本久久a久久精品牛牛影视 | 久久精品视频在线| 久久婷婷丁香| 欧美电影打屁股sp| 亚洲在线观看免费视频| 韩国三级在线一区| 久久人人爽人人爽爽久久| 久久久综合网站| 亚洲最新色图| 亚洲大胆人体视频| 欧美日韩第一区| 亚洲专区免费| 欧美不卡视频一区| 一本久道久久综合婷婷鲸鱼| 亚洲精品色图| 亚洲区国产区| 久久精品主播| 中日韩高清电影网| 欧美在线免费观看亚洲| 欧美国产激情二区三区| 午夜伦理片一区| 西西人体一区二区| 99亚洲一区二区| 亚洲另类自拍| 制服诱惑一区二区| 一区二区三区四区国产精品| 亚洲精品一区在线| 99re6这里只有精品视频在线观看 99re6这里只有精品 | 久久午夜激情| 欧美承认网站| 欧美日韩精品系列| 国产精品第13页| 亚洲精选大片| 亚洲成人在线免费| 欧美久久久久久| 亚洲高清色综合| 一区二区91| 国产精品亚洲产品| 午夜在线视频一区二区区别| 久久精品国产精品亚洲综合 | 亚洲一二三区在线观看| 日韩视频一区| 一区二区欧美日韩视频| 亚洲欧洲视频| 欧美在线视频一区二区三区| 欧美成人69av| 亚洲第一综合天堂另类专| 亚洲第一综合天堂另类专| 亚洲欧美成人一区二区在线电影| 久久国产精品一区二区| 裸体丰满少妇做受久久99精品| 久久久久一区二区三区四区| 欧美韩日精品| 欧美一级播放| 亚洲美女在线观看| 欧美一区网站| 欧美日韩国产91| 日韩手机在线导航| 久久久精品一区| 午夜精品久久久久久久久久久| 男男成人高潮片免费网站| 欧美制服丝袜| 亚洲韩国青草视频| 久久精品首页| 久久久一本精品99久久精品66| 国产九区一区在线| 亚洲少妇中出一区| 亚洲国产精品久久人人爱蜜臀| 久久综合久色欧美综合狠狠| 一区在线视频观看| 亚洲三级性片| 久久久天天操| 亚洲视频在线一区| 亚洲精品自在久久| 国产一区二区三区高清在线观看| 久久久精品一区二区三区| 在线视频欧美日韩精品| 欧美日韩一卡二卡| 在线观看亚洲专区| 久久久夜夜夜| 久久九九精品| 1024成人网色www| 亚洲欧美日本国产专区一区| 国产精品一区二区男女羞羞无遮挡| 久久精品理论片| 久久精品亚洲国产奇米99| 亚洲福利视频网| 久久久久久亚洲精品中文字幕| 亚洲欧美在线磁力| 亚洲男女毛片无遮挡| 韩国精品在线观看| 久久精品女人天堂| 亚洲伊人伊色伊影伊综合网| 亚洲欧美精品伊人久久| 在线观看亚洲精品视频| aa成人免费视频| 国产午夜精品久久久久久久|