public static DX11StructuredBuffer CreateWriteable(DxDevice device, int elemenCount, int stride, eDxBufferMode mode = eDxBufferMode.Default) { BufferDescription bd = new BufferDescription() { BindFlags = BindFlags.ShaderResource | BindFlags.UnorderedAccess, CpuAccessFlags = CpuAccessFlags.None, OptionFlags = ResourceOptionFlags.BufferStructured, SizeInBytes = stride * elemenCount, StructureByteStride = stride, Usage = ResourceUsage.Default }; return(new DX11StructuredBuffer(device, elemenCount, stride, bd, mode)); }
public static DX11StructuredBuffer CreateWriteable <T>(DxDevice device, int elementcount, eDxBufferMode mode = eDxBufferMode.Default) where T : struct { return(CreateWriteable(device, elementcount, Marshal.SizeOf(typeof(T)), mode)); }
public static DX11StructuredBuffer CreateTiled <T>(DxDevice device, int elementCount, eDxBufferMode buffermode = eDxBufferMode.Default) where T : struct { int stride = Marshal.SizeOf(typeof(T)); return(CreateTiled(device, elementCount, stride, buffermode)); }
protected DX11StructuredBuffer(DxDevice device, int elementcount, int stride, BufferDescription desc, eDxBufferMode buffermode = eDxBufferMode.Default) { this.device = device; this.ElementCount = elementcount; this.Stride = stride; this.Buffer = new SharpDX.Direct3D11.Buffer(device.Device, desc); this.ShaderView = new ShaderResourceView(device.Device, this.Buffer); this.BufferMode = buffermode; UnorderedAccessViewDescription uavd = new UnorderedAccessViewDescription() { Format = SharpDX.DXGI.Format.Unknown, Dimension = UnorderedAccessViewDimension.Buffer, Buffer = new UnorderedAccessViewDescription.BufferResource() { ElementCount = this.ElementCount, Flags = (UnorderedAccessViewBufferFlags)buffermode } }; this.UnorderedView = new UnorderedAccessView(device.Device, this.Buffer, uavd); }
public static DX11StructuredBuffer CreateTiled(DxDevice device, int elementCount, int stride, eDxBufferMode buffermode = eDxBufferMode.Default) { BufferDescription desc = new BufferDescription() { BindFlags = BindFlags.ShaderResource | BindFlags.UnorderedAccess, CpuAccessFlags = CpuAccessFlags.None, OptionFlags = ResourceOptionFlags.BufferStructured | ResourceOptionFlags.Tiled, SizeInBytes = elementCount * stride, StructureByteStride = stride, Usage = ResourceUsage.Default }; return(new DX11StructuredBuffer(device, elementCount, stride, desc, buffermode)); }
public DX11StructuredBuffer PlaceStructuredBuffer(RenderContext context, int elementCount, int stride, eDxBufferMode mode) { var buffer = DX11StructuredBuffer.CreateTiled(this.device, elementCount, stride, mode); int size = buffer.Buffer.Description.SizeInBytes; this.AggregateMemory(context, size); MapEntireResource(context, buffer.Buffer); this.currentRangeOffset = this.aggregatedPageCount; return(buffer); }
public ResourcePoolEntry <DX11StructuredBuffer> Lock(int stride, int numelements, eDxBufferMode mode = eDxBufferMode.Default) { lock (lockObject) { foreach (ResourcePoolEntry <DX11StructuredBuffer> entry in this.pool) { DX11StructuredBuffer tr = entry.Element; if (!entry.IsLocked && tr.ElementCount == numelements && tr.Stride == stride && tr.BufferMode == mode) { entry.Lock(); return(entry); } } DX11StructuredBuffer res = DX11StructuredBuffer.CreateWriteable(device, numelements, stride, mode); ResourcePoolEntry <DX11StructuredBuffer> newentry = new ResourcePoolEntry <DX11StructuredBuffer>(res); this.pool.Add(newentry); return(newentry); } }
public ResourcePoolEntry <DX11StructuredBuffer> LockStructuredBuffer <T>(int numelements, eDxBufferMode mode = eDxBufferMode.Default) where T : struct { return(this.sbufferpool.Lock(Marshal.SizeOf(typeof(T)), numelements, mode)); }
public ResourcePoolEntry <DX11StructuredBuffer> LockStructuredBuffer(int stride, int numelements, eDxBufferMode mode = eDxBufferMode.Default) { return(this.sbufferpool.Lock(stride, numelements, mode)); }