[Bf-blender-cvs] [cd67fde848f] tmp-workbench-rewrite2: Optimize out depth_in_front_tx when possible

Miguel Pozo noreply at git.blender.org
Fri Oct 28 15:11:17 CEST 2022


Commit: cd67fde848f7b7f5d83ed5b9e58e81c8e3916690
Author: Miguel Pozo
Date:   Tue Oct 25 17:52:00 2022 +0200
Branches: tmp-workbench-rewrite2
https://developer.blender.org/rBcd67fde848f7b7f5d83ed5b9e58e81c8e3916690

Optimize out depth_in_front_tx when possible

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

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

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

diff --git a/source/blender/draw/engines/workbench/workbench_engine.cc b/source/blender/draw/engines/workbench/workbench_engine.cc
index a3b604a86a5..542c1503995 100644
--- a/source/blender/draw/engines/workbench/workbench_engine.cc
+++ b/source/blender/draw/engines/workbench/workbench_engine.cc
@@ -516,13 +516,15 @@ class Instance {
     fb.bind();
     GPU_framebuffer_clear_depth_stencil(fb, 1.0f, 0x00);
 
-    if (!opaque_ps.gbuffer_in_front_ps_.is_empty() ||
-        !transparent_ps.accumulation_in_front_ps_.is_empty()) {
+    if (!transparent_ps.accumulation_in_front_ps_.is_empty()) {
       resources.depth_in_front_tx.acquire(resolution, GPU_DEPTH24_STENCIL8);
-      Framebuffer fb = Framebuffer("Workbench.Clear");
-      fb.ensure(GPU_ATTACHMENT_TEXTURE(resources.depth_in_front_tx));
-      fb.bind();
-      GPU_framebuffer_clear_depth_stencil(fb, 1.0f, 0x00);
+      if (opaque_ps.gbuffer_in_front_ps_.is_empty()) {
+        /* Clear only if it wont be overwitten by opaque_ps */
+        Framebuffer fb = Framebuffer("Workbench.Clear");
+        fb.ensure(GPU_ATTACHMENT_TEXTURE(resources.depth_in_front_tx));
+        fb.bind();
+        GPU_framebuffer_clear_depth_stencil(fb, 1.0f, 0x00);
+      }
     }
 
     opaque_ps.draw(manager, view, resources, resolution);
diff --git a/source/blender/draw/engines/workbench/workbench_mesh_passes.cc b/source/blender/draw/engines/workbench/workbench_mesh_passes.cc
index 73accf5791f..dd7ffcf86db 100644
--- a/source/blender/draw/engines/workbench/workbench_mesh_passes.cc
+++ b/source/blender/draw/engines/workbench/workbench_mesh_passes.cc
@@ -136,14 +136,17 @@ void OpaquePass::draw(Manager &manager, View &view, SceneResources &resources, i
   }
 
   if (!gbuffer_in_front_ps_.is_empty()) {
-    opaque_fb.ensure(GPU_ATTACHMENT_TEXTURE(resources.depth_in_front_tx),
+    opaque_fb.ensure(GPU_ATTACHMENT_TEXTURE(resources.depth_tx),
                      GPU_ATTACHMENT_TEXTURE(gbuffer_material_tx),
                      GPU_ATTACHMENT_TEXTURE(gbuffer_normal_tx),
                      object_id_attachment);
     opaque_fb.bind();
 
     manager.submit(gbuffer_in_front_ps_, view);
-    GPU_texture_copy(resources.depth_tx, resources.depth_in_front_tx);
+    if (resources.depth_in_front_tx.is_valid()) {
+      /* Only needed when transparent infront is needed */
+      GPU_texture_copy(resources.depth_in_front_tx, resources.depth_tx);
+    }
   }
 
   if (!gbuffer_ps_.is_empty()) {



More information about the Bf-blender-cvs mailing list