Exemplo n.º 1
0
    protected virtual void CreateDescriptorHeaps()
    {
        _rtvHeap = CreateRTVHeap(out _rtvDescriptorSize);
        _dsvHeap = CreateDSVHeap();

        ID3D12DescriptorHeap *CreateDSVHeap()
        {
            var dsvHeapDesc = new D3D12_DESCRIPTOR_HEAP_DESC {
                NumDescriptors = 1,
                Type           = D3D12_DESCRIPTOR_HEAP_TYPE_DSV,
            };

            ID3D12DescriptorHeap *dsvHeap;

            ThrowIfFailed(D3DDevice->CreateDescriptorHeap(&dsvHeapDesc, __uuidof <ID3D12DescriptorHeap>(), (void **)&dsvHeap));

            return(dsvHeap);
        }

        ID3D12DescriptorHeap *CreateRTVHeap(out uint rtvDescriptorSize)
        {
            var rtvHeapDesc = new D3D12_DESCRIPTOR_HEAP_DESC {
                NumDescriptors = FrameCount,
                Type           = D3D12_DESCRIPTOR_HEAP_TYPE_RTV,
            };

            ID3D12DescriptorHeap *rtvHeap;

            ThrowIfFailed(D3DDevice->CreateDescriptorHeap(&rtvHeapDesc, __uuidof <ID3D12DescriptorHeap>(), (void **)&rtvHeap));

            rtvDescriptorSize = D3DDevice->GetDescriptorHandleIncrementSize(D3D12_DESCRIPTOR_HEAP_TYPE_RTV);
            return(rtvHeap);
        }
    }
Exemplo n.º 2
0
        protected virtual void DestroyDescriptorHeaps()
        {
            DestroyDSVHeap();
            DestroyRTVHeap();

            void DestroyDSVHeap()
            {
                var dsvHeap = _dsvHeap;

                if (dsvHeap != null)
                {
                    _dsvHeap = null;
                    _        = dsvHeap->Release();
                }
            }

            void DestroyRTVHeap()
            {
                var rtvHeap = _rtvHeap;

                if (rtvHeap != null)
                {
                    _rtvHeap = null;
                    _        = rtvHeap->Release();
                }
            }
        }
Exemplo n.º 3
0
 public static void NameD3D12Object(ID3D12DescriptorHeap *pObject, string name)
 {
     fixed(char *pName = name)
     {
         pObject->SetName(pName);
     }
 }
Exemplo n.º 4
0
    public static ID3D12DescriptorHeap *GetLatestD3D12DescriptorHeap(ID3D12DescriptorHeap *d3d12DescriptorHeap, out uint d3d12DescriptorHeapVersion)
    {
        ID3D12DescriptorHeap *result;

        d3d12DescriptorHeapVersion = 0;
        result = d3d12DescriptorHeap;

        return(result);
    }
Exemplo n.º 5
0
    protected override void DestroyDescriptorHeaps()
    {
        DestroySRVHeap();
        base.DestroyDescriptorHeaps();

        void DestroySRVHeap()
        {
            var srvHeap = _srvHeap;

            if (srvHeap != null)
            {
                _srvHeap = null;
                _        = srvHeap->Release();
            }
        }
    }
Exemplo n.º 6
0
        protected override void DestroyDescriptorHeaps()
        {
            DestroyCBVHeap();
            base.DestroyDescriptorHeaps();

            void DestroyCBVHeap()
            {
                var cbvHeap = _cbvHeap;

                if (cbvHeap != null)
                {
                    _cbvHeap = null;
                    _        = cbvHeap->Release();
                }
            }
        }
Exemplo n.º 7
0
    protected override void CreateDescriptorHeaps()
    {
        base.CreateDescriptorHeaps();
        _srvHeap = CreateSRVHeap();

        ID3D12DescriptorHeap *CreateSRVHeap()
        {
            var srvHeapDesc = new D3D12_DESCRIPTOR_HEAP_DESC {
                NumDescriptors = 1,
                Type           = D3D12_DESCRIPTOR_HEAP_TYPE_CBV_SRV_UAV,
                Flags          = D3D12_DESCRIPTOR_HEAP_FLAG_SHADER_VISIBLE,
            };

            ID3D12DescriptorHeap *srvHeap;

            ThrowIfFailed(D3DDevice->CreateDescriptorHeap(&srvHeapDesc, __uuidof <ID3D12DescriptorHeap>(), (void **)&srvHeap));

            return(srvHeap);
        }
    }
