ID3D12Device::CreateShaderResourceView method

Creates a shader-resource view for accessing data in a resource.

Syntax

void CreateShaderResourceView(
  ID3D12Resource                        *pResource,
  const D3D12_SHADER_RESOURCE_VIEW_DESC *pDesc,
  D3D12_CPU_DESCRIPTOR_HANDLE           DestDescriptor
);

Parameters

pResource

Type: ID3D12Resource*

A pointer to the ID3D12Resource object that represents the shader resource.

At least one of pResource or pDesc must be provided. A null pResource is used to initialize a null descriptor, which guarantees D3D11-like null binding behavior (reading 0s, writes are discarded), but must have a valid pDesc in order to determine the descriptor type.

pDesc

Type: const D3D12_SHADER_RESOURCE_VIEW_DESC*

A pointer to a D3D12_SHADER_RESOURCE_VIEW_DESC structure that describes the shader-resource view.

A null pDesc is used to initialize a default descriptor, if possible. This behavior is identical to the D3D11 null descriptor behavior, where defaults are filled in. This behavior inherits the resource format and dimension (if not typeless) and for buffers SRVs target a full buffer and are typed (not raw or structured), and for textures SRVs target a full texture, all mips and all array slices. Not all resources support null descriptor initialization.

DestDescriptor

Type: D3D12_CPU_DESCRIPTOR_HANDLE

Describes the CPU descriptor handle that represents the shader-resource view. This handle can be created in a shader-visible or non-shader-visible descriptor heap.

Return Value

Returns nothing.

Remarks

Processing YUV 4:2:0 video formats

An app must map the luma (Y) plane separately from the chroma (UV) planes. Developers do this by calling CreateShaderResourceView twice for the same texture and passing in 1-channel and 2-channel formats. Passing in a 1-channel format compatible with the Y plane maps only the Y plane. Passing in a 2-channel format compatible with the UV planes (together) maps only the U and V planes as a single resource view.

YUV 4:2:0 formats are listed in DXGI_FORMAT.

Examples

The D3D12nBodyGravity sample uses ID3D12Device::CreateShaderResourceView as follows:

Describe and create two shader resource views based on one description.

C++
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);

Refer to the Example Code in the D3D12 Reference.

Requirements

   
Target Platform Windows
Header d3d12.h
Library D3D12.lib
DLL D3D12.dll

See Also

ID3D12Device