前提
DirectX-Graphics-Samples-master/Samples/Desktop/D3D12Multithreading中の153行目からのコード(C++_1)に
CBVとSRVのほかにnullSrvCountとして2個追加しているのはなぜでしょうか。
実際にnullSrvを作っている(C++_2)ところのコメントやリファレンスを読んでも、実際どういったときに使うのかがよくわかりませんでした。
実際に自分で3Dゲームを作った際には必要なCBVとSRV分のヒープを作成してうまく動作しているということもあり、そもそも設定する必要があるのかどうかも疑問です。
このNull Descriptor を用意するメリットや使い道などを教えていただければ幸いです。
C++_1
1 const UINT nullSrvCount = 2; // Null descriptors are needed for out of bounds behavior reads. 2 const UINT cbvCount = FrameCount * 2; 3 const UINT srvCount = _countof(SampleAssets::Textures) + (FrameCount * 1); 4 D3D12_DESCRIPTOR_HEAP_DESC cbvSrvHeapDesc = {}; 5 cbvSrvHeapDesc.NumDescriptors = nullSrvCount + cbvCount + srvCount; 6 cbvSrvHeapDesc.Type = D3D12_DESCRIPTOR_HEAP_TYPE_CBV_SRV_UAV; 7 cbvSrvHeapDesc.Flags = D3D12_DESCRIPTOR_HEAP_FLAG_SHADER_VISIBLE; 8 ThrowIfFailed(m_device->CreateDescriptorHeap(&cbvSrvHeapDesc, IID_PPV_ARGS(&m_cbvSrvHeap))); 9 NAME_D3D12_OBJECT(m_cbvSrvHeap);
C++_2
1 // Describe and create 2 null SRVs. Null descriptors are needed in order 2 // to achieve the effect of an "unbound" resource. 3 D3D12_SHADER_RESOURCE_VIEW_DESC nullSrvDesc = {}; 4 nullSrvDesc.ViewDimension = D3D12_SRV_DIMENSION_TEXTURE2D; 5 nullSrvDesc.Shader4ComponentMapping = D3D12_DEFAULT_SHADER_4_COMPONENT_MAPPING; 6 nullSrvDesc.Format = DXGI_FORMAT_R8G8B8A8_UNORM; 7 nullSrvDesc.Texture2D.MipLevels = 1; 8 nullSrvDesc.Texture2D.MostDetailedMip = 0; 9 nullSrvDesc.Texture2D.ResourceMinLODClamp = 0.0f; 10 11 m_device->CreateShaderResourceView(nullptr, &nullSrvDesc, cbvSrvHandle); 12 cbvSrvHandle.Offset(cbvSrvDescriptorSize); 13 14 m_device->CreateShaderResourceView(nullptr, &nullSrvDesc, cbvSrvHandle); 15 cbvSrvHandle.Offset(cbvSrvDescriptorSize);
回答1件
あなたの回答
tips
プレビュー
バッドをするには、ログインかつ
こちらの条件を満たす必要があります。
2022/08/03 11:18