/// <summary>
 /// Initializes a new instance of the <see cref="UAVBufferViewProxy"/> class.
 /// </summary>
 /// <param name="device">The device.</param>
 /// <param name="bufferDesc">The buffer desc.</param>
 /// <param name="uavDesc">The uav desc.</param>
 /// <param name="srvDesc">The SRV desc.</param>
 public UAVBufferViewProxy(Device device, ref BufferDescription bufferDesc, ref UnorderedAccessViewDescription uavDesc, ref ShaderResourceViewDescription srvDesc)
 {
     buffer = new SDX11.Buffer(device, bufferDesc);
     srv    = new ShaderResourceViewProxy(device, buffer);
     srv.CreateTextureView();
     uav = new UnorderedAccessView(device, buffer, uavDesc);
 }
Ejemplo n.º 2
0
 /// <summary>
 /// Create a raw buffer based UAV
 /// </summary>
 /// <param name="device">The device.</param>
 /// <param name="bufferDesc">The buffer desc.</param>
 /// <param name="uavDesc">The uav desc.</param>
 /// <param name="srvDesc">The SRV desc.</param>
 public UAVBufferViewProxy(Device device, ref BufferDescription bufferDesc,
                           ref UnorderedAccessViewDescription uavDesc, ref ShaderResourceViewDescription srvDesc)
     : this(device, ref bufferDesc, ref uavDesc)
 {
     srv = new ShaderResourceViewProxy(device, resource);
     srv.CreateTextureView();
 }
Ejemplo n.º 3
0
 /// <summary>
 /// Create a texture2D based UAV
 /// </summary>
 /// <param name="device"></param>
 /// <param name="texture2DDesc"></param>
 /// <param name="uavDesc"></param>
 /// <param name="srvDesc"></param>
 public UAVBufferViewProxy(Device device, ref Texture2DDescription texture2DDesc,
                           ref UnorderedAccessViewDescription uavDesc, ref ShaderResourceViewDescription srvDesc)
 {
     resource = new SDX11.Texture2D(device, texture2DDesc);
     srv      = new ShaderResourceViewProxy(device, resource);
     srv.CreateTextureView(ref srvDesc);
     uav = new UnorderedAccessView(device, resource, uavDesc);
 }
        /// <summary>
        ///
        /// </summary>
        /// <param name="width"></param>
        /// <param name="height"></param>
        /// <param name="createDepthStencilBuffer"></param>
        /// <param name="colorBuffer"></param>
        /// <param name="depthStencilBuffer"></param>
        /// <returns></returns>
        protected virtual void OnCreateRenderTargetAndDepthBuffers(int width, int height, bool createDepthStencilBuffer,
                                                                   out ShaderResourceViewProxy colorBuffer, out ShaderResourceViewProxy depthStencilBuffer)
        {
            var sampleDesc  = ColorBufferSampleDesc;
            var optionFlags = ResourceOptionFlags.None;

            var colordesc = new Texture2DDescription
            {
                BindFlags         = BindFlags.RenderTarget | BindFlags.ShaderResource,
                Format            = Format.B8G8R8A8_UNorm,
                Width             = width,
                Height            = height,
                MipLevels         = 1,
                SampleDescription = sampleDesc,
                Usage             = ResourceUsage.Default,
                OptionFlags       = optionFlags,
                CpuAccessFlags    = CpuAccessFlags.None,
                ArraySize         = 1
            };

            colorBuffer = Collect(new ShaderResourceViewProxy(Device, colordesc));
            colorBuffer.CreateRenderTargetView();
            colorBuffer.CreateTextureView();
            if (createDepthStencilBuffer)
            {
                var depthdesc = new Texture2DDescription
                {
                    BindFlags         = BindFlags.DepthStencil,
                    Format            = Format.D32_Float_S8X24_UInt,
                    Width             = width,
                    Height            = height,
                    MipLevels         = 1,
                    SampleDescription = sampleDesc,
                    Usage             = ResourceUsage.Default,
                    OptionFlags       = ResourceOptionFlags.None,
                    CpuAccessFlags    = CpuAccessFlags.None,
                    ArraySize         = 1,
                };
                depthStencilBuffer = Collect(new ShaderResourceViewProxy(Device, depthdesc));
                depthStencilBuffer.CreateDepthStencilView();
            }
            else
            {
                depthStencilBuffer = null;
            }
        }
