[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