Files
test/source/blender/gpu/GPU_storage_buffer.h
Sergey Sharybin c1bc70b711 Cleanup: Add a copyright notice to files and use SPDX format
A lot of files were missing copyright field in the header and
the Blender Foundation contributed to them in a sense of bug
fixing and general maintenance.

This change makes it explicit that those files are at least
partially copyrighted by the Blender Foundation.

Note that this does not make it so the Blender Foundation is
the only holder of the copyright in those files, and developers
who do not have a signed contract with the foundation still
hold the copyright as well.

Another aspect of this change is using SPDX format for the
header. We already used it for the license specification,
and now we state it for the copyright as well, following the
FAQ:

    https://reuse.software/faq/
2023-05-31 16:19:06 +02:00

73 lines
2.3 KiB
C

/* SPDX-FileCopyrightText: 2022 Blender Foundation
*
* SPDX-License-Identifier: GPL-2.0-or-later */
/** \file
* \ingroup gpu
*
* Storage buffers API. Used to handle many way bigger buffers than Uniform buffers update at once.
* Make sure that the data structure is compatible with what the implementation expect.
* (see "7.8 Shader Buffer Variables and Shader Storage Blocks" from the OpenGL spec for more info
* about std430 layout)
* Rule of thumb: Padding to 16bytes, don't use vec3.
*/
#pragma once
#include "GPU_texture.h"
#include "GPU_vertex_buffer.h"
#ifdef __cplusplus
extern "C" {
#endif
/** Opaque type hiding blender::gpu::StorageBuf. */
typedef struct GPUStorageBuf GPUStorageBuf;
GPUStorageBuf *GPU_storagebuf_create_ex(size_t size,
const void *data,
GPUUsageType usage,
const char *name);
#define GPU_storagebuf_create(size) \
GPU_storagebuf_create_ex(size, NULL, GPU_USAGE_DYNAMIC, __func__);
void GPU_storagebuf_free(GPUStorageBuf *ssbo);
void GPU_storagebuf_update(GPUStorageBuf *ssbo, const void *data);
void GPU_storagebuf_bind(GPUStorageBuf *ssbo, int slot);
void GPU_storagebuf_unbind(GPUStorageBuf *ssbo);
void GPU_storagebuf_unbind_all(void);
void GPU_storagebuf_clear_to_zero(GPUStorageBuf *ssbo);
/**
* Clear the content of the buffer using the given #clear_value. #clear_value will be used as a
* repeatable pattern of 32bits.
*/
void GPU_storagebuf_clear(GPUStorageBuf *ssbo, uint32_t clear_value);
/**
* Read back content of the buffer to CPU for inspection.
* Slow! Only use for inspection / debugging.
* NOTE: Not synchronized. Use appropriate barrier before reading.
*/
void GPU_storagebuf_read(GPUStorageBuf *ssbo, void *data);
/**
* \brief Copy a part of a vertex buffer to a storage buffer.
*
* \param ssbo: destination storage buffer
* \param src: source vertex buffer
* \param dst_offset: where to start copying to (in bytes).
* \param src_offset: where to start copying from (in bytes).
* \param copy_size: byte size of the segment to copy.
*/
void GPU_storagebuf_copy_sub_from_vertbuf(
GPUStorageBuf *ssbo, GPUVertBuf *src, uint dst_offset, uint src_offset, uint copy_size);
#ifdef __cplusplus
}
#endif