Ejemplo n.º 5
0
 private void EnsureTextureResources(int w, int h, DeviceContextProxy deviceContext)
 {
     if (w != width || h != height)
     {
         RemoveAndDispose(ref ssaoView);
         width  = w;
         height = h;
         if (width > 10 && height > 10)
         {
             ssaoTextureDesc.Width  = width;
             ssaoTextureDesc.Height = height;
             ssaoView = new ShaderResourceViewProxy(deviceContext, ssaoTextureDesc);
             ssaoView.CreateTextureView();
             ssaoView.CreateRenderTargetView();
         }
     }
 }
Ejemplo n.º 6
0
            protected override void OnUpdate(RenderContext context, DeviceContextProxy deviceContext)
            {
                if (weightUpdated)
                {
                    MTWeightsB.UploadDataToBuffer(deviceContext, morphTargetWeights, morphTargetWeights.Length, 0);
                    weightUpdated = false;
                }

                if (setDeltas)
                {
                    //Setup deltas buffer
                    var c = morphTargetsDeltas.Length;
                    MTDeltasB.UploadDataToBuffer(deviceContext, morphTargetsDeltas, c);
                    RemoveAndDispose(ref mtDeltasSRV);
                    //Handle deltas srv
                    mtDeltasSRV = new ShaderResourceViewProxy(MTDeltasB.Buffer.Device, MTDeltasB.Buffer);
                    mtDeltasSRV.CreateTextureView();

                    //Setup offsets buffer
                    c = morphTargetOffsets.Length;
                    MTOffsetsB.UploadDataToBuffer(deviceContext, morphTargetOffsets, c);
                    RemoveAndDispose(ref mtOffsetsSRV);
                    //Handle offsets srv
                    mtOffsetsSRV = new ShaderResourceViewProxy(MTOffsetsB.Buffer.Device, MTOffsetsB.Buffer);
                    mtOffsetsSRV.CreateTextureView();


                    setDeltas = false;
                }

                if (setCBuffer)
                {
                    //Set Values
                    cbMorphTarget.WriteValue <int>(mtCount, 0);
                    cbMorphTarget.WriteValue <int>(mtPitch, sizeof(int));

                    //Update/upload or whatever
                    cbMorphTarget.Upload(deviceContext);

                    setCBuffer = false;
                }
            }
Ejemplo n.º 7
0
 private void CreateNonMSAADepthStencilBuffer(int width, int height)
 {
     if (HasMSAA)
     {
         var depthFormat = Format.D32_Float_S8X24_UInt;
         var depthdesc   = new Texture2DDescription
         {
             BindFlags         = BindFlags.DepthStencil | BindFlags.ShaderResource,
             Format            = DepthStencilFormatHelper.ComputeTextureFormat(depthFormat, out _),
             Width             = width,
             Height            = height,
             MipLevels         = 1,
             SampleDescription = new SampleDescription(1, 0),
             Usage             = ResourceUsage.Default,
             OptionFlags       = ResourceOptionFlags.None,
             CpuAccessFlags    = CpuAccessFlags.None,
             ArraySize         = 1,
         };
         depthStencilBufferNoMSAA = new ShaderResourceViewProxy(Device, depthdesc);
         depthStencilBufferNoMSAA.CreateDepthStencilView(new DepthStencilViewDescription()
         {
             Format    = DepthStencilFormatHelper.ComputeDSVFormat(depthFormat),
             Dimension = DepthStencilViewDimension.Texture2D
         });
         depthStencilBufferNoMSAA.CreateTextureView(new ShaderResourceViewDescription()
         {
             Format    = DepthStencilFormatHelper.ComputeSRVFormat(depthFormat),
             Dimension = global::SharpDX.Direct3D.ShaderResourceViewDimension.Texture2D,
             Texture2D = new ShaderResourceViewDescription.Texture2DResource()
             {
                 MipLevels = 1
             }
         });
     }
     else
     {
         depthStencilBufferNoMSAA = depthStencilBuffer;
     }
 }
