[Bf-blender-cvs] [d54416506a7] sculpt-dev: Merge remote-tracking branch 'origin' into sculpt-dev

Joseph Eagar noreply at git.blender.org
Fri Jun 3 08:47:01 CEST 2022


Commit: d54416506a7ee5e00b08157bc8f05aff8943dd29
Author: Joseph Eagar
Date:   Thu Jun 2 23:44:50 2022 -0700
Branches: sculpt-dev
https://developer.blender.org/rBd54416506a7ee5e00b08157bc8f05aff8943dd29

Merge remote-tracking branch 'origin' into sculpt-dev

===================================================================



===================================================================

diff --cc intern/atomic/intern/atomic_ops_msvc.h
index 8a0e1f6b391,e65691d3970..e926a5bbfad
--- a/intern/atomic/intern/atomic_ops_msvc.h
+++ b/intern/atomic/intern/atomic_ops_msvc.h
@@@ -63,12 -73,22 +73,22 @@@ ATOMIC_INLINE uint64_t atomic_sub_and_f
  
  ATOMIC_INLINE uint64_t atomic_cas_uint64(uint64_t *v, uint64_t old, uint64_t _new)
  {
 -  return InterlockedCompareExchange64((int64_t *)v, _new, old);
 +  return (uint64_t)(InterlockedCompareExchange64((int64_t *)v, _new, old));
  }
  
+ ATOMIC_INLINE uint64_t atomic_load_uint64(const uint64_t *v)
+ {
+   return __atomic_impl_load_generic(v);
+ }
+ 
+ ATOMIC_INLINE void atomic_store_uint64(uint64_t *p, uint64_t v)
+ {
+   __atomic_impl_store_generic(p, v);
+ }
+ 
  ATOMIC_INLINE uint64_t atomic_fetch_and_add_uint64(uint64_t *p, uint64_t x)
  {
 -  return InterlockedExchangeAdd64((int64_t *)p, (int64_t)x);
 +  return (uint64_t)InterlockedExchangeAdd64((int64_t *)p, (int64_t)x);
  }
  
  ATOMIC_INLINE uint64_t atomic_fetch_and_sub_uint64(uint64_t *p, uint64_t x)
@@@ -117,12 -147,22 +147,22 @@@ ATOMIC_INLINE uint32_t atomic_sub_and_f
  
  ATOMIC_INLINE uint32_t atomic_cas_uint32(uint32_t *v, uint32_t old, uint32_t _new)
  {
 -  return InterlockedCompareExchange((long *)v, _new, old);
 +  return (uint32_t)InterlockedCompareExchange((long *)v, _new, old);
  }
  
+ ATOMIC_INLINE uint32_t atomic_load_uint32(const uint32_t *v)
+ {
+   return __atomic_impl_load_generic(v);
+ }
+ 
+ ATOMIC_INLINE void atomic_store_uint32(uint32_t *p, uint32_t v)
+ {
+   __atomic_impl_store_generic(p, v);
+ }
+ 
  ATOMIC_INLINE uint32_t atomic_fetch_and_add_uint32(uint32_t *p, uint32_t x)
  {
 -  return InterlockedExchangeAdd(p, x);
 +  return (uint32_t)InterlockedExchangeAdd(p, x);
  }
  
  ATOMIC_INLINE uint32_t atomic_fetch_and_or_uint32(uint32_t *p, uint32_t x)
diff --cc release/scripts/startup/bl_ui/space_view3d_toolbar.py
index 7fa52769789,892dc9a1e42..57d54fdd59b
--- a/release/scripts/startup/bl_ui/space_view3d_toolbar.py
+++ b/release/scripts/startup/bl_ui/space_view3d_toolbar.py
@@@ -1,9 -1,5 +1,10 @@@
  # SPDX-License-Identifier: GPL-2.0-or-later
 -from bpy.types import Menu, Panel, UIList
 +
 +# <pep8 compliant>
 +from bpy.props import EnumProperty
 +from bpy.types import Operator
 +from bpy.types import Menu, Panel, UIList, WindowManager, SpaceProperties
