Resource:ID3D11Resource跟ID3D11View

Resource:ID3D11Resource和ID3D11View

 

概述:ID3D11Resource 作为一个基类,它的子都是用于对渲染管道需要用到的数据进行封装和描述的。ID3D11View 只是对ID3D11Resource进一步的装饰。

 

资源的介绍:

资源分为缓冲资源和纹理资源

ID3D11Resource -----> ID3D11Buffer (缓冲资源)

ID3D11Resource -----> ID3D11Texture1D,ID3D11Texture2D,ID3D11Texture3D (纹理资源)

资源的属性:

Usage :资源的使用方式,例如纹理资源,是作为texture还是render target

format :数据的格式。主要是存储的格式,例如像素的存储格式之类。

pool :存放资源的存储器类型,以及管理方式。

type :资源类型。

内存划分:

1.System Memory :系统内存

2.Local Video Memory :显存,GPU会有比较高的读写能力,但是CPU读写的话效率比较低。

3.Nonlocal Video Memory (AGP/PCIE):这个是主板上的一块内存,这块内存GPU和CPU读和写的效率都比较高。

策略:如果只是CPU用的就放到系统内存,如果是GPU用的就放到LVM,如果是两者交互比较多的,就放到NVM中。此外,在使用的优先级上,GPU先使用显存,CPU先使用AGP/PCIE(效率比系统内存高)。

 

ID3D11Resource :它不能被直接使用,一般使用它的子。

GetEvictionPriority :的资源获取驱逐优先。

SetEvictionPriority :将驱逐优先的资源。

 

Java代码   Resource:ID3D11Resource跟ID3D11View
  1. DXGI_RESOURCE_PRIORITY_MINIMUM  // 最小优先级  
  2. DXGI_RESOURCE_PRIORITY_LOW  
  3. DXGI_RESOURCE_PRIORITY_NORMAL  
  4. DXGI_RESOURCE_PRIORITY_HIGH  
  5. DXGI_RESOURCE_PRIORITY_MAXIMUM // 最大优先级  

 这两个方法用于处理,当存储空间不够的时候优先释放那些内存的,主要用于对性能的优化。这里不清楚的是,不知道是先驱逐优先级高的,还是优先级低的。

getType :获取的资源的类型,一看应该很明白哦。

 

Cpp代码   Resource:ID3D11Resource跟ID3D11View
  1. typedef enum D3D11_RESOURCE_DIMENSION {   
  2.   D3D11_RESOURCE_DIMENSION_UNKNOWN    = 0,  
  3.   D3D11_RESOURCE_DIMENSION_BUFFER     = 1,  
  4.   D3D11_RESOURCE_DIMENSION_TEXTURE1D  = 2,  
  5.   D3D11_RESOURCE_DIMENSION_TEXTURE2D  = 3,  
  6.   D3D11_RESOURCE_DIMENSION_TEXTURE3D  = 4  
  7. } D3D11_RESOURCE_DIMENSION;  

 

ID3D11Buffer :缓冲区接口访问缓冲区的资源,即非结构化的内存(这里提到非结构化内存是因为还有结构化内存)。缓冲区通常存储顶点或索引数据。

 ID3D11Texture1D,ID3D11Texture2D,ID3D11Texture3D : 纹理接口访问 纹理数据,这是结构化的内存。

上述这些接口都只有一个方法:GetDesc 用来获取描述信息,这说明它们自身的内容并不是有自己提供接口给外部使用,而是借组第三方接口来进行使用。从某种意义上来讲,在我们使用的时候,我们只需把它们当中一个普通的变量即可,真正需要关注的是使用它们的类。

 

 

 

 

ID3D11View :一个ID3D11View的子类可以把渲染过程中,需要用到的一部分资源绑定到渲染管道。

 

Java代码   Resource:ID3D11Resource跟ID3D11View
  1. void GetResource(  
  2.   [out]  ID3D11Resource **ppResource  
  3. );  

 这是它的唯一方法,可以获取与之对应的资源对象。

 

ID3D11DepthStencilView :访问数据在纹理深度模版。

ID3D11RenderTargetView :访问数据的渲染目标。

ID3D11ShaderResourceView :在着色器资源的访问数据。

ID3D11UnorderedAccessView :在一个无序的资源访问数据。

 

Cpp代码   Resource:ID3D11Resource跟ID3D11View
  1. void GetDesc(  
  2.   [out]  D3D11_DEPTH_STENCIL_VIEW_DESC *pDesc  
  3. );  

与ID3D11Resource的子类相似,ID3D11View 的子类也只有一个获取状态描述的方法。为什么会出现这样的情况呢?主要是因为这些资源对象,主要是作为一种介质传入给渲染管道,然后被众多着色器使用,使用它们的数据主要是HLSL。