Blender V4.5
eevee_deferred_info.hh
Go to the documentation of this file.
1/* SPDX-FileCopyrightText: 2023 Blender Authors
2 *
3 * SPDX-License-Identifier: GPL-2.0-or-later */
4
5#ifdef GPU_SHADER
6# pragma once
7# include "gpu_glsl_cpp_stubs.hh"
8
9# include "draw_view_info.hh"
10# include "eevee_common_info.hh"
12#endif
13
14#include "eevee_defines.hh"
16
17#define image_out(slot, format, name) \
18 image(slot, format, Qualifier::write, ImageType::Float2D, name, Frequency::PASS)
19#define uimage_out(slot, format, name) \
20 image(slot, format, Qualifier::write, ImageType::Uint2D, name, Frequency::PASS)
21#define image_in(slot, format, name) \
22 image(slot, format, Qualifier::read, ImageType::Float2D, name, Frequency::PASS)
23#define image_array_out(slot, qualifier, format, name) \
24 image(slot, format, qualifier, ImageType::Float2DArray, name, Frequency::PASS)
25
26/* -------------------------------------------------------------------- */
29
30GPU_SHADER_CREATE_INFO(eevee_deferred_thickness_amend)
32DEFINE("GBUFFER_LOAD")
33SAMPLER(0, usampler2DArray, gbuf_header_tx)
34IMAGE(0, GPU_RG16, read_write, image2DArray, gbuf_normal_img)
35/* Early fragment test is needed to discard fragment that do not need this processing. */
37FRAGMENT_SOURCE("eevee_deferred_thickness_amend_frag.glsl")
38ADDITIONAL_INFO(draw_view)
39ADDITIONAL_INFO(gpu_fullscreen)
40ADDITIONAL_INFO(eevee_sampling_data)
41ADDITIONAL_INFO(eevee_shared)
42ADDITIONAL_INFO(eevee_light_data)
43ADDITIONAL_INFO(eevee_shadow_data)
44ADDITIONAL_INFO(eevee_hiz_data)
46
48
49GPU_SHADER_CREATE_INFO(eevee_deferred_tile_classify)
50FRAGMENT_SOURCE("eevee_deferred_tile_classify_frag.glsl")
51ADDITIONAL_INFO(eevee_shared)
52ADDITIONAL_INFO(gpu_fullscreen)
53SUBPASS_IN(1, uint, Uint2DArray, in_gbuffer_header, DEFERRED_GBUFFER_ROG_ID)
54TYPEDEF_SOURCE("draw_shader_shared.hh")
55PUSH_CONSTANT(int, current_bit)
58
59GPU_SHADER_CREATE_INFO(eevee_deferred_light)
60FRAGMENT_SOURCE("eevee_deferred_light_frag.glsl")
61/* Early fragment test is needed to avoid processing background fragments. */
63FRAGMENT_OUT(0, float4, out_combined)
64/* Chaining to next pass. */
65IMAGE_FREQ(2, DEFERRED_RADIANCE_FORMAT, write, uimage2D, direct_radiance_1_img, PASS)
66IMAGE_FREQ(3, DEFERRED_RADIANCE_FORMAT, write, uimage2D, direct_radiance_2_img, PASS)
67IMAGE_FREQ(4, DEFERRED_RADIANCE_FORMAT, write, uimage2D, direct_radiance_3_img, PASS)
68/* Optimized out if use_split_indirect is false. */
69IMAGE_FREQ(5, RAYTRACE_RADIANCE_FORMAT, write, image2D, indirect_radiance_1_img, PASS)
70IMAGE_FREQ(6, RAYTRACE_RADIANCE_FORMAT, write, image2D, indirect_radiance_2_img, PASS)
71IMAGE_FREQ(7, RAYTRACE_RADIANCE_FORMAT, write, image2D, indirect_radiance_3_img, PASS)
72SPECIALIZATION_CONSTANT(bool, use_split_indirect, true)
73SPECIALIZATION_CONSTANT(bool, use_lightprobe_eval, true)
74SPECIALIZATION_CONSTANT(bool, use_transmission, false)
75SPECIALIZATION_CONSTANT(int, render_pass_shadow_id, -1)
76DEFINE("SPECIALIZED_SHADOW_PARAMS")
77SPECIALIZATION_CONSTANT(int, shadow_ray_count, 1)
78SPECIALIZATION_CONSTANT(int, shadow_ray_step_count, 6)
79ADDITIONAL_INFO(eevee_shared)
80ADDITIONAL_INFO(eevee_gbuffer_data)
81ADDITIONAL_INFO(eevee_utility_texture)
82ADDITIONAL_INFO(eevee_sampling_data)
83ADDITIONAL_INFO(eevee_light_data)
84ADDITIONAL_INFO(eevee_shadow_data)
85ADDITIONAL_INFO(eevee_hiz_data)
86ADDITIONAL_INFO(eevee_lightprobe_data)
87ADDITIONAL_INFO(eevee_render_pass_out)
88ADDITIONAL_INFO(gpu_fullscreen)
89ADDITIONAL_INFO(draw_object_infos)
90ADDITIONAL_INFO(draw_view)
92
93GPU_SHADER_CREATE_INFO(eevee_deferred_light_single)
94ADDITIONAL_INFO(eevee_deferred_light)
95DEFINE_VALUE("LIGHT_CLOSURE_EVAL_COUNT", "1")
98
99GPU_SHADER_CREATE_INFO(eevee_deferred_light_double)
100ADDITIONAL_INFO(eevee_deferred_light)
101DEFINE_VALUE("LIGHT_CLOSURE_EVAL_COUNT", "2")
104
105GPU_SHADER_CREATE_INFO(eevee_deferred_light_triple)
106ADDITIONAL_INFO(eevee_deferred_light)
107DEFINE_VALUE("LIGHT_CLOSURE_EVAL_COUNT", "3")
110
111GPU_SHADER_CREATE_INFO(eevee_deferred_combine)
112/* Early fragment test is needed to avoid processing fragments background fragments. */
114/* Inputs. */
115SAMPLER(2, usampler2D, direct_radiance_1_tx)
116SAMPLER(3, usampler2D, direct_radiance_2_tx)
117SAMPLER(4, usampler2D, direct_radiance_3_tx)
118SAMPLER(5, sampler2D, indirect_radiance_1_tx)
119SAMPLER(6, sampler2D, indirect_radiance_2_tx)
120SAMPLER(7, sampler2D, indirect_radiance_3_tx)
121IMAGE(5, GPU_RGBA16F, read_write, image2D, radiance_feedback_img)
122FRAGMENT_OUT(0, float4, out_combined)
123ADDITIONAL_INFO(eevee_shared)
124ADDITIONAL_INFO(eevee_gbuffer_data)
125ADDITIONAL_INFO(eevee_render_pass_out)
126ADDITIONAL_INFO(gpu_fullscreen)
127FRAGMENT_SOURCE("eevee_deferred_combine_frag.glsl")
128/* NOTE: Both light IDs have a valid specialized assignment of '-1' so only when default is
129 * present will we instead dynamically look-up ID from the uniform buffer. */
130SPECIALIZATION_CONSTANT(bool, render_pass_diffuse_light_enabled, false)
131SPECIALIZATION_CONSTANT(bool, render_pass_specular_light_enabled, false)
132SPECIALIZATION_CONSTANT(bool, render_pass_normal_enabled, false)
133SPECIALIZATION_CONSTANT(bool, use_radiance_feedback, false)
134SPECIALIZATION_CONSTANT(bool, use_split_radiance, true)
137
138GPU_SHADER_CREATE_INFO(eevee_deferred_capture_eval)
139/* Early fragment test is needed to avoid processing fragments without correct GBuffer data. */
141/* Inputs. */
142FRAGMENT_OUT(0, float4, out_radiance)
143DEFINE_VALUE("LIGHT_CLOSURE_EVAL_COUNT", "1")
144ADDITIONAL_INFO(eevee_shared)
145ADDITIONAL_INFO(eevee_gbuffer_data)
146ADDITIONAL_INFO(eevee_utility_texture)
147ADDITIONAL_INFO(eevee_sampling_data)
148ADDITIONAL_INFO(eevee_light_data)
149ADDITIONAL_INFO(eevee_shadow_data)
150ADDITIONAL_INFO(eevee_hiz_data)
151ADDITIONAL_INFO(eevee_volume_probe_data)
152ADDITIONAL_INFO(draw_view)
153ADDITIONAL_INFO(gpu_fullscreen)
154ADDITIONAL_INFO(draw_object_infos)
155FRAGMENT_SOURCE("eevee_deferred_capture_frag.glsl")
158
159GPU_SHADER_CREATE_INFO(eevee_deferred_planar_eval)
160/* Early fragment test is needed to avoid processing fragments without correct GBuffer data. */
162/* Inputs. */
163FRAGMENT_OUT(0, float4, out_radiance)
164DEFINE("SPHERE_PROBE")
165DEFINE_VALUE("LIGHT_CLOSURE_EVAL_COUNT", "1")
166ADDITIONAL_INFO(eevee_shared)
167ADDITIONAL_INFO(eevee_gbuffer_data)
168ADDITIONAL_INFO(eevee_utility_texture)
169ADDITIONAL_INFO(eevee_sampling_data)
170ADDITIONAL_INFO(eevee_light_data)
171ADDITIONAL_INFO(eevee_lightprobe_data)
172ADDITIONAL_INFO(eevee_shadow_data)
173ADDITIONAL_INFO(eevee_hiz_data)
174ADDITIONAL_INFO(draw_view)
175ADDITIONAL_INFO(gpu_fullscreen)
176ADDITIONAL_INFO(draw_object_infos)
177FRAGMENT_SOURCE("eevee_deferred_planar_frag.glsl")
180
181#undef image_array_out
182#undef image_out
183#undef image_in
184
185/* -------------------------------------------------------------------- */
188
189GPU_SHADER_CREATE_INFO(eevee_debug_gbuffer)
191FRAGMENT_OUT_DUAL(0, float4, out_color_add, SRC_0)
192FRAGMENT_OUT_DUAL(0, float4, out_color_mul, SRC_1)
193PUSH_CONSTANT(int, debug_mode)
194FRAGMENT_SOURCE("eevee_debug_gbuffer_frag.glsl")
195ADDITIONAL_INFO(draw_view)
196ADDITIONAL_INFO(gpu_fullscreen)
197ADDITIONAL_INFO(eevee_shared)
198ADDITIONAL_INFO(eevee_gbuffer_data)
200
unsigned int uint
@ GPU_RGBA16F
@ GPU_RG16
return true
#define DEFERRED_GBUFFER_ROG_ID
#define RAYTRACE_RADIANCE_FORMAT
#define DEFERRED_RADIANCE_FORMAT
ImageBase< uint, 2 > uimage2D
SamplerBase< uint, 2, false, true > usampler2DArray
ImageBase< float, 2, true > image2DArray
VecBase< float, 4 > float4
ImageBase< float, 2 > image2D
SamplerBase< float, 2 > sampler2D
SamplerBase< uint, 2 > usampler2D
#define TYPEDEF_SOURCE(filename)
#define FRAGMENT_OUT_DUAL(slot, type, name, blend)
#define SAMPLER(slot, type, name)
#define FRAGMENT_SOURCE(filename)
#define IMAGE_FREQ(slot, format, qualifiers, type, name, freq)
#define SPECIALIZATION_CONSTANT(type, name, default_value)
#define ADDITIONAL_INFO(info_name)
#define PUSH_CONSTANT(type, name)
#define DEFINE(name)
#define FRAGMENT_OUT(slot, type, name)
#define GPU_SHADER_CREATE_INFO(_info)
#define SUBPASS_IN(slot, type, img_type, name, rog)
#define IMAGE(slot, format, qualifiers, type, name)
#define GPU_SHADER_CREATE_END()
#define DO_STATIC_COMPILATION()
#define EARLY_FRAGMENT_TEST(enable)
#define DEFINE_VALUE(name, value)