++
  from bl_ui.properties_grease_pencil_common import (
      GreasePencilSculptAdvancedPanel,
      GreasePencilDisplayPanel,
diff --cc source/blender/blenkernel/BKE_attribute.h
index 4e559323c7b,78edb6b95ed..ffba1fe7e25
--- a/source/blender/blenkernel/BKE_attribute.h
+++ b/source/blender/blenkernel/BKE_attribute.h
@@@ -50,8 -51,10 +51,9 @@@ typedef enum eAttrDomainMask 
  /* Attributes. */
  
  bool BKE_id_attributes_supported(struct ID *id);
+ bool BKE_attribute_allow_procedural_access(const char *attribute_name);
  
 -/**
 - * Create a new attribute layer.
 +/**  Create a new attribute layer.
   */
  struct CustomDataLayer *BKE_id_attribute_new(
      struct ID *id, const char *name, int type, eAttrDomain domain, struct ReportList *reports);
@@@ -73,9 -81,8 +80,9 @@@ bool BKE_id_attribute_rename(struct ID 
                               struct ReportList *reports);
  
  int BKE_id_attributes_length(const struct ID *id,
-                              AttributeDomainMask domain_mask,
+                              eAttrDomainMask domain_mask,
 -                             eCustomDataMask mask);
 +                             eCustomDataMask mask,
 +                             bool skip_temporary);
  
  struct CustomDataLayer *BKE_id_attributes_active_get(struct ID *id);
  void BKE_id_attributes_active_set(struct ID *id, struct CustomDataLayer *layer);
