Blender V5.0
atomic_ops_unix.h File Reference
#include "atomic_ops_utils.h"

Go to the source code of this file.

Classes

struct  AtomicSpinLock

Macros

Common part of x64 implementation
#define __atomic_impl_load_generic(v)
#define __atomic_impl_store_generic(p, v)

Functions

Spin-lock implementation

Used to implement atomics on unsupported platforms. The spin implementation is shared for all platforms to make sure it compiles and tested.

struct AtomicSpinLock __attribute__ ((aligned(32))) AtomicSpinLock
ATOMIC_INLINE void atomic_spin_lock (volatile AtomicSpinLock *lock)
ATOMIC_INLINE void atomic_spin_unlock (volatile AtomicSpinLock *lock)

Variables

volatile int lock
int pad [32 - sizeof(int)]

Common part of locking fallback implementation

#define ATOMIC_LOCKING_OP_AND_FETCH_DEFINE(_type, _op_name, _op)
#define ATOMIC_LOCKING_FETCH_AND_OP_DEFINE(_type, _op_name, _op)
#define ATOMIC_LOCKING_ADD_AND_FETCH_DEFINE(_type)
#define ATOMIC_LOCKING_SUB_AND_FETCH_DEFINE(_type)
#define ATOMIC_LOCKING_FETCH_AND_ADD_DEFINE(_type)
#define ATOMIC_LOCKING_FETCH_AND_SUB_DEFINE(_type)
#define ATOMIC_LOCKING_FETCH_AND_OR_DEFINE(_type)
#define ATOMIC_LOCKING_FETCH_AND_AND_DEFINE(_type)
#define ATOMIC_LOCKING_CAS_DEFINE(_type)
#define ATOMIC_LOCKING_LOAD_DEFINE(_type)
#define ATOMIC_LOCKING_STORE_DEFINE(_type)
static _ATOMIC_MAYBE_UNUSED AtomicSpinLock _atomic_global_lock = {0}

Macro Definition Documentation

◆ __atomic_impl_load_generic

#define __atomic_impl_load_generic ( v)
Value:
(__sync_synchronize(), *(v))
ATTR_WARN_UNUSED_RESULT const BMVert * v

Definition at line 106 of file atomic_ops_unix.h.

◆ __atomic_impl_store_generic

#define __atomic_impl_store_generic ( p,
v )
Value:
do { \
*(p) = (v); \
__sync_synchronize(); \
} while (0)

Definition at line 107 of file atomic_ops_unix.h.

◆ ATOMIC_LOCKING_ADD_AND_FETCH_DEFINE

#define ATOMIC_LOCKING_ADD_AND_FETCH_DEFINE ( _type)
Value:
#define ATOMIC_LOCKING_OP_AND_FETCH_DEFINE(_type, _op_name, _op)
static void add(blender::Map< std::string, std::string > &messages, Message &msg)
Definition msgfmt.cc:222

Definition at line 146 of file atomic_ops_unix.h.

◆ ATOMIC_LOCKING_CAS_DEFINE

#define ATOMIC_LOCKING_CAS_DEFINE ( _type)
Value:
ATOMIC_INLINE _type##_t atomic_cas_##_type(_type##_t *v, _type##_t old, _type##_t _new) \
{ \
atomic_spin_lock(&_atomic_global_lock); \
const _type##_t original_value = *v; \
if (*v == old) { \
*v = _new; \
} \
atomic_spin_unlock(&_atomic_global_lock); \
return original_value; \
}
static _ATOMIC_MAYBE_UNUSED AtomicSpinLock _atomic_global_lock
#define ATOMIC_INLINE

Definition at line 163 of file atomic_ops_unix.h.

◆ ATOMIC_LOCKING_FETCH_AND_ADD_DEFINE

#define ATOMIC_LOCKING_FETCH_AND_ADD_DEFINE ( _type)
Value:
#define ATOMIC_LOCKING_FETCH_AND_OP_DEFINE(_type, _op_name, _op)

Definition at line 152 of file atomic_ops_unix.h.

◆ ATOMIC_LOCKING_FETCH_AND_AND_DEFINE

