Пример #1
0
        public TextureViewD3D11(DeviceD3D11 device, TextureD3D11 texture, TextureViewDescriptor descriptor)
            : base(texture, descriptor)
        {
            Device = device;

            if ((texture.Usage & TextureUsage.RenderTarget) != TextureUsage.None)
            {
                // TODO: Use TextureViewDescriptor
                if (!PixelFormatUtil.IsDepthStencilFormat(descriptor.Format))
                {
                    RenderTargetView = device.D3D11Device.CreateRenderTargetView(texture);
                }
                else
                {
                    DepthStencilView = device.D3D11Device.CreateDepthStencilView(texture);
                }
            }
        }
Пример #2
0
 public SamplerD3D11(DeviceD3D11 device, in SamplerDescriptor descriptor)
Пример #3
0
 public SwapchainD3D11(DeviceD3D11 device, in SwapChainDescriptor descriptor)
Пример #4
0
 public TextureD3D11(DeviceD3D11 device, in TextureDescriptor descriptor, ID3D11Texture2D nativeTexture, Format dxgiFormat)
Пример #5
0
 public ShaderD3D11(DeviceD3D11 device, in ShaderBytecode bytecode)
Пример #6
0
 public PipelineStateD3D11(DeviceD3D11 device, in RenderPipelineDescriptor descriptor)
