45 #define SETUP_BUFFER(tex, fb, fb_color) \
47 eGPUTextureFormat format = (DRW_state_is_scene_render()) ? GPU_RGBA32F : GPU_RGBA16F; \
48 DRW_texture_ensure_fullscreen_2d(&tex, format, DRW_TEX_FILTER); \
49 GPU_framebuffer_ensure_config(&fb, \
51 GPU_ATTACHMENT_TEXTURE(dtxl->depth), \
52 GPU_ATTACHMENT_TEXTURE(tex), \
54 GPU_framebuffer_ensure_config(&fb_color, \
56 GPU_ATTACHMENT_NONE, \
57 GPU_ATTACHMENT_TEXTURE(tex), \
62 #define CLEANUP_BUFFER(tex, fb, fb_color) \
65 DRW_TEXTURE_FREE_SAFE(tex); \
66 GPU_FRAMEBUFFER_FREE_SAFE(fb); \
67 GPU_FRAMEBUFFER_FREE_SAFE(fb_color); \
84 const int size_fs[2] = {(int)viewport_size[0], (
int)viewport_size[1]};
132 GPU_ATTACHMENT_TEXTURE(txl->maxzbuffer),
140 GPU_ATTACHMENT_TEXTURE(txl->maxzbuffer),
172 GPU_ATTACHMENT_TEXTURE(txl->filtered_radiance),
202 GPU_ATTACHMENT_TEXTURE(dtxl->depth),
203 GPU_ATTACHMENT_TEXTURE(effects->velocity_tx),
206 GPU_framebuffer_ensure_config(
208 {GPU_ATTACHMENT_NONE, GPU_ATTACHMENT_TEXTURE(effects->velocity_tx)});
221 {GPU_ATTACHMENT_TEXTURE(txl->depth_double_buffer)});
345 static void min_downsample_cb(
void *vedata,
int UNUSED(level))
358 e_data.texel_size[0] = 1.0f / texture_size[0];
359 e_data.texel_size[1] = 1.0f / texture_size[1];
377 e_data.depth_src_layer = layer;
409 e_data.texel_size[0] = 1.0f / texture_size[0];
410 e_data.texel_size[1] = 1.0f / texture_size[1];
422 e_data.color_src = texture_src;
439 e_data.color_src = texture_src;
typedef float(TangentPoint)[2]
@ EEVEE_RENDER_PASS_NORMAL
#define DRW_PASS_CREATE(pass, state)
#define DRW_shgroup_call(shgroup, geom, ob)
#define DRW_TEXTURE_FREE_SAFE(tex)
bool GPU_mip_render_workaround(void)
#define GPU_FRAMEBUFFER_FREE_SAFE(fb)
void GPU_framebuffer_bind(GPUFrameBuffer *fb)
void GPU_framebuffer_texture_detach(GPUFrameBuffer *fb, struct GPUTexture *tex)
GPUFrameBuffer * GPU_framebuffer_create(const char *name)
struct GPUTexture GPUTexture
int GPU_texture_width(const GPUTexture *tex)
void GPU_texture_get_mipmap_size(GPUTexture *tex, int lvl, int *size)
GPUBatch * DRW_cache_fullscreen_quad_get(void)
const float * DRW_viewport_size_get(void)
bool DRW_state_is_image_render(void)
void DRW_viewport_request_redraw(void)
DefaultTextureList * DRW_viewport_texture_list_get(void)
void DRW_shgroup_uniform_block(DRWShadingGroup *shgroup, const char *name, const GPUUniformBuf *ubo)
void DRW_view_persmat_get(const DRWView *view, float mat[4][4], bool inverse)
void DRW_shgroup_call_instances(DRWShadingGroup *shgroup, Object *ob, struct GPUBatch *geom, uint count)
void DRW_shgroup_uniform_texture_ref_ex(DRWShadingGroup *shgroup, const char *name, GPUTexture **tex, eGPUSamplerState sampler_state)
void DRW_shgroup_call_procedural_triangles(DRWShadingGroup *shgroup, Object *ob, uint tri_count)
void DRW_shgroup_uniform_int_copy(DRWShadingGroup *shgroup, const char *name, const int value)
void DRW_shgroup_uniform_texture_ex(DRWShadingGroup *shgroup, const char *name, const GPUTexture *tex, eGPUSamplerState sampler_state)
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_shgroup_uniform_mat4(DRWShadingGroup *shgroup, const char *name, const float(*value)[4])
void DRW_shgroup_uniform_float(DRWShadingGroup *shgroup, const char *name, const float *value, int arraysize)
void DRW_shgroup_uniform_vec2(DRWShadingGroup *shgroup, const char *name, const float *value, int arraysize)
void DRW_draw_pass(DRWPass *pass)
void DRW_stats_group_start(const char *name)
void DRW_stats_group_end(void)
void DRW_texture_ensure_fullscreen_2d(GPUTexture **tex, eGPUTextureFormat format, DRWTextureFlag flags)
void DRW_texture_ensure_2d(GPUTexture **tex, int w, int h, eGPUTextureFormat format, DRWTextureFlag flags)
GPUTexture * DRW_texture_pool_query_2d(int w, int h, eGPUTextureFormat format, DrawEngineType *engine_type)
void EEVEE_bloom_draw(EEVEE_Data *vedata)
int EEVEE_bloom_init(EEVEE_ViewLayerData *UNUSED(sldata), EEVEE_Data *vedata)
void EEVEE_depth_of_field_draw(EEVEE_Data *vedata)
int EEVEE_depth_of_field_init(EEVEE_ViewLayerData *UNUSED(sldata), EEVEE_Data *vedata, Object *camera)
static void simple_downsample_cube_cb(void *vedata, int level)
#define SETUP_BUFFER(tex, fb, fb_color)
#define CLEANUP_BUFFER(tex, fb, fb_color)
void EEVEE_create_minmax_buffer(EEVEE_Data *vedata, GPUTexture *depth_src, int layer)
void EEVEE_effects_downsample_radiance_buffer(EEVEE_Data *vedata, GPUTexture *texture_src)
void EEVEE_effects_cache_init(EEVEE_ViewLayerData *sldata, EEVEE_Data *vedata)
static void max_downsample_cb(void *vedata, int level)
struct GPUTexture * color_src
void EEVEE_draw_effects(EEVEE_ViewLayerData *sldata, EEVEE_Data *vedata)
void EEVEE_effects_init(EEVEE_ViewLayerData *sldata, EEVEE_Data *vedata, Object *camera, const bool minimal)
static struct @192 e_data
void EEVEE_downsample_cube_buffer(EEVEE_Data *vedata, GPUTexture *texture_src, int level)
static void EEVEE_velocity_resolve(EEVEE_Data *vedata)
static void downsample_radiance_cb(void *vedata, int level)
void EEVEE_effects_draw_init(EEVEE_ViewLayerData *UNUSED(sldata), EEVEE_Data *vedata)
struct GPUTexture * depth_src
DrawEngineType draw_engine_eevee_type
void EEVEE_lookdev_init(EEVEE_Data *vedata)
void EEVEE_lookdev_draw(EEVEE_Data *vedata)
void EEVEE_motion_blur_draw(EEVEE_Data *vedata)
int EEVEE_motion_blur_init(EEVEE_ViewLayerData *UNUSED(sldata), EEVEE_Data *vedata)
int EEVEE_occlusion_init(EEVEE_ViewLayerData *sldata, EEVEE_Data *vedata)
struct GPUShader * EEVEE_shaders_effect_color_copy_sh_get(void)
void EEVEE_renderpasses_output_accumulate(EEVEE_ViewLayerData *sldata, EEVEE_Data *vedata, bool post_effect)
struct GPUShader * EEVEE_shaders_effect_maxz_downlevel_sh_get(void)
#define MAX_SCREEN_BUFFERS_LOD_LEVEL
struct GPUShader * EEVEE_shaders_velocity_resolve_sh_get(void)
struct GPUShader * EEVEE_shaders_effect_maxz_copydepth_sh_get(void)
int EEVEE_temporal_sampling_init(EEVEE_ViewLayerData *sldata, EEVEE_Data *vedata)
struct GPUShader * EEVEE_shaders_effect_downsample_cube_sh_get(void)
#define SWAP_DOUBLE_BUFFERS()
struct GPUShader * EEVEE_shaders_effect_downsample_sh_get(void)
void EEVEE_subsurface_init(EEVEE_ViewLayerData *sldata, EEVEE_Data *vedata)
void EEVEE_temporal_sampling_draw(EEVEE_Data *vedata)
struct GPUShader * EEVEE_shaders_effect_maxz_copydepth_layer_sh_get(void)
@ EFFECT_DEPTH_DOUBLE_BUFFER
int EEVEE_screen_raytrace_init(EEVEE_ViewLayerData *sldata, EEVEE_Data *vedata)
void EEVEE_volumes_init(EEVEE_ViewLayerData *sldata, EEVEE_Data *vedata)
void EEVEE_temporal_sampling_update_matrices(EEVEE_Data *vedata)
void GPU_framebuffer_texture_attach(GPUFrameBuffer *fb, GPUTexture *tex, int slot, int mip)
void GPU_framebuffer_recursive_downsample(GPUFrameBuffer *gpu_fb, int max_lvl, void(*callback)(void *userData, int level), void *userData)
void *(* MEM_callocN)(size_t len, const char *str)
MINLINE uint divide_ceil_u(uint a, uint b)
struct GPUTexture * depth
EEVEE_FramebufferList * fbl
struct GPUTexture * source_buffer
struct GPUTexture * final_tx
struct GPUFrameBuffer * target_buffer
EEVEE_EffectsFlag enabled_effects
struct GPUTexture * velocity_tx
struct GPUFrameBuffer * final_fb
struct GPUTexture * ssr_normal_input
struct DRWView * taa_view
struct EEVEE_MotionBlurData motion_blur
struct GPUFrameBuffer * main_fb
struct GPUFrameBuffer * taa_history_color_fb
struct GPUFrameBuffer * radiance_filtered_fb
struct GPUFrameBuffer * double_buffer_color_fb
struct GPUFrameBuffer * velocity_resolve_fb
struct GPUFrameBuffer * double_buffer_depth_fb
struct GPUFrameBuffer * downsample_fb
struct GPUFrameBuffer * taa_history_fb
struct GPUFrameBuffer * main_color_fb
struct GPUFrameBuffer * double_buffer_fb
struct GPUFrameBuffer * effect_fb
struct GPUFrameBuffer * velocity_fb
struct GPUFrameBuffer * maxzbuffer_fb
struct GPUFrameBuffer * effect_color_fb
struct EEVEE_MotionBlurData::@200 camera[3]
struct DRWPass * velocity_object
struct DRWPass * maxz_copydepth_ps
struct DRWPass * maxz_copydepth_layer_ps
struct DRWPass * velocity_resolve
struct DRWPass * maxz_downlevel_ps
struct DRWPass * color_copy_ps
struct DRWPass * color_downsample_cube_ps
struct DRWPass * color_downsample_ps
eViewLayerEEVEEPassType render_passes
struct EEVEE_PrivateData * g_data
struct EEVEE_EffectsInfo * effects
struct GPUTexture * filtered_radiance
struct GPUTexture * depth_double_buffer
struct GPUTexture * color_double_buffer
struct GPUTexture * maxzbuffer
struct GPUTexture * color_post
struct GPUTexture * taa_history
struct GPUTexture * color
struct EEVEE_CommonUniformBuffer common_data
struct GPUUniformBuf * combined
struct EEVEE_ViewLayerData::@202 renderpass_ubo
struct GPUUniformBuf * common_ubo