diff options
author | Clément Foucault <foucault.clem@gmail.com> | 2021-12-10 20:19:47 +0300 |
---|---|---|
committer | Clément Foucault <foucault.clem@gmail.com> | 2021-12-10 20:19:47 +0300 |
commit | 55a6a8900aec81e94f4d82401d6051e3b5507c0e (patch) | |
tree | e3f1b065ebc6ca3dfe9d7cfe995bc400ce7d16be /source/blender/draw/engines/eevee/shaders | |
parent | 36bec765e2edbe07d8137fc019f7db7d3292875d (diff) |
EEVEE: Shadow: Avoid double rendering
The update flag was not being cleared after the opaque pass, making the
updates of the forward pass re-render the same tiles.
Diffstat (limited to 'source/blender/draw/engines/eevee/shaders')
-rw-r--r-- | source/blender/draw/engines/eevee/shaders/eevee_shadow_tilemap_setup_comp.glsl | 10 |
1 files changed, 6 insertions, 4 deletions
diff --git a/source/blender/draw/engines/eevee/shaders/eevee_shadow_tilemap_setup_comp.glsl b/source/blender/draw/engines/eevee/shaders/eevee_shadow_tilemap_setup_comp.glsl index 92a0c3d6d14..d6f01f6326e 100644 --- a/source/blender/draw/engines/eevee/shaders/eevee_shadow_tilemap_setup_comp.glsl +++ b/source/blender/draw/engines/eevee/shaders/eevee_shadow_tilemap_setup_comp.glsl @@ -29,12 +29,14 @@ layout(std430, binding = 3) restrict buffer pages_infos_buf layout(r32ui) restrict uniform uimage2D tilemaps_img; +uniform bool do_tilemap_setup; + void main() { ShadowTileMapData tilemap = tilemaps[gl_GlobalInvocationID.z]; - + ivec2 grid_shift = (do_tilemap_setup) ? tilemap.grid_shift : ivec2(0); ivec2 tile_co = ivec2(gl_GlobalInvocationID.xy); - ivec2 tile_shifted = tile_co + tilemap.grid_shift; + ivec2 tile_shifted = tile_co + grid_shift; /* Still load a valid tile after the shifting in order to not loose any page reference. * This way the tile can even be reused if it is needed. Also avoid negative modulo. */ ivec2 tile_wrapped = (tile_shifted + SHADOW_TILEMAP_RES) % SHADOW_TILEMAP_RES; @@ -52,7 +54,7 @@ void main() tile_data.do_update = true; } - if (tilemap.grid_shift != ivec2(0) && tile_data.is_cached) { + if (grid_shift != ivec2(0) && tile_data.is_cached) { /* Update page location after shift. */ free_page_owners[tile_data.free_page_owner_index] = packUvec2x16(uvec2(texel_out)); } @@ -61,7 +63,7 @@ void main() if (tilemap.is_cubeface) { /* Cubemap shift update is always all or nothing. */ - bool do_update = (tilemap.grid_shift.x != 0); + bool do_update = (grid_shift.x != 0); /* Number of lod0 tiles covered by the current lod level (in one dimension). */ uint lod_stride = 1u << 1u; |