Пример #7
0
        public FramebufferD3D11(DeviceD3D11 device, FramebufferAttachment[] colorAttachments, FramebufferAttachment?depthStencilAttachment)
            : base(device, colorAttachments, depthStencilAttachment)
        {
            if (colorAttachments.Length > 0)
            {
                RenderTargetViews = new ID3D11RenderTargetView[colorAttachments.Length];
                for (var i = 0; i < colorAttachments.Length; i++)
                {
                    var  attachment  = colorAttachments[i];
                    var  texture     = attachment.Texture;
                    var  arraySize   = texture.ArrayLayers - attachment.Slice;
                    bool isTextureMs = (int)texture.Samples > 1;

                    var d3dTexture = (TextureD3D11)texture;
                    var viewDesc   = new RenderTargetViewDescription
                    {
                        Format = d3dTexture.DXGIFormat
                    };

                    switch (texture.TextureType)
                    {
                    case TextureType.Texture1D:
                        if (arraySize > 1)
                        {
                            viewDesc.ViewDimension                  = RenderTargetViewDimension.Texture1DArray;
                            viewDesc.Texture1DArray.MipSlice        = attachment.MipLevel;
                            viewDesc.Texture1DArray.FirstArraySlice = attachment.Slice;
                            viewDesc.Texture1DArray.ArraySize       = arraySize;
                        }
                        else
                        {
                            viewDesc.ViewDimension      = RenderTargetViewDimension.Texture1D;
                            viewDesc.Texture1D.MipSlice = attachment.MipLevel;
                        }
                        break;

                    case TextureType.Texture2D:
                        if (arraySize > 1)
                        {
                            if (isTextureMs)
                            {
                                viewDesc.ViewDimension = RenderTargetViewDimension.Texture2DMultisampledArray;
                                viewDesc.Texture2DMSArray.FirstArraySlice = attachment.Slice;
                                viewDesc.Texture2DMSArray.ArraySize       = arraySize;
                            }
                            else
                            {
                                viewDesc.ViewDimension                  = RenderTargetViewDimension.Texture2DArray;
                                viewDesc.Texture2DArray.MipSlice        = attachment.MipLevel;
                                viewDesc.Texture2DArray.FirstArraySlice = attachment.Slice;
                                viewDesc.Texture2DArray.ArraySize       = arraySize;
                            }
                        }
                        else
                        {
                            if (isTextureMs)
                            {
                                viewDesc.ViewDimension = RenderTargetViewDimension.Texture2DMultisampled;
                            }
                            else
                            {
                                viewDesc.ViewDimension      = RenderTargetViewDimension.Texture2D;
                                viewDesc.Texture2D.MipSlice = attachment.MipLevel;
                            }
                        }
                        break;

                    case TextureType.Texture3D:
                        // TODO: Add RenderPassAttachment.DepthPlane
                        viewDesc.ViewDimension         = RenderTargetViewDimension.Texture3D;
                        viewDesc.Texture3D.MipSlice    = attachment.MipLevel;
                        viewDesc.Texture3D.FirstWSlice = attachment.Slice;
                        viewDesc.Texture3D.WSize       = texture.Depth;
                        break;

                    case TextureType.TextureCube:
                        if (isTextureMs)
                        {
                            viewDesc.ViewDimension = RenderTargetViewDimension.Texture2DMultisampledArray;
                            viewDesc.Texture2DMSArray.FirstArraySlice = attachment.Slice * 6;
                            viewDesc.Texture2DMSArray.ArraySize       = arraySize * 6;
                        }
                        else
                        {
                            viewDesc.ViewDimension                  = RenderTargetViewDimension.Texture2DArray;
                            viewDesc.Texture2DArray.MipSlice        = attachment.MipLevel;
                            viewDesc.Texture2DArray.FirstArraySlice = attachment.Slice * 6;
                            viewDesc.Texture2DArray.ArraySize       = arraySize * 6;
                        }
                        break;
                    }

                    RenderTargetViews[i] = device.Device.CreateRenderTargetView(d3dTexture.Resource, viewDesc);
                }
            }
            else
            {
                RenderTargetViews = new ID3D11RenderTargetView[0];
            }

            if (depthStencilAttachment != null)
            {
                var  attachment  = depthStencilAttachment.Value;
                var  texture     = attachment.Texture;
                var  d3dTexture  = (TextureD3D11)texture;
                var  arraySize   = texture.ArrayLayers - attachment.Slice;
                bool isTextureMs = (int)texture.Samples > 1;

                var viewDesc = new DepthStencilViewDescription
                {
                    Format = d3dTexture.DXGIFormat,
                    Flags  = DepthStencilViewFlags.None
                };

                switch (texture.TextureType)
                {
                case TextureType.Texture1D:
                    if (arraySize > 1)
                    {
                        viewDesc.ViewDimension                  = DepthStencilViewDimension.Texture1DArray;
                        viewDesc.Texture1DArray.MipSlice        = attachment.MipLevel;
                        viewDesc.Texture1DArray.FirstArraySlice = attachment.Slice;
                        viewDesc.Texture1DArray.ArraySize       = arraySize;
                    }
                    else
                    {
                        viewDesc.ViewDimension      = DepthStencilViewDimension.Texture1D;
                        viewDesc.Texture1D.MipSlice = attachment.MipLevel;
                    }
                    break;

                case TextureType.Texture2D:
                    if (arraySize > 1)
                    {
                        if (isTextureMs)
                        {
                            viewDesc.ViewDimension = DepthStencilViewDimension.Texture2DMultisampledArray;
                            viewDesc.Texture2DMSArray.FirstArraySlice = attachment.Slice;
                            viewDesc.Texture2DMSArray.ArraySize       = arraySize;
                        }
                        else
                        {
                            viewDesc.ViewDimension                  = DepthStencilViewDimension.Texture2DArray;
                            viewDesc.Texture2DArray.MipSlice        = attachment.MipLevel;
                            viewDesc.Texture2DArray.FirstArraySlice = attachment.Slice;
                            viewDesc.Texture2DArray.ArraySize       = arraySize;
                        }
                    }
                    else
                    {
                        if (isTextureMs)
                        {
                            viewDesc.ViewDimension = DepthStencilViewDimension.Texture2DMultisampled;
                        }
                        else
                        {
                            viewDesc.ViewDimension      = DepthStencilViewDimension.Texture2D;
                            viewDesc.Texture2D.MipSlice = attachment.MipLevel;
                        }
                    }

                    break;

                case TextureType.TextureCube:
                    if (isTextureMs)
                    {
                        viewDesc.ViewDimension = DepthStencilViewDimension.Texture2DMultisampledArray;
                        viewDesc.Texture2DMSArray.FirstArraySlice = attachment.Slice * 6;
                        viewDesc.Texture2DMSArray.ArraySize       = arraySize * 6;
                    }
                    else
                    {
                        viewDesc.ViewDimension                  = DepthStencilViewDimension.Texture2DArray;
                        viewDesc.Texture2DArray.MipSlice        = attachment.MipLevel * 6;
                        viewDesc.Texture2DArray.FirstArraySlice = attachment.Slice * 6;
                        viewDesc.Texture2DArray.ArraySize       = arraySize * 6;
                    }
                    break;

                case TextureType.Texture3D:
                    viewDesc.ViewDimension                  = DepthStencilViewDimension.Texture2DArray;
                    viewDesc.Texture2DArray.MipSlice        = attachment.MipLevel;
                    viewDesc.Texture2DArray.FirstArraySlice = attachment.Slice;
                    viewDesc.Texture2DArray.ArraySize       = texture.Depth;
                    break;

                default:
                    viewDesc.ViewDimension = DepthStencilViewDimension.Unknown;
                    Log.Error("Invalid texture type");
                    break;
                }

                DepthStencilView = device.Device.CreateDepthStencilView(d3dTexture.Resource, viewDesc);
            }
        }
Пример #8
0
 public BufferD3D11(DeviceD3D11 device, in BufferDescriptor descriptor, IntPtr initialData)
Пример #9
0
 public CommandQueueD3D11(DeviceD3D11 device, CommandQueueType queueType)
     : base(device, queueType)
 {
     _context = device.D3D11Device.CreateDeferredContext();
 }
Пример #10
0
 public CommandQueueD3D11(DeviceD3D11 device, ID3D11DeviceContext context)
     : base(device, CommandQueueType.Graphics)
 {
     _context = context;
     _isImmediate = context.ContextType == DeviceContextType.Immediate;
 }