#define ATOMIC_LOCKING_FETCH_AND_AND_DEFINE ( _type)
Value:

Definition at line 160 of file atomic_ops_unix.h.

◆ ATOMIC_LOCKING_FETCH_AND_OP_DEFINE

#define ATOMIC_LOCKING_FETCH_AND_OP_DEFINE ( _type,
_op_name,
_op )
Value:
ATOMIC_INLINE _type##_t atomic_fetch_and_##_op_name##_##_type(_type##_t *p, _type##_t x) \
{ \
atomic_spin_lock(&_atomic_global_lock); \
const _type##_t original_value = *(p); \
*(p) = original_value _op(x); \
atomic_spin_unlock(&_atomic_global_lock); \
return original_value; \
}

Definition at line 136 of file atomic_ops_unix.h.

◆ ATOMIC_LOCKING_FETCH_AND_OR_DEFINE

#define ATOMIC_LOCKING_FETCH_AND_OR_DEFINE ( _type)
Value:

Definition at line 158 of file atomic_ops_unix.h.

◆ ATOMIC_LOCKING_FETCH_AND_SUB_DEFINE

#define ATOMIC_LOCKING_FETCH_AND_SUB_DEFINE ( _type)
Value:

Definition at line 155 of file atomic_ops_unix.h.

◆ ATOMIC_LOCKING_LOAD_DEFINE

#define ATOMIC_LOCKING_LOAD_DEFINE ( _type)
Value:
ATOMIC_INLINE _type##_t atomic_load_##_type(const _type##_t *v) \
{ \
atomic_spin_lock(&_atomic_global_lock); \
const _type##_t value = *v; \
atomic_spin_unlock(&_atomic_global_lock); \
return value; \
}

Definition at line 175 of file atomic_ops_unix.h.

◆ ATOMIC_LOCKING_OP_AND_FETCH_DEFINE

#define ATOMIC_LOCKING_OP_AND_FETCH_DEFINE ( _type,
_op_name,
_op )
Value:
ATOMIC_INLINE _type##_t atomic_##_op_name##_and_fetch_##_type(_type##_t *p, _type##_t x) \
{ \
atomic_spin_lock(&_atomic_global_lock); \
const _type##_t original_value = *(p); \
const _type##_t new_value = original_value _op(x); \
*(p) = new_value; \
atomic_spin_unlock(&_atomic_global_lock); \
return new_value; \
}

Definition at line 125 of file atomic_ops_unix.h.

◆ ATOMIC_LOCKING_STORE_DEFINE

#define ATOMIC_LOCKING_STORE_DEFINE ( _type)
Value:
ATOMIC_INLINE void atomic_store_##_type(_type##_t *p, const _type##_t v) \
{ \
atomic_spin_lock(&_atomic_global_lock); \
*p = v; \
atomic_spin_unlock(&_atomic_global_lock); \
}

Definition at line 184 of file atomic_ops_unix.h.

◆ ATOMIC_LOCKING_SUB_AND_FETCH_DEFINE

#define ATOMIC_LOCKING_SUB_AND_FETCH_DEFINE ( _type)
Value:

Definition at line 149 of file atomic_ops_unix.h.

Function Documentation

◆ __attribute__()

struct AtomicSpinLock __attribute__ ( (aligned(32)) )

◆ atomic_spin_lock()

ATOMIC_INLINE void atomic_spin_lock ( volatile AtomicSpinLock * lock)

Definition at line 84 of file atomic_ops_unix.h.

References ATOMIC_INLINE, atomic_spin_lock(), and lock.

Referenced by atomic_spin_lock().

◆ atomic_spin_unlock()

ATOMIC_INLINE void atomic_spin_unlock ( volatile AtomicSpinLock * lock)

Definition at line 92 of file atomic_ops_unix.h.

References ATOMIC_INLINE, and lock.

Variable Documentation

◆ _atomic_global_lock

_ATOMIC_MAYBE_UNUSED AtomicSpinLock _atomic_global_lock = {0}
static

Definition at line 123 of file atomic_ops_unix.h.

◆ lock

volatile int lock

Definition at line 0 of file atomic_ops_unix.h.

