/// <summary> /// Creates the buffer description. /// </summary> /// <param name="size">The size (in bytes).</param> /// <param name="flags">The flags.</param> /// <param name="format">The format.</param> /// <param name="initData">The initial data.</param> /// <param name="stride">The stride.</param> /// <param name="usage">The usage.</param> /// <returns>The buffer description.</returns> public static GPUBufferDescription Buffer(int size, GPUBufferFlags flags, PixelFormat format = PixelFormat.Unknown, IntPtr initData = new IntPtr(), int stride = 0, GPUResourceUsage usage = GPUResourceUsage.Default) { GPUBufferDescription desc; desc.Size = (uint)size; desc.Stride = (uint)stride; desc.Flags = flags; desc.Format = format; desc.InitData = initData; desc.Usage = usage; return(desc); }
/// <summary> /// Creates typed buffer description. /// </summary> /// <param name="count">The elements count.</param> /// <param name="viewFormat">The view format.</param> /// <param name="isUnorderedAccess">True if use UAV, otherwise false.</param> /// <param name="usage">The usage.</param> /// <returns>The buffer description.</returns> /// <remarks> /// Example in HLSL: Buffer<float4>. /// </remarks> public static GPUBufferDescription Typed(int count, PixelFormat viewFormat, bool isUnorderedAccess = false, GPUResourceUsage usage = GPUResourceUsage.Default) { var bufferFlags = GPUBufferFlags.ShaderResource; if (isUnorderedAccess) { bufferFlags |= GPUBufferFlags.UnorderedAccess; } var stride = PixelFormatExtensions.SizeInBytes(viewFormat); return(Buffer(count * stride, bufferFlags, viewFormat, IntPtr.Zero, stride, usage)); }
/// <summary> /// Creates raw buffer description. /// </summary> /// <param name="data">The initial data.</param> /// <param name="size">The size (in bytes).</param> /// <param name="additionalFlags">The additional bindings (for example, to create a combined raw/index buffer, pass <see cref="GPUBufferFlags.IndexBuffer" />).</param> /// <param name="usage">The usage.</param> /// <returns>The buffer description.</returns> public static GPUBufferDescription Raw(IntPtr data, int size, GPUBufferFlags additionalFlags = GPUBufferFlags.None, GPUResourceUsage usage = GPUResourceUsage.Default) { return(Buffer(size, GPUBufferFlags.RawBuffer | additionalFlags, PixelFormat.R32_Typeless, data, sizeof(float), usage)); }
/// <summary> /// Creates argument buffer description. /// </summary> /// <param name="data">The initial data.</param> /// <param name="size">The size (in bytes).</param> /// <param name="usage">The usage.</param> /// <returns>The buffer description.</returns> public static GPUBufferDescription Argument(IntPtr data, int size, GPUResourceUsage usage = GPUResourceUsage.Default) { return(Buffer(size, GPUBufferFlags.Argument, PixelFormat.Unknown, data, 0, usage)); }
/// <summary> /// Creates index buffer description. /// </summary> /// <param name="elementStride">The element stride.</param> /// <param name="elementsCount">The elements count.</param> /// <param name="usage">The usage mode.</param> /// <returns>The buffer description.</returns> public static GPUBufferDescription Index(int elementStride, int elementsCount, GPUResourceUsage usage = GPUResourceUsage.Default) { var format = elementStride == 4 ? PixelFormat.R32_UInt : PixelFormat.R16_UInt; return(Buffer(elementsCount * elementStride, GPUBufferFlags.IndexBuffer, format, new IntPtr(), elementStride, usage)); }
/// <summary> /// Creates vertex buffer description. /// </summary> /// <param name="size">The size (in bytes).</param> /// <param name="usage">The usage mode.</param> /// <returns>The buffer description.</returns> public static GPUBufferDescription Vertex(int size, GPUResourceUsage usage = GPUResourceUsage.Default) { return(Buffer(size, GPUBufferFlags.VertexBuffer, PixelFormat.Unknown, new IntPtr(), 0, usage)); }
/// <summary> /// Creates vertex buffer description. /// </summary> /// <param name="elementStride">The element stride.</param> /// <param name="elementsCount">The elements count.</param> /// <param name="usage">The usage mode.</param> /// <returns>The buffer description.</returns> public static GPUBufferDescription Vertex(int elementStride, int elementsCount, GPUResourceUsage usage = GPUResourceUsage.Default) { return(Buffer(elementsCount * elementStride, GPUBufferFlags.VertexBuffer, PixelFormat.Unknown, new IntPtr(), elementStride, usage)); }