(
device: GPUDevice,
size: number,
options?: { readonly label?: string; readonly alignment?: number }
)
| 189 | * `device.limits.minUniformBufferOffsetAlignment` (commonly 256). This helper does not enforce that. |
| 190 | */ |
| 191 | export function createUniformBuffer( |
| 192 | device: GPUDevice, |
| 193 | size: number, |
| 194 | options?: { readonly label?: string; readonly alignment?: number } |
| 195 | ): GPUBuffer { |
| 196 | if (!Number.isFinite(size) || size <= 0) { |
| 197 | throw new Error(`createUniformBuffer(size): size must be a positive number. Received: ${String(size)}`); |
| 198 | } |
| 199 | |
| 200 | const alignment = options?.alignment ?? 16; |
| 201 | const alignedSize = alignTo(size, Math.max(4, alignment)); |
| 202 | |
| 203 | const maxSize = device.limits.maxUniformBufferBindingSize; |
| 204 | if (alignedSize > maxSize) { |
| 205 | throw new Error( |
| 206 | `createUniformBuffer(size): requested size ${alignedSize} exceeds device.limits.maxUniformBufferBindingSize (${maxSize}).` |
| 207 | ); |
| 208 | } |
| 209 | |
| 210 | return device.createBuffer({ |
| 211 | label: options?.label, |
| 212 | size: alignedSize, |
| 213 | usage: GPUBufferUsage.UNIFORM | GPUBufferUsage.COPY_DST, |
| 214 | }); |
| 215 | } |
| 216 | |
| 217 | /** |
| 218 | * Writes CPU data into a uniform buffer (default offset 0). |
no test coverage detected