51 #define EEVEE_RENDERPASSES_WITH_POST_PROCESSING \
52 (EEVEE_RENDER_PASS_Z | EEVEE_RENDER_PASS_MIST | EEVEE_RENDER_PASS_NORMAL | \
53 EEVEE_RENDER_PASS_AO | EEVEE_RENDER_PASS_BLOOM | EEVEE_RENDER_PASS_VOLUME_LIGHT | \
54 EEVEE_RENDER_PASS_SHADOW | EEVEE_RENDERPASSES_MATERIAL)
56 #define EEVEE_RENDERPASSES_ALL \
57 (EEVEE_RENDERPASSES_WITH_POST_PROCESSING | EEVEE_RENDER_PASS_COMBINED)
59 #define EEVEE_RENDERPASSES_POST_PROCESS_ON_FIRST_SAMPLE \
60 (EEVEE_RENDER_PASS_Z | EEVEE_RENDER_PASS_NORMAL)
62 #define EEVEE_RENDERPASSES_COLOR_PASS \
63 (EEVEE_RENDER_PASS_DIFFUSE_COLOR | EEVEE_RENDER_PASS_SPECULAR_COLOR | EEVEE_RENDER_PASS_EMIT | \
64 EEVEE_RENDER_PASS_BLOOM)
65 #define EEVEE_RENDERPASSES_LIGHT_PASS \
66 (EEVEE_RENDER_PASS_DIFFUSE_LIGHT | EEVEE_RENDER_PASS_SPECULAR_LIGHT)
68 #define EEVEE_RENDERPASSES_USES_TRANSMITTANCE \
69 (EEVEE_RENDER_PASS_DIFFUSE_COLOR | EEVEE_RENDER_PASS_SPECULAR_COLOR | EEVEE_RENDER_PASS_EMIT | \
70 EEVEE_RENDER_PASS_ENVIRONMENT)
121 #define ENABLE_FROM_LEGACY(name_legacy, name_eevee) \
122 SET_FLAG_FROM_TEST(enabled_render_passes, \
123 (view_layer->passflag & SCE_PASS_##name_legacy) != 0, \
124 EEVEE_RENDER_PASS_##name_eevee);
140 #undef ENABLE_FROM_LEGACY
177 if (needs_post_processing) {
185 {GPU_ATTACHMENT_NONE, GPU_ATTACHMENT_TEXTURE(txl->renderpass)});
237 if (needs_post_processing) {
296 static float clear_col[4] = {0.0f};
302 switch (renderpass_type) {
462 (current_sample > 1 && total_samples != 1)) {
473 static float clear_color[4] = {0.0f, 0.0f, 0.0f, 1.0f};
475 GPU_framebuffer_clear_color(dfbl->
default_fb, clear_color);
488 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, const 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_PASS_CREATE(pass, state)
#define DRW_shgroup_call(shgroup, geom, ob)
#define DRW_TEXTURE_FREE_SAFE(tex)
#define GPU_FRAMEBUFFER_FREE_SAFE(fb)
void GPU_framebuffer_bind(GPUFrameBuffer *fb)
struct GPUTexture GPUTexture
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)
void DRW_shgroup_uniform_block_ref(DRWShadingGroup *shgroup, const char *name, GPUUniformBuf **ubo)
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)
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)
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)
#define ENABLE_FROM_LEGACY(name_legacy, name_eevee)
void EEVEE_renderpasses_cache_finish(EEVEE_ViewLayerData *sldata, EEVEE_Data *vedata)
int EEVEE_renderpasses_aov_hash(const ViewLayerAOV *aov)
#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
int renderpass_current_sample
eViewLayerEEVEEPassType render_passes
int renderpass_postprocess
GPUTexture * renderpass_light_input
GPUTexture * renderpass_input
GPUTexture * renderpass_col_input
GPUTexture * renderpass_transmittance_input
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::@202 renderpass_ubo
struct GPUUniformBuf * common_ubo
struct ViewLayerEEVEE eevee