public H1DescriptorAllocator(H1DescriptorHeapType type)
        {
            m_HeapType             = type;
            m_RemainingFreeHandles = 0;

            ConstructPlatformDependentMembers();
        }
        protected DescriptorHeap RequestNewHeap(H1DescriptorHeapType type)
        {
            DescriptorHeapType typeInDX12 = H1RHIDefinitionHelper.ConvertToDescriptorHeapType(type);

            // @TODO - need to be thread-safe
            DescriptorHeapDescription desc = new DescriptorHeapDescription();

            desc.Type            = typeInDX12;
            desc.DescriptorCount = NumDescriptorsPerHeap;

            // this part is none, but for usage in command context, you need to create new descriptor for shader-visible by UserDescriptorHeap or DynamicDescriptorHeap
            desc.Flags    = DescriptorHeapFlags.None;
            desc.NodeMask = 1;

            DescriptorHeap newHeap = m_Device.CreateDescriptorHeap(desc);

            m_DescriptorHeapPool.Add(newHeap);

            return(newHeap);
        }
        public static SharpDX.Direct3D12.DescriptorHeapType ConvertToDescriptorHeapType(H1DescriptorHeapType descriptorHeapType)
        {
            SharpDX.Direct3D12.DescriptorHeapType result = new SharpDX.Direct3D12.DescriptorHeapType();
            switch (descriptorHeapType)
            {
            case H1DescriptorHeapType.ConstantBufferView_ShaderResourceView_UnorderedAccessView:
                result = SharpDX.Direct3D12.DescriptorHeapType.ConstantBufferViewShaderResourceViewUnorderedAccessView;
                break;

            case H1DescriptorHeapType.Sampler:
                result = SharpDX.Direct3D12.DescriptorHeapType.Sampler;
                break;

            case H1DescriptorHeapType.RenderTargetView:
                result = SharpDX.Direct3D12.DescriptorHeapType.RenderTargetView;
                break;

            case H1DescriptorHeapType.DepthStencilView:
                result = SharpDX.Direct3D12.DescriptorHeapType.DepthStencilView;
                break;
            }

            return(result);
        }
 public CpuDescriptorHandle AllocateDescriptor(H1DescriptorHeapType type, Int32 count = 1)
 {
     return(m_DescriptorAllocators[Convert.ToInt32(type)].Allocate(count));
 }