> ## Documentation Index
> Fetch the complete documentation index at: https://devdocs.xbox.com/llms.txt
> Use this file to discover all available pages before exploring further.

# CreateShaderResourceView

> 创建用于访问资源中数据的着色器资源视图。(ID3D12Device.CreateShaderResourceView)

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

## 语法

```cpp theme={null}
void CreateShaderResourceView(
    ID3D12Resource  pResource,
    const D3D12_SHADER_RESOURCE_VIEW_DESC  pDesc,
    D3D12_CPU_DESCRIPTOR_HANDLE DestDescriptor
)
```

### 参数

*pResource \[in, optional]*<br />类型：ID3D12Resource \*

指向表示着色器资源的 [ID3D12Resource](/reference/graphics/d3d12_xs/interfaces/ID3D12Resource/id3d12resource_xs) 对象的指针。

必须提供 <i>pResource</i> 或 <i>pDesc</i> 中的至少一个。使用空的 <i>pResource</i> 来初始化空描述符，这将保证类似 D3D11 的空绑定行为（读取 0，写入被丢弃），但必须具有有效的 <i>pDesc</i> 才能确定描述符类型。

*pDesc \[in, optional]*<br />类型：const D3D12\_SHADER\_RESOURCE\_VIEW\_DESC \*

指向描述着色器资源视图的 [D3D12\_SHADER\_RESOURCE\_VIEW\_DESC](/reference/graphics/d3d12/structs/d3d12_shader_resource_view_desc_public) 结构体的指针。

如果可能，使用空的 <i>pDesc</i> 来初始化默认描述符。此行为与 D3D11 空描述符行为相同，其中会填入默认值。此行为继承资源格式和维度（如果不是无类型），对于缓冲区，SRV 面向整个缓冲区且为类型化（而非原始或结构化），对于纹理，SRV 面向整个纹理、所有 mip 和所有数组切片。并非所有资源都支持空描述符初始化。

*DestDescriptor \[in]*<br />类型：D3D12\_CPU\_DESCRIPTOR\_HANDLE

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

### 返回值

类型：void

无。

## 备注

<h3><a id="Processing_YUV_4_2_0_video_formats" /><a id="processing_yuv_4_2_0_video_formats" /><a id="PROCESSING_YUV_4_2_0_VIDEO_FORMATS" />处理 YUV 4:2:0 视频格式</h3> 应用程序必须将亮度 (Y) 平面与色度 (UV) 平面分开映射。开发人员通过为同一纹理调用 **CreateShaderResourceView** 两次并传入 1 通道和 2 通道格式来实现这一点。传入与 Y 平面兼容的 1 通道格式仅映射 Y 平面。传入与 UV 平面（一起）兼容的 2 通道格式仅将 U 和 V 平面映射为单个资源视图。

YUV 4:2:0 格式列在 [DXGI\_FORMAT](https://learn.microsoft.com/en-us/windows/desktop/api/dxgiformat/ne-dxgiformat-dxgi_format) 中。

#### 示例

[D3D12nBodyGravity](https://learn.microsoft.com/en-us/windows/desktop/direct3d12/working-samples) 示例按以下方式使用 **ID3D12Device::CreateShaderResourceView**：

基于一个描述描述并创建两个着色器资源视图。

```cpp theme={null}
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 参考中的示例代码](https://learn.microsoft.com/en-us/windows/desktop/direct3d12/notes-on-example-code)。

<div class="code" />

## 要求

**头文件：** d3d12\_xs.h 或 d3d12\_x.h<br />**库：** d3d12\_xs.lib 或 d3d12\_x.lib<br />**支持的平台**：XBOX Series 主机和 XBOX One 系列

## 另请参阅

[ID3D12Device](/reference/graphics/d3d12_x/interfaces/id3d12device/id3d12device)


## Related topics

- [D3D12_SHADER_RESOURCE_VIEW_DESC](/zh-CN/reference/graphics/d3d12/structs/d3d12_shader_resource_view_desc_public.md)
- [D3D12_TEX1D_SRV](/zh-CN/reference/graphics/d3d12/structs/d3d12_tex1d_srv_public.md)
- [D3D12_CPU_DESCRIPTOR_HANDLE](/zh-CN/reference/graphics/d3d12/structs/d3d12_cpu_descriptor_handle_public.md)
- [D3D12_TEX3D_SRV](/zh-CN/reference/graphics/d3d12/structs/d3d12_tex3d_srv_public.md)
- [D3D12_TEXCUBE_SRV](/zh-CN/reference/graphics/d3d12/structs/d3d12_texcube_srv_public.md)
