Welcome to mirror list, hosted at ThFree Co, Russian Federation.

git.blender.org/blender.git - Unnamed repository; edit this file 'description' to name the repository.
summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorClément Foucault <foucault.clem@gmail.com>2022-10-12 10:49:59 +0300
committerClément Foucault <foucault.clem@gmail.com>2022-10-12 10:49:59 +0300
commit81c4833a0dcdbfa4c999e91e05c44a57a65f54c4 (patch)
tree094deca9aa83ef1e6bd056b42bf2782444227d46
parent5a10182a7087d93ab3fa79c4b6e50d55957ab6b3 (diff)
Experiment with 1M instances fast generationtmp-workbench-perf-experiment
-rw-r--r--source/blender/draw/engines/workbench/workbench_engine.cc20
-rw-r--r--source/blender/draw/intern/draw_manager.hh2
-rw-r--r--source/blender/draw/intern/draw_manager_exec.c10
-rw-r--r--source/blender/draw/intern/draw_resource.hh2
4 files changed, 24 insertions, 10 deletions
diff --git a/source/blender/draw/engines/workbench/workbench_engine.cc b/source/blender/draw/engines/workbench/workbench_engine.cc
index b9fd98b6a6b..0039a918d82 100644
--- a/source/blender/draw/engines/workbench/workbench_engine.cc
+++ b/source/blender/draw/engines/workbench/workbench_engine.cc
@@ -5,6 +5,8 @@
#include "ED_view3d.h"
#include "GPU_capabilities.h"
+#include "BLI_rand.hh"
+
#include "workbench_private.hh"
namespace blender::workbench {
@@ -231,10 +233,11 @@ class Instance {
}
}
else {
- ResourceHandle handle = manager.resource_handle(ob_ref);
+ float4x4 model_matrix(ob_ref.object->obmat);
- Material &mat = resources.material_buf.get_or_resize(handle.resource_index());
+ // ResourceHandle handle = manager.resource_handle(ob_ref);
+ Material mat;
if (material_subtype == eMaterialSubType::OBJECT) {
mat = Material(*ob_ref.object);
}
@@ -250,7 +253,18 @@ class Instance {
GPUBatch *batch = geometry_get(ob_ref);
if (batch) {
- pipeline_get(ob_ref).draw(batch, handle);
+ blender::RandomNumberGenerator rng(23423);
+ for (size_t y = 0; y < 1000; y++) {
+ for (size_t x = 0; x < 1000; x++) {
+ model_matrix[3][0] = x * 0.001f;
+ model_matrix[3][1] = y * 0.001f;
+ ResourceHandle handle = manager.resource_handle(model_matrix);
+
+ resources.material_buf.get_or_resize(handle.resource_index()) = mat;
+
+ pipeline_get(ob_ref).draw(batch, handle);
+ }
+ }
}
}
}
diff --git a/source/blender/draw/intern/draw_manager.hh b/source/blender/draw/intern/draw_manager.hh
index fbd3d28d3f4..36bd895cfd7 100644
--- a/source/blender/draw/intern/draw_manager.hh
+++ b/source/blender/draw/intern/draw_manager.hh
@@ -180,7 +180,7 @@ inline ResourceHandle Manager::resource_handle(const ObjectRef ref)
return ResourceHandle(resource_len_++, (ref.object->transflag & OB_NEG_SCALE) != 0);
}
-inline ResourceHandle Manager::resource_handle(const float4x4 &model_matrix)
+BLI_NOINLINE inline ResourceHandle Manager::resource_handle(const float4x4 &model_matrix)
{
matrix_buf.get_or_resize(resource_len_).sync(model_matrix);
bounds_buf.get_or_resize(resource_len_).sync();
diff --git a/source/blender/draw/intern/draw_manager_exec.c b/source/blender/draw/intern/draw_manager_exec.c
index 0e39cc1d3b9..785fbc23733 100644
--- a/source/blender/draw/intern/draw_manager_exec.c
+++ b/source/blender/draw/intern/draw_manager_exec.c
@@ -480,8 +480,8 @@ static void draw_compute_culling(DRWView *view)
cull->mask = 0;
}
else {
- bool culled = !draw_culling_sphere_test(
- &view->frustum_bsphere, view->frustum_planes, &cull->bsphere);
+ bool culled = false; //! draw_culling_sphere_test(
+ //&view->frustum_bsphere, view->frustum_planes, &cull->bsphere);
#ifdef DRW_DEBUG_CULLING
if (G.debug_value != 0) {
@@ -496,9 +496,9 @@ static void draw_compute_culling(DRWView *view)
}
#endif
- if (view->visibility_fn) {
- culled = !view->visibility_fn(!culled, cull->user_data);
- }
+ // if (view->visibility_fn) {
+ // culled = !view->visibility_fn(!culled, cull->user_data);
+ // }
SET_FLAG_FROM_TEST(cull->mask, culled, view->culling_mask);
}
diff --git a/source/blender/draw/intern/draw_resource.hh b/source/blender/draw/intern/draw_resource.hh
index 2df38e32ed2..23257335a66 100644
--- a/source/blender/draw/intern/draw_resource.hh
+++ b/source/blender/draw/intern/draw_resource.hh
@@ -38,7 +38,7 @@ inline void ObjectMatrices::sync(const Object &object)
inline void ObjectMatrices::sync(const float4x4 &model_matrix)
{
model = model_matrix;
- model_inverse = model_matrix.inverted();
+ // model_inverse = model_matrix.inverted();
}
inline std::ostream &operator<<(std::ostream &stream, const ObjectMatrices &matrices)