Exemplo n.º 8
0
        protected virtual void CreateDescriptorHeaps()
        {
            _rtvHeap = CreateRTVHeap(out _rtvDescriptorSize);
            _dsvHeap = CreateDSVHeap();

            ID3D12DescriptorHeap *CreateDSVHeap()
            {
                var dsvHeapDesc = new DescriptorHeapDesc
                {
                    NumDescriptors = 1,
                    Type           = DescriptorHeapType.DescriptorHeapTypeDsv,
                };

                ID3D12DescriptorHeap *dsvHeap;

                var iid = ID3D12DescriptorHeap.Guid;

                SilkMarshal.ThrowHResult(D3DDevice->CreateDescriptorHeap(&dsvHeapDesc, &iid, (void **)&dsvHeap));

                return(dsvHeap);
            }

            ID3D12DescriptorHeap *CreateRTVHeap(out uint rtvDescriptorSize)
            {
                var rtvHeapDesc = new DescriptorHeapDesc
                {
                    NumDescriptors = FrameCount,
                    Type           = DescriptorHeapType.DescriptorHeapTypeRtv,
                };

                ID3D12DescriptorHeap *rtvHeap;

                var iid = ID3D12DescriptorHeap.Guid;

                SilkMarshal.ThrowHResult(D3DDevice->CreateDescriptorHeap(&rtvHeapDesc, &iid, (void **)&rtvHeap));

                rtvDescriptorSize = D3DDevice->GetDescriptorHandleIncrementSize
                                        (DescriptorHeapType.DescriptorHeapTypeRtv);
                return(rtvHeap);
            }
        }
Exemplo n.º 9
0
        protected override void CreateDescriptorHeaps()
        {
            _cbvHeap = CreateCBVHeap();
            base.CreateDescriptorHeaps();

            ID3D12DescriptorHeap *CreateCBVHeap()
            {
                var cbvHeapDesc = new D3D12_DESCRIPTOR_HEAP_DESC {
                    NumDescriptors = 1,
                    Flags          = D3D12_DESCRIPTOR_HEAP_FLAG_SHADER_VISIBLE,
                    Type           = D3D12_DESCRIPTOR_HEAP_TYPE_CBV_SRV_UAV,
                };

                ID3D12DescriptorHeap *cbvHeap;

                var iid = IID_ID3D12DescriptorHeap;

                ThrowIfFailed(nameof(ID3D12Device.CreateDescriptorHeap), D3DDevice->CreateDescriptorHeap(&cbvHeapDesc, &iid, (void **)&cbvHeap));

                return(cbvHeap);
            }
        }
Exemplo n.º 10
0
        protected override void Dispose(bool isDisposing)
        {
            var swapChain = _swapChain;

            if (swapChain != null)
            {
                _swapChain = null;
                _          = swapChain->Release();
            }

            var device = _device;

            if (device != null)
            {
                _device = null;
                _       = device->Release();
            }

            for (var index = 0; index < FrameCount; index++)
            {
                var renderTarget = _renderTargets[index];

                if (renderTarget != null)
                {
                    _renderTargets[index] = null;
                    _ = renderTarget->Release();
                }
            }

            var commandAllocator = _commandAllocator;

            if (commandAllocator != null)
            {
                _commandAllocator = null;
                _ = commandAllocator->Release();
            }

            var bundleAllocator = _bundleAllocator;

            if (bundleAllocator != null)
            {
                _bundleAllocator = null;
                _ = bundleAllocator->Release();
            }

            var commandQueue = _commandQueue;

            if (commandQueue != null)
            {
                _commandQueue = null;
                _             = commandQueue->Release();
            }

            var rootSignature = _rootSignature;

            if (rootSignature != null)
            {
                _rootSignature = null;
                _ = rootSignature->Release();
            }

            var rtvHeap = _rtvHeap;

            if (rtvHeap != null)
            {
                _rtvHeap = null;
                _        = rtvHeap->Release();
            }

            var pipelineState = _pipelineState;

            if (pipelineState != null)
            {
                _pipelineState = null;
                _ = pipelineState->Release();
            }

            var commandList = _commandList;

            if (commandList != null)
            {
                _commandList = null;
                _            = commandList->Release();
            }

            var bundle = _bundle;

            if (bundle != null)
            {
                _bundle = null;
                _       = bundle->Release();
            }

            var vertexBuffer = _vertexBuffer;

            if (vertexBuffer != null)
            {
                _vertexBuffer = null;
                _             = vertexBuffer->Release();
            }

            var fence = _fence;

            if (fence != null)
            {
                _fence = null;
                _      = fence->Release();
            }

            base.Dispose(isDisposing);
        }