43 void GLStorageBuf::init()
47 glGenBuffers(1, &ssbo_id_);
48 glBindBuffer(GL_SHADER_STORAGE_BUFFER, ssbo_id_);
59 glBindBuffer(GL_SHADER_STORAGE_BUFFER, ssbo_id_);
61 glBindBuffer(GL_SHADER_STORAGE_BUFFER, 0);
75 "Error: Trying to bind \"%s\" ssbo to slot %d which is above the reported limit of %d.",
86 if (
data_ !=
nullptr) {
92 glBindBufferBase(GL_SHADER_STORAGE_BUFFER, slot_, ssbo_id_);
104 "Trying to use storage buf as indirect buffer but buffer was never filled.");
105 glBindBuffer(target, ssbo_id_);
112 glBindBufferBase(GL_SHADER_STORAGE_BUFFER, slot_, 0);
127 glClearNamedBufferData(ssbo_id_,
135 glBindBuffer(GL_SHADER_STORAGE_BUFFER, ssbo_id_);
136 glClearBufferData(GL_SHADER_STORAGE_BUFFER,
141 glBindBuffer(GL_SHADER_STORAGE_BUFFER, 0);
150 if (dst->ssbo_id_ == 0) {
153 if (
src->vbo_id_ == 0) {
158 glCopyNamedBufferSubData(
src->vbo_id_, dst->ssbo_id_, src_offset, dst_offset, copy_size);
163 glBindBuffer(GL_COPY_WRITE_BUFFER, dst->ssbo_id_);
164 glCopyBufferSubData(GL_ARRAY_BUFFER, GL_COPY_WRITE_BUFFER, src_offset, dst_offset, copy_size);
165 glBindBuffer(GL_COPY_WRITE_BUFFER, 0);
#define BLI_assert_msg(a, msg)
static DBVT_INLINE btScalar size(const btDbvtVolume &a)
static void buf_free(GLuint buf_id)
static GLint max_ssbo_binds
static GLint max_ssbo_size
static bool direct_state_access_support
void clear(eGPUTextureFormat internal_format, eGPUDataFormat data_format, void *data) override
void bind(int slot) override
void update(const void *data) override
GLStorageBuf(size_t size, GPUUsageType usage, const char *name)
void bind_as(GLenum target)
void copy_sub(VertBuf *src, uint dst_offset, uint src_offset, uint copy_size) override
char name_[DEBUG_NAME_LEN]
SyclQueue void void * src
void object_label(GLenum type, GLuint object, const char *name)
GLenum to_gl_internal_format(eGPUTextureFormat format)
GLenum to_gl_data_format(eGPUTextureFormat format)
static GLenum to_gl(const GPUAttachmentType type)