[Bf-blender-cvs] [5c0e1aab81b] temp-T88822-gpu-thread-safe-index-builder: Fix crash when extracting multiple iterators.
Jeroen Bakker
noreply at git.blender.org
Fri Jun 4 16:01:00 CEST 2021
Commit: 5c0e1aab81bf1001b01396c3a151ca8dddbc1451
Author: Jeroen Bakker
Date: Fri Jun 4 15:40:21 2021 +0200
Branches: temp-T88822-gpu-thread-safe-index-builder
https://developer.blender.org/rB5c0e1aab81bf1001b01396c3a151ca8dddbc1451
Fix crash when extracting multiple iterators.
===================================================================
M source/blender/draw/intern/draw_cache_extract_mesh.cc
===================================================================
diff --git a/source/blender/draw/intern/draw_cache_extract_mesh.cc b/source/blender/draw/intern/draw_cache_extract_mesh.cc
index df183f421a7..f640894531f 100644
--- a/source/blender/draw/intern/draw_cache_extract_mesh.cc
+++ b/source/blender/draw/intern/draw_cache_extract_mesh.cc
@@ -29,6 +29,7 @@
#include "DNA_mesh_types.h"
#include "DNA_scene_types.h"
+#include "BLI_math_bits.h"
#include "BLI_task.h"
#include "BLI_vector.hh"
@@ -107,7 +108,7 @@ class ExtractorRunDatas : public Vector<ExtractorRunData> {
}
}
- eMRIterType iter_types()
+ eMRIterType iter_types() const
{
eMRIterType iter_type = static_cast<eMRIterType>(0);
@@ -118,6 +119,13 @@ class ExtractorRunDatas : public Vector<ExtractorRunData> {
return iter_type;
}
+ const uint iter_types_len() const
+ {
+ const eMRIterType iter_type = iter_types();
+ uint bits = static_cast<uint>(iter_type);
+ return count_bits_i(bits);
+ }
+
eMRDataType data_types()
{
eMRDataType data_type = static_cast<eMRDataType>(0);
@@ -937,6 +945,7 @@ static void mesh_buffer_cache_create_requested(struct TaskGraph *task_graph,
*/
int num_threads = BLI_task_scheduler_num_threads();
num_threads -= single_threaded_extractors_len % num_threads;
+ const int task_len = multi_threaded_extractors->iter_types_len() * num_threads;
UserDataInitTaskData *user_data_init_task_data = new UserDataInitTaskData();
struct TaskNode *task_node_user_data_init = user_data_init_task_node_create(
@@ -947,7 +956,7 @@ static void mesh_buffer_cache_create_requested(struct TaskGraph *task_graph,
multi_threaded_extractors,
mbc,
&user_data_init_task_data->task_counter,
- num_threads);
+ task_len);
extract_task_in_ranges_create(
task_graph, task_node_user_data_init, user_data_init_task_data->td, num_threads);
More information about the Bf-blender-cvs
mailing list