In Shadeup buffers are used to store data on the GPU. The data exists on both the CPU and GPU, but the CPU data is typically used to upload and download data to and from the GPU.

Creating a buffer

Uploading data to a buffer

Use buffer.upload() to send the data currently on the CPU to the GPU. Data is also automatically uploaded when the buffer is used in a shader just before dispatch.

Downloading data from a buffer

Use buffer.download() to download the data currently on the GPU to the CPU. This is a blocking operation and needs to wait for the GPU to finish before it can return. The example below uses a compute shader to fill the data, a later section will explain compute shaders.

Downloading data from a buffer asynchronously

You can call buffer.download() in an async { ... } block to download the data asynchronously. This will not block the CPU “thread” (we’re still operating in the world of Javascript here)

Buffers in shaders

Buffers can be used in shaders by indexing them with an integer.

Structured buffers

Buffers can also be used to store structs.

Note that any structs used in buffers are serialized and will not contain pointers, references, or non-GPU types (string, dynamicly sized arrays, maps, etc).