# ComputeBufferBinding

`import { ComputeBufferBinding } from "destack:compute/binding";`

Compute buffer binding family.

```ds title="ComputeBufferBinding"
export interface ComputeBufferBinding {
    device<T>(buffer: &'a readonly Buffer<T>): Device;
    length<T>(buffer: &'a readonly Buffer<T>): usize;
    byteLength<T>(buffer: &'a readonly Buffer<T>): usize;
    allocate<T>(device: &'a readonly Device, length: usize, options?: BufferOptions | undefined): Result<Buffer<T>, ComputeError>;
    from<T>(device: &'a readonly Device, values: [T], options?: BufferOptions | undefined): Result<Buffer<T>, ComputeError>;
    copyTo<T>(source: &'a readonly Buffer<T>, destination: &'b Buffer<T>, region: BufferCopyRegion, stream?: &'c Stream | undefined): Event;
    fill<T>(buffer: &'a Buffer<T>, value: T, stream?: &'b Stream | undefined): Event;
    read<T>(buffer: &'a readonly Buffer<T>, stream?: &'b Stream | undefined): Result<[T], ComputeError>;
    write<T>(buffer: &'a Buffer<T>, values: [T], stream?: &'b Stream | undefined): Event;
}
```

[language/library/src/compute/binding/buffer.ds:9:94](https://github.com/destack-sh/destack/blob/main/language/library/src/compute/binding/buffer.ds#L9-L94)

## Members

### `device<T>(buffer: &'a readonly Buffer<T>): Device`

Return the device that owns `buffer`.

### `length<T>(buffer: &'a readonly Buffer<T>): usize`

Return the element count.

### `byteLength<T>(buffer: &'a readonly Buffer<T>): usize`

Return the byte length.

### `allocate<T>(device: &'a readonly Device, length: usize, options?: BufferOptions | undefined): Result<Buffer<T>, ComputeError>`

Allocate a compute buffer.

### `from<T>(device: &'a readonly Device, values: [T], options?: BufferOptions | undefined): Result<Buffer<T>, ComputeError>`

Create a buffer initialized from host values.

### `copyTo<T>(source: &'a readonly Buffer<T>, destination: &'b Buffer<T>, region: BufferCopyRegion, stream?: &'c Stream | undefined): Event`

Copy bytes between compute buffers.

### `fill<T>(buffer: &'a Buffer<T>, value: T, stream?: &'b Stream | undefined): Event`

Fill one compute buffer.

### `read<T>(buffer: &'a readonly Buffer<T>, stream?: &'b Stream | undefined): Result<[T], ComputeError>`

Read a compute buffer into host memory.

### `write<T>(buffer: &'a Buffer<T>, values: [T], stream?: &'b Stream | undefined): Event`

Write host values into a compute buffer.
