diff options
author | Clément Foucault <foucault.clem@gmail.com> | 2022-02-19 23:13:37 +0300 |
---|---|---|
committer | Clément Foucault <foucault.clem@gmail.com> | 2022-02-20 14:08:32 +0300 |
commit | 5a20ef35b366985b4dcf5e64fb7a59b13900d2eb (patch) | |
tree | e0b6ab74d05c5c0a0ba2bda4db9c27beb38e5baf /source/blender/draw/engines/eevee/shaders/infos/eevee_shadow_info.hh | |
parent | 70ec3d3a3e7a7566a3bcffa2b36fc0f0c85ab69e (diff) |
EEVEE: Shadow: Revisit the cache system
This allows removing the indirection for lods during shading since the
tile is not owner of the page unless it uses it.
The cache system is quite more complex but makes it easier to spot
errors since the pages are not scattered into the tile texture.
This also simplify allocation since the free heap is separated from the
cache.
Diffstat (limited to 'source/blender/draw/engines/eevee/shaders/infos/eevee_shadow_info.hh')
-rw-r--r-- | source/blender/draw/engines/eevee/shaders/infos/eevee_shadow_info.hh | 37 |
1 files changed, 22 insertions, 15 deletions
diff --git a/source/blender/draw/engines/eevee/shaders/infos/eevee_shadow_info.hh b/source/blender/draw/engines/eevee/shaders/infos/eevee_shadow_info.hh index fe9692fe91c..6c048679cde 100644 --- a/source/blender/draw/engines/eevee/shaders/infos/eevee_shadow_info.hh +++ b/source/blender/draw/engines/eevee/shaders/infos/eevee_shadow_info.hh @@ -11,11 +11,12 @@ GPU_SHADER_CREATE_INFO(eevee_shadow_page_alloc) .do_static_compilation(true) - .additional_info("eevee_shared", "draw_view") + .additional_info("eevee_shared", "draw_view", "draw_debug_print") .local_group_size(SHADOW_TILEMAP_RES, SHADOW_TILEMAP_RES) - .storage_buf(1, Qualifier::READ, "ShadowTileMapData", "tilemaps_buf[]") - .storage_buf(2, Qualifier::READ_WRITE, "uint", "pages_free_buf[]") - .storage_buf(3, Qualifier::READ_WRITE, "ShadowPagesInfoData", "pages_infos_buf") + .storage_buf(0, Qualifier::READ_WRITE, "uint", "pages_free_buf[]") + .storage_buf(1, Qualifier::READ_WRITE, "uvec2", "pages_cached_buf[]") + .storage_buf(2, Qualifier::READ_WRITE, "ShadowPagesInfoData", "pages_infos_buf") + .storage_buf(3, Qualifier::READ, "ShadowTileMapData", "tilemaps_buf[]") .image(0, GPU_R32UI, Qualifier::READ_WRITE, ImageType::UINT_2D, "tilemaps_img") .image(1, GPU_R32I, Qualifier::WRITE, ImageType::INT_2D, "tilemap_rects_img") .compute_source("eevee_shadow_page_alloc_comp.glsl"); @@ -38,7 +39,8 @@ GPU_SHADER_CREATE_INFO(eevee_shadow_page_defrag) .additional_info("eevee_shared", "draw_view") .local_group_size(1) .storage_buf(0, Qualifier::READ_WRITE, "uint", "pages_free_buf[]") - .storage_buf(1, Qualifier::READ_WRITE, "ShadowPagesInfoData", "pages_infos_buf") + .storage_buf(1, Qualifier::READ_WRITE, "uvec2", "pages_cached_buf[]") + .storage_buf(2, Qualifier::READ_WRITE, "ShadowPagesInfoData", "pages_infos_buf") .image(0, GPU_R32UI, Qualifier::READ_WRITE, ImageType::UINT_2D, "tilemaps_img") .compute_source("eevee_shadow_page_defrag_comp.glsl"); @@ -47,8 +49,9 @@ GPU_SHADER_CREATE_INFO(eevee_shadow_page_free) .additional_info("eevee_shared") .local_group_size(SHADOW_TILEMAP_RES, SHADOW_TILEMAP_RES) .storage_buf(0, Qualifier::READ_WRITE, "uint", "pages_free_buf[]") - .storage_buf(1, Qualifier::READ_WRITE, "ShadowPagesInfoData", "pages_infos_buf") - .storage_buf(2, Qualifier::READ, "ShadowTileMapData", "tilemaps_buf[]") + .storage_buf(1, Qualifier::READ_WRITE, "uvec2", "pages_cached_buf[]") + .storage_buf(2, Qualifier::READ_WRITE, "ShadowPagesInfoData", "pages_infos_buf") + .storage_buf(3, Qualifier::READ, "ShadowTileMapData", "tilemaps_buf[]") .image(0, GPU_R32UI, Qualifier::READ_WRITE, ImageType::UINT_2D, "tilemaps_img") .compute_source("eevee_shadow_page_free_comp.glsl"); @@ -57,7 +60,8 @@ GPU_SHADER_CREATE_INFO(eevee_shadow_page_init) .additional_info("eevee_shared") .local_group_size(SHADOW_PAGE_PER_ROW) .storage_buf(0, Qualifier::WRITE, "uint", "pages_free_buf[]") - .storage_buf(1, Qualifier::WRITE, "ShadowPagesInfoData", "pages_infos_buf") + .storage_buf(1, Qualifier::WRITE, "uvec2", "pages_cached_buf[]") + .storage_buf(2, Qualifier::WRITE, "ShadowPagesInfoData", "pages_infos_buf") .image(0, GPU_R32UI, Qualifier::READ_WRITE, ImageType::UINT_2D, "tilemaps_img") .compute_source("eevee_shadow_page_init_comp.glsl"); @@ -105,8 +109,9 @@ GPU_SHADER_CREATE_INFO(eevee_shadow_tilemap_setup) .additional_info("eevee_shared") .local_group_size(SHADOW_TILEMAP_RES, SHADOW_TILEMAP_RES) .storage_buf(0, Qualifier::READ_WRITE, "uint", "pages_free_buf[]") - .storage_buf(1, Qualifier::READ_WRITE, "ShadowPagesInfoData", "pages_infos_buf") - .storage_buf(2, Qualifier::READ, "ShadowTileMapData", "tilemaps_buf[]") + .storage_buf(1, Qualifier::READ_WRITE, "uvec2", "pages_cached_buf[]") + .storage_buf(2, Qualifier::READ_WRITE, "ShadowPagesInfoData", "pages_infos_buf") + .storage_buf(3, Qualifier::READ, "ShadowTileMapData", "tilemaps_buf[]") .image(0, GPU_R32UI, Qualifier::READ_WRITE, ImageType::UINT_2D, "tilemaps_img") .push_constant(Type::BOOL, "do_tilemap_setup") .compute_source("eevee_shadow_tilemap_setup_comp.glsl"); @@ -162,15 +167,17 @@ GPU_SHADER_CREATE_INFO(eevee_shadow_data) GPU_SHADER_CREATE_INFO(eevee_shadow_page_debug) .do_static_compilation(true) .local_group_size(8, 8) - .additional_info("eevee_shared", "draw_view", "draw_debug_print") - .storage_buf(1, Qualifier::READ, "uint", "pages_free_buf[]") - .image(0, GPU_R32UI, Qualifier::READ_WRITE, ImageType::UINT_2D, "tilemaps_img") + .additional_info("eevee_shared") + .storage_buf(0, Qualifier::READ, "uint", "pages_free_buf[]") + .storage_buf(1, Qualifier::READ, "uvec2", "pages_cached_buf[]") + .storage_buf(2, Qualifier::READ, "ShadowPagesInfoData", "pages_infos_buf") + .image(0, GPU_R32UI, Qualifier::READ, ImageType::UINT_2D, "tilemaps_img") .image(1, GPU_R32UI, Qualifier::READ_WRITE, ImageType::UINT_2D, "debug_img") .compute_source("eevee_shadow_page_debug_comp.glsl"); GPU_SHADER_CREATE_INFO(eevee_shadow_debug) .do_static_compilation(true) - .additional_info("eevee_shared", "draw_view") + .additional_info("eevee_shared") .uniform_buf(1, "ShadowDebugData", "debug") .storage_buf(0, Qualifier::READ, "ShadowTileMapData", "tilemaps_buf[]") .sampler(0, ImageType::DEPTH_2D, "depth_tx") @@ -180,6 +187,6 @@ GPU_SHADER_CREATE_INFO(eevee_shadow_debug) .fragment_out(0, Type::VEC4, "out_color_add", DualBlend::SRC_0) .fragment_out(0, Type::VEC4, "out_color_mul", DualBlend::SRC_1) .fragment_source("eevee_shadow_debug_frag.glsl") - .additional_info("draw_fullscreen", "draw_debug_print"); + .additional_info("draw_fullscreen", "draw_view", "draw_debug_print"); /** \} */ |