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); }
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); }
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); }
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"); } } }
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); }
public DX11ResourcePoolEntry <IDX11RWStructureBuffer> LockStructuredBuffer(int stride, int numelements, eDX11BufferMode mode = eDX11BufferMode.Default, bool oneframe = false) { return(this.sbufferpool.Lock(stride, numelements, mode, oneframe)); }
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); }
public DX11ResourcePoolEntry<IDX11RWStructureBuffer> LockStructuredBuffer(int stride, int numelements, eDX11BufferMode mode = eDX11BufferMode.Default, bool oneframe = false) { return this.sbufferpool.Lock(stride, numelements, mode, oneframe); }