[Bf-blender-cvs] [c6ce4eed5ef] tmp-worbench-rewrite2-optimizations: Optimization: Convert composite compute shader to fragment

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


Commit: c6ce4eed5ef1fdba514c6cd1253ea7fb66a7c31c
Author: Miguel Pozo
Date:   Thu Dec 29 18:09:59 2022 +0100
Branches: tmp-worbench-rewrite2-optimizations
https://developer.blender.org/rBc6ce4eed5ef1fdba514c6cd1253ea7fb66a7c31c

Optimization: Convert composite compute shader to fragment

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

M	source/blender/draw/CMakeLists.txt
M	source/blender/draw/engines/workbench/shaders/infos/workbench_composite_info.hh
R094	source/blender/draw/engines/workbench/shaders/workbench_composite_comp.glsl	source/blender/draw/engines/workbench/shaders/workbench_next_composite_frag.glsl
M	source/blender/draw/engines/workbench/workbench_mesh_passes.cc

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

diff --git a/source/blender/draw/CMakeLists.txt b/source/blender/draw/CMakeLists.txt
index 39428d1b93f..afbe75a8dbe 100644
--- a/source/blender/draw/CMakeLists.txt
+++ b/source/blender/draw/CMakeLists.txt
@@ -475,8 +475,8 @@ set(GLSL_SRC
 
   engines/workbench/shaders/workbench_cavity_lib.glsl
   engines/workbench/shaders/workbench_common_lib.glsl
-  engines/workbench/shaders/workbench_composite_comp.glsl
   engines/workbench/shaders/workbench_composite_frag.glsl
+  engines/workbench/shaders/workbench_next_composite_frag.glsl
   engines/workbench/shaders/workbench_curvature_lib.glsl
   engines/workbench/shaders/workbench_effect_cavity_frag.glsl
   engines/workbench/shaders/workbench_effect_dof_frag.glsl
diff --git a/source/blender/draw/engines/workbench/shaders/infos/workbench_composite_info.hh b/source/blender/draw/engines/workbench/shaders/infos/workbench_composite_info.hh
index c33218cff1b..bd813a36c6e 100644
--- a/source/blender/draw/engines/workbench/shaders/infos/workbench_composite_info.hh
+++ b/source/blender/draw/engines/workbench/shaders/infos/workbench_composite_info.hh
@@ -47,17 +47,16 @@ GPU_SHADER_CREATE_INFO(workbench_composite_flat)
  * \{ */
 
 GPU_SHADER_CREATE_INFO(workbench_next_composite)
-    .local_group_size(8, 8)
     .sampler(3, ImageType::FLOAT_2D, "normal_tx")
     .sampler(4, ImageType::FLOAT_2D, "material_tx")
     .sampler(5, ImageType::DEPTH_2D, "depth_tx")
     .sampler(6, ImageType::UINT_2D, "stencil_tx")
     .uniform_buf(WB_WORLD_SLOT, "WorldData", "world_data")
-    .push_constant(Type::BOOL, "forceShadowing")
-    .image(0, GPU_RGBA16F, Qualifier::WRITE, ImageType::FLOAT_2D, "out_color_img")
     .typedef_source("workbench_shader_shared.h")
-    .compute_source("workbench_composite_comp.glsl")
-    .additional_info("draw_view");
+    .push_constant(Type::BOOL, "forceShadowing")
+    .fragment_out(0, Type::VEC4, "fragColor")
+    .fragment_source("workbench_next_composite_frag.glsl")
+    .additional_info("draw_fullscreen", "draw_view");
 
 // Lighting
 
diff --git a/source/blender/draw/engines/workbench/shaders/workbench_composite_comp.glsl b/source/blender/draw/engines/workbench/shaders/workbench_next_composite_frag.glsl
similarity index 94%
rename from source/blender/draw/engines/workbench/shaders/workbench_composite_comp.glsl
rename to source/blender/draw/engines/workbench/shaders/workbench_next_composite_frag.glsl
index 0ca96cc6149..5331ad5f7ae 100644
--- a/source/blender/draw/engines/workbench/shaders/workbench_composite_comp.glsl
+++ b/source/blender/draw/engines/workbench/shaders/workbench_next_composite_frag.glsl
@@ -8,8 +8,7 @@
 
 void main()
 {
-  ivec2 texel = ivec2(gl_GlobalInvocationID.xy);
-  vec2 uv = (vec2(texel) + 0.5) / vec2(textureSize(normal_tx, 0));
+  vec2 uv = uvcoordsvar.st;
   /* Normal and Incident vector are in viewspace. Lighting is evaluated in viewspace. */
   vec3 V = get_view_vector_from_screen_uv(uv);
   vec3 N = workbench_normal_decode(texture(normal_tx, uv));
@@ -78,6 +77,9 @@ void main()
 #endif
 
   if (color != world_data.background_color) {
-    imageStore(out_color_img, texel, color);
+    fragColor = color;
+  }
+  else {
+    discard;
   }
 }
diff --git a/source/blender/draw/engines/workbench/workbench_mesh_passes.cc b/source/blender/draw/engines/workbench/workbench_mesh_passes.cc
index 06f77a0e619..84c7c58f12f 100644
--- a/source/blender/draw/engines/workbench/workbench_mesh_passes.cc
+++ b/source/blender/draw/engines/workbench/workbench_mesh_passes.cc
@@ -119,6 +119,7 @@ void OpaquePass::sync(const SceneState &scene_state, SceneResources &resources)
       ePipelineType::OPAQUE, scene_state.lighting_type, clip, resources.shader_cache);
 
   deferred_ps_.init();
+  deferred_ps_.state_set(DRW_STATE_WRITE_COLOR);
   deferred_ps_.shader_set(resources.shader_cache.resolve_shader_get(ePipelineType::OPAQUE,
                                                                     scene_state.lighting_type,
                                                                     scene_state.draw_cavity,
@@ -130,10 +131,8 @@ void OpaquePass::sync(const SceneState &scene_state, SceneResources &resources)
   deferred_ps_.bind_texture("material_tx", &gbuffer_material_tx);
   deferred_ps_.bind_texture("depth_tx", &resources.depth_tx);
   deferred_ps_.bind_texture("stencil_tx", &deferred_ps_stencil_tx);
-  deferred_ps_.bind_image("out_color_img", &resources.color_tx);
   resources.cavity.setup_resolve_pass(deferred_ps_, resources);
-  deferred_ps_.dispatch(math::divide_ceil(scene_state.resolution, int2(WB_RESOLVE_GROUP_SIZE)));
-  deferred_ps_.barrier(GPU_BARRIER_TEXTURE_FETCH);
+  deferred_ps_.draw_procedural(GPU_PRIM_TRIS, 1, 3);
 }
 
 void OpaquePass::draw(Manager &manager,
@@ -208,6 +207,8 @@ void OpaquePass::draw(Manager &manager,
                       !gbuffer_in_front_ps_.is_empty());
   }
 
+  opaque_fb.ensure(GPU_ATTACHMENT_NONE, GPU_ATTACHMENT_TEXTURE(resources.color_tx));
+  opaque_fb.bind();
   manager.submit(deferred_ps_, view);
 
   if (shadow_pass && !needs_stencil_copy) {



More information about the Bf-blender-cvs mailing list