Ejemplo n.º 8
0
            private bool CreateRenderTargets(int width, int height)
            {
                if (currWidth == width || currHeight == height)
                {
                    return(false);
                }
                DisposeAllTargets();
                currWidth  = width;
                currHeight = height;
                var tex2DDesc = new Texture2DDescription()
                {
                    Width             = width,
                    Height            = height,
                    ArraySize         = 1,
                    MipLevels         = 1,
                    SampleDescription = new SampleDescription(1, 0),
                    BindFlags         = BindFlags.RenderTarget | BindFlags.ShaderResource,
                    Usage             = ResourceUsage.Default,
                    CpuAccessFlags    = CpuAccessFlags.None,
                };

                tex2DDesc.Format = Format.R32G32_Float;
                minMaxZTarget0   = new ShaderResourceViewProxy(Device, tex2DDesc);
                minMaxZTarget0.CreateRenderTargetView();
                minMaxZTarget0.CreateTextureView();
                minMaxZTarget1 = new ShaderResourceViewProxy(Device, tex2DDesc);
                minMaxZTarget1.CreateRenderTargetView();
                minMaxZTarget1.CreateTextureView();
                minMaxZTargets[0]   = minMaxZTarget0;
                minMaxZTargets[1]   = minMaxZTarget1;
                tex2DDesc.Format    = Format.R8G8B8A8_UNorm;
                frontBlendingTarget = new ShaderResourceViewProxy(Device, tex2DDesc);
                frontBlendingTarget.CreateRenderTargetView();
                frontBlendingTarget.CreateTextureView();
                backBlendingTarget = new ShaderResourceViewProxy(Device, tex2DDesc);
                backBlendingTarget.CreateRenderTargetView();
                backBlendingTarget.CreateTextureView();
                return(true);
            }
Ejemplo n.º 9
0
            /// <summary>
            ///
            /// </summary>
            /// <param name="width"></param>
            /// <param name="height"></param>
            /// <param name="createDepthStencilBuffer"></param>
            /// <param name="colorBuffer"></param>
            /// <param name="depthStencilBuffer"></param>
            /// <returns></returns>
            protected virtual void OnCreateRenderTargetAndDepthBuffers(int width, int height, bool createDepthStencilBuffer,
                                                                       out ShaderResourceViewProxy colorBuffer, out ShaderResourceViewProxy depthStencilBuffer)
            {
                var sampleDesc  = ColorBufferSampleDesc;
                var optionFlags = ResourceOptionFlags.None;

                var colordesc = new Texture2DDescription
                {
                    BindFlags         = BindFlags.RenderTarget | BindFlags.ShaderResource,
                    Format            = Format,
                    Width             = width,
                    Height            = height,
                    MipLevels         = 1,
                    SampleDescription = sampleDesc,
                    Usage             = ResourceUsage.Default,
                    OptionFlags       = optionFlags,
                    CpuAccessFlags    = CpuAccessFlags.None,
                    ArraySize         = 1
                };

                colorBuffer = new ShaderResourceViewProxy(Device, colordesc);
                colorBuffer.CreateRenderTargetView();
                colorBuffer.CreateTextureView();
                if (createDepthStencilBuffer)
                {
                    var depthdesc = new Texture2DDescription
                    {
                        BindFlags         = BindFlags.DepthStencil,
                        Format            = DepthStencilFormatHelper.ComputeTextureFormat(Format.D32_Float_S8X24_UInt, out var canUseAsShaderResource),
                        Width             = width,
                        Height            = height,
                        MipLevels         = 1,
                        SampleDescription = sampleDesc,
                        Usage             = ResourceUsage.Default,
                        OptionFlags       = ResourceOptionFlags.None,
                        CpuAccessFlags    = CpuAccessFlags.None,
                        ArraySize         = 1,
                    };
                    canUseAsShaderResource &= !HasMSAA;
                    if (canUseAsShaderResource)
                    {
                        depthdesc.BindFlags |= BindFlags.ShaderResource;
                    }
                    depthStencilBuffer = new ShaderResourceViewProxy(Device, depthdesc);
                    depthStencilBuffer.CreateDepthStencilView(
                        new DepthStencilViewDescription()
                    {
                        Format    = DepthStencilFormatHelper.ComputeDSVFormat(depthdesc.Format),
                        Dimension = HasMSAA ? DepthStencilViewDimension.Texture2DMultisampled : DepthStencilViewDimension.Texture2D
                    });
                    if (canUseAsShaderResource)
                    {
                        depthStencilBuffer.CreateTextureView(new ShaderResourceViewDescription()
                        {
                            Format    = DepthStencilFormatHelper.ComputeSRVFormat(depthdesc.Format),
                            Dimension = global::SharpDX.Direct3D.ShaderResourceViewDimension.Texture2D,
                            Texture2D = new ShaderResourceViewDescription.Texture2DResource()
                            {
                                MipLevels = depthdesc.MipLevels
                            }
                        });
                    }
                }
                else
                {
                    depthStencilBuffer = null;
                }
            }
