Blender V5.0
eevee_deferred_infos.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_shader_compat.hh"
8
9# include "draw_view_infos.hh"
10# include "eevee_common_infos.hh"
11# include "eevee_debug_shared.hh"
13#endif
14
15#include "eevee_defines.hh"
17
18#define image_out(slot, format, name) \
19 image(slot, format, Qualifier::write, ImageType::Float2D, name, Frequency::PASS)
20#define uimage_out(slot, format, name) \
21 image(slot, format, Qualifier::write, ImageType::Uint2D, name, Frequency::PASS)
22#define image_in(slot, format, name) \
23 image(slot, format, Qualifier::read, ImageType::Float2D, name, Frequency::PASS)
24#define image_array_out(slot, qualifier, format, name) \
25 image(slot, format, qualifier, ImageType::Float2DArray, name, Frequency::PASS)
26
27/* -------------------------------------------------------------------- */
30
31GPU_SHADER_CREATE_INFO(eevee_deferred_thickness_amend)
33DEFINE("GBUFFER_LOAD")
34SAMPLER(0, usampler2DArray, gbuf_header_tx)
35IMAGE(0, UNORM_16_16, read_write, image2DArray, gbuf_normal_img)
36/* Early fragment test is needed to discard fragment that do not need this processing. */
38FRAGMENT_SOURCE("eevee_deferred_thickness_amend_frag.glsl")
39ADDITIONAL_INFO(draw_view)
40ADDITIONAL_INFO(gpu_fullscreen)
41ADDITIONAL_INFO(eevee_sampling_data)
42TYPEDEF_SOURCE("eevee_defines.hh")
43ADDITIONAL_INFO(eevee_light_data)
44ADDITIONAL_INFO(eevee_shadow_data)
45ADDITIONAL_INFO(eevee_hiz_data)
47
49
50GPU_SHADER_CREATE_INFO(eevee_deferred_tile_classify)
51FRAGMENT_SOURCE("eevee_deferred_tile_classify_frag.glsl")
52TYPEDEF_SOURCE("eevee_defines.hh")
53ADDITIONAL_INFO(gpu_fullscreen)
54SUBPASS_IN(1, uint, Uint2DArray, in_gbuffer_header, DEFERRED_GBUFFER_ROG_ID)
55TYPEDEF_SOURCE("draw_shader_shared.hh")
56PUSH_CONSTANT(int, current_bit)
59
60GPU_SHADER_CREATE_INFO(eevee_deferred_light)
61FRAGMENT_SOURCE("eevee_deferred_light_frag.glsl")
62/* Early fragment test is needed to avoid processing background fragments. */
64FRAGMENT_OUT(0, float4, out_combined)
65/* Chaining to next pass. */
66IMAGE_FREQ(2, DEFERRED_RADIANCE_FORMAT, write, uimage2D, direct_radiance_1_img, PASS)
67IMAGE_FREQ(3, DEFERRED_RADIANCE_FORMAT, write, uimage2D, direct_radiance_2_img, PASS)
68IMAGE_FREQ(4, DEFERRED_RADIANCE_FORMAT, write, uimage2D, direct_radiance_3_img, PASS)
69/* Optimized out if use_split_indirect is false. */
70IMAGE_FREQ(5, RAYTRACE_RADIANCE_FORMAT, write, image2D, indirect_radiance_1_img, PASS)
71IMAGE_FREQ(6, RAYTRACE_RADIANCE_FORMAT, write, image2D, indirect_radiance_2_img, PASS)
72IMAGE_FREQ(7, RAYTRACE_RADIANCE_FORMAT, write, image2D, indirect_radiance_3_img, PASS)
73SPECIALIZATION_CONSTANT(bool, use_split_indirect, true)
74SPECIALIZATION_CONSTANT(bool, use_lightprobe_eval, true)
75SPECIALIZATION_CONSTANT(bool, use_transmission, false)
76SPECIALIZATION_CONSTANT(int, render_pass_shadow_id, -1)
77DEFINE("SPECIALIZED_SHADOW_PARAMS")
78SPECIALIZATION_CONSTANT(int, shadow_ray_count, 1)
79SPECIALIZATION_CONSTANT(int, shadow_ray_step_count, 6)
80TYPEDEF_SOURCE("eevee_defines.hh")
81ADDITIONAL_INFO(eevee_gbuffer_data)
82ADDITIONAL_INFO(eevee_utility_texture)
83ADDITIONAL_INFO(eevee_sampling_data)
84ADDITIONAL_INFO(eevee_light_data)
85ADDITIONAL_INFO(eevee_shadow_data)
86ADDITIONAL_INFO(eevee_hiz_data)
87ADDITIONAL_INFO(eevee_lightprobe_data)
88ADDITIONAL_INFO(eevee_render_pass_out)
89ADDITIONAL_INFO(gpu_fullscreen)
90ADDITIONAL_INFO(draw_object_infos)
91ADDITIONAL_INFO(draw_view)
93
94GPU_SHADER_CREATE_INFO(eevee_deferred_light_single)
95ADDITIONAL_INFO(eevee_deferred_light)
96DEFINE_VALUE("LIGHT_CLOSURE_EVAL_COUNT", "1")
99
100GPU_SHADER_CREATE_INFO(eevee_deferred_light_double)
101ADDITIONAL_INFO(eevee_deferred_light)
102DEFINE_VALUE("LIGHT_CLOSURE_EVAL_COUNT", "2")
105
106GPU_SHADER_CREATE_INFO(eevee_deferred_light_triple)
107ADDITIONAL_INFO(eevee_deferred_light)
108DEFINE_VALUE("LIGHT_CLOSURE_EVAL_COUNT", "3")
111
112GPU_SHADER_CREATE_INFO(eevee_deferred_combine)
113/* Early fragment test is needed to avoid processing fragments background fragments. */
115/* Inputs. */
116SAMPLER(2, usampler2D, direct_radiance_1_tx)
117SAMPLER(4, usampler2D, direct_radiance_2_tx)
118SAMPLER(5, usampler2D, direct_radiance_3_tx)
119SAMPLER(6, sampler2D, indirect_radiance_1_tx)
120SAMPLER(7, sampler2D, indirect_radiance_2_tx)
121SAMPLER(8, sampler2D, indirect_radiance_3_tx)
122IMAGE(5, SFLOAT_16_16_16_16, read_write, image2D, radiance_feedback_img)
123FRAGMENT_OUT(0, float4, out_combined)
124TYPEDEF_SOURCE("eevee_defines.hh")
125ADDITIONAL_INFO(eevee_gbuffer_data)
126ADDITIONAL_INFO(eevee_render_pass_out)
127ADDITIONAL_INFO(eevee_hiz_data)
128ADDITIONAL_INFO(gpu_fullscreen)
129ADDITIONAL_INFO(draw_view)
130FRAGMENT_SOURCE("eevee_deferred_combine_frag.glsl")
131/* NOTE: Both light IDs have a valid specialized assignment of '-1' so only when default is
132 * present will we instead dynamically look-up ID from the uniform buffer. */
133SPECIALIZATION_CONSTANT(bool, render_pass_diffuse_light_enabled, false)
134SPECIALIZATION_CONSTANT(bool, render_pass_specular_light_enabled, false)
135SPECIALIZATION_CONSTANT(bool, render_pass_normal_enabled, false)
136SPECIALIZATION_CONSTANT(bool, render_pass_position_enabled, false)
137SPECIALIZATION_CONSTANT(bool, use_radiance_feedback, false)
138SPECIALIZATION_CONSTANT(bool, use_split_radiance, true)
141
142GPU_SHADER_CREATE_INFO(eevee_deferred_aov_clear)
143/* Early fragment test is needed to avoid processing fragments without correct GBuffer data. */
145ADDITIONAL_INFO(eevee_render_pass_out)
146ADDITIONAL_INFO(gpu_fullscreen)
147FRAGMENT_SOURCE("eevee_deferred_aov_clear_frag.glsl")
150
151GPU_SHADER_CREATE_INFO(eevee_deferred_capture_eval)
152/* Early fragment test is needed to avoid processing fragments without correct GBuffer data. */
154/* Inputs. */
155FRAGMENT_OUT(0, float4, out_radiance)
156DEFINE_VALUE("LIGHT_CLOSURE_EVAL_COUNT", "1")
157TYPEDEF_SOURCE("eevee_defines.hh")
158ADDITIONAL_INFO(eevee_gbuffer_data)
159ADDITIONAL_INFO(eevee_utility_texture)
160ADDITIONAL_INFO(eevee_sampling_data)
161ADDITIONAL_INFO(eevee_light_data)
162ADDITIONAL_INFO(eevee_shadow_data)
163ADDITIONAL_INFO(eevee_hiz_data)
164ADDITIONAL_INFO(eevee_volume_probe_data)
165ADDITIONAL_INFO(draw_view)
166ADDITIONAL_INFO(gpu_fullscreen)
167ADDITIONAL_INFO(draw_object_infos)
168FRAGMENT_SOURCE("eevee_deferred_capture_frag.glsl")
171
172GPU_SHADER_CREATE_INFO(eevee_deferred_planar_eval)
173/* Early fragment test is needed to avoid processing fragments without correct GBuffer data. */
175/* Inputs. */
176FRAGMENT_OUT(0, float4, out_radiance)
177DEFINE("SPHERE_PROBE")
178DEFINE_VALUE("LIGHT_CLOSURE_EVAL_COUNT", "1")
179TYPEDEF_SOURCE("eevee_defines.hh")
180ADDITIONAL_INFO(eevee_gbuffer_data)
181ADDITIONAL_INFO(eevee_utility_texture)
182ADDITIONAL_INFO(eevee_sampling_data)
183ADDITIONAL_INFO(eevee_light_data)
184ADDITIONAL_INFO(eevee_lightprobe_data)
185ADDITIONAL_INFO(eevee_shadow_data)
186ADDITIONAL_INFO(eevee_hiz_data)
187ADDITIONAL_INFO(draw_view)
188ADDITIONAL_INFO(gpu_fullscreen)
189ADDITIONAL_INFO(draw_object_infos)
190FRAGMENT_SOURCE("eevee_deferred_planar_frag.glsl")
193
194#undef image_array_out
195#undef image_out
196#undef image_in
197
198/* -------------------------------------------------------------------- */
201
202GPU_SHADER_CREATE_INFO(eevee_debug_gbuffer)
204FRAGMENT_OUT_DUAL(0, float4, out_color_add, SRC_0)
205FRAGMENT_OUT_DUAL(0, float4, out_color_mul, SRC_1)
206PUSH_CONSTANT(int, debug_mode)
207TYPEDEF_SOURCE("eevee_debug_shared.hh")
208FRAGMENT_SOURCE("eevee_debug_gbuffer_frag.glsl")
209ADDITIONAL_INFO(draw_view)
210ADDITIONAL_INFO(gpu_fullscreen)
211TYPEDEF_SOURCE("eevee_defines.hh")
212ADDITIONAL_INFO(eevee_gbuffer_data)
214
unsigned int uint
return true
#define DEFERRED_GBUFFER_ROG_ID
#define RAYTRACE_RADIANCE_FORMAT
#define DEFERRED_RADIANCE_FORMAT
#define GPU_SHADER_CREATE_INFO(_info)
#define GPU_SHADER_CREATE_END()
#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 SUBPASS_IN(slot, type, img_type, name, rog)
#define IMAGE(slot, format, qualifiers, type, name)
#define DO_STATIC_COMPILATION()
#define EARLY_FRAGMENT_TEST(enable)
#define DEFINE_VALUE(name, value)
ImageBase< uint, 2 > uimage2D
ImageBase< float, 2, true > image2DArray
ImageBase< float, 2 > image2D
SamplerBase< uint, 2, false, true > usampler2DArray
SamplerBase< float, 2 > sampler2D
SamplerBase< uint, 2 > usampler2D