[Bf-blender-cvs] [1449ae042ef] master: Cleanup: EEVEE bloom shaders
Jeroen Bakker
noreply at git.blender.org
Tue Sep 1 10:58:04 CEST 2020
Commit: 1449ae042ef2556192e5f9b4ea85348e1fa81a3f
Author: Jeroen Bakker
Date: Tue Sep 1 10:55:12 2020 +0200
Branches: master
https://developer.blender.org/rB1449ae042ef2556192e5f9b4ea85348e1fa81a3f
Cleanup: EEVEE bloom shaders
- moved to eevee_shaders
- added to test suite
Reviewed By: Clément Foucault
Differential Revision: https://developer.blender.org/D8763
===================================================================
M source/blender/draw/engines/eevee/eevee_bloom.c
M source/blender/draw/engines/eevee/eevee_engine.c
M source/blender/draw/engines/eevee/eevee_private.h
M source/blender/draw/engines/eevee/eevee_shaders.c
M source/blender/draw/tests/shaders_test.cc
===================================================================
diff --git a/source/blender/draw/engines/eevee/eevee_bloom.c b/source/blender/draw/engines/eevee/eevee_bloom.c
index 8fd953478d5..9b8f7ddab0c 100644
--- a/source/blender/draw/engines/eevee/eevee_bloom.c
+++ b/source/blender/draw/engines/eevee/eevee_bloom.c
@@ -30,45 +30,8 @@
#include "eevee_private.h"
-static struct {
- /* Bloom */
- struct GPUShader *bloom_blit_sh[2];
- struct GPUShader *bloom_downsample_sh[2];
- struct GPUShader *bloom_upsample_sh[2];
- struct GPUShader *bloom_resolve_sh[2];
-} e_data = {{NULL}}; /* Engine data */
-
-extern char datatoc_effect_bloom_frag_glsl[];
-
static const bool use_highres = true;
-static void eevee_create_shader_bloom(void)
-{
- e_data.bloom_blit_sh[0] = DRW_shader_create_fullscreen(datatoc_effect_bloom_frag_glsl,
- "#define STEP_BLIT\n");
- e_data.bloom_blit_sh[1] = DRW_shader_create_fullscreen(datatoc_effect_bloom_frag_glsl,
- "#define STEP_BLIT\n"
- "#define HIGH_QUALITY\n");
-
- e_data.bloom_downsample_sh[0] = DRW_shader_create_fullscreen(datatoc_effect_bloom_frag_glsl,
- "#define STEP_DOWNSAMPLE\n");
- e_data.bloom_downsample_sh[1] = DRW_shader_create_fullscreen(datatoc_effect_bloom_frag_glsl,
- "#define STEP_DOWNSAMPLE\n"
- "#define HIGH_QUALITY\n");
-
- e_data.bloom_upsample_sh[0] = DRW_shader_create_fullscreen(datatoc_effect_bloom_frag_glsl,
- "#define STEP_UPSAMPLE\n");
- e_data.bloom_upsample_sh[1] = DRW_shader_create_fullscreen(datatoc_effect_bloom_frag_glsl,
- "#define STEP_UPSAMPLE\n"
- "#define HIGH_QUALITY\n");
-
- e_data.bloom_resolve_sh[0] = DRW_shader_create_fullscreen(datatoc_effect_bloom_frag_glsl,
- "#define STEP_RESOLVE\n");
- e_data.bloom_resolve_sh[1] = DRW_shader_create_fullscreen(datatoc_effect_bloom_frag_glsl,
- "#define STEP_RESOLVE\n"
- "#define HIGH_QUALITY\n");
-}
-
int EEVEE_bloom_init(EEVEE_ViewLayerData *UNUSED(sldata), EEVEE_Data *vedata)
{
EEVEE_StorageList *stl = vedata->stl;
@@ -81,11 +44,6 @@ int EEVEE_bloom_init(EEVEE_ViewLayerData *UNUSED(sldata), EEVEE_Data *vedata)
if (scene_eval->eevee.flag & SCE_EEVEE_BLOOM_ENABLED) {
const float *viewport_size = DRW_viewport_size_get();
- /* Shaders */
- if (!e_data.bloom_blit_sh[0]) {
- eevee_create_shader_bloom();
- }
-
/* Bloom */
int blitsize[2], texsize[2];
@@ -246,26 +204,26 @@ void EEVEE_bloom_cache_init(EEVEE_ViewLayerData *UNUSED(sldata), EEVEE_Data *ved
const bool use_antiflicker = true;
eevee_create_bloom_pass("Bloom Downsample First",
effects,
- e_data.bloom_downsample_sh[use_antiflicker],
+ EEVEE_shaders_bloom_downsample_get(use_antiflicker),
&psl->bloom_downsample_first,
false,
false);
eevee_create_bloom_pass("Bloom Downsample",
effects,
- e_data.bloom_downsample_sh[0],
+ EEVEE_shaders_bloom_downsample_get(false),
&psl->bloom_downsample,
false,
false);
eevee_create_bloom_pass("Bloom Upsample",
effects,
- e_data.bloom_upsample_sh[use_highres],
+ EEVEE_shaders_bloom_upsample_get(use_highres),
&psl->bloom_upsample,
true,
false);
grp = eevee_create_bloom_pass("Bloom Blit",
effects,
- e_data.bloom_blit_sh[use_antiflicker],
+ EEVEE_shaders_bloom_blit_get(use_antiflicker),
&psl->bloom_blit,
false,
false);
@@ -274,7 +232,7 @@ void EEVEE_bloom_cache_init(EEVEE_ViewLayerData *UNUSED(sldata), EEVEE_Data *ved
grp = eevee_create_bloom_pass("Bloom Resolve",
effects,
- e_data.bloom_resolve_sh[use_highres],
+ EEVEE_shaders_bloom_resolve_get(use_highres),
&psl->bloom_resolve,
true,
true);
@@ -362,7 +320,7 @@ void EEVEE_bloom_output_init(EEVEE_ViewLayerData *UNUSED(sldata),
/* Create Pass and shgroup. */
DRWShadingGroup *grp = eevee_create_bloom_pass("Bloom Accumulate",
effects,
- e_data.bloom_resolve_sh[use_highres],
+ EEVEE_shaders_bloom_resolve_get(use_highres),
&psl->bloom_accum_ps,
true,
true);
@@ -383,13 +341,3 @@ void EEVEE_bloom_output_accumulate(EEVEE_ViewLayerData *UNUSED(sldata), EEVEE_Da
GPU_framebuffer_bind(fbl->main_fb);
}
}
-
-void EEVEE_bloom_free(void)
-{
- for (int i = 0; i < 2; i++) {
- DRW_SHADER_FREE_SAFE(e_data.bloom_blit_sh[i]);
- DRW_SHADER_FREE_SAFE(e_data.bloom_downsample_sh[i]);
- DRW_SHADER_FREE_SAFE(e_data.bloom_upsample_sh[i]);
- DRW_SHADER_FREE_SAFE(e_data.bloom_resolve_sh[i]);
- }
-}
diff --git a/source/blender/draw/engines/eevee/eevee_engine.c b/source/blender/draw/engines/eevee/eevee_engine.c
index 6ab267ceb03..d5fd11040e3 100644
--- a/source/blender/draw/engines/eevee/eevee_engine.c
+++ b/source/blender/draw/engines/eevee/eevee_engine.c
@@ -571,7 +571,6 @@ static void eevee_render_to_image(void *vedata,
static void eevee_engine_free(void)
{
EEVEE_shaders_free();
- EEVEE_bloom_free();
EEVEE_depth_of_field_free();
EEVEE_effects_free();
EEVEE_lightprobes_free();
diff --git a/source/blender/draw/engines/eevee/eevee_private.h b/source/blender/draw/engines/eevee/eevee_private.h
index b25f21ce929..7fba0e1b8ed 100644
--- a/source/blender/draw/engines/eevee/eevee_private.h
+++ b/source/blender/draw/engines/eevee/eevee_private.h
@@ -1072,6 +1072,10 @@ void EEVEE_random_rotation_m4(int sample_ofs, float scale, float r_mat[4][4]);
void EEVEE_shaders_lightprobe_shaders_init(void);
void EEVEE_shaders_material_shaders_init(void);
struct DRWShaderLibrary *EEVEE_shader_lib_get(void);
+struct GPUShader *EEVEE_shaders_bloom_blit_get(bool high_quality);
+struct GPUShader *EEVEE_shaders_bloom_downsample_get(bool high_quality);
+struct GPUShader *EEVEE_shaders_bloom_upsample_get(bool high_quality);
+struct GPUShader *EEVEE_shaders_bloom_resolve_get(bool high_quality);
struct GPUShader *EEVEE_shaders_probe_filter_glossy_sh_get(void);
struct GPUShader *EEVEE_shaders_probe_filter_diffuse_sh_get(void);
struct GPUShader *EEVEE_shaders_probe_filter_visibility_sh_get(void);
@@ -1163,7 +1167,6 @@ void EEVEE_bloom_cache_init(EEVEE_ViewLayerData *sldata, EEVEE_Data *vedata);
void EEVEE_bloom_draw(EEVEE_Data *vedata);
void EEVEE_bloom_output_init(EEVEE_ViewLayerData *sldata, EEVEE_Data *vedata, uint tot_samples);
void EEVEE_bloom_output_accumulate(EEVEE_ViewLayerData *sldata, EEVEE_Data *vedata);
-void EEVEE_bloom_free(void);
/* eevee_occlusion.c */
int EEVEE_occlusion_init(EEVEE_ViewLayerData *sldata, EEVEE_Data *vedata);
diff --git a/source/blender/draw/engines/eevee/eevee_shaders.c b/source/blender/draw/engines/eevee/eevee_shaders.c
index 5f125d395d3..6c90d6325a0 100644
--- a/source/blender/draw/engines/eevee/eevee_shaders.c
+++ b/source/blender/draw/engines/eevee/eevee_shaders.c
@@ -69,6 +69,12 @@ static struct {
struct GPUShader *taa_resolve_sh;
struct GPUShader *taa_resolve_reproject_sh;
+ /* Bloom */
+ struct GPUShader *bloom_blit_sh[2];
+ struct GPUShader *bloom_downsample_sh[2];
+ struct GPUShader *bloom_upsample_sh[2];
+ struct GPUShader *bloom_resolve_sh[2];
+
/* General purpose Shaders. */
struct GPUShader *lookdev_background;
struct GPUShader *update_noise_sh;
@@ -405,6 +411,62 @@ GPUShader *EEVEE_shaders_taa_resolve_sh_get(EEVEE_EffectsFlag enabled_effects)
return *sh;
}
+GPUShader *EEVEE_shaders_bloom_blit_get(bool high_quality)
+{
+ int index = high_quality ? 1 : 0;
+
+ if (e_data.bloom_blit_sh[index] == NULL) {
+ const char *define = high_quality ? "#define STEP_BLIT\n"
+ "#define HIGH_QUALITY\n" :
+ "#define STEP_BLIT\n";
+ e_data.bloom_blit_sh[index] = DRW_shader_create_fullscreen(datatoc_effect_bloom_frag_glsl,
+ define);
+ }
+ return e_data.bloom_blit_sh[index];
+}
+
+GPUShader *EEVEE_shaders_bloom_downsample_get(bool high_quality)
+{
+ int index = high_quality ? 1 : 0;
+
+ if (e_data.bloom_downsample_sh[index] == NULL) {
+ const char *define = high_quality ? "#define STEP_DOWNSAMPLE\n"
+ "#define HIGH_QUALITY\n" :
+ "#define STEP_DOWNSAMPLE\n";
+ e_data.bloom_downsample_sh[index] = DRW_shader_create_fullscreen(
+ datatoc_effect_bloom_frag_glsl, define);
+ }
+ return e_data.bloom_downsample_sh[index];
+}
+
+GPUShader *EEVEE_shaders_bloom_upsample_get(bool high_quality)
+{
+ int index = high_quality ? 1 : 0;
+
+ if (e_data.bloom_upsample_sh[index] == NULL) {
+ const char *define = high_quality
@@ Diff output truncated at 10240 characters. @@
More information about the Bf-blender-cvs
mailing list