Ejemplo n.º 10
0
 protected override void OnBufferChanged(Buffer newBuffer)
 {
     RemoveAndDispose(ref srv);
     srv = new ShaderResourceViewProxy(newBuffer.Device, newBuffer);
     srv.CreateTextureView();
 }
Ejemplo n.º 11
0
        private bool CreateTextureResources(RenderContext context, DeviceContextProxy deviceContext)
        {
            var currSampleDesc = context.RenderHost.RenderBuffer.ColorBufferSampleDesc;

#if MSAASEPARATE
            hasMSAA = currSampleDesc.Count > 1 || currSampleDesc.Quality > 0;
#endif
            if (width != (int)context.ActualWidth || height != (int)context.ActualHeight ||
                sampleDesc.Count != currSampleDesc.Count || sampleDesc.Quality != currSampleDesc.Quality)
            {
                RemoveAndDispose(ref colorTarget);
                RemoveAndDispose(ref alphaTarget);
                RemoveAndDispose(ref colorTargetNoMSAA);
                RemoveAndDispose(ref alphaTargetNoMSAA);
                sampleDesc = currSampleDesc;

                width                       = (int)context.ActualWidth;
                height                      = (int)context.ActualHeight;
                colorDesc.Width             = alphaDesc.Width = width;
                colorDesc.Height            = alphaDesc.Height = height;
                colorDesc.SampleDescription = alphaDesc.SampleDescription = sampleDesc;
#if MSAASEPARATE
                if (hasMSAA)
                {
                    colorDesc.BindFlags = alphaDesc.BindFlags = BindFlags.RenderTarget;
                }
                else
#endif
                {
                    colorDesc.BindFlags = alphaDesc.BindFlags = BindFlags.RenderTarget | BindFlags.ShaderResource;
                }

                colorTarget = Collect(new ShaderResourceViewProxy(Device, colorDesc));
                alphaTarget = Collect(new ShaderResourceViewProxy(Device, alphaDesc));


                colorTarget.CreateRenderTargetView();
                alphaTarget.CreateRenderTargetView();
#if MSAASEPARATE
                if (!hasMSAA)
#endif
                {
                    alphaTarget.CreateTextureView();
                    colorTarget.CreateTextureView();
                    colorTargetNoMSAA = colorTarget;
                    alphaTargetNoMSAA = alphaTarget;
                }
#if MSAASEPARATE
                else
                {
                    colorDesc.SampleDescription = alphaDesc.SampleDescription = new SampleDescription(1, 0);
                    colorDesc.BindFlags         = alphaDesc.BindFlags = BindFlags.ShaderResource;
                    colorTargetNoMSAA           = Collect(new ShaderResourceViewProxy(Device, colorDesc));
                    alphaTargetNoMSAA           = Collect(new ShaderResourceViewProxy(Device, alphaDesc));
                    colorTargetNoMSAA.CreateTextureView();
                    alphaTargetNoMSAA.CreateTextureView();
                }
#endif
                InvalidateRenderer();
                return(true); // Skip this frame if texture resized to reduce latency.
            }
            return(false);
        }