|
Blender V4.3
|
#include "MEM_guardedalloc.h"#include <cstring>#include "BLI_blenlib.h"#include "BLI_math_base.h"#include "gpu_backend.hh"#include "gpu_node_graph.hh"#include "GPU_context.hh"#include "GPU_material.hh"#include "GPU_uniform_buffer.hh"#include "gpu_context_private.hh"#include "gpu_uniform_buffer_private.hh"Go to the source code of this file.
Namespaces | |
| namespace | blender |
| namespace | 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 | |
| GPUUniformBuf * | GPU_uniformbuf_create_ex (size_t size, const void *data, const char *name) |
| GPUUniformBuf * | GPU_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_bind_as_ssbo (GPUUniformBuf *ubo, int slot) |
| void | GPU_uniformbuf_unbind (GPUUniformBuf *ubo) |
| void | GPU_uniformbuf_debug_unbind_all () |
| void | GPU_uniformbuf_clear_to_zero (GPUUniformBuf *ubo) |
Referenced by buffer_from_list_inputs_sort().
|
inlinestatic |
Definition at line 172 of file gpu_uniform_buffer.cc.
References get_padded_gpu_type(), and LISTBASE_FOREACH.
Referenced by GPU_uniformbuf_create_from_list().
|
static |
Make sure we respect the expected alignment of UBOs. mat4, vec4, pad vec3 as vec4, then vec2, then floats.
Definition at line 91 of file gpu_uniform_buffer.cc.
References BLI_assert_msg, BLI_insertlinkafter(), BLI_listbase_sort(), BLI_remlink(), LinkData::data, GPU_backend_get_type(), GPU_BACKEND_METAL, GPU_FLOAT, GPU_MAT3, GPU_VEC3, inputs_cmp(), LISTBASE_FOREACH, MAX_UBO_GPU_TYPE, and LinkData::next.
Referenced by GPU_uniformbuf_create_from_list().
|
inlinestatic |
Definition at line 158 of file gpu_uniform_buffer.cc.
References divide_ceil_u(), float, get_padded_gpu_type(), and LISTBASE_FOREACH.
Referenced by GPU_uniformbuf_create_from_list().
We need to pad some data types (vec3) on the C side To match the GPU expected memory block alignment.
Definition at line 58 of file gpu_uniform_buffer.cc.
References LinkData::data, GPU_backend_get_type(), GPU_BACKEND_METAL, GPU_FLOAT, GPU_VEC3, GPU_VEC4, and LinkData::next.
Referenced by buffer_fill_from_list(), and buffer_size_from_list().
| void GPU_uniformbuf_bind | ( | GPUUniformBuf * | ubo, |
| int | slot ) |
Definition at line 229 of file gpu_uniform_buffer.cc.
References blender::gpu::unwrap().
Referenced by blender::draw::View::bind(), blender::nodes::node_composite_planetrackdeform_cc::PlaneTrackDeformOperation::compute_plane(), blender::nodes::node_composite_planetrackdeform_cc::PlaneTrackDeformOperation::compute_plane_mask(), blender::draw::View::compute_procedural_bounds(), blender::draw::View::compute_visibility(), draw_call_resource_bind(), blender::draw::draw_subdiv_ubo_update_and_bind(), draw_update_uniforms(), DRW_sparse_uniform_buffer_bind(), blender::draw::command::ResourceBind::execute(), blender::ed::seq::StripsDrawBatch::flush_batch(), ThumbsDrawBatch::flush_batch(), immBindUniformBuf(), pygpu_shader_uniform_block(), and blender::draw::Manager::resource_bind().
| void GPU_uniformbuf_bind_as_ssbo | ( | GPUUniformBuf * | ubo, |
| int | slot ) |
Definition at line 234 of file gpu_uniform_buffer.cc.
References blender::gpu::unwrap().
Referenced by blender::draw::View::compute_procedural_bounds(), and blender::draw::command::ResourceBind::execute().
| void GPU_uniformbuf_clear_to_zero | ( | GPUUniformBuf * | ubo | ) |
Definition at line 249 of file gpu_uniform_buffer.cc.
References blender::gpu::unwrap().
Referenced by blender::eevee::ShadowModule::set_view().
| GPUUniformBuf * GPU_uniformbuf_create_ex | ( | size_t | size, |
| const void * | data, | ||
| const char * | name ) |
Definition at line 191 of file gpu_uniform_buffer.cc.
References blender::gpu::GPUBackend::get(), blender::gpu::GPUBackend::uniformbuf_alloc(), blender::gpu::UniformBuf::update(), and blender::gpu::wrap().
Referenced by blender::ed::greasepencil::image_render::create_shader_ubo(), createGPUShader(), blender::draw::draw_subdiv_ubo_update_and_bind(), DRW_draw_depth_object(), drw_ensure_layer_attribute_buffer(), DRW_globals_update(), drw_manager_init(), blender::nodes::node_composite_planetrackdeform_cc::PlaneTrackDeformOperation::execute(), GPU_material_from_nodetree(), blender::ed::space_node::node_draw_link_bezier_ex(), blender::ed::space_node::nodelink_batch_draw(), pygpu_uniformbuffer__tp_new(), blender::ed::seq::StripsDrawBatch::StripsDrawBatch(), ui_draw_but_UNITVEC(), and blender::draw::detail::UniformCommon< T, len, device_only >::UniformCommon().
| GPUUniformBuf * GPU_uniformbuf_create_from_list | ( | ListBase * | inputs, |
| const char * | name ) |
Create UBO from inputs list. Return nullptr if failed to create or if
| inputs | is empty. |
| inputs | ListBase of BLI_genericNodeN(GPUInput). |
Definition at line 201 of file gpu_uniform_buffer.cc.
References blender::gpu::UniformBuf::attach_data(), BLI_listbase_is_empty(), buffer_fill_from_list(), buffer_from_list_inputs_sort(), buffer_size_from_list(), blender::gpu::GPUBackend::get(), MEM_mallocN, blender::gpu::GPUBackend::uniformbuf_alloc(), and blender::gpu::wrap().
Referenced by GPU_material_uniform_buffer_create().
| void GPU_uniformbuf_debug_unbind_all | ( | ) |
Resets the internal slot usage tracking. But there is no guarantee that this actually undo the bindings for the next draw call. Only has effect when G_DEBUG_GPU is set.
Definition at line 244 of file gpu_uniform_buffer.cc.
References blender::gpu::Context::debug_unbind_all_ubo(), and blender::gpu::Context::get().
Referenced by blender::draw::command::RecordingState::cleanup(), draw_shgroup(), DRW_state_reset(), and blender::realtime_compositor::ShaderOperation::execute().
| void GPU_uniformbuf_free | ( | GPUUniformBuf * | ubo | ) |
Definition at line 219 of file gpu_uniform_buffer.cc.
References blender::gpu::unwrap().
Referenced by BPyGPUUniformBuf__tp_dealloc(), blender::ed::greasepencil::image_render::draw_grease_pencil_stroke(), blender::draw::draw_subdiv_cache_free(), DRW_draw_depth_object(), drw_resource_buffer_finish(), DRW_sparse_uniform_buffer_clear(), DRW_viewport_data_free(), blender::nodes::node_composite_planetrackdeform_cc::PlaneTrackDeformOperation::execute(), GPU_material_free_single(), blender::ed::space_node::node_draw_link_bezier_ex(), blender::ed::space_node::nodelink_batch_draw(), ui_draw_but_UNITVEC(), OCIO_GPUCurveMappping::~OCIO_GPUCurveMappping(), OCIO_GPUShader::~OCIO_GPUShader(), OCIO_GPUTextures::~OCIO_GPUTextures(), blender::ed::seq::StripsDrawBatch::~StripsDrawBatch(), ThumbsDrawBatch::~ThumbsDrawBatch(), and blender::draw::detail::UniformCommon< T, len, device_only >::~UniformCommon().
| void GPU_uniformbuf_unbind | ( | GPUUniformBuf * | ubo | ) |
Definition at line 239 of file gpu_uniform_buffer.cc.
References blender::gpu::unwrap().
Referenced by blender::nodes::node_composite_planetrackdeform_cc::PlaneTrackDeformOperation::compute_plane(), blender::nodes::node_composite_planetrackdeform_cc::PlaneTrackDeformOperation::compute_plane_mask(), draw_call_batching_finish(), draw_call_resource_bind(), DRW_sparse_uniform_buffer_unbind(), blender::ed::space_node::node_draw_link_bezier_ex(), blender::ed::space_node::nodelink_batch_draw(), blender::gpu::MTLContext::~MTLContext(), blender::ed::seq::StripsDrawBatch::~StripsDrawBatch(), and ThumbsDrawBatch::~ThumbsDrawBatch().
| void GPU_uniformbuf_update | ( | GPUUniformBuf * | ubo, |
| const void * | data ) |
Definition at line 224 of file gpu_uniform_buffer.cc.
References blender::gpu::unwrap().
Referenced by blender::draw::draw_subdiv_ubo_update_and_bind(), drw_ensure_layer_attribute_buffer(), DRW_globals_update(), drw_resource_buffer_finish(), DRW_sparse_uniform_buffer_flush(), drw_update_view(), blender::ed::seq::StripsDrawBatch::flush_batch(), ThumbsDrawBatch::flush_batch(), GPENCIL_cache_finish(), OVERLAY_grid_cache_init(), blender::draw::detail::UniformCommon< T, len, device_only >::push_update(), pygpu_uniformbuffer_update(), updateGPUCurveMapping(), and updateGPUDisplayParameters().
|
static |
Returns 1 if the first item should be after second item. We make sure the vec4 uniforms come first.
Definition at line 79 of file gpu_uniform_buffer.cc.
References b, LinkData::data, and GPUInput::type.
Referenced by buffer_from_list_inputs_sort().