D3D11에서 ID3D11ShaderResourceView포인터를 얻어와서 텍스쳐로 사용하던것과 비슷하게 처리하려면 D3D12에선 ID3D12Device::CopyDescriptorsSimple()을 사용하면 된다.
CreateShaderResourceView()로 세팅한 Descriptor를 현재 렌더링에 사용할 Descriptor Table로 카피하면 됨.
주의사항은 source로 사용할 Descriptor는 non-shader visible descriptor 여야한다.
즉 DescriptorHeap을 만들때 다음과 같히 하면 된다.
D3D12_DESCRIPTOR_HEAP_DESC commonHeapDesc = {}; commonHeapDesc.NumDescriptors = dwMaxCount; commonHeapDesc.Type = D3D12_DESCRIPTOR_HEAP_TYPE_CBV_SRV_UAV; commonHeapDesc.Flags = D3D12_DESCRIPTOR_HEAP_FLAG_NONE; // for non-shader visible descriptor if (FAILED(m_pD3DDevice->CreateDescriptorHeap(&commonHeapDesc, IID_PPV_ARGS(&m_pHeap)))) { __debugbreak(); } m_IndexCreator.Initialize(dwMaxCount); m_DescriptorSize = m_pD3DDevice->GetDescriptorHandleIncrementSize(D3D12_DESCRIPTOR_HEAP_TYPE_CBV_SRV_UAV);
https://msdn.microsoft.com/en-us/library/dn859355(v=vs.85).aspx
For these device based (CPU timeline) descriptor copy methods, source descriptors must come from a non-shader visible descriptor heap. The destination descriptors can be in any descriptor heap that is CPU visible (shader visible or not).