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-07-25 12:25:17 +0300
committerJeroen Bakker <jeroen@blender.org>2022-07-26 15:25:31 +0300
commit3b76778847ca83dc89859cad3673950c3d094f14 (patch)
treeba7af09ed5d90f8d9d1af646d6a85b48b8c3e686
parent96d96e8909207c6e152e7fff4dcf3e0f2ef4a6d6 (diff)
EEVEE-Next: Fix float3 passes being incorrect
-rw-r--r--source/blender/draw/engines/eevee_next/eevee_film.cc11
-rw-r--r--source/blender/draw/engines/eevee_next/eevee_film.hh17
2 files changed, 27 insertions, 1 deletions
diff --git a/source/blender/draw/engines/eevee_next/eevee_film.cc b/source/blender/draw/engines/eevee_next/eevee_film.cc
index 18e0452da25..49f43265aa8 100644
--- a/source/blender/draw/engines/eevee_next/eevee_film.cc
+++ b/source/blender/draw/engines/eevee_next/eevee_film.cc
@@ -620,7 +620,16 @@ float *Film::read_pass(eViewLayerEEVEEPassType pass_type)
GPU_memory_barrier(GPU_BARRIER_TEXTURE_UPDATE);
- return (float *)GPU_texture_read(pass_tx, GPU_DATA_FLOAT, 0);
+ float *result = (float *)GPU_texture_read(pass_tx, GPU_DATA_FLOAT, 0);
+
+ if (pass_is_float3(pass_type)) {
+ /* Convert result in place as we cannot do this conversion on GPU. */
+ for (auto px : IndexRange(accum_tx.width() * accum_tx.height())) {
+ *(reinterpret_cast<float3 *>(result) + px) = *(reinterpret_cast<float3 *>(result + px * 4));
+ }
+ }
+
+ return result;
}
/** \} */
diff --git a/source/blender/draw/engines/eevee_next/eevee_film.hh b/source/blender/draw/engines/eevee_next/eevee_film.hh
index 124fd79a1c0..1165b9a4c12 100644
--- a/source/blender/draw/engines/eevee_next/eevee_film.hh
+++ b/source/blender/draw/engines/eevee_next/eevee_film.hh
@@ -109,6 +109,23 @@ class Film {
}
}
+ static bool pass_is_float3(eViewLayerEEVEEPassType pass_type)
+ {
+ switch (pass_type) {
+ case EEVEE_RENDER_PASS_NORMAL:
+ case EEVEE_RENDER_PASS_DIFFUSE_LIGHT:
+ case EEVEE_RENDER_PASS_DIFFUSE_COLOR:
+ case EEVEE_RENDER_PASS_SPECULAR_LIGHT:
+ case EEVEE_RENDER_PASS_SPECULAR_COLOR:
+ case EEVEE_RENDER_PASS_VOLUME_LIGHT:
+ case EEVEE_RENDER_PASS_EMIT:
+ case EEVEE_RENDER_PASS_ENVIRONMENT:
+ return true;
+ default:
+ return false;
+ }
+ }
+
/* Returns layer offset in the accumulation texture. -1 if the pass is not enabled. */
int pass_id_get(eViewLayerEEVEEPassType pass_type) const
{