36 #define EEVEE_RENDERPASSES_WITH_POST_PROCESSING \
37 (EEVEE_RENDER_PASS_Z | EEVEE_RENDER_PASS_MIST | EEVEE_RENDER_PASS_NORMAL | \
38 EEVEE_RENDER_PASS_AO | EEVEE_RENDER_PASS_BLOOM | EEVEE_RENDER_PASS_VOLUME_LIGHT | \
39 EEVEE_RENDER_PASS_SHADOW | EEVEE_RENDERPASSES_MATERIAL)
41 #define EEVEE_RENDERPASSES_ALL \
42 (EEVEE_RENDERPASSES_WITH_POST_PROCESSING | EEVEE_RENDER_PASS_COMBINED)
44 #define EEVEE_RENDERPASSES_POST_PROCESS_ON_FIRST_SAMPLE \
45 (EEVEE_RENDER_PASS_Z | EEVEE_RENDER_PASS_NORMAL)
47 #define EEVEE_RENDERPASSES_COLOR_PASS \
48 (EEVEE_RENDER_PASS_DIFFUSE_COLOR | EEVEE_RENDER_PASS_SPECULAR_COLOR | EEVEE_RENDER_PASS_EMIT | \
49 EEVEE_RENDER_PASS_BLOOM)
50 #define EEVEE_RENDERPASSES_LIGHT_PASS \
51 (EEVEE_RENDER_PASS_DIFFUSE_LIGHT | EEVEE_RENDER_PASS_SPECULAR_LIGHT)
53 #define EEVEE_RENDERPASSES_USES_TRANSMITTANCE \
54 (EEVEE_RENDER_PASS_DIFFUSE_COLOR | EEVEE_RENDER_PASS_SPECULAR_COLOR | EEVEE_RENDER_PASS_EMIT | \
55 EEVEE_RENDER_PASS_ENVIRONMENT)
99 g_data->render_passes = render_pass;
104 #define ENABLE_FROM_LEGACY(name_legacy, name_eevee) \
105 SET_FLAG_FROM_TEST(enabled_render_passes, \
106 (view_layer->passflag & SCE_PASS_##name_legacy) != 0, \
107 EEVEE_RENDER_PASS_##name_eevee);
123 #undef ENABLE_FROM_LEGACY
140 if (
g_data->render_passes &
158 const bool needs_post_processing = (
g_data->render_passes &
160 if (needs_post_processing) {
168 {GPU_ATTACHMENT_NONE, GPU_ATTACHMENT_TEXTURE(txl->renderpass)});
198 g_data->renderpass_transmittance_input = txl->
color;
218 const bool needs_post_processing = (
g_data->render_passes &
220 if (needs_post_processing) {
227 grp,
"inputSecondLightBuffer", &
g_data->renderpass_light_input);
229 grp,
"inputTransmittanceBuffer", &
g_data->renderpass_transmittance_input);
259 g_data->renderpass_current_sample = current_sample;
260 g_data->renderpass_type = renderpass_type;
270 static float clear_col[4] = {0.0f};
276 switch (renderpass_type) {
307 g_data->renderpass_postprocess = default_color_pass_type;
312 g_data->renderpass_postprocess = default_color_pass_type;
317 g_data->renderpass_postprocess = default_color_pass_type;
322 g_data->renderpass_postprocess = default_color_pass_type;
360 g_data->renderpass_current_sample = 1;
436 (current_sample > 1 && total_samples != 1)) {
447 static float clear_color[4] = {0.0f, 0.0f, 0.0f, 1.0f};
449 GPU_framebuffer_clear_color(dfbl->
default_fb, clear_color);
462 switch (
G.debug_value) {
BLI_INLINE unsigned int BLI_hash_string(const char *str)
BLI_INLINE bool BLI_listbase_is_empty(const struct ListBase *lb)
void * BLI_findstring(const struct ListBase *listbase, const char *id, int offset) ATTR_WARN_UNUSED_RESULT ATTR_NONNULL(1)
#define SET_FLAG_FROM_TEST(value, test, flag)
@ EEVEE_RENDER_PASS_NORMAL
@ EEVEE_RENDER_PASS_DIFFUSE_LIGHT
@ EEVEE_RENDER_PASS_VOLUME_LIGHT
@ EEVEE_RENDER_PASS_BLOOM
@ EEVEE_RENDER_PASS_DIFFUSE_COLOR
@ EEVEE_RENDER_PASS_CRYPTOMATTE
@ EEVEE_RENDER_PASS_ENVIRONMENT
@ EEVEE_RENDER_PASS_COMBINED
@ EEVEE_RENDER_PASS_SPECULAR_LIGHT
@ EEVEE_RENDER_PASS_SPECULAR_COLOR
@ EEVEE_RENDER_PASS_SHADOW
@ SCE_EEVEE_BLOOM_ENABLED
#define DRW_shgroup_uniform_block_ref(shgroup, name, ubo)
#define DRW_PASS_CREATE(pass, state)
#define DRW_shgroup_call(shgroup, geom, ob)
#define DRW_TEXTURE_FREE_SAFE(tex)
void GPU_framebuffer_bind(GPUFrameBuffer *fb)
struct GPUTexture GPUTexture
Group Output data from inside of a node group A color picker Mix two input colors RGB to Convert a color s luminance to a grayscale value NORMAL
GPUBatch * DRW_cache_fullscreen_quad_get(void)
void DRW_transform_none(GPUTexture *tex)
bool DRW_state_is_opengl_render(void)
DefaultFramebufferList * DRW_viewport_framebuffer_list_get(void)
const DRWContextState * DRW_context_state_get(void)
bool DRW_state_is_image_render(void)
DefaultTextureList * DRW_viewport_texture_list_get(void)
DRWShadingGroup * DRW_shgroup_create(struct GPUShader *shader, DRWPass *pass)
void DRW_shgroup_uniform_int(DRWShadingGroup *shgroup, const char *name, const int *value, int arraysize)
void DRW_shgroup_uniform_texture_ref(DRWShadingGroup *shgroup, const char *name, GPUTexture **tex)
void DRW_draw_pass(DRWPass *pass)
void DRW_texture_ensure_fullscreen_2d(GPUTexture **tex, eGPUTextureFormat format, DRWTextureFlag flags)
static struct @318 g_data
void EEVEE_bloom_output_accumulate(EEVEE_ViewLayerData *UNUSED(sldata), EEVEE_Data *vedata)
void EEVEE_bloom_output_init(EEVEE_ViewLayerData *UNUSED(sldata), EEVEE_Data *vedata, uint UNUSED(tot_samples))
void EEVEE_cryptomatte_output_init(EEVEE_ViewLayerData *UNUSED(sldata), EEVEE_Data *vedata, int UNUSED(tot_samples))
void EEVEE_cryptomatte_output_accumulate(EEVEE_ViewLayerData *UNUSED(sldata), EEVEE_Data *vedata)
void EEVEE_cryptomatte_renderpasses_init(EEVEE_Data *vedata)
depth_tx normal_tx diffuse_light_tx specular_light_tx volume_light_tx environment_tx ambient_occlusion_tx aov_value_tx in_weight_img GPU_RGBA16F
void EEVEE_material_renderpasses_init(EEVEE_Data *vedata)
void EEVEE_material_output_accumulate(EEVEE_ViewLayerData *sldata, EEVEE_Data *vedata)
void EEVEE_material_output_init(EEVEE_ViewLayerData *sldata, EEVEE_Data *vedata, uint tot_samples)
void EEVEE_mist_output_accumulate(EEVEE_ViewLayerData *UNUSED(sldata), EEVEE_Data *vedata)
void EEVEE_mist_output_init(EEVEE_ViewLayerData *sldata, EEVEE_Data *vedata)
void EEVEE_occlusion_output_init(EEVEE_ViewLayerData *sldata, EEVEE_Data *vedata, uint tot_samples)
void EEVEE_occlusion_output_accumulate(EEVEE_ViewLayerData *sldata, EEVEE_Data *vedata)
void EEVEE_shadow_output_init(EEVEE_ViewLayerData *sldata, EEVEE_Data *vedata, uint tot_samples)
#define EEVEE_AOV_HASH_COLOR_TYPE_MASK
#define EEVEE_RENDERPASSES_MATERIAL
void EEVEE_volumes_output_accumulate(EEVEE_ViewLayerData *sldata, EEVEE_Data *vedata)
void EEVEE_volumes_output_init(EEVEE_ViewLayerData *sldata, EEVEE_Data *vedata, uint tot_samples)
void EEVEE_shadow_output_accumulate(EEVEE_ViewLayerData *sldata, EEVEE_Data *vedata)
#define EEVEE_AOV_HASH_ALL
struct GPUShader * EEVEE_shaders_renderpasses_post_process_sh_get(void)
#define EEVEE_RENDERPASSES_POST_PROCESS_ON_FIRST_SAMPLE
void EEVEE_renderpasses_postprocess(EEVEE_ViewLayerData *UNUSED(sldata), EEVEE_Data *vedata, eViewLayerEEVEEPassType renderpass_type, int aov_index)
void EEVEE_renderpasses_output_accumulate(EEVEE_ViewLayerData *sldata, EEVEE_Data *vedata, bool post_effect)
#define EEVEE_RENDERPASSES_ALL
#define EEVEE_RENDERPASSES_USES_TRANSMITTANCE
BLI_INLINE bool eevee_renderpasses_volumetric_active(const EEVEE_EffectsInfo *effects, const EEVEE_PrivateData *g_data)
void EEVEE_renderpasses_init(EEVEE_Data *vedata)
void EEVEE_renderpasses_draw(EEVEE_ViewLayerData *sldata, EEVEE_Data *vedata)
void EEVEE_renderpasses_draw_debug(EEVEE_Data *vedata)
void EEVEE_renderpasses_output_init(EEVEE_ViewLayerData *sldata, EEVEE_Data *vedata, uint tot_samples)
uint EEVEE_renderpasses_aov_hash(const ViewLayerAOV *aov)
#define ENABLE_FROM_LEGACY(name_legacy, name_eevee)
void EEVEE_renderpasses_cache_finish(EEVEE_ViewLayerData *sldata, EEVEE_Data *vedata)
#define EEVEE_RENDERPASSES_LIGHT_PASS
#define EEVEE_RENDERPASSES_WITH_POST_PROCESSING
bool EEVEE_renderpasses_only_first_sample_pass_active(EEVEE_Data *vedata)
eRenderPassPostProcessType
@ PASS_POST_ACCUMULATED_COLOR_ALPHA
@ PASS_POST_TWO_LIGHT_BUFFERS
@ PASS_POST_ACCUMULATED_VALUE
@ PASS_POST_ACCUMULATED_LIGHT
@ PASS_POST_ACCUMULATED_TRANSMITTANCE_COLOR
@ PASS_POST_ACCUMULATED_COLOR
#define EEVEE_RENDERPASSES_COLOR_PASS
struct ViewLayer * view_layer
struct GPUFrameBuffer * default_fb
struct GPUTexture * depth
EEVEE_FramebufferList * fbl
struct GPUTexture * gtao_horizons_renderpass
struct GPUTexture * sss_irradiance
struct GPUTexture * ssr_specrough_input
struct GPUTexture * sss_radius
EEVEE_EffectsFlag enabled_effects
struct GPUTexture * velocity_tx
struct GPUTexture * ssr_normal_input
struct GPUTexture * sss_albedo
struct GPUFrameBuffer * main_fb
struct GPUFrameBuffer * renderpass_fb
struct DRWPass * renderpass_pass
eViewLayerEEVEEPassType render_passes
struct EEVEE_PrivateData * g_data
struct EEVEE_EffectsInfo * effects
struct GPUTexture * sss_accum
struct GPUTexture * color_double_buffer
struct GPUTexture * spec_color_accum
struct GPUTexture * maxzbuffer
struct GPUTexture * diff_light_accum
struct GPUTexture * emit_accum
struct GPUTexture * renderpass
struct GPUTexture * volume_scatter_accum
struct GPUTexture * diff_color_accum
struct GPUTexture * ao_accum
struct GPUTexture * bloom_accum
struct GPUTexture * spec_light_accum
struct GPUTexture * volume_transmittance_accum
struct GPUTexture * color
struct GPUTexture * shadow_accum
struct GPUTexture * mist_accum
struct GPUTexture * env_accum
struct GPUTexture * aov_surface_accum[MAX_AOVS]
struct GPUTexture * ssr_accum
struct GPUUniformBuf * combined
struct EEVEE_ViewLayerData::@210 renderpass_ubo
struct GPUUniformBuf * common_ubo
struct ViewLayerEEVEE eevee