private void BuildDescriptorHeaps() { const int srvCount = 3; // // Create the SRV heap. // var srvHeapDesc = new DescriptorHeapDescription { DescriptorCount = srvCount + _waves.DescriptorCount, Type = DescriptorHeapType.ConstantBufferViewShaderResourceViewUnorderedAccessView, Flags = DescriptorHeapFlags.ShaderVisible }; _srvDescriptorHeap = Device.CreateDescriptorHeap(srvHeapDesc); _descriptorHeaps = new[] { _srvDescriptorHeap }; // // Fill out the heap with actual descriptors. // CpuDescriptorHandle hDescriptor = _srvDescriptorHeap.CPUDescriptorHandleForHeapStart; Resource[] tex2DList = { _textures["grassTex"].Resource, _textures["waterTex"].Resource, _textures["fenceTex"].Resource }; var srvDesc = new ShaderResourceViewDescription { Shader4ComponentMapping = D3DUtil.DefaultShader4ComponentMapping, Dimension = ShaderResourceViewDimension.Texture2D, Texture2D = new ShaderResourceViewDescription.Texture2DResource { MostDetailedMip = 0, MipLevels = -1, } }; foreach (Resource tex2D in tex2DList) { srvDesc.Format = tex2D.Description.Format; Device.CreateShaderResourceView(tex2D, srvDesc, hDescriptor); // Next descriptor. hDescriptor += CbvSrvUavDescriptorSize; } _waves.BuildDescriptors( _srvDescriptorHeap.CPUDescriptorHandleForHeapStart + srvCount * CbvSrvUavDescriptorSize, _srvDescriptorHeap.GPUDescriptorHandleForHeapStart + srvCount * CbvSrvUavDescriptorSize, CbvSrvUavDescriptorSize); }
private void BuildDescriptorHeaps() { // Offscreen RTV goes after the swap chain descriptors. const int rtvOffset = SwapChainBufferCount; const int srvCount = 3; int waveSrvOffset = srvCount; int sobelSrvOffset = waveSrvOffset + _waves.DescriptorCount; int offscreenSrvOffset = sobelSrvOffset + _sobelFilter.DescriptorCount; // // Create the SRV heap. // var srvHeapDesc = new DescriptorHeapDescription { DescriptorCount = srvCount + _waves.DescriptorCount + _sobelFilter.DescriptorCount + 1, // Extra offscreen render target. Type = DescriptorHeapType.ConstantBufferViewShaderResourceViewUnorderedAccessView, Flags = DescriptorHeapFlags.ShaderVisible }; _srvDescriptorHeap = Device.CreateDescriptorHeap(srvHeapDesc); _descriptorHeaps = new[] { _srvDescriptorHeap }; // // Fill out the heap with actual descriptors. // CpuDescriptorHandle hDescriptor = _srvDescriptorHeap.CPUDescriptorHandleForHeapStart; Resource[] tex2DList = { _textures["grassTex"].Resource, _textures["waterTex"].Resource, _textures["fenceTex"].Resource }; var srvDesc = new ShaderResourceViewDescription { Shader4ComponentMapping = D3DUtil.DefaultShader4ComponentMapping, Dimension = ShaderResourceViewDimension.Texture2D, Texture2D = new ShaderResourceViewDescription.Texture2DResource { MostDetailedMip = 0, MipLevels = -1, } }; foreach (Resource tex2D in tex2DList) { srvDesc.Format = tex2D.Description.Format; Device.CreateShaderResourceView(tex2D, srvDesc, hDescriptor); // Next descriptor. hDescriptor += CbvSrvUavDescriptorSize; } CpuDescriptorHandle srvCpuStart = _srvDescriptorHeap.CPUDescriptorHandleForHeapStart; GpuDescriptorHandle srvGpuStart = _srvDescriptorHeap.GPUDescriptorHandleForHeapStart; CpuDescriptorHandle rtvCpuStart = RtvHeap.CPUDescriptorHandleForHeapStart; _waves.BuildDescriptors( _srvDescriptorHeap.CPUDescriptorHandleForHeapStart + waveSrvOffset * CbvSrvUavDescriptorSize, _srvDescriptorHeap.GPUDescriptorHandleForHeapStart + waveSrvOffset * CbvSrvUavDescriptorSize, CbvSrvUavDescriptorSize); _sobelFilter.BuildDescriptors( srvCpuStart + sobelSrvOffset * CbvSrvUavDescriptorSize, srvGpuStart + sobelSrvOffset * CbvSrvUavDescriptorSize, CbvSrvUavDescriptorSize); _offscreenRT.BuildDescriptors( srvCpuStart + offscreenSrvOffset * CbvSrvUavDescriptorSize, srvGpuStart + offscreenSrvOffset * CbvSrvUavDescriptorSize, rtvCpuStart + rtvOffset * RtvDescriptorSize); }