Blender  V3.3
Namespaces | Macros
gpu_uniform_buffer.cc File Reference
#include "MEM_guardedalloc.h"
#include <cstring>
#include "BLI_blenlib.h"
#include "BLI_math_base.h"
#include "gpu_backend.hh"
#include "gpu_node_graph.h"
#include "GPU_material.h"
#include "GPU_uniform_buffer.h"
#include "gpu_uniform_buffer_private.hh"

Go to the source code of this file.

Namespaces

 blender
 
 blender::gpu
 

Macros

#define MAX_UBO_GPU_TYPE   GPU_MAT4
 

Functions

Uniform buffer from GPUInput list
static eGPUType get_padded_gpu_type (LinkData *link)
 
static int inputs_cmp (const void *a, const void *b)
 
static void buffer_from_list_inputs_sort (ListBase *inputs)
 
static size_t buffer_size_from_list (ListBase *inputs)
 
static void buffer_fill_from_list (void *data, ListBase *inputs)
 
C-API
GPUUniformBufGPU_uniformbuf_create_ex (size_t size, const void *data, const char *name)
 
GPUUniformBufGPU_uniformbuf_create_from_list (ListBase *inputs, const char *name)
 
void GPU_uniformbuf_free (GPUUniformBuf *ubo)
 
void GPU_uniformbuf_update (GPUUniformBuf *ubo, const void *data)
 
void GPU_uniformbuf_bind (GPUUniformBuf *ubo, int slot)
 
void GPU_uniformbuf_unbind (GPUUniformBuf *ubo)
 
void GPU_uniformbuf_unbind_all ()
 

Macro Definition Documentation

◆ MAX_UBO_GPU_TYPE

#define MAX_UBO_GPU_TYPE   GPU_MAT4

Function Documentation

◆ buffer_fill_from_list()

static void buffer_fill_from_list ( void data,
ListBase inputs 
)
inlinestatic

◆ buffer_from_list_inputs_sort()

static void buffer_from_list_inputs_sort ( ListBase inputs)
static

Make sure we respect the expected alignment of UBOs. mat4, vec4, pad vec3 as vec4, then vec2, then floats.

Definition at line 83 of file gpu_uniform_buffer.cc.

References BLI_assert_msg, BLI_insertlinkafter(), BLI_listbase_sort(), BLI_remlink(), LinkData::data, GPU_FLOAT, GPU_MAT3, GPU_VEC3, if(), input, inputs, inputs_cmp(), LISTBASE_FOREACH, MAX_UBO_GPU_TYPE, and LinkData::next.

Referenced by GPU_uniformbuf_create_from_list().

◆ buffer_size_from_list()

static size_t buffer_size_from_list ( ListBase inputs)
inlinestatic

◆ get_padded_gpu_type()

static eGPUType get_padded_gpu_type ( LinkData link)
static

We need to pad some data types (vec3) on the C side To match the GPU expected memory block alignment.

Definition at line 55 of file gpu_uniform_buffer.cc.

References LinkData::data, GPU_FLOAT, GPU_VEC3, GPU_VEC4, if(), input, and LinkData::next.

Referenced by buffer_fill_from_list(), and buffer_size_from_list().

◆ GPU_uniformbuf_bind()

void GPU_uniformbuf_bind ( GPUUniformBuf ubo,
int  slot 
)

◆ GPU_uniformbuf_create_ex()

GPUUniformBuf* GPU_uniformbuf_create_ex ( size_t  size,
const void data,
const char *  name 
)

◆ GPU_uniformbuf_create_from_list()

GPUUniformBuf* GPU_uniformbuf_create_from_list ( struct ListBase inputs,
const char *  name 
)

◆ GPU_uniformbuf_free()

void GPU_uniformbuf_free ( GPUUniformBuf ubo)

◆ GPU_uniformbuf_unbind()

void GPU_uniformbuf_unbind ( GPUUniformBuf ubo)

◆ GPU_uniformbuf_unbind_all()

void GPU_uniformbuf_unbind_all ( void  )

Definition at line 226 of file gpu_uniform_buffer.cc.

Referenced by draw_shgroup(), and DRW_state_reset().

◆ GPU_uniformbuf_update()

void GPU_uniformbuf_update ( GPUUniformBuf ubo,
const void data 
)

◆ inputs_cmp()

static int inputs_cmp ( const void a,
const void b 
)
static

Returns 1 if the first item should be after second item. We make sure the vec4 uniforms come first.

Definition at line 71 of file gpu_uniform_buffer.cc.

References Freestyle::a, usdtokens::b(), LinkData::data, and GPUInput::type.

Referenced by buffer_from_list_inputs_sort().