1 Resource的创建与存放。 

    如何创建3D资源对3D应用的性能影响比较大,因此3D应用开发者最好对这部分深入了解,以便配合D3D Runtime和Display Driver把不同类型、不同用途的Resource创建在最合适的地方。

     在创建D3D资源时,可以存放到三种类型的Memory:System Memory,AGP Memory, Video Memory.

  • System Memory:就是系统内存,存放在System Memory上的Resource是不能直接被GPU访问的,对于GPU来说是不可见的,这种Resource必须经过拷贝才能运用到GPU的渲染中。
  • AGP Memory:  也叫Share System Memory或者Non-Local  Video Memory, 其实就是系统内存的一部分,只是这部分内存已经被Mapping为显存的一部分,不但CPU可以访问这部分内存,而且GPU也可以通过PCI-E/AGP总线透明访问这部分内存,就像显存一样,但GPU访问速度比显存慢,毕竟经过映射,而且还要走PCI-E总线进行读写。
  • Video Memory: 显存,也叫做Local Video Memory, 只有GPU可以访问,CPU不可见也不能访问,速度最快。

      对于3D应用来说,资源创建在哪里并没有完全的决定权,最终决定权在D3DRuntime和显卡驱动,以及VideoMemoryManager的策略,但是3D应用可以通过在创建资源时设置一些Flags,以便使Runtime和Driver更加正确有效的管理资源。其中有两个Flags最为关键,D3DPOOL和D3DUSAGE,两者必须配合使用。

 下图为独立显卡的存储架构:

 

 下图为集成显卡的存储架构:

 

 

2 D3DPOOL

     D3DPOOL包括D3DPOOL_DEFAULT、D3DPOOL_MANAGED、D3DPOOL_SYSTEMMEM、D3DPOOL_SCRATCH。

  • D3DPOOL_DEFAULT:一般存放在video memory或AGP memory中。由于在系统内存中没有备份,在Device Lost时需要释放后重新创建。
  • D3DPOOL_MANAGED:和D3DPOOL_DEFAULT的区别在于D3DRuntime会在System Memory中为其创建备份,Device Lost后不需要处理,D3DRuntime会自动用备份通过显卡驱动重新创建出资源。
  • D3DPOOL_SYSTEMMEM只存放于系统内存中,这种资源不能被GPU访问,Device Lost后不需要处理。

      在创建Resource时,对指定 D3DPOOL时有些限制,比如创建RenderTarget和DepthStencil只能标志为D3DPOOL_DEFAULT,被指定为dynamic的resource只能标志为D3DPOOL_DEFAULT或D3DPOOL_SYSTEMMEM,详细可参考D3D SDK 文档。

3,    D3DUSAGE

D3DUSAGE用于标志D3D Resource的用途,下表为D3DUSAGE和各种资源的组合。X代表此Usage可用于某Resource的创建。

Usage

Vertex buffer create

Index buffer create

Texture create

Cube texture create

Volume texture create

Surface create

Check device format

D3DUSAGE_AUTOGENMIPMAP

   

x

x

   

x

D3DUSAGE_DEPTHSTENCIL

   

x

x

 

x

x

D3DUSAGE_DMAP

   

x

     

x

D3DUSAGE_DONOTCLIP

x

x

         

D3DUSAGE_DYNAMIC

x

x

x

x

x

 

x

D3DUSAGE_NONSECURE

x

x

x

x

x

x

x

D3DUSAGE_NPATCHES

x

x

         

D3DUSAGE_POINTS

x

x

         

D3DUSAGE_RTPATCHES

x

x

         

D3DUSAGE_RENDERTARGET

   

x

x

 

x

x

D3DUSAGE_SOFTWAREPROCESSING

x

x

x

x

x

 

x

D3DUSAGE_TEXTAPI

x

 

x

       

D3DUSAGE_WRITEONLY

x

x

         

        

posted on 2013-04-03 20:50  Just a Programer  阅读(2488)  评论(0编辑  收藏  举报