public static SharpDX.Direct3D12.ClearValue FormatToClearValue(H1PixelFormat pixelFormat, Boolean bDepth)
        {
            SharpDX.Direct3D12.ClearValue clearValue;

            clearValue.Color.X = 0.0f;
            clearValue.Color.Y = 0.0f;
            clearValue.Color.Z = 0.0f;
            clearValue.Color.W = 0.0f;

            clearValue.Format = H1RHIDefinitionHelper.ConvertToFormat(pixelFormat);
            if (clearValue.Format == SharpDX.DXGI.Format.R32_Typeless)
            {
                clearValue.Format = bDepth ? SharpDX.DXGI.Format.D32_Float : SharpDX.DXGI.Format.R32_Float;
            }

            clearValue.DepthStencil.Depth   = 0.0f;
            clearValue.DepthStencil.Stencil = 0;

            return(clearValue);
        }
Exemplo n.º 2
0
        public void CopyTextureRegion(H1Texture2D texObject, H1GeneralBuffer generalBuffer)
        {
            // reuse the memory associated with command recording
            // we can only reset when the associated command lists have finished execution on the GPU
            m_CommandList.CommandAllocator.Reset();

            // a command list can be reset after it has been added to the command queue via ExecuteCommandList
            m_CommandList.CommandList.Reset(m_CommandList.CommandAllocator, null);

            // @TODO - I need to change this into parallel copy texture region by managing multiple command queue
            H1GPUResourceManager refResourceManager = H1Global <H1ManagedRenderer> .Instance.ResourceManager;

            // create destination and source locations
            // TextureCopyLocation - describe a portion of texture for the purpose of texture copies
            TextureCopyLocation destLocation = new TextureCopyLocation(refResourceManager.GetTexture2D(Convert.ToInt32(texObject.Index)), 0);
            TextureCopyLocation srcLocation  = new TextureCopyLocation(generalBuffer.Resource,
                                                                       new PlacedSubResourceFootprint() // describes the footprint of a placed subresource, including the offset and the D3D12_SUBRESOURCE_FOOTPRINT
            {
                Offset    = 0,                                                                          // the offset of the subresource within the parent resource in bytes
                Footprint = new SubResourceFootprint()                                                  // describes the format, with, height, depth and row-pitch of the subresource into the parent resource
                {
                    Width    = Convert.ToInt32(texObject.Width),
                    Height   = Convert.ToInt32(texObject.Height),
                    Depth    = 1,
                    Format   = H1RHIDefinitionHelper.ConvertToFormat(texObject.PixelFormat),
                    RowPitch = Convert.ToInt32(texObject.Stride),
                }
            });

            m_CommandList.CommandList.ResourceBarrierTransition(texObject.Resource, ResourceStates.GenericRead, ResourceStates.CopyDestination);
            m_CommandList.CommandList.CopyTextureRegion(destLocation, 0, 0, 0, srcLocation, null);
            m_CommandList.CommandList.ResourceBarrierTransition(texObject.Resource, ResourceStates.CopyDestination, ResourceStates.GenericRead);

            m_CommandList.CommandList.Close();

            m_DeviceContext.MainCommandListPool.CommandQueue.ExecuteCommandList(m_CommandList.CommandList);
        }