WIP: Vulkan: Workbench #107886

Closed
Jeroen Bakker wants to merge 88 commits from Jeroen-Bakker:vulkan-draw-manager-workbench into main

When changing the target branch, be careful to rebase the branch in your fork to match. See documentation.
5 changed files with 58 additions and 55 deletions
Showing only changes of commit ff155d6f3d - Show all commits

View File

@ -68,10 +68,10 @@ static void grease_pencil_copy_data(Main * /*bmain*/,
MEM_dupallocN(grease_pencil_src->material_array)); MEM_dupallocN(grease_pencil_src->material_array));
/* Duplicate drawing array. */ /* Duplicate drawing array. */
grease_pencil_dst->drawing_array_size = grease_pencil_src->drawing_array_size; grease_pencil_dst->drawing_array_num = grease_pencil_src->drawing_array_num;
grease_pencil_dst->drawing_array = MEM_cnew_array<GreasePencilDrawingBase *>( grease_pencil_dst->drawing_array = MEM_cnew_array<GreasePencilDrawingBase *>(
grease_pencil_src->drawing_array_size, __func__); grease_pencil_src->drawing_array_num, __func__);
for (int i = 0; i < grease_pencil_src->drawing_array_size; i++) { for (int i = 0; i < grease_pencil_src->drawing_array_num; i++) {
const GreasePencilDrawingBase *src_drawing_base = grease_pencil_src->drawing_array[i]; const GreasePencilDrawingBase *src_drawing_base = grease_pencil_src->drawing_array[i];
switch (src_drawing_base->type) { switch (src_drawing_base->type) {
case GP_DRAWING: { case GP_DRAWING: {
@ -134,10 +134,10 @@ static void grease_pencil_free_data(ID *id)
static void grease_pencil_foreach_id(ID *id, LibraryForeachIDData *data) static void grease_pencil_foreach_id(ID *id, LibraryForeachIDData *data)
{ {
GreasePencil *grease_pencil = reinterpret_cast<GreasePencil *>(id); GreasePencil *grease_pencil = reinterpret_cast<GreasePencil *>(id);
for (int i = 0; i < grease_pencil->material_array_size; i++) { for (int i = 0; i < grease_pencil->material_array_num; i++) {
BKE_LIB_FOREACHID_PROCESS_IDSUPER(data, grease_pencil->material_array[i], IDWALK_CB_USER); BKE_LIB_FOREACHID_PROCESS_IDSUPER(data, grease_pencil->material_array[i], IDWALK_CB_USER);
} }
for (int i = 0; i < grease_pencil->drawing_array_size; i++) { for (int i = 0; i < grease_pencil->drawing_array_num; i++) {
GreasePencilDrawingBase *drawing_base = grease_pencil->drawing_array[i]; GreasePencilDrawingBase *drawing_base = grease_pencil->drawing_array[i];
if (drawing_base->type == GP_DRAWING_REFERENCE) { if (drawing_base->type == GP_DRAWING_REFERENCE) {
GreasePencilDrawingReference *drawing_reference = GreasePencilDrawingReference *drawing_reference =
@ -167,7 +167,7 @@ static void grease_pencil_blend_write(BlendWriter *writer, ID *id, const void *i
/* Write materials. */ /* Write materials. */
BLO_write_pointer_array( BLO_write_pointer_array(
writer, grease_pencil->material_array_size, grease_pencil->material_array); writer, grease_pencil->material_array_num, grease_pencil->material_array);
} }
static void grease_pencil_blend_read_data(BlendDataReader *reader, ID *id) static void grease_pencil_blend_read_data(BlendDataReader *reader, ID *id)
@ -195,10 +195,10 @@ static void grease_pencil_blend_read_data(BlendDataReader *reader, ID *id)
static void grease_pencil_blend_read_lib(BlendLibReader *reader, ID *id) static void grease_pencil_blend_read_lib(BlendLibReader *reader, ID *id)
{ {
GreasePencil *grease_pencil = reinterpret_cast<GreasePencil *>(id); GreasePencil *grease_pencil = reinterpret_cast<GreasePencil *>(id);
for (int i = 0; i < grease_pencil->material_array_size; i++) { for (int i = 0; i < grease_pencil->material_array_num; i++) {
BLO_read_id_address(reader, id, &grease_pencil->material_array[i]); BLO_read_id_address(reader, id, &grease_pencil->material_array[i]);
} }
for (int i = 0; i < grease_pencil->drawing_array_size; i++) { for (int i = 0; i < grease_pencil->drawing_array_num; i++) {
GreasePencilDrawingBase *drawing_base = grease_pencil->drawing_array[i]; GreasePencilDrawingBase *drawing_base = grease_pencil->drawing_array[i];
if (drawing_base->type == GP_DRAWING_REFERENCE) { if (drawing_base->type == GP_DRAWING_REFERENCE) {
GreasePencilDrawingReference *drawing_reference = GreasePencilDrawingReference *drawing_reference =
@ -211,10 +211,10 @@ static void grease_pencil_blend_read_lib(BlendLibReader *reader, ID *id)
static void grease_pencil_blend_read_expand(BlendExpander *expander, ID *id) static void grease_pencil_blend_read_expand(BlendExpander *expander, ID *id)
{ {
GreasePencil *grease_pencil = reinterpret_cast<GreasePencil *>(id); GreasePencil *grease_pencil = reinterpret_cast<GreasePencil *>(id);
for (int i = 0; i < grease_pencil->material_array_size; i++) { for (int i = 0; i < grease_pencil->material_array_num; i++) {
BLO_expand(expander, grease_pencil->material_array[i]); BLO_expand(expander, grease_pencil->material_array[i]);
} }
for (int i = 0; i < grease_pencil->drawing_array_size; i++) { for (int i = 0; i < grease_pencil->drawing_array_num; i++) {
GreasePencilDrawingBase *drawing_base = grease_pencil->drawing_array[i]; GreasePencilDrawingBase *drawing_base = grease_pencil->drawing_array[i];
if (drawing_base->type == GP_DRAWING_REFERENCE) { if (drawing_base->type == GP_DRAWING_REFERENCE) {
GreasePencilDrawingReference *drawing_reference = GreasePencilDrawingReference *drawing_reference =
@ -337,7 +337,7 @@ Layer::Layer()
{ {
this->base = TreeNode(GP_LAYER_TREE_LEAF); this->base = TreeNode(GP_LAYER_TREE_LEAF);
this->frames_storage.size = 0; this->frames_storage.num = 0;
this->frames_storage.keys = nullptr; this->frames_storage.keys = nullptr;
this->frames_storage.values = nullptr; this->frames_storage.values = nullptr;
this->frames_storage.flag = 0; this->frames_storage.flag = 0;
@ -931,49 +931,49 @@ blender::Span<blender::bke::greasepencil::StrokePoint> GreasePencilDrawing::stro
/** \name Grease Pencil data-block API /** \name Grease Pencil data-block API
* \{ */ * \{ */
template<typename T> static void grow_array(T **array, int *size, const int add_size) template<typename T> static void grow_array(T **array, int *num, const int add_num)
{ {
BLI_assert(add_size > 0); BLI_assert(add_num > 0);
const int new_array_size = *size + add_size; const int new_array_num = *num + add_num;
T *new_array = reinterpret_cast<T *>(MEM_cnew_array<T *>(new_array_size, __func__)); T *new_array = reinterpret_cast<T *>(MEM_cnew_array<T *>(new_array_num, __func__));
blender::uninitialized_relocate_n(*array, *size, new_array); blender::uninitialized_relocate_n(*array, *num, new_array);
*array = new_array; *array = new_array;
*size = new_array_size; *num = new_array_num;
} }
template<typename T> static void shrink_array(T **array, int *size, const int shrink_size) template<typename T> static void shrink_array(T **array, int *num, const int shrink_num)
{ {
BLI_assert(shrink_size > 0); BLI_assert(shrink_num > 0);
const int new_array_size = *size - shrink_size; const int new_array_num = *num - shrink_num;
T *new_array = reinterpret_cast<T *>(MEM_cnew_array<T *>(new_array_size, __func__)); T *new_array = reinterpret_cast<T *>(MEM_cnew_array<T *>(new_array_num, __func__));
blender::uninitialized_move_n(*array, new_array_size, new_array); blender::uninitialized_move_n(*array, new_array_num, new_array);
MEM_freeN(*array); MEM_freeN(*array);
*array = new_array; *array = new_array;
*size = new_array_size; *num = new_array_num;
} }
blender::Span<GreasePencilDrawingBase *> GreasePencil::drawings() const blender::Span<GreasePencilDrawingBase *> GreasePencil::drawings() const
{ {
return blender::Span<GreasePencilDrawingBase *>{this->drawing_array, this->drawing_array_size}; return blender::Span<GreasePencilDrawingBase *>{this->drawing_array, this->drawing_array_num};
} }
blender::MutableSpan<GreasePencilDrawingBase *> GreasePencil::drawings_for_write() blender::MutableSpan<GreasePencilDrawingBase *> GreasePencil::drawings_for_write()
{ {
return blender::MutableSpan<GreasePencilDrawingBase *>{this->drawing_array, return blender::MutableSpan<GreasePencilDrawingBase *>{this->drawing_array,
this->drawing_array_size}; this->drawing_array_num};
} }
void GreasePencil::add_empty_drawings(const int add_size) void GreasePencil::add_empty_drawings(const int add_num)
{ {
using namespace blender; using namespace blender;
BLI_assert(add_size > 0); BLI_assert(add_num > 0);
const int prev_size = this->drawings().size(); const int prev_num = this->drawings().size();
grow_array<GreasePencilDrawingBase *>(&this->drawing_array, &this->drawing_array_size, add_size); grow_array<GreasePencilDrawingBase *>(&this->drawing_array, &this->drawing_array_num, add_num);
MutableSpan<GreasePencilDrawingBase *> new_drawings = this->drawings_for_write().drop_front( MutableSpan<GreasePencilDrawingBase *> new_drawings = this->drawings_for_write().drop_front(
prev_size); prev_num);
for (const int i : new_drawings.index_range()) { for (const int i : new_drawings.index_range()) {
new_drawings[i] = reinterpret_cast<GreasePencilDrawingBase *>( new_drawings[i] = reinterpret_cast<GreasePencilDrawingBase *>(
MEM_new<GreasePencilDrawing>(__func__)); MEM_new<GreasePencilDrawing>(__func__));
@ -997,11 +997,11 @@ void GreasePencil::remove_drawing(const int index_to_remove)
* 2) Destroy A and shrink the array by one. * 2) Destroy A and shrink the array by one.
* 3) Remove any frames in the layers that reference the A's index. * 3) Remove any frames in the layers that reference the A's index.
*/ */
BLI_assert(this->drawing_array_size > 0); BLI_assert(this->drawing_array_num > 0);
BLI_assert(index_to_remove >= 0 && index_to_remove < this->drawing_array_size); BLI_assert(index_to_remove >= 0 && index_to_remove < this->drawing_array_num);
/* Move the drawing that should be removed to the last index. */ /* Move the drawing that should be removed to the last index. */
const int last_drawing_index = this->drawing_array_size - 1; const int last_drawing_index = this->drawing_array_num - 1;
if (index_to_remove != last_drawing_index) { if (index_to_remove != last_drawing_index) {
for (Layer *layer : this->layers_for_write()) { for (Layer *layer : this->layers_for_write()) {
blender::Map<int, GreasePencilFrame> &frames = layer->frames_for_write(); blender::Map<int, GreasePencilFrame> &frames = layer->frames_for_write();
@ -1050,7 +1050,7 @@ void GreasePencil::remove_drawing(const int index_to_remove)
} }
/* Shrink drawing array. */ /* Shrink drawing array. */
shrink_array<GreasePencilDrawingBase *>(&this->drawing_array, &this->drawing_array_size, 1); shrink_array<GreasePencilDrawingBase *>(&this->drawing_array, &this->drawing_array_num, 1);
} }
void GreasePencil::foreach_visible_drawing( void GreasePencil::foreach_visible_drawing(
@ -1083,7 +1083,7 @@ bool GreasePencil::bounds_min_max(float3 &min, float3 &max) const
bool found = false; bool found = false;
/* FIXME: this should somehow go through the visible drawings. We don't have access to the /* FIXME: this should somehow go through the visible drawings. We don't have access to the
* scene time here, so we probably need to cache the visible drawing for each layer somehow. */ * scene time here, so we probably need to cache the visible drawing for each layer somehow. */
for (int i = 0; i < this->drawing_array_size; i++) { for (int i = 0; i < this->drawing_array_num; i++) {
GreasePencilDrawingBase *drawing_base = this->drawing_array[i]; GreasePencilDrawingBase *drawing_base = this->drawing_array[i];
switch (drawing_base->type) { switch (drawing_base->type) {
case GP_DRAWING: { case GP_DRAWING: {
@ -1153,7 +1153,7 @@ void GreasePencil::print_layer_tree()
void GreasePencil::read_drawing_array(BlendDataReader *reader) void GreasePencil::read_drawing_array(BlendDataReader *reader)
{ {
BLO_read_pointer_array(reader, reinterpret_cast<void **>(&this->drawing_array)); BLO_read_pointer_array(reader, reinterpret_cast<void **>(&this->drawing_array));
for (int i = 0; i < this->drawing_array_size; i++) { for (int i = 0; i < this->drawing_array_num; i++) {
BLO_read_data_address(reader, &this->drawing_array[i]); BLO_read_data_address(reader, &this->drawing_array[i]);
GreasePencilDrawingBase *drawing_base = this->drawing_array[i]; GreasePencilDrawingBase *drawing_base = this->drawing_array[i];
switch (drawing_base->type) { switch (drawing_base->type) {
@ -1176,8 +1176,8 @@ void GreasePencil::read_drawing_array(BlendDataReader *reader)
void GreasePencil::write_drawing_array(BlendWriter *writer) void GreasePencil::write_drawing_array(BlendWriter *writer)
{ {
BLO_write_pointer_array(writer, this->drawing_array_size, this->drawing_array); BLO_write_pointer_array(writer, this->drawing_array_num, this->drawing_array);
for (int i = 0; i < this->drawing_array_size; i++) { for (int i = 0; i < this->drawing_array_num; i++) {
GreasePencilDrawingBase *drawing_base = this->drawing_array[i]; GreasePencilDrawingBase *drawing_base = this->drawing_array[i];
switch (drawing_base->type) { switch (drawing_base->type) {
case GP_DRAWING: { case GP_DRAWING: {
@ -1198,10 +1198,10 @@ void GreasePencil::write_drawing_array(BlendWriter *writer)
void GreasePencil::free_drawing_array() void GreasePencil::free_drawing_array()
{ {
if (this->drawing_array == nullptr || this->drawing_array_size == 0) { if (this->drawing_array == nullptr || this->drawing_array_num == 0) {
return; return;
} }
for (int i = 0; i < this->drawing_array_size; i++) { for (int i = 0; i < this->drawing_array_num; i++) {
GreasePencilDrawingBase *drawing_base = this->drawing_array[i]; GreasePencilDrawingBase *drawing_base = this->drawing_array[i];
switch (drawing_base->type) { switch (drawing_base->type) {
case GP_DRAWING: { case GP_DRAWING: {
@ -1222,7 +1222,7 @@ void GreasePencil::free_drawing_array()
} }
MEM_freeN(this->drawing_array); MEM_freeN(this->drawing_array);
this->drawing_array = nullptr; this->drawing_array = nullptr;
this->drawing_array_size = 0; this->drawing_array_num = 0;
} }
/** \} */ /** \} */
@ -1239,12 +1239,12 @@ static void read_layer(BlendDataReader *reader,
node->base.parent = parent; node->base.parent = parent;
/* Read frames storage. */ /* Read frames storage. */
BLO_read_int32_array(reader, node->frames_storage.size, &node->frames_storage.keys); BLO_read_int32_array(reader, node->frames_storage.num, &node->frames_storage.keys);
BLO_read_data_address(reader, &node->frames_storage.values); BLO_read_data_address(reader, &node->frames_storage.values);
/* Re-create frames data in runtime map. */ /* Re-create frames data in runtime map. */
node->wrap().runtime = MEM_new<blender::bke::greasepencil::LayerRuntime>(__func__); node->wrap().runtime = MEM_new<blender::bke::greasepencil::LayerRuntime>(__func__);
for (int i = 0; i < node->frames_storage.size; i++) { for (int i = 0; i < node->frames_storage.num; i++) {
node->wrap().frames_for_write().add(node->frames_storage.keys[i], node->wrap().frames_for_write().add(node->frames_storage.keys[i],
node->frames_storage.values[i]); node->frames_storage.values[i]);
} }
@ -1300,9 +1300,9 @@ static void write_layer(BlendWriter *writer, GreasePencilLayer *node)
MEM_SAFE_FREE(node->frames_storage.values); MEM_SAFE_FREE(node->frames_storage.values);
const Layer &layer = node->wrap(); const Layer &layer = node->wrap();
node->frames_storage.size = layer.frames().size(); node->frames_storage.num = layer.frames().size();
node->frames_storage.keys = MEM_cnew_array<int>(node->frames_storage.size, __func__); node->frames_storage.keys = MEM_cnew_array<int>(node->frames_storage.num, __func__);
node->frames_storage.values = MEM_cnew_array<GreasePencilFrame>(node->frames_storage.size, node->frames_storage.values = MEM_cnew_array<GreasePencilFrame>(node->frames_storage.num,
__func__); __func__);
const Span<int> sorted_keys = layer.sorted_keys(); const Span<int> sorted_keys = layer.sorted_keys();
for (const int i : sorted_keys.index_range()) { for (const int i : sorted_keys.index_range()) {
@ -1314,9 +1314,9 @@ static void write_layer(BlendWriter *writer, GreasePencilLayer *node)
node->frames_storage.flag &= ~GP_LAYER_FRAMES_STORAGE_DIRTY; node->frames_storage.flag &= ~GP_LAYER_FRAMES_STORAGE_DIRTY;
} }
BLO_write_int32_array(writer, node->frames_storage.size, node->frames_storage.keys); BLO_write_int32_array(writer, node->frames_storage.num, node->frames_storage.keys);
BLO_write_struct_array( BLO_write_struct_array(
writer, GreasePencilFrame, node->frames_storage.size, node->frames_storage.values); writer, GreasePencilFrame, node->frames_storage.num, node->frames_storage.values);
BLO_write_struct_list(writer, GreasePencilLayerMask, &node->masks); BLO_write_struct_list(writer, GreasePencilLayerMask, &node->masks);
LISTBASE_FOREACH (GreasePencilLayerMask *, mask, &node->masks) { LISTBASE_FOREACH (GreasePencilLayerMask *, mask, &node->masks) {

View File

@ -182,7 +182,7 @@ void legacy_gpencil_to_grease_pencil(Main &bmain, GreasePencil &grease_pencil, b
num_drawings += BLI_listbase_count(&gpl->frames); num_drawings += BLI_listbase_count(&gpl->frames);
} }
grease_pencil.drawing_array_size = num_drawings; grease_pencil.drawing_array_num = num_drawings;
grease_pencil.drawing_array = reinterpret_cast<GreasePencilDrawingBase **>( grease_pencil.drawing_array = reinterpret_cast<GreasePencilDrawingBase **>(
MEM_cnew_array<GreasePencilDrawing *>(num_drawings, __func__)); MEM_cnew_array<GreasePencilDrawing *>(num_drawings, __func__));

View File

@ -395,7 +395,7 @@ short *BKE_object_material_len_p(Object *ob)
} }
if (ob->type == OB_GREASE_PENCIL) { if (ob->type == OB_GREASE_PENCIL) {
GreasePencil *grease_pencil = static_cast<GreasePencil *>(ob->data); GreasePencil *grease_pencil = static_cast<GreasePencil *>(ob->data);
return &(grease_pencil->material_array_size); return &(grease_pencil->material_array_num);
} }
return nullptr; return nullptr;
} }
@ -449,7 +449,7 @@ short *BKE_id_material_len_p(ID *id)
case ID_VO: case ID_VO:
return &(((Volume *)id)->totcol); return &(((Volume *)id)->totcol);
case ID_GP: case ID_GP:
return &(((GreasePencil *)id)->material_array_size); return &(((GreasePencil *)id)->material_array_num);
default: default:
break; break;
} }

View File

@ -170,7 +170,7 @@ typedef struct GreasePencilLayerFramesMapStorage {
/* Array of `frames` values (order matches the keys array). */ /* Array of `frames` values (order matches the keys array). */
GreasePencilFrame *values; GreasePencilFrame *values;
/* Size of the map (number of key-value pairs). */ /* Size of the map (number of key-value pairs). */
int size; int num;
/* Flag for the status of the storage. */ /* Flag for the status of the storage. */
int flag; int flag;
} GreasePencilLayerFramesMapStorage; } GreasePencilLayerFramesMapStorage;
@ -394,7 +394,7 @@ typedef struct GreasePencil {
* is done by the layers. See the `Layer` class in `BKE_grease_pencil.hh`. * is done by the layers. See the `Layer` class in `BKE_grease_pencil.hh`.
*/ */
GreasePencilDrawingBase **drawing_array; GreasePencilDrawingBase **drawing_array;
int drawing_array_size; int drawing_array_num;
char _pad[4]; char _pad[4];
/* Root group of the layer tree. */ /* Root group of the layer tree. */
@ -410,7 +410,7 @@ typedef struct GreasePencil {
* An array of materials. * An array of materials.
*/ */
struct Material **material_array; struct Material **material_array;
short material_array_size; short material_array_num;
char _pad2[2]; char _pad2[2];
/** /**
* Global flag on the data-block. * Global flag on the data-block.
@ -449,7 +449,7 @@ typedef struct GreasePencil {
const blender::bke::greasepencil::Layer *find_layer_by_name(blender::StringRefNull name) const; const blender::bke::greasepencil::Layer *find_layer_by_name(blender::StringRefNull name) const;
blender::bke::greasepencil::Layer *find_layer_by_name(blender::StringRefNull name); blender::bke::greasepencil::Layer *find_layer_by_name(blender::StringRefNull name);
void add_empty_drawings(int add_size); void add_empty_drawings(int add_num);
void remove_drawing(int index); void remove_drawing(int index);
void foreach_visible_drawing(int frame, void foreach_visible_drawing(int frame,

View File

@ -80,6 +80,9 @@ DNA_STRUCT_RENAME_ELEM(FluidDomainSettings, guiding_parent, guide_parent)
DNA_STRUCT_RENAME_ELEM(FluidDomainSettings, guiding_source, guide_source) DNA_STRUCT_RENAME_ELEM(FluidDomainSettings, guiding_source, guide_source)
DNA_STRUCT_RENAME_ELEM(FluidDomainSettings, guiding_vel_factor, guide_vel_factor) DNA_STRUCT_RENAME_ELEM(FluidDomainSettings, guiding_vel_factor, guide_vel_factor)
DNA_STRUCT_RENAME_ELEM(FluidEffectorSettings, guiding_mode, guide_mode) DNA_STRUCT_RENAME_ELEM(FluidEffectorSettings, guiding_mode, guide_mode)
DNA_STRUCT_RENAME_ELEM(GreasePencil, drawing_array_size, drawing_array_num)
DNA_STRUCT_RENAME_ELEM(GreasePencil, material_array_size, material_array_num)
DNA_STRUCT_RENAME_ELEM(GreasePencilLayerFramesMapStorage, size, num)
DNA_STRUCT_RENAME_ELEM(HookModifierData, totindex, indexar_num) DNA_STRUCT_RENAME_ELEM(HookModifierData, totindex, indexar_num)
DNA_STRUCT_RENAME_ELEM(Image, name, filepath) DNA_STRUCT_RENAME_ELEM(Image, name, filepath)
DNA_STRUCT_RENAME_ELEM(LaplacianDeformModifierData, total_verts, verts_num) DNA_STRUCT_RENAME_ELEM(LaplacianDeformModifierData, total_verts, verts_num)