diff --cc source/blender/blenkernel/BKE_customdata.h
index 7e578cf0ba3,993ab476830..9a7ddd6d9cb
--- a/source/blender/blenkernel/BKE_customdata.h
+++ b/source/blender/blenkernel/BKE_customdata.h
@@@ -735,58 -709,30 +741,50 @@@ void CustomData_data_transfer(const str
  /**
   * Prepare given custom data for file writing.
   *
-  * \param data: the custom-data to tweak for .blend file writing (modified in place).
-  * \param r_write_layers: contains a reduced set of layers to be written to file,
-  * use it with #writestruct_at_address()
-  * (caller must free it if != \a write_layers_buff).
-  *
-  * \param write_layers_buff: An optional buffer for r_write_layers (to avoid allocating it).
-  * \param write_layers_size: The size of pre-allocated \a write_layer_buff.
+  * \param data: The custom-data to tweak for .blend file writing (modified in place).
+  * \param layers_to_write: A reduced set of layers to be written to file.
   *
-  * \warning After this function has ran, given custom data is no more valid from Blender POV
-  * (its `totlayer` is invalid). This function shall always be called with localized data
-  * (as it is in write_meshes()).
-  *
-  * \note `data->typemap` is not updated here, since it is always rebuilt on file read anyway.
-  * This means written `typemap` does not match written layers (as returned by \a r_write_layers).
-  * Trivial to fix is ever needed.
+  * \warning This function invalidates the custom data struct by changing the layer counts and the
+  * #layers pointer, and by invalidating the type map. It expects to work on a shallow copy of
+  * the struct.
   */
- void CustomData_blend_write_prepare(struct CustomData *data,
-                                     struct CustomDataLayer **r_write_layers,
-                                     struct CustomDataLayer *write_layers_buff,
-                                     size_t write_layers_size);
+ void CustomData_blend_write_prepare(CustomData &data,
+                                     blender::Vector<CustomDataLayer, 16> &layers_to_write);
  
  /**
-  * \param layers: The layers argument assigned by #CustomData_blend_write_prepare.
+  * \param layers_to_write: Layers created by #CustomData_blend_write_prepare.
   */
- void CustomData_blend_write(struct BlendWriter *writer,
-                             struct CustomData *data,
-                             CustomDataLayer *layers,
+ void CustomData_blend_write(BlendWriter *writer,
+                             CustomData *data,
+                             blender::Span<CustomDataLayer> layers_to_write,
                              int count,
                              eCustomDataMask cddata_mask,
-                             struct ID *id);
+                             ID *id);
+ 
+ #endif
+ 
  void CustomData_blend_read(struct BlendDataReader *reader, struct CustomData *data, int count);
  
 +void CustomData_unmark_temporary_nocopy(struct CustomData *data);
 +void CustomData_mark_temporary_nocopy(struct CustomData *data);
 +
 +int CustomData_get_elem_size(CustomDataLayer *layer);
 +void CustomData_regen_active_refs(CustomData *data);
 +
 +void CustomData_bmesh_asan_poison(const CustomData *data, void *block);
 +void CustomData_bmesh_asan_unpoison(const CustomData *data, void *block);
 +int CustomData_get_named_offset(const CustomData *data, int type, const char *name);
 +
 +void CustomData_setDefaultData(eCustomDataType type, void *block, int totelem);
 +size_t CustomData_getTypeSize(eCustomDataType type);
 +void CustomData_freeData(eCustomDataType type, void *block, int totelem);
 +void CustomData_interpData(eCustomDataType type,
 +                           void *block,
 +                           int tot,
 +                           const void **srcs,
 +                           const float *ws,
 +                           const float *sub_ws);
 +
  #ifndef NDEBUG
  struct DynStr;
  /** Use to inspect mesh data when debugging. */
diff --cc source/blender/blenkernel/intern/attribute.cc
index 6faa430001a,fedcfc5c721..ea8954c5f22
--- a/source/blender/blenkernel/intern/attribute.cc
+++ b/source/blender/blenkernel/intern/attribute.cc
@@@ -274,10 -314,7 +314,10 @@@ CustomDataLayer *BKE_id_attribute_searc
    return NULL;
  }
  
 -int BKE_id_attributes_length(const ID *id, eAttrDomainMask domain_mask, eCustomDataMask mask)
 +int BKE_id_attributes_length(const ID *id,
-                              AttributeDomainMask domain_mask,
++                             eAttrDomainMask domain_mask,
 +                             eCustomDataMask mask,
 +                             bool skip_temporary)
  {
    DomainInfo info[ATTR_DOMAIN_NUM];
    get_domains(id, info);
diff --cc source/blender/blenkernel/intern/customdata.cc
index 46c5eaf9b42,a63528835ee..0c15a642e6e
--- a/source/blender/blenkernel/intern/customdata.cc
+++ b/source/blender/blenkernel/intern/customdata.cc
@@@ -4984,46 -4370,19 +5005,19 @@@ void CustomData_file_write_info(int typ
    *r_struct_num = typeInfo->structnum;
  }
  
- void CustomData_blend_write_prepare(CustomData *data,
-                                     CustomDataLayer **r_write_layers,
-                                     CustomDataLayer *write_layers_buff,
-                                     size_t write_layers_size)
+ void CustomData_blend_write_prepare(CustomData &data, Vector<CustomDataLayer, 16> &layers_to_write)
  {
-   CustomDataLayer *write_layers = write_layers_buff;
-   const size_t chunk_size = (write_layers_size > 0) ? write_layers_size : CD_TEMP_CHUNK_SIZE;
- 
-   const int totlayer = data->totlayer;
-   int i, j;
- 
-   for (i = 0, j = 0; i < totlayer; i++) {
-     CustomDataLayer *layer = &data->layers[i];
- 
-     /* Layers with this flag set are not written to file. */
-     if ((layer->flag & (CD_FLAG_NOCOPY | CD_FLAG_TEMPORARY)) || layer->anonymous_id != nullptr) {
-       data->totlayer--;
-       // CLOG_WARN(&LOG, "skipping layer %p (%s)", layer, layer->name);
+   for (const CustomDataLayer &layer : Span(data.layers, data.totlayer)) {
 -    if (layer.flag & CD_FLAG_NOCOPY) {
++    if (layer.flag & (CD_FLAG_NOCOPY | CD_FLAG_TEMPORARY)) {
+       continue;
      }
-     else {
-       if (UNLIKELY((size_t)j >= write_layers_size)) {
-         if (write_layers == write_layers_buff) {
-           write_layers = (CustomDataLayer *)MEM_malloc_arrayN(
-               (write_layers_size + chunk_size), sizeof(*write_layers), __func__);
-           if (write_layers_buff) {
-             memcpy(write_layers, write_layers_buff, si

@@ Diff output truncated at 10240 characters. @@



More information about the Bf-blender-cvs mailing list