Referenced by blender::draw::DebugDraw::acquire(), thread_counting_semaphore::acquire(), blender::image_engine::AbstractSpaceAccessor::acquire_image_buffer(), blender::image_engine::SpaceImageAccessor::acquire_image_buffer(), blender::image_engine::SpaceNodeAccessor::acquire_image_buffer(), blender::deg::sync_writeback::add(), GPUPassCache::add(), blender::gpu::render_graph::VKResourceStateTracker::add_buffer(), Progress::add_finished_tile(), blender::gpu::ProfileReport::add_group(), blender::gpu::ProfileReport::add_group_cpu(), blender::io::fbx::add_image_texture(), mem_guarded::internal::add_memleak_data(), Progress::add_samples(), Profiler::add_state(), blender::ed::spreadsheet::GeometryDataSource::apply_selection_filter(), atomic_spin_lock(), atomic_spin_unlock(), Device::available_devices(), blender::ed::space_node::backimage_fit_exec(), blender::ed::object::bake_object_check(), blender::ed::object::bake_targets_init_internal(), blender::gpu::ShaderCompiler::batch_cancel(), blender::gpu::ShaderCompiler::batch_compile(), blender::gpu::ShaderCompiler::batch_finalize(), blender::gpu::ShaderCompiler::batch_is_ready(), BKE_cachefile_reader_free(), BKE_cachefile_reader_open(), BKE_collection_object_cache_get(), BKE_collection_object_cache_instanced_get(), BKE_icon_delete(), BKE_icon_delete_unmanaged(), BKE_icon_id_delete(), BKE_icon_set(), BKE_icons_deferred_free(), BKE_image_acquire_ibuf(), BKE_image_acquire_multilayer_view_ibuf(), BKE_image_acquire_renderresult(), BKE_image_ensure_viewer_views(), BKE_image_file_format_set(), BKE_image_free_anim_ibufs(), BKE_image_get_first_ibuf(), BKE_image_get_float_pixels_for_frame(), BKE_image_get_ibuf_with_name(), BKE_image_get_pixels_for_frame(), BKE_image_get_size(), BKE_image_has_alpha(), BKE_image_has_ibuf(), BKE_image_has_loaded_ibuf(), BKE_image_is_dirty_writable(), BKE_image_multilayer_stamp_info_callback(), BKE_image_pool_acquire_ibuf(), BKE_image_pool_free(), BKE_image_preview(), BKE_image_release_ibuf(), BKE_image_release_renderresult(), BKE_image_save_options_init(), BKE_image_scale(), BKE_mesh_wrapper_ensure_mdata(), BKE_mesh_wrapper_ensure_subdivision(), BKE_object_select_update(), BKE_report(), BKE_report_print_level_set(), BKE_report_store_level_set(), BKE_report_write_file_fp(), BKE_reportf(), BKE_reports_clear(), BKE_reports_contain(), BKE_reports_last_displayable(), BKE_reports_move_to_reports(), BKE_reports_string(), BKE_volume_load(), BLF_addref_id(), blf_cache_face_requester(), blf_ensure_face(), blf_font_free(), blf_glyph_cache_clear(), BLF_load_mem_unique(), BLF_load_unique(), blf_search_by_filepath(), blf_search_by_mem_name(), BLF_unload(), BLF_unload_id(), BLI_system_backtrace(), blender::ed::sculpt_paint::undo::bmesh_push(), cachefile_handle_free(), PathTrace::cancel(), blender::asset_system::AssetCatalogService::catalog_tree(), blender::render::TilesHighlight::clear(), CLG_log_str(), CLG_logf(), CLG_logref_register(), blender::ed::greasepencil::clipboard_free(), COM_execute(), HdCyclesDelegate::CommitResources(), Render::compositor_execute(), Render::compositor_free(), blender::gpu::VKDevice::context_unregister(), data_device_handle_drop(), data_device_handle_enter(), data_device_handle_leave(), data_device_handle_motion(), data_device_handle_selection(), OIDNDenoiser::denoise_buffer(), blender::gpu::VKDescriptorSetLayouts::descriptor_buffer_layout_get(), Device::device_capabilities(), blender::gpu::VKPipelinePool::discard(), blender::seq::do_text_effect(), BlenderSession::draw(), PathTraceDisplay::draw(), draw_image_cache(), blender::ed::space_node::draw_nodespace_back_pix(), blender::ed::space_node::draw_nodetree(), draw_plane_marker_image(), blender::draw::draw_subdiv_create_requested_buffers(), blender::draw::DRW_cache_free_old_subdiv(), blender::draw::DRW_subdiv_cache_free(), blender::nodes::GeometryNodesLazyFunctionLogger::dump_when_input_is_set_twice(), blender::nodes::GeometryNodesLazyFunctionLogger::dump_when_outputs_are_missing(), dynamicPaint_brushMeshCalculateVelocity(), dynamicPaint_Modifier_apply(), dynamicPaint_Modifier_free_runtime(), dynamicPaint_paintMesh(), dynamicPaint_paintSinglePoint(), ED_space_image_color_sample(), ED_space_image_get_position(), ED_space_image_get_size(), ED_space_image_has_buffer(), ED_space_image_release_buffer(), ED_space_node_color_sample(), ED_space_node_get_position(), blender::gpu::StaticShader::ensure_compile_async(), blender::ed::greasepencil::ensure_grease_pencil_clipboard(), ensure_mmap_initialized(), blender::ed::sculpt_paint::undo::ensure_node(), error_handler_add(), error_handler_remove(), evaluate_driver_python(), blender::nodes::LazyFunctionForClosureZone::execute_impl(), TaskScheduler::exit(), filelist_readjob_append_entries(), filelist_readjob_startjob(), filelist_readjob_update(), blender::seq::final_image_cache_calc_memory_size(), blender::seq::final_image_cache_clear(), blender::seq::final_image_cache_destroy(), blender::seq::final_image_cache_evict(), blender::seq::final_image_cache_get(), blender::seq::final_image_cache_get_image_count(), blender::seq::final_image_cache_invalidate_frame_range(), blender::seq::final_image_cache_iterate(), blender::seq::final_image_cache_put(), HdCyclesGeometry< Base, CyclesBase >::Finalize(), HdCyclesLight::Finalize(), HdCyclesMaterial::Finalize(), blender::gpu::VKPipelinePool::free_data(), GPUDevice::generic_alloc(), GPUDevice::generic_free(), blender::gpu::StaticShader::get(), blender::gpu::StaticShaderCache< ShaderModule >[2][2]::get(), blender::NodesModifierBakeParams::get(), blender::NodesModifierSimulationParams::get(), blender::ocio::CPUProcessorCache::get(), GPUPassCache::get(), blender::render::TilesHighlight::get_all_highlighted_tiles(), blender::deg::get_all_registered_graphs(), ShaderManager::get_attribute_id(), blender::nodes::get_bake_draw_context(), blender::memory_cache::get_base(), Progress::get_cancel_message(), blender::ed::spreadsheet::GeometryDataSource::get_column_values(), Progress::get_current_sample(), blender::bke::CurveComponent::get_curve_for_render(), Progress::get_denoised_tiles(), Progress::get_error_message(), get_next_free_id(), blender::gpu::VKPipelinePool::get_or_create_compute_pipeline(), blender::gpu::VKPipelinePool::get_or_create_graphics_pipeline(), Progress::get_progress(), Progress::get_rendered_tiles(), blender::bke::id_hash::get_source_file_hash(), Progress::get_status(), Progress::get_time(), give_parvert(), blender::ed::transform::gizmo_xform_message_subscribe(), GPU_context_create(), GPU_context_discard(), gpu_free_unused_buffers(), GPU_pass_ensure_its_ready(), blender::ed::greasepencil::grease_pencil_paste_strokes_poll(), gwl_registry_wl_seat_remove(), icon_create(), icon_ghash_lookup(), image_buttons_region_draw(), image_clipboard_copy_exec(), image_file_format_writable(), image_free_gpu(), image_from_context_has_data_poll(), image_get_gpu_texture(), image_main_region_draw(), image_mem_size(), image_rect_update(), image_sample_apply(), image_sample_line_exec(), image_save_single(), blender::image_engine::Instance::image_sync(), IMB_moviecache_get(), TaskScheduler::init(), blender::nodes::LazyFunctionForEvaluateClosureNode::initialize_execution_graph(), blender::nodes::LazyFunctionForForeachGeometryElementZone::initialize_execution_graph(), blender::gpu::MTLSafeFreeList::insert_buffer(), blender::asset_system::AssetCatalogService::invalidate_catalog_tree(), blender::memory_cache::invalidate_outdated_caches_if_necessary(), blender::gpu::ShaderCompiler::is_compiling(), lineart_bounding_area_split(), BlenderImageLoader::load_metadata(), blender::asset_system::AssetLibrary::load_or_reload_catalogs(), BlenderImageLoader::load_pixels(), blender::threading::EnumerableThreadSpecific< T >::local(), blender::nodes::Closure::log_evaluation(), blender::seq::lookup_meta_by_strip(), blender::nodes::node_geo_bake_cc::DummyDataBlockMap::lookup_or_remember_missing(), blender::NodesModifierBakeDataBlockMap::lookup_or_remember_missing(), blender::seq::lookup_strip_by_channel_owner(), blender::seq::lookup_strip_by_name(), blender::seq::lookup_strips_by_compositor_node_group(), blender::seq::lookup_strips_by_scene(), blender::seq::lookup_strips_by_scene_map_get(), TaskScheduler::max_concurrency(), blender::seq::media_presence_free(), blender::seq::media_presence_invalidate_sound(), blender::seq::media_presence_invalidate_strip(), blender::seq::media_presence_is_missing(), blender::seq::media_presence_set_missing(), memory_usage_block_num(), memory_usage_current(), blender::bke::mesh_calc_modifiers(), metadata_panel_context_draw(), blender::ed::object::mode_transfer_overlay_current_state(), GPUDevice::move_textures_to_host(), blender::nodes::node_geo_image_info_cc::node_geo_exec(), blender::NodesModifierSimulationParams::NodesModifierSimulationParams(), Progress::operator=(), blender::NodesModifierSimulationParams::output_store_frame_cache(), palette_extract_img_exec(), pose_slide_apply_vec3(), pose_slide_rest_pose_apply_vec3(), blender::gpu::ShaderCompiler::precompile_specializations(), prefetch_thread_next_frame(), primary_selection_device_handle_selection(), GHOST_SystemWayland::processEvents(), property_pointer_get(), proxy_thread_next_frame(), GHOST_SystemWayland::pushEvent_maybe_pending(), GHOST_SystemWayland::putClipboardImage(), RE_bake_ibuf_clear(), RE_draw_lock_cb(), RE_SetCamera(), blender::bke::bake::DiskBlobReader::read(), blender::bke::bake::BlobReadSharing::read_shared(), blender::gpu::VKDescriptorPools::recycle(), blender::deg::register_graph(), blender::draw::DebugDraw::release(), blender::gpu::StaticShaderCache< ShaderModule >[2][2]::release(), thread_counting_semaphore::release(), blender::image_engine::AbstractSpaceAccessor::release_buffer(), blender::image_engine::SpaceImageAccessor::release_buffer(), blender::image_engine::SpaceNodeAccessor::release_buffer(), blender::ConcurrentMap< std::reference_wrapper< const GenericKey >, StoredValue >::remove(), blender::gpu::render_graph::VKResourceStateTracker::remove_buffer(), blender::memory_cache::remove_if(), blender::gpu::render_graph::VKResourceStateTracker::remove_image(), blender::remove_outdated_bake_caches(), Profiler::remove_state(), blender::bke::Instances::remove_unused_references(), BlenderSession::render(), PathTrace::render(), render_drawlock(), blender::gpu::VKBackend::render_end(), render_endjob(), blender::seq::render_give_ibuf(), blender::gpu::VKDevice::render_graph_new(), blender::gpu::VKDevice::render_graph_submit(), blender::gpu::VKBackend::render_step(), reports_prepend_impl(), blender::eevee::ShaderModule::request_specializations(), PathTraceDisplay::reset(), Progress::reset_sample(), BlenderSession::reset_session(), blender::eevee::LightBake::run(), Profiler::run(), blender::ed::space_node::sample_apply(), schedule_write_result(), CCL_NAMESPACE_BEGIN::ScopedMockLog::ScopedMockLog(), screen_opengl_render_anim_step(), screen_opengl_render_apply(), screen_opengl_render_end(), screen_opengl_render_write(), blender::seq::SEQ_lookup_effects_by_strip(), blender::gpu::StaticShader::set(), Progress::set_cancel(), Progress::set_error(), Progress::set_render_start_time(), Progress::set_start_time(), Progress::set_status(), Progress::set_substatus(), Progress::set_sync_status(), Progress::set_sync_substatus(), Progress::set_time_limit(), Progress::set_total_pixel_samples(), Progress::set_update(), blender::ed::space_node::snode_bg_viewmove_invoke(), blender::seq::source_image_cache_calc_memory_size(), blender::seq::source_image_cache_clear(), blender::seq::source_image_cache_destroy(), blender::seq::source_image_cache_evict(), blender::seq::source_image_cache_get(), blender::seq::source_image_cache_get_image_count(), blender::seq::source_image_cache_invalidate_strip(), blender::seq::source_image_cache_iterate(), blender::seq::source_image_cache_put(), blender::gpu::ShaderCompiler::specialization_batch_is_ready(), blender::nodes::decl::MenuBuilder::static_items(), stats_background(), blender::NodesModifierSimulationParams::store_as_prev_items(), blender::eevee::store_node_tree_errors(), blender::seq::strip_load_font_file(), blender::seq::strip_load_font_mem(), blender::seq::strip_lookup_free(), blender::seq::strip_lookup_invalidate(), blender::seq::strip_unload_font(), blender::gpu::VKDevice::submission_runner(), GHOST_ContextVK::swapBufferRelease(), HdCyclesField::Sync(), HdCyclesGeometry< Base, CyclesBase >::Sync(), HdCyclesLight::Sync(), HdCyclesMaterial::Sync(), system_clipboard_put(), system_clipboard_put_primary_selection(), libmv::TEST(), BVHBuild::thread_build_node(), thread_scoped_spin_lock::thread_scoped_spin_lock(), blender::seq::thumbnail_cache_clear(), blender::seq::thumbnail_cache_destroy(), blender::seq::thumbnail_cache_discard_requests_outside(), blender::seq::thumbnail_cache_get(), blender::seq::thumbnail_cache_invalidate_strip(), blender::seq::thumbnail_cache_maintain_capacity(), timeline_draw_cache(), blender::nodes::node_geo_bake_cc::DummyDataBlockMap::try_add(), blender::NodesModifierBakeDataBlockMap::try_add(), blender::ed::object::bake_simulation::try_delete_bake(), blender::memory_cache::try_enforce_limit(), try_handle_error_for_address(), uiTemplateColorPicker(), uiTemplateGpencilModifier(), uiTemplateImage(), uiTemplateImageInfo(), blender::deg::unregister_graph(), blender::eevee::LightBake::update(), GPUPassCache::update(), PathTraceDisplay::update_begin(), update_global_peak(), view_layer_bases_hash_create(), blender::ed::space_node::viewer_border_exec(), blender::render::Context::viewer_output_to_viewer_image(), blender::gpu::ShaderCompiler::wait_for_all(), GHOST_DeviceVK::wait_idle(), blender::gpu::VKDevice::wait_queue_idle(), blender::ed::space_node::WIDGETGROUP_node_corner_pin_refresh(), blender::ed::space_node::WIDGETGROUP_node_crop_refresh(), blender::ed::space_node::WIDGETGROUP_node_glare_refresh(), blender::ed::space_node::WIDGETGROUP_node_mask_refresh(), blender::ed::space_node::WIDGETGROUP_node_split_refresh(), blender::ed::space_node::WIDGETGROUP_node_transform_refresh(), WM_locked_interface_set(), blender::ed::object::write_internal_bake_pixels(), write_result(), and blender::gpu::GPUWorker::~GPUWorker().

◆ pad