Welcome to mirror list, hosted at ThFree Co, Russian Federation.

git.blender.org/blender.git - Unnamed repository; edit this file 'description' to name the repository.
summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorClément Foucault <foucault.clem@gmail.com>2022-02-19 23:13:37 +0300
committerClément Foucault <foucault.clem@gmail.com>2022-02-20 14:08:32 +0300
commit5a20ef35b366985b4dcf5e64fb7a59b13900d2eb (patch)
treee0b6ab74d05c5c0a0ba2bda4db9c27beb38e5baf /source/blender/draw/engines/eevee/shaders/infos/eevee_shadow_info.hh
parent70ec3d3a3e7a7566a3bcffa2b36fc0f0c85ab69e (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.hh37
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");
/** \} */