D3D12-ID3D12Device::CopyDescriptorsSimple()의 사용

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).


답글 남기기

댓글을 게시하려면 다음의 방법 중 하나를 사용하여 로그인 하세요:

WordPress.com 로고

WordPress.com의 계정을 사용하여 댓글을 남깁니다. 로그아웃 /  변경 )

Facebook 사진

Facebook의 계정을 사용하여 댓글을 남깁니다. 로그아웃 /  변경 )

%s에 연결하는 중