Ejemplo n.º 1
0
        public DX11RWStructuredBuffer(Device dev, int elementcount, eDX11BufferMode mode)
        {
            this.Size         = elementcount * Marshal.SizeOf(typeof(T));
            this.ElementCount = elementcount;
            this.BufferType   = mode;
            this.Stride       = Marshal.SizeOf(typeof(T));

            BufferDescription bd = new BufferDescription()
            {
                BindFlags           = BindFlags.ShaderResource | BindFlags.UnorderedAccess,
                CpuAccessFlags      = CpuAccessFlags.None,
                OptionFlags         = ResourceOptionFlags.StructuredBuffer,
                SizeInBytes         = this.Size,
                StructureByteStride = Marshal.SizeOf(typeof(T)),
                Usage = ResourceUsage.Default,
            };

            this.Buffer = new Buffer(dev, bd);
            this.SRV    = new ShaderResourceView(dev, this.Buffer);

            UnorderedAccessViewDescription uavd = new UnorderedAccessViewDescription()
            {
                ElementCount = this.ElementCount,
                Format       = SlimDX.DXGI.Format.Unknown,
                Dimension    = UnorderedAccessViewDimension.Buffer,
                Flags        = (UnorderedAccessViewBufferFlags)mode
            };

            //if (allowappend) { uavd.Flags = UnorderedAccessViewBufferFlags.AllowAppend; }

            //Counter
            //uavd.Flags |= (UnorderedAccessViewBufferFlags)4;

            this.UAV = new UnorderedAccessView(dev, this.Buffer, uavd);
        }
        public DX11RWStructuredBuffer(Device dev, int elementcount, int stride, eDX11BufferMode mode)
        {
            this.Stride       = stride;
            this.Size         = elementcount * stride;
            this.ElementCount = elementcount;
            this.BufferType   = mode;

            BufferDescription bd = new BufferDescription()
            {
                BindFlags           = BindFlags.ShaderResource | BindFlags.UnorderedAccess,
                CpuAccessFlags      = CpuAccessFlags.None,
                OptionFlags         = ResourceOptionFlags.StructuredBuffer,
                SizeInBytes         = this.Size,
                StructureByteStride = this.Stride,
                Usage = ResourceUsage.Default,
            };

            this.Buffer = new Buffer(dev, bd);
            this.SRV    = new ShaderResourceView(dev, this.Buffer);

            UnorderedAccessViewDescription uavd = new UnorderedAccessViewDescription()
            {
                ElementCount = this.ElementCount,
                Format       = SlimDX.DXGI.Format.Unknown,
                Dimension    = UnorderedAccessViewDimension.Buffer,
                Flags        = (UnorderedAccessViewBufferFlags)mode
            };

            this.UAV = new UnorderedAccessView(dev, this.Buffer, uavd);
        }
Ejemplo n.º 3
0
        public void Update(IPluginIO pin, DX11RenderContext context)
        {
            if (reset || !this.FOutBuffers[0].Contains(context))
            {
                this.DisposeBuffers(context);

                eDX11BufferMode mode = this.FInAppendable[0] ? eDX11BufferMode.Append : eDX11BufferMode.Default;

                DX11RWStructuredBuffer rt = new DX11RWStructuredBuffer(context.Device, this.cnt, this.stride, mode);

                this.FOutBuffers[0][context] = rt;
            }

            this.updateddevices.Add(context);
        }
Ejemplo n.º 4
0
        public void Update(DX11RenderContext context)
        {
            if (this.updateddevices.Contains(context))
            {
                return;
            }
            if (reset || !this.FOutBuffers[0].Contains(context))
            {
                this.DisposeBuffers(context);

                eDX11BufferMode mode = this.FInMode[0];

                DX11RWStructuredBuffer rt = new DX11RWStructuredBuffer(context.Device, this.cnt, this.stride, mode);

                this.FOutBuffers[0][context] = rt;
            }

            this.updateddevices.Add(context);
        }
Ejemplo n.º 5
0
        public void Update(DX11RenderContext context)
        {
            if (reset || !this.FOutBuffers[0].Contains(context))
            {
                this.DisposeBuffers(context);

                eDX11BufferMode mode = this.FInAppendable[0] ? eDX11BufferMode.Append : eDX11BufferMode.Default;

                if (this.cnt > 0 && this.stride > 0)
                {
                    DX11RWStructuredBuffer rt = new DX11RWStructuredBuffer(context.Device, this.cnt, this.stride, mode);
                    this.FOutBuffers[0][context] = rt;
                }
                else
                {
                    this.FHost.Log(TLogType.Error, "Could not create zero size buffer");
                }
            }
        }
Ejemplo n.º 6
0
        public DX11RWStructuredBuffer(Device dev, int elementcount,int stride, eDX11BufferMode mode)
        {
            this.Stride = stride;
            this.Size = elementcount * stride;
            this.ElementCount = elementcount;
            this.BufferType = mode;

            BufferDescription bd = new BufferDescription()
            {
                BindFlags = BindFlags.ShaderResource | BindFlags.UnorderedAccess,
                CpuAccessFlags = CpuAccessFlags.None,
                OptionFlags = ResourceOptionFlags.StructuredBuffer,
                SizeInBytes = this.Size,
                StructureByteStride = this.Stride,
                Usage = ResourceUsage.Default,
            };
            this.Buffer = new Buffer(dev, bd);
            this.SRV = new ShaderResourceView(dev, this.Buffer);

            UnorderedAccessViewDescription uavd = new UnorderedAccessViewDescription()
            {
                ElementCount = this.ElementCount,
                Format = SlimDX.DXGI.Format.Unknown,
                Dimension = UnorderedAccessViewDimension.Buffer,
                Flags = (UnorderedAccessViewBufferFlags)mode
            };

            this.UAV = new UnorderedAccessView(dev, this.Buffer, uavd);
        }
Ejemplo n.º 7
0
 public DX11ResourcePoolEntry <IDX11RWStructureBuffer> LockStructuredBuffer(int stride, int numelements, eDX11BufferMode mode = eDX11BufferMode.Default, bool oneframe = false)
 {
     return(this.sbufferpool.Lock(stride, numelements, mode, oneframe));
 }
Ejemplo n.º 8
0
        public DX11ResourcePoolEntry <IDX11RWStructureBuffer> Lock(int stride, int numelements, eDX11BufferMode mode = eDX11BufferMode.Default, bool oneframe = false)
        {
            foreach (DX11ResourcePoolEntry <IDX11RWStructureBuffer> entry in this.pool)
            {
                IDX11RWStructureBuffer tr = entry.Element;

                if (!entry.IsLocked && tr.ElementCount == numelements && tr.Stride == stride && tr.BufferType == mode)
                {
                    entry.Lock();
                    return(entry);
                }
            }

            IDX11RWStructureBuffer res = new DX11RWStructuredBuffer(context.Device, numelements, stride, mode);

            DX11ResourcePoolEntry <IDX11RWStructureBuffer> newentry = new DX11ResourcePoolEntry <IDX11RWStructureBuffer>(res);

            this.pool.Add(newentry);

            return(newentry);
        }
Ejemplo n.º 9
0
 public DX11ResourcePoolEntry<IDX11RWStructureBuffer> LockStructuredBuffer(int stride, int numelements, eDX11BufferMode mode = eDX11BufferMode.Default, bool oneframe = false)
 {
     return this.sbufferpool.Lock(stride, numelements, mode, oneframe);
 }