|
Blender V4.3
|
#include <draw_manager.hh>
Classes | |
| struct | DataDebugOutput |
| struct | SubmitDebugOutput |
Public Attributes | |
| SwapChain< ObjectMatricesBuf, 2 > | matrix_buf |
| SwapChain< ObjectBoundsBuf, 2 > | bounds_buf |
| SwapChain< ObjectInfosBuf, 2 > | infos_buf |
| ObjectAttributeBuf | attributes_buf |
| ObjectAttributeLegacyBuf | attributes_buf_legacy |
| Map< uint32_t, GPULayerAttr > | layer_attributes |
| LayerAttributeBuf | layer_attributes_buf |
| Vector< GPUTexture * > | acquired_textures |
Definition at line 48 of file draw_manager.hh.
|
inline |
Definition at line 121 of file draw_manager.hh.
| blender::draw::Manager::~Manager | ( | ) |
Definition at line 21 of file draw_manager.cc.
References acquired_textures, and GPU_texture_free().
|
inline |
Will acquire the texture using ref counting and release it after drawing. To be used for texture coming from blender Image.
Definition at line 222 of file draw_manager.hh.
References acquired_textures, blender::Vector< T, InlineBufferCapacity, Allocator >::append(), and GPU_texture_ref().
Referenced by blender::draw::detail::PassBase< DrawCommandBufType >::material_set().
| void blender::draw::Manager::begin_sync | ( | ) |
TODO(fclem): The following should become private at some point.
Definition at line 29 of file draw_manager.cc.
References acquired_textures, attributes_buf, bounds_buf, blender::Map< Key, Value, InlineBufferCapacity, ProbingStrategy, Hash, IsEqual, Slot, Allocator >::clear(), blender::Vector< T, InlineBufferCapacity, Allocator >::clear(), DRWManager::draw_ctx, DST, GPU_texture_free(), blender::MatBase< float, 4, 4 >::identity(), infos_buf, layer_attributes, matrix_buf, DRWContextState::obact, resource_handle(), and blender::draw::StorageArrayBuffer< T, len, device_only >::trim_to_next_power_of_2().
Referenced by blender::eevee::Instance::light_bake_irradiance(), blender::eevee::Instance::render_sync(), blender::draw::test_draw_manager_sync(), blender::draw::test_draw_resource_id_gen(), blender::draw::test_draw_visibility(), blender::draw::test_eevee_shadow_tag_update(), and workbench_render_to_image().
| Manager::DataDebugOutput blender::draw::Manager::data_debug | ( | ) |
Check data buffers of the draw manager. Only to be used after end_sync().
Definition at line 262 of file draw_manager.cc.
References bounds_buf, blender::Span< T >::data(), infos_buf, blender::draw::Manager::DataDebugOutput::matrices, matrix_buf, and output.
Referenced by blender::draw::test_draw_manager_sync().
| void blender::draw::Manager::debug_bind | ( | ) |
Definition at line 135 of file draw_manager.cc.
References DRWManager::debug, DRW_DEBUG_DRAW_SLOT, drw_debug_gpu_draw_buf_get(), drw_debug_gpu_print_buf_get(), DRW_DEBUG_PRINT_SLOT, DST, GPU_BARRIER_SHADER_STORAGE, GPU_memory_barrier(), and GPU_storagebuf_bind().
| void blender::draw::Manager::end_sync | ( | ) |
Definition at line 104 of file draw_manager.cc.
References attributes_buf, attributes_buf_legacy, bounds_buf, divide_ceil_u(), DRW_FINALIZE_GROUP_SIZE, DRW_shader_draw_resource_finalize_get(), GPU_BARRIER_SHADER_STORAGE, GPU_compute_dispatch(), GPU_debug_group_begin(), GPU_debug_group_end(), GPU_memory_barrier(), GPU_shader_bind(), GPU_shader_get_ssbo_binding(), GPU_shader_uniform_1i(), GPU_storagebuf_bind(), infos_buf, layer_attributes_buf, matrix_buf, blender::draw::detail::StorageCommon< T, len, device_only >::push_update(), and blender::draw::detail::UniformCommon< T, len, device_only >::push_update().
Referenced by blender::eevee::Instance::light_bake_irradiance(), blender::eevee::Instance::render_sync(), blender::draw::test_draw_manager_sync(), blender::draw::test_draw_resource_id_gen(), blender::draw::test_draw_visibility(), blender::draw::test_eevee_shadow_tag_update(), and workbench_render_to_image().
|
inline |
Populate additional per resource data on demand. IMPORTANT: Should be called only once per object.
Definition at line 329 of file draw_manager.hh.
References attributes_buf, blender::draw::StorageArrayBuffer< T, len, device_only >::get_or_resize(), GPU_material_uniform_attributes(), infos_buf, GPUUniformAttrList::list, LISTBASE_FOREACH, ObjectInfos::object_attrs_len, and ObjectInfos::object_attrs_offset.
Referenced by blender::eevee::SyncModule::sync_curves(), blender::eevee::SyncModule::sync_mesh(), blender::eevee::SyncModule::sync_point_cloud(), blender::eevee::SyncModule::sync_sculpt(), and blender::eevee::SyncModule::sync_volume().
|
inline |
WATCH: Linear Search. Avoid duplicate attributes across materials.
Definition at line 349 of file draw_manager.hh.
References blender::Vector< T, InlineBufferCapacity, Allocator >::append(), attributes_buf, blender::Vector< T, InlineBufferCapacity, Allocator >::first_index_of_try(), blender::draw::StorageArrayBuffer< T, len, device_only >::get_or_resize(), GPU_material_uniform_attributes(), infos_buf, GPUUniformAttrList::list, LISTBASE_FOREACH, ObjectInfos::object_attrs_len, and ObjectInfos::object_attrs_offset.
|
inline |
Collect necessary View Layer attributes.
Since layer attributes are global to the whole render pass, this only collects a table of their names.
Definition at line 380 of file draw_manager.hh.
References blender::Map< Key, Value, InlineBufferCapacity, ProbingStrategy, Hash, IsEqual, Slot, Allocator >::add(), GPU_material_layer_attributes(), layer_attributes, and LISTBASE_FOREACH.
Referenced by blender::eevee::World::sync().
| void blender::draw::Manager::resource_bind | ( | ) |
Definition at line 150 of file draw_manager.cc.
References attributes_buf, attributes_buf_legacy, DRW_LAYER_ATTR_UBO_SLOT, DRW_OBJ_ATTR_SLOT, DRW_OBJ_INFOS_SLOT, DRW_OBJ_MAT_SLOT, GPU_storagebuf_bind(), GPU_uniformbuf_bind(), infos_buf, layer_attributes_buf, and matrix_buf.
|
inline |
Get resource id for a loose matrix. The draw-calls for this resource handle won't be culled and there won't be any associated object info / bounds. Assumes correct handedness / winding.
Definition at line 287 of file draw_manager.hh.
References bounds_buf, infos_buf, and matrix_buf.
|
inline |
Get resource id for a loose matrix with bounds. The draw-calls for this resource handle will be culled but there won't be any associated object info / bounds. Assumes correct handedness / winding.
Definition at line 295 of file draw_manager.hh.
References bounds_buf, infos_buf, and matrix_buf.
|
inline |
Create a new resource handle for the given object, but optionally override model matrix and bounds.
Definition at line 265 of file draw_manager.hh.
References bounds_buf, blender::draw::ObjectRef::dupli_object, blender::draw::ObjectRef::dupli_parent, infos_buf, matrix_buf, OB_NEG_SCALE, blender::draw::ObjectRef::object, and Object::transflag.
|
inline |
Create a new resource handle for the given object.
Definition at line 256 of file draw_manager.hh.
References bounds_buf, blender::draw::ObjectRef::dupli_object, blender::draw::ObjectRef::dupli_parent, infos_buf, matrix_buf, OB_NEG_SCALE, blender::draw::ObjectRef::object, and Object::transflag.
Referenced by begin_sync(), blender::workbench::Instance::curves_sync(), blender::workbench::Instance::hair_sync(), blender::draw::overlay::Lattices::object_sync(), blender::eevee::Instance::object_sync(), blender::workbench::Instance::object_sync(), blender::workbench::Instance::point_cloud_sync(), resource_handle_for_sculpt(), blender::eevee::LookdevModule::sync(), blender::draw::test_draw_manager_sync(), blender::draw::test_draw_resource_id_gen(), blender::draw::test_draw_visibility(), blender::draw::test_eevee_shadow_tag_update(), and unique_handle().
|
inline |
Return the number of resource handles allocated.
Definition at line 231 of file draw_manager.hh.
Referenced by blender::eevee::IrradianceBake::surfels_create().
|
inline |
Get resource id for particle system. The draw-calls for this resource won't be culled. The associated object info will contain the info from its parent object.
Definition at line 305 of file draw_manager.hh.
References bounds_buf, blender::draw::ObjectRef::dupli_object, blender::draw::ObjectRef::dupli_parent, infos_buf, matrix_buf, OB_NEG_SCALE, blender::draw::ObjectRef::object, and Object::transflag.
Referenced by blender::draw::overlay::Particles::edit_object_sync(), blender::draw::overlay::Particles::object_sync(), blender::eevee::Instance::object_sync(), and blender::draw::overlay::Prepass::particle_sync().
|
inline |
Definition at line 161 of file draw_manager.hh.
References blender::bke::pbvh::bounds_get(), blender::Bounds< T >::max, blender::math::midpoint(), blender::Bounds< T >::min, blender::draw::ObjectRef::object, SculptSession::pbvh, resource_handle(), and Object::sculpt.
Referenced by blender::draw::overlay::Sculpts::mesh_sync(), blender::draw::overlay::Facing::object_sync(), blender::draw::overlay::Fade::object_sync(), blender::draw::overlay::ModeTransfer::object_sync(), and blender::draw::overlay::Prepass::sculpt_sync().
Definition at line 179 of file draw_manager.cc.
References bounds_buf, debug_bind(), View3D::debug_flag, DRWManager::draw_ctx, DST, infos_buf, blender::draw::command::RecordingState::inverted_view, resource_bind(), state, DRWContextState::v3d, and V3D_DEBUG_FREEZE_CULLING.
| void blender::draw::Manager::submit | ( | PassSimple & | pass | ) |
Variant without any view. Must not contain any shader using draw_view create info.
Definition at line 216 of file draw_manager.cc.
References debug_bind(), resource_bind(), and state.
| void blender::draw::Manager::submit | ( | PassSimple & | pass, |
| View & | view ) |
Submit a pass for drawing. All resource reference will be dereferenced and commands will be sent to GPU.
Definition at line 161 of file draw_manager.cc.
References debug_bind(), blender::draw::command::RecordingState::inverted_view, resource_bind(), and state.
Referenced by blender::eevee::Film::accumulate(), blender::eevee::BackgroundPipeline::clear(), blender::eevee::Film::cryptomatte_sort(), blender::draw::curves_update(), blender::eevee::DeferredPipeline::debug_draw(), blender::eevee::HiZBuffer::debug_draw(), blender::eevee::LightModule::debug_draw(), blender::eevee::ShadowModule::debug_draw(), blender::eevee::Film::display(), blender::eevee::LookdevModule::display(), blender::draw::overlay::AntiAliasing::draw(), blender::draw::overlay::Armatures::draw(), blender::draw::overlay::AttributeViewer::draw(), blender::draw::overlay::Background::draw(), blender::draw::overlay::Bounds::draw(), blender::draw::overlay::Cameras::draw(), blender::draw::overlay::Curves::draw(), blender::draw::overlay::EditText::draw(), blender::draw::overlay::Empties::draw(), blender::draw::overlay::Facing::draw(), blender::draw::overlay::Fade::draw(), blender::draw::overlay::Fluids::draw(), blender::draw::overlay::ForceFields::draw(), blender::draw::overlay::GreasePencil::draw(), blender::draw::overlay::Grid::draw(), blender::draw::overlay::Lattices::draw(), blender::draw::overlay::LightProbes::draw(), blender::draw::overlay::Lights::draw(), blender::draw::overlay::Meshes::draw(), blender::draw::overlay::MeshUVs::draw(), blender::draw::overlay::Metaballs::draw(), blender::draw::overlay::ModeTransfer::draw(), blender::draw::overlay::Origins::draw(), blender::draw::overlay::Outline::draw(), blender::draw::overlay::Paints::draw(), blender::draw::overlay::Particles::draw(), blender::draw::overlay::Prepass::draw(), blender::draw::overlay::Relations::draw(), blender::draw::overlay::Sculpts::draw(), blender::draw::overlay::Speakers::draw(), blender::draw::overlay::Wireframe::draw(), blender::draw::overlay::XrayFade::draw(), blender::eevee::LookdevModule::draw(), blender::workbench::AntiAliasingPass::draw(), blender::workbench::DofPass::draw(), blender::workbench::OpaquePass::draw(), blender::workbench::OutlinePass::draw(), blender::workbench::ShadowPass::draw(), blender::workbench::TransparentDepthPass::draw(), blender::workbench::TransparentPass::draw(), blender::workbench::VolumePass::draw(), blender::draw::overlay::Cameras::draw_background_images(), blender::draw::overlay::Empties::draw_background_images(), blender::draw::overlay::Curves::draw_color_only(), blender::draw::overlay::GreasePencil::draw_color_only(), blender::draw::overlay::LightProbes::draw_color_only(), blender::draw::overlay::Meshes::draw_color_only(), blender::draw::overlay::MotionPath::draw_color_only(), blender::eevee::VolumeModule::draw_compute(), blender::draw::overlay::Empties::draw_images(), blender::draw::overlay::Cameras::draw_in_front(), blender::draw::overlay::Empties::draw_in_front_images(), blender::draw::overlay::Particles::draw_no_line(), blender::draw::overlay::MeshUVs::draw_on_render(), blender::draw::overlay::Sculpts::draw_on_render(), blender::eevee::VolumeModule::draw_resolve(), blender::draw::overlay::Cameras::draw_scene_background_images(), blender::workbench::StencilViewWorkaround::extract(), blender::eevee::VelocityModule::geometry_steps_fill(), blender::draw::hair_update(), blender::eevee::Precompute::Precompute(), blender::eevee::BackgroundPipeline::render(), blender::eevee::CapturePipeline::render(), blender::eevee::DeferredLayer::render(), blender::eevee::DeferredProbePipeline::render(), blender::eevee::DepthOfField::render(), blender::eevee::ForwardPipeline::render(), blender::eevee::MotionBlurModule::render(), blender::eevee::PlanarProbePipeline::render(), blender::eevee::RayTraceModule::render(), blender::eevee::ShadowPipeline::render(), blender::eevee::SubsurfaceModule::render(), blender::eevee::VolumeLayer::render(), blender::eevee::WorldPipeline::render(), blender::eevee::WorldVolumePipeline::render(), blender::eevee::AmbientOcclusion::render_pass(), blender::eevee::LightModule::set_view(), blender::eevee::ShadowModule::set_view(), submit(), submit_debug(), submit_debug(), blender::draw::test_eevee_shadow_finalize(), blender::draw::test_eevee_shadow_free(), blender::draw::test_eevee_shadow_page_mask_ex(), blender::draw::test_eevee_shadow_shift(), blender::draw::test_eevee_shadow_shift_clear(), blender::draw::test_eevee_shadow_tag_update(), blender::draw::test_eevee_shadow_tilemap_amend(), blender::draw::test_eevee_surfel_list(), blender::draw::TestAlloc::TestAlloc(), blender::draw::TestDefrag::TestDefrag(), blender::eevee::HiZBuffer::update(), blender::eevee::PlanarProbeModule::viewport_draw(), and blender::eevee::Film::write_viewport_compositor_passes().
| void blender::draw::Manager::submit | ( | PassSortable & | pass, |
| View & | view ) |
Definition at line 209 of file draw_manager.cc.
References submit().
| Manager::SubmitDebugOutput blender::draw::Manager::submit_debug | ( | PassMain & | pass, |
| View & | view ) |
Definition at line 245 of file draw_manager.cc.
References blender::Span< T >::data(), divide_ceil_u(), GPU_BARRIER_BUFFER_UPDATE, GPU_memory_barrier(), output, blender::draw::Manager::SubmitDebugOutput::resource_id, and submit().
| Manager::SubmitDebugOutput blender::draw::Manager::submit_debug | ( | PassSimple & | pass, |
| View & | view ) |
Submit a pass for drawing but read back all data buffers for inspection.
Definition at line 231 of file draw_manager.cc.
References blender::Span< T >::data(), output, blender::draw::Manager::SubmitDebugOutput::resource_id, and submit().
Referenced by blender::draw::test_draw_resource_id_gen(), and blender::draw::test_draw_visibility().
|
inline |
Create a unique resource handle for the given object. Returns the existing handle if it exists.
Definition at line 247 of file draw_manager.hh.
References blender::draw::ObjectRef::handle, blender::draw::ResourceHandle::raw, and resource_handle().
Referenced by blender::draw::overlay::Sculpts::curves_sync(), blender::draw::overlay::Curves::edit_object_sync(), blender::draw::overlay::GreasePencil::edit_object_sync(), blender::draw::overlay::Lattices::edit_object_sync(), blender::draw::overlay::Meshes::edit_object_sync(), blender::draw::overlay::MeshUVs::edit_object_sync(), blender::draw::overlay::Curves::edit_object_sync_legacy(), blender::draw::overlay::Sculpts::mesh_sync(), blender::draw::overlay::Facing::object_sync(), blender::draw::overlay::Fade::object_sync(), blender::draw::overlay::Fluids::object_sync(), blender::draw::overlay::ModeTransfer::object_sync(), blender::draw::overlay::Outline::object_sync(), blender::draw::overlay::Paints::object_sync(), blender::draw::overlay::Prepass::object_sync(), and blender::draw::overlay::Wireframe::object_sync().
|
inline |
Update the bounds of an already created handle.
Definition at line 322 of file draw_manager.hh.
References bounds_buf.
|
inline |
Update the bounds of an already created handle.
Definition at line 315 of file draw_manager.hh.
References bounds_buf, and blender::draw::ObjectRef::object.
Referenced by blender::eevee::SyncModule::sync_curves(), blender::eevee::SyncModule::sync_mesh(), blender::eevee::SyncModule::sync_point_cloud(), and blender::eevee::SyncModule::sync_sculpt().
| Vector<GPUTexture *> blender::draw::Manager::acquired_textures |
List of textures coming from Image data-blocks. They need to be reference-counted in order to avoid being freed in another thread.
Definition at line 110 of file draw_manager.hh.
Referenced by acquire_texture(), begin_sync(), and ~Manager().
| ObjectAttributeBuf blender::draw::Manager::attributes_buf |
Object Attributes are reference by indirection data inside ObjectInfos. This is because attribute list is arbitrary.
Definition at line 89 of file draw_manager.hh.
Referenced by begin_sync(), end_sync(), extract_object_attributes(), extract_object_attributes(), and resource_bind().
| ObjectAttributeLegacyBuf blender::draw::Manager::attributes_buf_legacy |
TODO(@fclem): Remove once we get rid of old EEVEE code-base. Only here to satisfy bindings.
Definition at line 94 of file draw_manager.hh.
Referenced by end_sync(), and resource_bind().
| SwapChain<ObjectBoundsBuf, 2> blender::draw::Manager::bounds_buf |
Definition at line 82 of file draw_manager.hh.
Referenced by begin_sync(), blender::eevee::ShadowModule::begin_sync(), data_debug(), end_sync(), blender::eevee::ShadowModule::end_sync(), resource_handle(), resource_handle(), resource_handle(), resource_handle(), resource_handle_for_psys(), submit(), blender::eevee::IrradianceBake::surfels_create(), blender::draw::test_eevee_shadow_tag_update(), update_handle_bounds(), and update_handle_bounds().
| SwapChain<ObjectInfosBuf, 2> blender::draw::Manager::infos_buf |
Definition at line 83 of file draw_manager.hh.
Referenced by begin_sync(), data_debug(), end_sync(), extract_object_attributes(), extract_object_attributes(), resource_bind(), resource_handle(), resource_handle(), resource_handle(), resource_handle(), resource_handle_for_psys(), and submit().
| Map<uint32_t, GPULayerAttr> blender::draw::Manager::layer_attributes |
Table of all View Layer attributes required by shaders, used to populate the buffer below.
Definition at line 99 of file draw_manager.hh.
Referenced by begin_sync(), and register_layer_attributes().
| LayerAttributeBuf blender::draw::Manager::layer_attributes_buf |
Buffer of layer attribute values, indexed and sorted by the hash.
Definition at line 104 of file draw_manager.hh.
Referenced by end_sync(), and resource_bind().
| SwapChain<ObjectMatricesBuf, 2> blender::draw::Manager::matrix_buf |
Buffers containing all object data. Referenced by resource index. Exposed as public members for shader access after sync.
Definition at line 81 of file draw_manager.hh.
Referenced by begin_sync(), data_debug(), end_sync(), resource_bind(), resource_handle(), resource_handle(), resource_handle(), resource_handle(), and resource_handle_for_psys().