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>2021-12-10 20:19:47 +0300
committerClément Foucault <foucault.clem@gmail.com>2021-12-10 20:19:47 +0300
commit55a6a8900aec81e94f4d82401d6051e3b5507c0e (patch)
treee3f1b065ebc6ca3dfe9d7cfe995bc400ce7d16be /source/blender/draw/engines/eevee/shaders
parent36bec765e2edbe07d8137fc019f7db7d3292875d (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.glsl10
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;