[Bf-blender-cvs] [5c4a5c637c0] tmp-worbench-rewrite2-optimizations: MeshPass replace sub_pass_get() with draw()

Miguel Pozo noreply at git.blender.org
Sun Jan 1 15:39:55 CET 2023


Commit: 5c4a5c637c0f8bd7214f0205e49a958840d106aa
Author: Miguel Pozo
Date:   Thu Dec 29 17:21:04 2022 +0100
Branches: tmp-worbench-rewrite2-optimizations
https://developer.blender.org/rB5c4a5c637c0f8bd7214f0205e49a958840d106aa

MeshPass replace sub_pass_get() with draw()

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

M	source/blender/draw/engines/workbench/workbench_engine.cc
M	source/blender/draw/engines/workbench/workbench_mesh_passes.cc
M	source/blender/draw/engines/workbench/workbench_private.hh

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

diff --git a/source/blender/draw/engines/workbench/workbench_engine.cc b/source/blender/draw/engines/workbench/workbench_engine.cc
index 9c7bfb7c6c3..fff98692220 100644
--- a/source/blender/draw/engines/workbench/workbench_engine.cc
+++ b/source/blender/draw/engines/workbench/workbench_engine.cc
@@ -273,7 +273,7 @@ class Instance {
     const bool in_front = (ob_ref.object->dtx & OB_DRAW_IN_FRONT) != 0;
 
     auto draw = [&](MeshPass &pass) {
-      pass.sub_pass_get(ob_ref, image, sampler_state, iuser).draw(batch, handle);
+      pass.draw(ob_ref, batch, handle, image, sampler_state, iuser);
     };
 
     if (scene_state.xray_mode || material.is_transparent()) {
diff --git a/source/blender/draw/engines/workbench/workbench_mesh_passes.cc b/source/blender/draw/engines/workbench/workbench_mesh_passes.cc
index cd71bb7c6a3..06f77a0e619 100644
--- a/source/blender/draw/engines/workbench/workbench_mesh_passes.cc
+++ b/source/blender/draw/engines/workbench/workbench_mesh_passes.cc
@@ -50,12 +50,13 @@ void MeshPass::init_subpasses(ePipelineType pipeline,
   }
 }
 
-PassMain::Sub &MeshPass::sub_pass_get(ObjectRef &ref,
-                                      ::Image *image /* = nullptr */,
-                                      eGPUSamplerState sampler_state /* = GPU_SAMPLER_DEFAULT */,
-                                      ImageUser *iuser /* = nullptr */)
+void MeshPass::draw(ObjectRef &ref,
+                    GPUBatch *batch,
+                    ResourceHandle handle,
+                    ::Image *image /* = nullptr */,
+                    eGPUSamplerState sampler_state /* = GPU_SAMPLER_DEFAULT */,
+                    ImageUser *iuser /* = nullptr */)
 {
-  /*TODO(Miguel Pozo): For now we assume retrieving a subpass means it's not empty anymore*/
   is_empty_ = false;
 
   eGeometryType geometry_type = geometry_type_from_object(ref.object);
@@ -90,11 +91,12 @@ PassMain::Sub &MeshPass::sub_pass_get(ObjectRef &ref,
         return sub_pass;
       };
 
-      return *texture_subpass_map_.lookup_or_add_cb(TextureSubPassKey(texture, geometry_type),
-                                                    add_cb);
+      texture_subpass_map_.lookup_or_add_cb(TextureSubPassKey(texture, geometry_type), add_cb)
+          ->draw(batch, handle);
     }
   }
-  return *passes_[static_cast<int>(geometry_type)][static_cast<int>(eShaderType::MATERIAL)];
+  passes_[static_cast<int>(geometry_type)][static_cast<int>(eShaderType::MATERIAL)]->draw(batch,
+                                                                                          handle);
 }
 
 void OpaquePass::sync(const SceneState &scene_state, SceneResources &resources)
diff --git a/source/blender/draw/engines/workbench/workbench_private.hh b/source/blender/draw/engines/workbench/workbench_private.hh
index 9173cc089c7..a0bc247798c 100644
--- a/source/blender/draw/engines/workbench/workbench_private.hh
+++ b/source/blender/draw/engines/workbench/workbench_private.hh
@@ -175,11 +175,12 @@ class MeshPass : public PassMain {
                       bool clip,
                       ShaderCache &shaders);
 
-  PassMain::Sub &sub_pass_get(
-      ObjectRef &ref,
-      ::Image *image = nullptr,
-      eGPUSamplerState sampler_state = eGPUSamplerState::GPU_SAMPLER_DEFAULT,
-      ImageUser *iuser = nullptr);
+  void draw(ObjectRef &ref,
+            GPUBatch *batch,
+            ResourceHandle handle,
+            ::Image *image = nullptr,
+            eGPUSamplerState sampler_state = eGPUSamplerState::GPU_SAMPLER_DEFAULT,
+            ImageUser *iuser = nullptr);
 };
 
 class OpaquePass {



More information about the Bf-blender-cvs mailing list