Exemplo n.º 1
0
        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));
        }
Exemplo n.º 2
0
 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));
 }
Exemplo n.º 3
0
        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));
        }
Exemplo n.º 4
0
        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);
        }
Exemplo n.º 5
0
        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));
        }
Exemplo n.º 6
0
        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);
        }
Exemplo n.º 7
0
        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);
            }
        }
Exemplo n.º 8
0
 public ResourcePoolEntry <DX11StructuredBuffer> LockStructuredBuffer <T>(int numelements, eDxBufferMode mode = eDxBufferMode.Default) where T : struct
 {
     return(this.sbufferpool.Lock(Marshal.SizeOf(typeof(T)), numelements, mode));
 }
Exemplo n.º 9
0
 public ResourcePoolEntry <DX11StructuredBuffer> LockStructuredBuffer(int stride, int numelements, eDxBufferMode mode = eDxBufferMode.Default)
 {
     return(this.sbufferpool.Lock(stride, numelements, mode));
 }