ID3D12Device::CreateShaderResourceView 方法 (d3d12.h)

创建用于访问资源中的数据的着色器资源视图。

语法

void CreateShaderResourceView(
  [in, optional] ID3D12Resource                        *pResource,
  [in, optional] const D3D12_SHADER_RESOURCE_VIEW_DESC *pDesc,
  [in]           D3D12_CPU_DESCRIPTOR_HANDLE           DestDescriptor
);

参数

[in, optional] pResource

类型: ID3D12Resource*

指向表示着色器资源的 ID3D12Resource 对象的指针。

必须至少提供一个 pResourcepDesc 。 null pResource 用于初始化 null 描述符,该描述符保证 D3D11 类似 null 绑定行为 (读取 0,写入将被丢弃) ,但必须具有有效的 pDesc 才能确定描述符类型。

[in, optional] pDesc

类型: const D3D12_SHADER_RESOURCE_VIEW_DESC*

指向描述着色器资源视图 的D3D12_SHADER_RESOURCE_VIEW_DESC 结构的指针。

如果可能,将使用 null pDesc 初始化默认描述符。 此行为与填充默认值的 D3D11 null 描述符行为相同。 此行为继承资源格式和维度 (如果不是无类型) ,并且对于缓冲区 SRV,则以完整缓冲区为目标,并且类型化 (不是原始或结构化的) ,对于纹理 SRV,所有 mips 和所有数组切片。 并非所有资源都支持 null 描述符初始化。

[in] DestDescriptor

类型: D3D12_CPU_DESCRIPTOR_HANDLE

描述表示着色器资源视图的 CPU 描述符句柄。 此句柄可以在着色器可见或非着色器可见描述符堆中创建。

返回值

备注

处理 YUV 4:2:0 视频格式

应用必须将 luma (Y) 平面与色度 (UV) 平面分开映射。 开发人员通过针对同一纹理调用 CreateShaderResourceView 两次并传入 1 通道和 2 通道格式来执行此操作。 传入与 Y 平面兼容的 1 通道格式仅映射 Y 平面。 传入与 UV 平面兼容的 2 通道格式 () 仅将你和 V 平面映射为单个资源视图。

YUV 4:2:0 格式列在 DXGI_FORMAT

示例

D3D12nBodyGravity 示例使用 ID3D12Device::CreateShaderResourceView,如下所示:

根据一个说明描述并创建两个着色器资源视图。

D3D12_SHADER_RESOURCE_VIEW_DESC srvDesc = {};
srvDesc.Shader4ComponentMapping = D3D12_DEFAULT_SHADER_4_COMPONENT_MAPPING;
srvDesc.Format = DXGI_FORMAT_UNKNOWN;
srvDesc.ViewDimension = D3D12_SRV_DIMENSION_BUFFER;
srvDesc.Buffer.FirstElement = 0;
srvDesc.Buffer.NumElements = ParticleCount;
srvDesc.Buffer.StructureByteStride = sizeof(Particle);
srvDesc.Buffer.Flags = D3D12_BUFFER_SRV_FLAG_NONE;

CD3DX12_CPU_DESCRIPTOR_HANDLE srvHandle0(m_srvUavHeap->GetCPUDescriptorHandleForHeapStart(), SrvParticlePosVelo0 + index, m_srvUavDescriptorSize);
CD3DX12_CPU_DESCRIPTOR_HANDLE srvHandle1(m_srvUavHeap->GetCPUDescriptorHandleForHeapStart(), SrvParticlePosVelo1 + index, m_srvUavDescriptorSize);
m_device->CreateShaderResourceView(m_particleBuffer0[index].Get(), &srvDesc, srvHandle0);
m_device->CreateShaderResourceView(m_particleBuffer1[index].Get(), &srvDesc, srvHandle1);

请参阅 D3D12 引用中的示例代码

要求

   
目标平台 Windows
标头 d3d12.h
Library D3D12.lib
DLL D3D12.dll

请参阅

ID3D12Device