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 描述符,该描述符保证 (读取 0 (类似于 D3D11 的 null 绑定行为,写入) 被丢弃,但必须具有有效的 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 视频格式

应用必须将亮度 (Y) 平面与色度 (UV) 平面分开映射。 开发人员为此,针对同一纹理调用 CreateShaderResourceView 两次,并采用 1 通道和 2 通道格式传递。 传入与 Y 平面兼容的 1 通道格式仅映射 Y 平面。 传入与 UV 平面兼容的 2 通道格式 (一起) 仅将 you 和 V 平面映射为单个资源视图。

DXGI_FORMAT 中列出了 YUV 4:2:0 格式。

示例

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