---
name: "SDL_CreateGPUBuffer"
section: "3"
platform: "linux"
package: "libsdl3-doc"
version: "3.2.10+ds-1"
release: "Debian 13 (Trixie)"
platforms: ["linux"]
url: "https://new.carta.tech/SDL_CreateGPUBuffer"
---

# SDL\_CreateGPUBuffer(3)

Creates a buffer object to be used in graphics or compute workflows.

## NAME

SDL\_CreateGPUBuffer - Creates a buffer object to be used in graphics or compute workflows.

## HEADER FILE

Defined in SDL3/SDL\_gpu.h

## SYNOPSIS

```
#include "SDL3/SDL.h"
```

**SDL\_GPUBuffer \* SDL\_CreateGPUBuffer(**     **SDL\_GPUDevice \*device,**     **const SDL\_GPUBufferCreateInfo \*createinfo);**

## DESCRIPTION

The contents of this buffer are undefined until data is written to the buffer.

Note that certain combinations of usage flags are invalid. For example, a buffer cannot have both the VERTEX and INDEX flags.

If you use a STORAGE flag, the data in the buffer must respect std140 layout conventions. In practical terms this means you must ensure that vec3 and vec4 fields are 16-byte aligned.

For better understanding of underlying concepts and memory management with SDL GPU API, you may refer

this blog post ⟨URL: https://moonside.games/posts/sdl-gpu-concepts-cycling/ ⟩

.

There are optional properties that can be provided through **props** . These are the supported properties:

•  **SDL\_PROP\_GPU\_BUFFER\_CREATE\_NAME\_STRING** :\
   a name that can be displayed in debugging tools.

## FUNCTION PARAMETERS

- *device*

  a GPU Context.

- *createinfo*

  a struct describing the state of the buffer to create.

## RETURN VALUE

( **SDL\_GPUBuffer**\
  \*) Returns a buffer object on success, or NULL on failure; call  **SDL\_GetError** () for more information.

## AVAILABILITY

This function is available since SDL 3.2.0.

## SEE ALSO

**•**(3), [**SDL\_UploadToGPUBuffer**(3)](/SDL_UploadToGPUBuffer/3.md), **•**(3), [**SDL\_DownloadFromGPUBuffer**(3)](/SDL_DownloadFromGPUBuffer/3.md), **•**(3), [**SDL\_CopyGPUBufferToBuffer**(3)](/SDL_CopyGPUBufferToBuffer/3.md), **•**(3), [**SDL\_BindGPUVertexBuffers**(3)](/SDL_BindGPUVertexBuffers/3.md), **•**(3), [**SDL\_BindGPUIndexBuffer**(3)](/SDL_BindGPUIndexBuffer/3.md), **•**(3), [**SDL\_BindGPUVertexStorageBuffers**(3)](/SDL_BindGPUVertexStorageBuffers/3.md), **•**(3), [**SDL\_BindGPUFragmentStorageBuffers**(3)](/SDL_BindGPUFragmentStorageBuffers/3.md), **•**(3), [**SDL\_DrawGPUPrimitivesIndirect**(3)](/SDL_DrawGPUPrimitivesIndirect/3.md), **•**(3), [**SDL\_DrawGPUIndexedPrimitivesIndirect**(3)](/SDL_DrawGPUIndexedPrimitivesIndirect/3.md), **•**(3), [**SDL\_BindGPUComputeStorageBuffers**(3)](/SDL_BindGPUComputeStorageBuffers/3.md), **•**(3), [**SDL\_DispatchGPUComputeIndirect**(3)](/SDL_DispatchGPUComputeIndirect/3.md), **•**(3), [**SDL\_ReleaseGPUBuffer**(3)](/SDL_ReleaseGPUBuffer/3.md)
