From 75fc6e3b2b3f3db9f734415ff457b723664834f9 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Cl=C3=A9ment=20Foucault?= Date: Sat, 13 Mar 2021 22:49:57 +0100 Subject: Cleanup: EEVEE: Remove the horizon search layered shader This shader is of no use now that we the fullres hizbuffer. --- source/blender/draw/engines/eevee/eevee_engine.c | 2 +- .../blender/draw/engines/eevee/eevee_lightprobes.c | 2 +- .../blender/draw/engines/eevee/eevee_occlusion.c | 32 ++++------------------ source/blender/draw/engines/eevee/eevee_private.h | 9 +----- source/blender/draw/engines/eevee/eevee_render.c | 2 +- source/blender/draw/engines/eevee/eevee_shaders.c | 9 ------ .../engines/eevee/shaders/effect_gtao_frag.glsl | 26 +++++------------- source/blender/draw/tests/shaders_test.cc | 1 - 8 files changed, 16 insertions(+), 67 deletions(-) (limited to 'source/blender') diff --git a/source/blender/draw/engines/eevee/eevee_engine.c b/source/blender/draw/engines/eevee/eevee_engine.c index 582bfad323b..330850db637 100644 --- a/source/blender/draw/engines/eevee/eevee_engine.c +++ b/source/blender/draw/engines/eevee/eevee_engine.c @@ -286,7 +286,7 @@ static void eevee_draw_scene(void *vedata) EEVEE_create_minmax_buffer(vedata, dtxl->depth, -1); DRW_stats_group_end(); - EEVEE_occlusion_compute(sldata, vedata, dtxl->depth, -1); + EEVEE_occlusion_compute(sldata, vedata); EEVEE_volumes_compute(sldata, vedata); /* Shading pass */ diff --git a/source/blender/draw/engines/eevee/eevee_lightprobes.c b/source/blender/draw/engines/eevee/eevee_lightprobes.c index d692a3e420e..e2e865bcfad 100644 --- a/source/blender/draw/engines/eevee/eevee_lightprobes.c +++ b/source/blender/draw/engines/eevee/eevee_lightprobes.c @@ -931,7 +931,7 @@ static void lightbake_render_scene_reflected(int layer, EEVEE_BakeRenderData *us DRW_draw_pass(psl->probe_background); EEVEE_create_minmax_buffer(vedata, tmp_planar_depth, layer); - EEVEE_occlusion_compute(sldata, vedata, tmp_planar_depth, layer); + EEVEE_occlusion_compute(sldata, vedata); GPU_framebuffer_bind(fbl->planarref_fb); diff --git a/source/blender/draw/engines/eevee/eevee_occlusion.c b/source/blender/draw/engines/eevee/eevee_occlusion.c index a7874440895..86509ef9e73 100644 --- a/source/blender/draw/engines/eevee/eevee_occlusion.c +++ b/source/blender/draw/engines/eevee/eevee_occlusion.c @@ -176,21 +176,9 @@ void EEVEE_occlusion_cache_init(EEVEE_ViewLayerData *sldata, EEVEE_Data *vedata) psl->ao_horizon_search); DRW_shgroup_uniform_texture(grp, "utilTex", EEVEE_materials_get_util_tex()); DRW_shgroup_uniform_texture_ref(grp, "maxzBuffer", &txl->maxzbuffer); - DRW_shgroup_uniform_texture_ref(grp, "depthBuffer", &effects->ao_src_depth); DRW_shgroup_uniform_block(grp, "common_block", sldata->common_ubo); DRW_shgroup_uniform_block(grp, "renderpass_block", sldata->renderpass_ubo.combined); - DRW_shgroup_call(grp, quad, NULL); - - DRW_PASS_CREATE(psl->ao_horizon_search_layer, DRW_STATE_WRITE_COLOR); - grp = DRW_shgroup_create(EEVEE_shaders_effect_ambient_occlusion_layer_sh_get(), - psl->ao_horizon_search_layer); - DRW_shgroup_uniform_texture(grp, "utilTex", EEVEE_materials_get_util_tex()); - DRW_shgroup_uniform_texture_ref(grp, "maxzBuffer", &txl->maxzbuffer); - DRW_shgroup_uniform_texture_ref(grp, "depthBufferLayered", &effects->ao_src_depth); - DRW_shgroup_uniform_block(grp, "common_block", sldata->common_ubo); - DRW_shgroup_uniform_block(grp, "renderpass_block", sldata->renderpass_ubo.combined); - DRW_shgroup_uniform_int(grp, "layer", &stl->effects->ao_depth_layer, 1); - DRW_shgroup_call(grp, quad, NULL); + DRW_shgroup_call_procedural_triangles(grp, NULL, 1); if (G.debug_value == 6) { DRW_PASS_CREATE(psl->ao_horizon_debug, DRW_STATE_WRITE_COLOR); @@ -203,15 +191,12 @@ void EEVEE_occlusion_cache_init(EEVEE_ViewLayerData *sldata, EEVEE_Data *vedata) DRW_shgroup_uniform_texture_ref(grp, "horizonBuffer", &effects->gtao_horizons_renderpass); DRW_shgroup_uniform_block(grp, "common_block", sldata->common_ubo); DRW_shgroup_uniform_block(grp, "renderpass_block", sldata->renderpass_ubo.combined); - DRW_shgroup_call(grp, quad, NULL); + DRW_shgroup_call_procedural_triangles(grp, NULL, 1); } } } -void EEVEE_occlusion_compute(EEVEE_ViewLayerData *UNUSED(sldata), - EEVEE_Data *vedata, - struct GPUTexture *depth_src, - int layer) +void EEVEE_occlusion_compute(EEVEE_ViewLayerData *UNUSED(sldata), EEVEE_Data *vedata) { EEVEE_PassList *psl = vedata->psl; EEVEE_FramebufferList *fbl = vedata->fbl; @@ -220,17 +205,10 @@ void EEVEE_occlusion_compute(EEVEE_ViewLayerData *UNUSED(sldata), if ((effects->enabled_effects & EFFECT_GTAO) != 0) { DRW_stats_group_start("GTAO Horizon Scan"); - effects->ao_src_depth = depth_src; - effects->ao_depth_layer = layer; GPU_framebuffer_bind(fbl->gtao_fb); - if (layer >= 0) { - DRW_draw_pass(psl->ao_horizon_search_layer); - } - else { - DRW_draw_pass(psl->ao_horizon_search); - } + DRW_draw_pass(psl->ao_horizon_search); if (GPU_mip_render_workaround() || GPU_type_matches(GPU_DEVICE_INTEL_UHD, GPU_OS_WIN, GPU_DRIVER_ANY)) { @@ -275,7 +253,7 @@ void EEVEE_occlusion_output_accumulate(EEVEE_ViewLayerData *sldata, EEVEE_Data * /* Update the min_max/horizon buffers so the refraction materials appear in it. */ EEVEE_create_minmax_buffer(vedata, dtxl->depth, -1); - EEVEE_occlusion_compute(sldata, vedata, dtxl->depth, -1); + EEVEE_occlusion_compute(sldata, vedata); GPU_framebuffer_bind(fbl->ao_accum_fb); DRW_draw_pass(psl->ao_accum_ps); diff --git a/source/blender/draw/engines/eevee/eevee_private.h b/source/blender/draw/engines/eevee/eevee_private.h index fdee4fd3c5e..e98ba4136ed 100644 --- a/source/blender/draw/engines/eevee/eevee_private.h +++ b/source/blender/draw/engines/eevee/eevee_private.h @@ -263,7 +263,6 @@ typedef struct EEVEE_PassList { /* Effects */ struct DRWPass *ao_horizon_search; - struct DRWPass *ao_horizon_search_layer; struct DRWPass *ao_horizon_debug; struct DRWPass *ao_accum_ps; struct DRWPass *mist_accum_ps; @@ -739,8 +738,6 @@ typedef struct EEVEE_EffectsInfo { float prev_drw_persmat[4][4]; /* Used for checking view validity and reprojection. */ struct DRWView *taa_view; /* Ambient Occlusion */ - int ao_depth_layer; - struct GPUTexture *ao_src_depth; /* pointer copy */ struct GPUTexture *gtao_horizons; /* Textures from pool */ struct GPUTexture *gtao_horizons_renderpass; /* Texture when rendering render pass */ struct GPUTexture *gtao_horizons_debug; @@ -1204,7 +1201,6 @@ struct GPUShader *EEVEE_shaders_effect_motion_blur_hair_sh_get(void); struct GPUShader *EEVEE_shaders_effect_motion_blur_velocity_tiles_sh_get(void); struct GPUShader *EEVEE_shaders_effect_motion_blur_velocity_tiles_expand_sh_get(void); struct GPUShader *EEVEE_shaders_effect_ambient_occlusion_sh_get(void); -struct GPUShader *EEVEE_shaders_effect_ambient_occlusion_layer_sh_get(void); struct GPUShader *EEVEE_shaders_effect_ambient_occlusion_debug_sh_get(void); struct GPUShader *EEVEE_shaders_effect_reflection_trace_sh_get(void); struct GPUShader *EEVEE_shaders_effect_reflection_resolve_sh_get(void); @@ -1352,10 +1348,7 @@ void EEVEE_occlusion_output_init(EEVEE_ViewLayerData *sldata, uint tot_samples); void EEVEE_occlusion_output_accumulate(EEVEE_ViewLayerData *sldata, EEVEE_Data *vedata); void EEVEE_occlusion_cache_init(EEVEE_ViewLayerData *sldata, EEVEE_Data *vedata); -void EEVEE_occlusion_compute(EEVEE_ViewLayerData *sldata, - EEVEE_Data *vedata, - struct GPUTexture *depth_src, - int layer); +void EEVEE_occlusion_compute(EEVEE_ViewLayerData *sldata, EEVEE_Data *vedata); void EEVEE_occlusion_draw_debug(EEVEE_ViewLayerData *sldata, EEVEE_Data *vedata); void EEVEE_occlusion_free(void); diff --git a/source/blender/draw/engines/eevee/eevee_render.c b/source/blender/draw/engines/eevee/eevee_render.c index bc05b7915c3..66716ee14d7 100644 --- a/source/blender/draw/engines/eevee/eevee_render.c +++ b/source/blender/draw/engines/eevee/eevee_render.c @@ -630,7 +630,7 @@ void EEVEE_render_draw(EEVEE_Data *vedata, RenderEngine *engine, RenderLayer *rl DRW_draw_pass(psl->depth_ps); /* Create minmax texture */ EEVEE_create_minmax_buffer(vedata, dtxl->depth, -1); - EEVEE_occlusion_compute(sldata, vedata, dtxl->depth, -1); + EEVEE_occlusion_compute(sldata, vedata); EEVEE_volumes_compute(sldata, vedata); /* Shading pass */ eevee_render_draw_background(vedata); diff --git a/source/blender/draw/engines/eevee/eevee_shaders.c b/source/blender/draw/engines/eevee/eevee_shaders.c index 8c9e1fae715..06763c34766 100644 --- a/source/blender/draw/engines/eevee/eevee_shaders.c +++ b/source/blender/draw/engines/eevee/eevee_shaders.c @@ -684,15 +684,6 @@ GPUShader *EEVEE_shaders_effect_ambient_occlusion_sh_get(void) return e_data.gtao_sh; } -GPUShader *EEVEE_shaders_effect_ambient_occlusion_layer_sh_get(void) -{ - if (e_data.gtao_layer_sh == NULL) { - e_data.gtao_layer_sh = DRW_shader_create_fullscreen_with_shaderlib( - datatoc_effect_gtao_frag_glsl, e_data.lib, "#define LAYERED_DEPTH\n"); - } - return e_data.gtao_layer_sh; -} - GPUShader *EEVEE_shaders_effect_ambient_occlusion_debug_sh_get(void) { if (e_data.gtao_debug_sh == NULL) { diff --git a/source/blender/draw/engines/eevee/shaders/effect_gtao_frag.glsl b/source/blender/draw/engines/eevee/shaders/effect_gtao_frag.glsl index b76fa104c77..932632abd75 100644 --- a/source/blender/draw/engines/eevee/shaders/effect_gtao_frag.glsl +++ b/source/blender/draw/engines/eevee/shaders/effect_gtao_frag.glsl @@ -15,18 +15,6 @@ in vec4 uvcoordsvar; out vec4 FragColor; uniform sampler2D normalBuffer; -#ifdef LAYERED_DEPTH -uniform sampler2DArray depthBufferLayered; -uniform int layer; -# define gtao_depthBuffer depthBufferLayered -# define gtao_textureLod(a, b, c) textureLod(a, vec3(b, layer), c) - -#else -uniform sampler2D depthBuffer; -# define gtao_depthBuffer depthBuffer -# define gtao_textureLod(a, b, c) textureLod(a, b, c) - -#endif /* Similar to https://atyuwen.github.io/posts/normal-reconstruction/. * This samples the depth buffer 4 time for each direction to get the most correct @@ -38,10 +26,10 @@ vec3 view_position_derivative_from_depth(vec2 uvs, vec2 ofs, vec3 vP, float dept vec2 uv3 = uvs + ofs; vec2 uv4 = uvs + ofs * 2.0; vec4 H; - H.x = gtao_textureLod(gtao_depthBuffer, uv1, 0.0).r; - H.y = gtao_textureLod(gtao_depthBuffer, uv2, 0.0).r; - H.z = gtao_textureLod(gtao_depthBuffer, uv3, 0.0).r; - H.w = gtao_textureLod(gtao_depthBuffer, uv4, 0.0).r; + H.x = textureLod(maxzBuffer, uv1, 0.0).r; + H.y = textureLod(maxzBuffer, uv2, 0.0).r; + H.z = textureLod(maxzBuffer, uv3, 0.0).r; + H.w = textureLod(maxzBuffer, uv4, 0.0).r; /* Fix issue with depth precision. Take even larger diff. */ vec4 diff = abs(vec4(depth_center, H.yzw) - H.x); if (max_v4(diff) < 2.4e-7 && all(lessThan(diff.xyz, diff.www))) { @@ -60,9 +48,9 @@ vec3 view_position_derivative_from_depth(vec2 uvs, vec2 ofs, vec3 vP, float dept /* TODO(fclem) port to a common place for other effects to use. */ bool reconstruct_view_position_and_normal_from_depth(vec2 texel, out vec3 vP, out vec3 vNg) { - vec2 texel_size = 1.0 / vec2(textureSize(gtao_depthBuffer, 0).xy); - vec2 uvs = gl_FragCoord.xy * texel_size; - float depth_center = gtao_textureLod(gtao_depthBuffer, uvs, 0.0).r; + vec2 texel_size = 1.0 / vec2(textureSize(maxzBuffer, 0).xy); + vec2 uvs = texel * texel_size; + float depth_center = textureLod(maxzBuffer, uvs, 0.0).r; /* Background case. */ if (depth_center == 1.0) { diff --git a/source/blender/draw/tests/shaders_test.cc b/source/blender/draw/tests/shaders_test.cc index 62932b5122e..96d544fd855 100644 --- a/source/blender/draw/tests/shaders_test.cc +++ b/source/blender/draw/tests/shaders_test.cc @@ -339,7 +339,6 @@ TEST_F(DrawTest, eevee_glsl_shaders_static) EXPECT_NE(EEVEE_shaders_effect_motion_blur_velocity_tiles_sh_get(), nullptr); EXPECT_NE(EEVEE_shaders_effect_motion_blur_velocity_tiles_expand_sh_get(), nullptr); EXPECT_NE(EEVEE_shaders_effect_ambient_occlusion_sh_get(), nullptr); - EXPECT_NE(EEVEE_shaders_effect_ambient_occlusion_layer_sh_get(), nullptr); EXPECT_NE(EEVEE_shaders_effect_ambient_occlusion_debug_sh_get(), nullptr); EXPECT_NE(EEVEE_shaders_ggx_lut_sh_get(), nullptr); EXPECT_NE(EEVEE_shaders_ggx_refraction_lut_sh_get(), nullptr); -- cgit v1.2.3