Blender  V3.3
shaders_test.cc
Go to the documentation of this file.
1 /* SPDX-License-Identifier: Apache-2.0 */
2 
3 #include "testing/testing.h"
4 
5 #include "draw_testing.hh"
6 
7 #include "GPU_context.h"
8 #include "GPU_index_buffer.h"
9 #include "GPU_init_exit.h"
10 #include "GPU_shader.h"
11 #include "GPU_texture.h"
12 #include "GPU_vertex_buffer.h"
13 
15 
22 #include "intern/draw_shader.h"
23 
24 namespace blender::draw {
25 
26 using namespace blender::draw::image_engine;
27 
29 {
30  const int MAX_WPD = 6;
31  WORKBENCH_PrivateData wpds[MAX_WPD];
32 
45 
46  for (int wpd_index = 0; wpd_index < MAX_WPD; wpd_index++) {
47  WORKBENCH_PrivateData *wpd = &wpds[wpd_index];
48  EXPECT_NE(workbench_shader_opaque_get(wpd, WORKBENCH_DATATYPE_MESH), nullptr);
49  EXPECT_NE(workbench_shader_opaque_get(wpd, WORKBENCH_DATATYPE_HAIR), nullptr);
51  EXPECT_NE(workbench_shader_opaque_image_get(wpd, WORKBENCH_DATATYPE_MESH, false), nullptr);
52  EXPECT_NE(workbench_shader_opaque_image_get(wpd, WORKBENCH_DATATYPE_MESH, true), nullptr);
53  EXPECT_NE(workbench_shader_opaque_image_get(wpd, WORKBENCH_DATATYPE_HAIR, false), nullptr);
54  EXPECT_NE(workbench_shader_opaque_image_get(wpd, WORKBENCH_DATATYPE_HAIR, true), nullptr);
56  nullptr);
58  nullptr);
59  EXPECT_NE(workbench_shader_composite_get(wpd), nullptr);
60  EXPECT_NE(workbench_shader_merge_infront_get(wpd), nullptr);
61 
66  nullptr);
69  nullptr);
72  nullptr);
74  nullptr);
75  EXPECT_NE(workbench_shader_transparent_resolve_get(wpd), nullptr);
76  }
77 
78  EXPECT_NE(workbench_shader_shadow_pass_get(false), nullptr);
79  EXPECT_NE(workbench_shader_shadow_pass_get(true), nullptr);
80  EXPECT_NE(workbench_shader_shadow_fail_get(false, false), nullptr);
81  EXPECT_NE(workbench_shader_shadow_fail_get(false, true), nullptr);
82  EXPECT_NE(workbench_shader_shadow_fail_get(true, false), nullptr);
83  EXPECT_NE(workbench_shader_shadow_fail_get(true, true), nullptr);
84 
85  /* NOTE: workbench_shader_cavity_get(false, false) isn't a valid option. */
86  EXPECT_NE(workbench_shader_cavity_get(false, true), nullptr);
87  EXPECT_NE(workbench_shader_cavity_get(true, false), nullptr);
88  EXPECT_NE(workbench_shader_cavity_get(true, true), nullptr);
89  EXPECT_NE(workbench_shader_outline_get(), nullptr);
90 
92  EXPECT_NE(workbench_shader_antialiasing_get(0), nullptr);
93  EXPECT_NE(workbench_shader_antialiasing_get(1), nullptr);
94  EXPECT_NE(workbench_shader_antialiasing_get(2), nullptr);
95 
96  EXPECT_NE(workbench_shader_volume_get(false, false, WORKBENCH_VOLUME_INTERP_LINEAR, false),
97  nullptr);
98  EXPECT_NE(workbench_shader_volume_get(false, false, WORKBENCH_VOLUME_INTERP_LINEAR, true),
99  nullptr);
100  EXPECT_NE(workbench_shader_volume_get(false, false, WORKBENCH_VOLUME_INTERP_CUBIC, false),
101  nullptr);
102  EXPECT_NE(workbench_shader_volume_get(false, false, WORKBENCH_VOLUME_INTERP_CUBIC, true),
103  nullptr);
104  EXPECT_NE(workbench_shader_volume_get(false, false, WORKBENCH_VOLUME_INTERP_CLOSEST, false),
105  nullptr);
106  EXPECT_NE(workbench_shader_volume_get(false, false, WORKBENCH_VOLUME_INTERP_CLOSEST, true),
107  nullptr);
108  EXPECT_NE(workbench_shader_volume_get(false, true, WORKBENCH_VOLUME_INTERP_LINEAR, false),
109  nullptr);
110  EXPECT_NE(workbench_shader_volume_get(false, true, WORKBENCH_VOLUME_INTERP_LINEAR, true),
111  nullptr);
112  EXPECT_NE(workbench_shader_volume_get(false, true, WORKBENCH_VOLUME_INTERP_CUBIC, false),
113  nullptr);
114  EXPECT_NE(workbench_shader_volume_get(false, true, WORKBENCH_VOLUME_INTERP_CUBIC, true),
115  nullptr);
116  EXPECT_NE(workbench_shader_volume_get(false, true, WORKBENCH_VOLUME_INTERP_CLOSEST, false),
117  nullptr);
118  EXPECT_NE(workbench_shader_volume_get(false, true, WORKBENCH_VOLUME_INTERP_CLOSEST, true),
119  nullptr);
120  EXPECT_NE(workbench_shader_volume_get(true, false, WORKBENCH_VOLUME_INTERP_LINEAR, false),
121  nullptr);
122  EXPECT_NE(workbench_shader_volume_get(true, false, WORKBENCH_VOLUME_INTERP_LINEAR, true),
123  nullptr);
124  EXPECT_NE(workbench_shader_volume_get(true, false, WORKBENCH_VOLUME_INTERP_CUBIC, false),
125  nullptr);
126  EXPECT_NE(workbench_shader_volume_get(true, false, WORKBENCH_VOLUME_INTERP_CUBIC, true),
127  nullptr);
128  EXPECT_NE(workbench_shader_volume_get(true, false, WORKBENCH_VOLUME_INTERP_CLOSEST, false),
129  nullptr);
130  EXPECT_NE(workbench_shader_volume_get(true, false, WORKBENCH_VOLUME_INTERP_CLOSEST, true),
131  nullptr);
132  EXPECT_NE(workbench_shader_volume_get(true, true, WORKBENCH_VOLUME_INTERP_LINEAR, false),
133  nullptr);
134  EXPECT_NE(workbench_shader_volume_get(true, true, WORKBENCH_VOLUME_INTERP_LINEAR, true),
135  nullptr);
136  EXPECT_NE(workbench_shader_volume_get(true, true, WORKBENCH_VOLUME_INTERP_CUBIC, false),
137  nullptr);
138  EXPECT_NE(workbench_shader_volume_get(true, true, WORKBENCH_VOLUME_INTERP_CUBIC, true), nullptr);
139  EXPECT_NE(workbench_shader_volume_get(true, true, WORKBENCH_VOLUME_INTERP_CLOSEST, false),
140  nullptr);
142  nullptr);
143 
151  EXPECT_NE(dof_prepare_sh, nullptr);
152  EXPECT_NE(dof_downsample_sh, nullptr);
153  EXPECT_NE(dof_blur1_sh, nullptr);
154  EXPECT_NE(dof_blur2_sh, nullptr);
155  EXPECT_NE(dof_resolve_sh, nullptr);
156 
158 }
159 DRAW_TEST(workbench_glsl_shaders)
160 
162 {
163  EXPECT_NE(GPENCIL_shader_antialiasing(0), nullptr);
164  EXPECT_NE(GPENCIL_shader_antialiasing(1), nullptr);
165  EXPECT_NE(GPENCIL_shader_antialiasing(2), nullptr);
166 
167  EXPECT_NE(GPENCIL_shader_geometry_get(), nullptr);
168  EXPECT_NE(GPENCIL_shader_layer_blend_get(), nullptr);
169  EXPECT_NE(GPENCIL_shader_mask_invert_get(), nullptr);
170  EXPECT_NE(GPENCIL_shader_depth_merge_get(), nullptr);
171  EXPECT_NE(GPENCIL_shader_fx_blur_get(), nullptr);
172  EXPECT_NE(GPENCIL_shader_fx_colorize_get(), nullptr);
173  EXPECT_NE(GPENCIL_shader_fx_composite_get(), nullptr);
174  EXPECT_NE(GPENCIL_shader_fx_transform_get(), nullptr);
175  EXPECT_NE(GPENCIL_shader_fx_glow_get(), nullptr);
176  EXPECT_NE(GPENCIL_shader_fx_pixelize_get(), nullptr);
177  EXPECT_NE(GPENCIL_shader_fx_rim_get(), nullptr);
178  EXPECT_NE(GPENCIL_shader_fx_shadow_get(), nullptr);
179 
181 }
182 DRAW_TEST(gpencil_glsl_shaders)
183 
185 {
186  EXPECT_NE(IMAGE_shader_image_get(), nullptr);
187  EXPECT_NE(IMAGE_shader_depth_get(), nullptr);
188 
190 }
191 DRAW_TEST(image_glsl_shaders)
192 
194 {
195  for (int i = 0; i < 2; i++) {
197  DRW_draw_state_init_gtests(sh_cfg);
198  EXPECT_NE(OVERLAY_shader_antialiasing(), nullptr);
201  EXPECT_NE(OVERLAY_shader_armature_envelope(false), nullptr);
202  EXPECT_NE(OVERLAY_shader_armature_envelope(true), nullptr);
203  EXPECT_NE(OVERLAY_shader_armature_shape(false), nullptr);
204  EXPECT_NE(OVERLAY_shader_armature_shape(true), nullptr);
205  EXPECT_NE(OVERLAY_shader_armature_shape_wire(), nullptr);
206  EXPECT_NE(OVERLAY_shader_armature_sphere(false), nullptr);
207  EXPECT_NE(OVERLAY_shader_armature_sphere(true), nullptr);
208  EXPECT_NE(OVERLAY_shader_armature_stick(), nullptr);
209  EXPECT_NE(OVERLAY_shader_armature_wire(), nullptr);
210  EXPECT_NE(OVERLAY_shader_background(), nullptr);
211  EXPECT_NE(OVERLAY_shader_clipbound(), nullptr);
212  EXPECT_NE(OVERLAY_shader_depth_only(), nullptr);
213  EXPECT_NE(OVERLAY_shader_edit_curve_handle(), nullptr);
214  EXPECT_NE(OVERLAY_shader_edit_curve_point(), nullptr);
215  EXPECT_NE(OVERLAY_shader_edit_curve_wire(), nullptr);
216  EXPECT_NE(OVERLAY_shader_edit_gpencil_guide_point(), nullptr);
217  EXPECT_NE(OVERLAY_shader_edit_gpencil_point(), nullptr);
218  EXPECT_NE(OVERLAY_shader_edit_gpencil_wire(), nullptr);
219  EXPECT_NE(OVERLAY_shader_edit_lattice_point(), nullptr);
220  EXPECT_NE(OVERLAY_shader_edit_lattice_wire(), nullptr);
221  EXPECT_NE(OVERLAY_shader_edit_mesh_analysis(), nullptr);
222  EXPECT_NE(OVERLAY_shader_edit_mesh_edge(false), nullptr);
223  EXPECT_NE(OVERLAY_shader_edit_mesh_edge(true), nullptr);
224  EXPECT_NE(OVERLAY_shader_edit_mesh_face(), nullptr);
225  EXPECT_NE(OVERLAY_shader_edit_mesh_facedot(), nullptr);
226  EXPECT_NE(OVERLAY_shader_edit_mesh_normal(), nullptr);
227  EXPECT_NE(OVERLAY_shader_edit_mesh_skin_root(), nullptr);
228  EXPECT_NE(OVERLAY_shader_edit_mesh_vert(), nullptr);
229  EXPECT_NE(OVERLAY_shader_edit_particle_strand(), nullptr);
230  EXPECT_NE(OVERLAY_shader_edit_particle_point(), nullptr);
231  EXPECT_NE(OVERLAY_shader_edit_uv_edges_get(), nullptr);
232  EXPECT_NE(OVERLAY_shader_edit_uv_face_get(), nullptr);
233  EXPECT_NE(OVERLAY_shader_edit_uv_face_dots_get(), nullptr);
234  EXPECT_NE(OVERLAY_shader_edit_uv_verts_get(), nullptr);
235  EXPECT_NE(OVERLAY_shader_edit_uv_stretching_area_get(), nullptr);
236  EXPECT_NE(OVERLAY_shader_edit_uv_stretching_angle_get(), nullptr);
238  EXPECT_NE(OVERLAY_shader_edit_uv_stencil_image(), nullptr);
239  EXPECT_NE(OVERLAY_shader_edit_uv_mask_image(), nullptr);
240  EXPECT_NE(OVERLAY_shader_extra(false), nullptr);
241  EXPECT_NE(OVERLAY_shader_extra(true), nullptr);
242  EXPECT_NE(OVERLAY_shader_extra_groundline(), nullptr);
243  EXPECT_NE(OVERLAY_shader_extra_wire(false, false), nullptr);
244  EXPECT_NE(OVERLAY_shader_extra_wire(false, true), nullptr);
245  EXPECT_NE(OVERLAY_shader_extra_wire(true, false), nullptr);
246  EXPECT_NE(OVERLAY_shader_extra_wire(true, true), nullptr);
247  EXPECT_NE(OVERLAY_shader_extra_loose_point(), nullptr);
248  EXPECT_NE(OVERLAY_shader_extra_point(), nullptr);
249  EXPECT_NE(OVERLAY_shader_facing(), nullptr);
250  EXPECT_NE(OVERLAY_shader_gpencil_canvas(), nullptr);
251  EXPECT_NE(OVERLAY_shader_grid(), nullptr);
252  EXPECT_NE(OVERLAY_shader_grid_image(), nullptr);
253  EXPECT_NE(OVERLAY_shader_image(), nullptr);
254  EXPECT_NE(OVERLAY_shader_motion_path_line(), nullptr);
255  EXPECT_NE(OVERLAY_shader_motion_path_vert(), nullptr);
256  EXPECT_NE(OVERLAY_shader_uniform_color(), nullptr);
257  EXPECT_NE(OVERLAY_shader_outline_prepass(false), nullptr);
258  EXPECT_NE(OVERLAY_shader_outline_prepass(true), nullptr);
259  EXPECT_NE(OVERLAY_shader_outline_prepass_curves(), nullptr);
260  EXPECT_NE(OVERLAY_shader_outline_prepass_gpencil(), nullptr);
261  EXPECT_NE(OVERLAY_shader_outline_prepass_pointcloud(), nullptr);
262  EXPECT_NE(OVERLAY_shader_extra_grid(), nullptr);
263  EXPECT_NE(OVERLAY_shader_outline_detect(), nullptr);
264  EXPECT_NE(OVERLAY_shader_paint_face(), nullptr);
265  EXPECT_NE(OVERLAY_shader_paint_point(), nullptr);
266  EXPECT_NE(OVERLAY_shader_paint_texture(), nullptr);
267  EXPECT_NE(OVERLAY_shader_paint_vertcol(), nullptr);
268  EXPECT_NE(OVERLAY_shader_paint_weight(false), nullptr);
269  EXPECT_NE(OVERLAY_shader_paint_weight(true), nullptr);
270  EXPECT_NE(OVERLAY_shader_paint_wire(), nullptr);
271  EXPECT_NE(OVERLAY_shader_particle_dot(), nullptr);
272  EXPECT_NE(OVERLAY_shader_particle_shape(), nullptr);
273  EXPECT_NE(OVERLAY_shader_sculpt_mask(), nullptr);
274  EXPECT_NE(OVERLAY_shader_sculpt_curves_selection(), nullptr);
275  EXPECT_NE(OVERLAY_shader_volume_velocity(false, false), nullptr);
276  EXPECT_NE(OVERLAY_shader_volume_velocity(false, true), nullptr);
277  EXPECT_NE(OVERLAY_shader_volume_velocity(true, false), nullptr);
278  EXPECT_NE(OVERLAY_shader_wireframe(false), nullptr);
279  EXPECT_NE(OVERLAY_shader_wireframe(true), nullptr);
280  EXPECT_NE(OVERLAY_shader_wireframe_select(), nullptr);
281  EXPECT_NE(OVERLAY_shader_xray_fade(), nullptr);
282  }
283 
285 }
286 DRAW_TEST(overlay_glsl_shaders)
287 
289 {
291 
292  EXPECT_NE(EEVEE_shaders_bloom_blit_get(false), nullptr);
293  EXPECT_NE(EEVEE_shaders_bloom_blit_get(true), nullptr);
294  EXPECT_NE(EEVEE_shaders_bloom_downsample_get(false), nullptr);
295  EXPECT_NE(EEVEE_shaders_bloom_downsample_get(true), nullptr);
296  EXPECT_NE(EEVEE_shaders_bloom_upsample_get(false), nullptr);
297  EXPECT_NE(EEVEE_shaders_bloom_upsample_get(true), nullptr);
298  EXPECT_NE(EEVEE_shaders_bloom_resolve_get(false), nullptr);
299  EXPECT_NE(EEVEE_shaders_bloom_resolve_get(true), nullptr);
300  EXPECT_NE(EEVEE_shaders_depth_of_field_bokeh_get(), nullptr);
301  EXPECT_NE(EEVEE_shaders_depth_of_field_setup_get(), nullptr);
303  EXPECT_NE(EEVEE_shaders_depth_of_field_dilate_tiles_get(false), nullptr);
304  EXPECT_NE(EEVEE_shaders_depth_of_field_dilate_tiles_get(true), nullptr);
305  EXPECT_NE(EEVEE_shaders_depth_of_field_downsample_get(), nullptr);
306  EXPECT_NE(EEVEE_shaders_depth_of_field_reduce_get(true), nullptr);
307  EXPECT_NE(EEVEE_shaders_depth_of_field_reduce_get(false), nullptr);
314  EXPECT_NE(EEVEE_shaders_depth_of_field_filter_get(), nullptr);
315  EXPECT_NE(EEVEE_shaders_depth_of_field_scatter_get(false, false), nullptr);
316  EXPECT_NE(EEVEE_shaders_depth_of_field_scatter_get(false, true), nullptr);
317  EXPECT_NE(EEVEE_shaders_depth_of_field_scatter_get(true, false), nullptr);
318  EXPECT_NE(EEVEE_shaders_depth_of_field_scatter_get(true, true), nullptr);
319  EXPECT_NE(EEVEE_shaders_depth_of_field_resolve_get(false, true), nullptr);
320  EXPECT_NE(EEVEE_shaders_depth_of_field_resolve_get(false, false), nullptr);
321  EXPECT_NE(EEVEE_shaders_depth_of_field_resolve_get(true, true), nullptr);
322  EXPECT_NE(EEVEE_shaders_depth_of_field_resolve_get(true, false), nullptr);
323  EXPECT_NE(EEVEE_shaders_effect_downsample_sh_get(), nullptr);
324  EXPECT_NE(EEVEE_shaders_effect_downsample_cube_sh_get(), nullptr);
325  EXPECT_NE(EEVEE_shaders_effect_minz_downlevel_sh_get(), nullptr);
326  EXPECT_NE(EEVEE_shaders_effect_maxz_downlevel_sh_get(), nullptr);
327  EXPECT_NE(EEVEE_shaders_effect_minz_downdepth_sh_get(), nullptr);
328  EXPECT_NE(EEVEE_shaders_effect_maxz_downdepth_sh_get(), nullptr);
332  EXPECT_NE(EEVEE_shaders_effect_minz_copydepth_sh_get(), nullptr);
333  EXPECT_NE(EEVEE_shaders_effect_maxz_copydepth_sh_get(), nullptr);
334  EXPECT_NE(EEVEE_shaders_effect_mist_sh_get(), nullptr);
335  EXPECT_NE(EEVEE_shaders_effect_motion_blur_sh_get(), nullptr);
337  EXPECT_NE(EEVEE_shaders_effect_motion_blur_hair_sh_get(), nullptr);
340  EXPECT_NE(EEVEE_shaders_effect_ambient_occlusion_sh_get(), nullptr);
342  EXPECT_NE(EEVEE_shaders_ggx_lut_sh_get(), nullptr);
343  EXPECT_NE(EEVEE_shaders_ggx_refraction_lut_sh_get(), nullptr);
344  EXPECT_NE(EEVEE_shaders_probe_filter_glossy_sh_get(), nullptr);
345  EXPECT_NE(EEVEE_shaders_probe_filter_diffuse_sh_get(), nullptr);
346  EXPECT_NE(EEVEE_shaders_probe_filter_visibility_sh_get(), nullptr);
347  EXPECT_NE(EEVEE_shaders_probe_grid_fill_sh_get(), nullptr);
348  EXPECT_NE(EEVEE_shaders_probe_planar_downsample_sh_get(), nullptr);
350  EXPECT_NE(EEVEE_shaders_cryptomatte_sh_get(false), nullptr);
351  EXPECT_NE(EEVEE_shaders_cryptomatte_sh_get(true), nullptr);
352  EXPECT_NE(EEVEE_shaders_shadow_sh_get(), nullptr);
353  EXPECT_NE(EEVEE_shaders_shadow_accum_sh_get(), nullptr);
354  EXPECT_NE(EEVEE_shaders_subsurface_first_pass_sh_get(), nullptr);
355  EXPECT_NE(EEVEE_shaders_subsurface_second_pass_sh_get(), nullptr);
356  EXPECT_NE(EEVEE_shaders_volumes_clear_sh_get(), nullptr);
357  EXPECT_NE(EEVEE_shaders_volumes_clear_sh_get(), nullptr);
358  EXPECT_NE(EEVEE_shaders_volumes_scatter_sh_get(), nullptr);
360  EXPECT_NE(EEVEE_shaders_volumes_integration_sh_get(), nullptr);
361  EXPECT_NE(EEVEE_shaders_volumes_resolve_sh_get(false), nullptr);
362  EXPECT_NE(EEVEE_shaders_volumes_resolve_sh_get(true), nullptr);
363  EXPECT_NE(EEVEE_shaders_volumes_accum_sh_get(), nullptr);
364  EXPECT_NE(EEVEE_shaders_studiolight_probe_sh_get(), nullptr);
365  EXPECT_NE(EEVEE_shaders_studiolight_background_sh_get(), nullptr);
366  EXPECT_NE(EEVEE_shaders_probe_cube_display_sh_get(), nullptr);
367  EXPECT_NE(EEVEE_shaders_probe_grid_display_sh_get(), nullptr);
368  EXPECT_NE(EEVEE_shaders_probe_planar_display_sh_get(), nullptr);
369  EXPECT_NE(EEVEE_shaders_update_noise_sh_get(), nullptr);
370  EXPECT_NE(EEVEE_shaders_velocity_resolve_sh_get(), nullptr);
371  EXPECT_NE(EEVEE_shaders_taa_resolve_sh_get(EFFECT_TAA), nullptr);
373  EXPECT_NE(EEVEE_shaders_effect_reflection_trace_sh_get(), nullptr);
376 }
377 DRAW_TEST(eevee_glsl_shaders_static)
378 
380 {
382  EXPECT_NE(DRW_shader_hair_refine_get(PART_REFINE_CATMULL_ROM, sh_type), nullptr);
384 }
385 
387 {
388 #ifndef __APPLE__
391 #endif
393 }
394 DRAW_TEST(draw_glsl_shaders)
395 
397 {
398  for (int i = 0; i < GPU_SHADER_CFG_LEN; i++) {
399  eGPUShaderConfig sh_cfg = static_cast<eGPUShaderConfig>(i);
405  }
407 }
408 DRAW_TEST(basic_glsl_shaders)
409 
410 } // namespace blender::draw
@ V3D_LIGHTING_FLAT
@ V3D_LIGHTING_STUDIO
@ V3D_LIGHTING_MATCAP
struct GPUShader GPUShader
Definition: GPU_shader.h:20
eGPUShaderConfig
Definition: GPU_shader.h:364
@ GPU_SHADER_CFG_DEFAULT
Definition: GPU_shader.h:365
@ GPU_SHADER_CFG_CLIPPED
Definition: GPU_shader.h:366
#define GPU_SHADER_CFG_LEN
Definition: GPU_shader.h:368
GPUShader * BASIC_shaders_depth_conservative_sh_get(eGPUShaderConfig config)
Definition: basic_shader.c:67
void BASIC_shaders_free(void)
Definition: basic_shader.c:89
GPUShader * BASIC_shaders_pointcloud_depth_conservative_sh_get(eGPUShaderConfig config)
Definition: basic_shader.c:78
GPUShader * BASIC_shaders_pointcloud_depth_sh_get(eGPUShaderConfig config)
Definition: basic_shader.c:46
GPUShader * BASIC_shaders_depth_sh_get(eGPUShaderConfig config)
Definition: basic_shader.c:36
GPUShader * BASIC_shaders_curves_depth_sh_get(eGPUShaderConfig config)
Definition: basic_shader.c:57
@ PART_REFINE_CATMULL_ROM
void DRW_shaders_free()
Definition: draw_shader.cc:114
GPUShader * DRW_shader_hair_refine_get(ParticleRefineShader refinement, eParticleRefineShaderType sh_type)
Definition: draw_shader.cc:64
eParticleRefineShaderType
Definition: draw_shader.h:19
@ PART_REFINE_SHADER_TRANSFORM_FEEDBACK_WORKAROUND
Definition: draw_shader.h:21
@ PART_REFINE_SHADER_COMPUTE
Definition: draw_shader.h:22
@ PART_REFINE_SHADER_TRANSFORM_FEEDBACK
Definition: draw_shader.h:20
#define DRAW_TEST(test_name)
Definition: draw_testing.hh:13
@ DOF_GATHER_HOLEFILL
@ DOF_GATHER_FOREGROUND
@ DOF_GATHER_BACKGROUND
struct GPUShader * EEVEE_shaders_depth_of_field_setup_get(void)
struct GPUShader * EEVEE_shaders_effect_motion_blur_sh_get(void)
void EEVEE_shaders_free(void)
struct GPUShader * EEVEE_shaders_cryptomatte_sh_get(bool is_hair)
struct GPUShader * EEVEE_shaders_probe_planar_display_sh_get(void)
struct GPUShader * EEVEE_shaders_effect_maxz_downlevel_sh_get(void)
struct GPUShader * EEVEE_shaders_shadow_accum_sh_get(void)
struct GPUShader * EEVEE_shaders_velocity_resolve_sh_get(void)
struct GPUShader * EEVEE_shaders_effect_maxz_downdepth_sh_get(void)
struct GPUShader * EEVEE_shaders_effect_maxz_copydepth_sh_get(void)
struct GPUShader * EEVEE_shaders_probe_grid_fill_sh_get(void)
struct GPUShader * EEVEE_shaders_subsurface_first_pass_sh_get(void)
struct GPUShader * EEVEE_shaders_effect_minz_copydepth_sh_get(void)
struct GPUShader * EEVEE_shaders_depth_of_field_bokeh_get(void)
struct GPUShader * EEVEE_shaders_studiolight_background_sh_get(void)
struct GPUShader * EEVEE_shaders_effect_motion_blur_velocity_tiles_sh_get(void)
struct GPUShader * EEVEE_shaders_volumes_scatter_sh_get(void)
struct GPUShader * EEVEE_shaders_depth_of_field_dilate_tiles_get(bool pass)
struct GPUShader * EEVEE_shaders_effect_downsample_cube_sh_get(void)
struct GPUShader * EEVEE_shaders_effect_minz_downdepth_sh_get(void)
struct GPUShader * EEVEE_shaders_effect_reflection_trace_sh_get(void)
struct GPUShader * EEVEE_shaders_ggx_lut_sh_get(void)
struct GPUShader * EEVEE_shaders_probe_filter_visibility_sh_get(void)
struct GPUShader * EEVEE_shaders_effect_reflection_resolve_sh_get(void)
struct GPUShader * EEVEE_shaders_effect_minz_downlevel_sh_get(void)
struct GPUShader * EEVEE_shaders_effect_downsample_sh_get(void)
struct GPUShader * EEVEE_shaders_probe_filter_diffuse_sh_get(void)
struct GPUShader * EEVEE_shaders_bloom_blit_get(bool high_quality)
struct GPUShader * EEVEE_shaders_effect_motion_blur_hair_sh_get(void)
struct GPUShader * EEVEE_shaders_probe_cube_display_sh_get(void)
struct GPUShader * EEVEE_shaders_volumes_integration_sh_get(void)
struct GPUShader * EEVEE_shaders_effect_maxz_copydepth_layer_sh_get(void)
struct GPUShader * EEVEE_shaders_taa_resolve_sh_get(EEVEE_EffectsFlag enabled_effects)
struct GPUShader * EEVEE_shaders_volumes_accum_sh_get(void)
struct GPUShader * EEVEE_shaders_subsurface_second_pass_sh_get(void)
struct GPUShader * EEVEE_shaders_effect_minz_downdepth_layer_sh_get(void)
struct GPUShader * EEVEE_shaders_probe_planar_downsample_sh_get(void)
@ EFFECT_TAA_REPROJECT
@ EFFECT_TAA
struct GPUShader * EEVEE_shaders_effect_ambient_occlusion_debug_sh_get(void)
struct GPUShader * EEVEE_shaders_depth_of_field_scatter_get(bool is_foreground, bool bokeh_tx)
struct GPUShader * EEVEE_shaders_effect_motion_blur_velocity_tiles_expand_sh_get(void)
struct GPUShader * EEVEE_shaders_depth_of_field_gather_get(EEVEE_DofGatherPass pass, bool bokeh_tx)
struct GPUShader * EEVEE_shaders_studiolight_probe_sh_get(void)
struct GPUShader * EEVEE_shaders_bloom_upsample_get(bool high_quality)
struct GPUShader * EEVEE_shaders_effect_mist_sh_get(void)
struct GPUShader * EEVEE_shaders_update_noise_sh_get(void)
struct GPUShader * EEVEE_shaders_bloom_resolve_get(bool high_quality)
struct GPUShader * EEVEE_shaders_ggx_refraction_lut_sh_get(void)
struct GPUShader * EEVEE_shaders_depth_of_field_flatten_tiles_get(void)
struct GPUShader * EEVEE_shaders_volumes_scatter_with_lights_sh_get(void)
struct GPUShader * EEVEE_shaders_effect_ambient_occlusion_sh_get(void)
struct GPUShader * EEVEE_shaders_volumes_clear_sh_get(void)
struct GPUShader * EEVEE_shaders_depth_of_field_resolve_get(bool use_bokeh_tx, bool use_hq_gather)
struct GPUShader * EEVEE_shaders_depth_of_field_reduce_get(bool is_copy_pass)
struct GPUShader * EEVEE_shaders_volumes_resolve_sh_get(bool accum)
struct GPUShader * EEVEE_shaders_shadow_sh_get(void)
struct GPUShader * EEVEE_shaders_effect_maxz_downdepth_layer_sh_get(void)
struct GPUShader * EEVEE_shaders_effect_motion_blur_object_sh_get(void)
struct GPUShader * EEVEE_shaders_probe_filter_glossy_sh_get(void)
struct GPUShader * EEVEE_shaders_probe_grid_display_sh_get(void)
struct GPUShader * EEVEE_shaders_renderpasses_post_process_sh_get(void)
void EEVEE_shaders_material_shaders_init(void)
struct GPUShader * EEVEE_shaders_bloom_downsample_get(bool high_quality)
struct GPUShader * EEVEE_shaders_depth_of_field_downsample_get(void)
struct GPUShader * EEVEE_shaders_depth_of_field_filter_get(void)
struct GPUShader * dof_downsample_sh
Definition: eevee_shaders.c:69
struct GPUShader * dof_resolve_sh[2][2]
Definition: eevee_shaders.c:74
struct GPUShader * GPENCIL_shader_fx_colorize_get(void)
struct GPUShader * GPENCIL_shader_layer_blend_get(void)
struct GPUShader * GPENCIL_shader_fx_composite_get(void)
struct GPUShader * GPENCIL_shader_mask_invert_get(void)
struct GPUShader * GPENCIL_shader_fx_shadow_get(void)
struct GPUShader * GPENCIL_shader_fx_transform_get(void)
void GPENCIL_shader_free(void)
struct GPUShader * GPENCIL_shader_fx_rim_get(void)
struct GPUShader * GPENCIL_shader_fx_pixelize_get(void)
struct GPUShader * GPENCIL_shader_fx_blur_get(void)
struct GPUShader * GPENCIL_shader_antialiasing(int stage)
struct GPUShader * GPENCIL_shader_geometry_get(void)
struct GPUShader * GPENCIL_shader_fx_glow_get(void)
struct GPUShader * GPENCIL_shader_depth_merge_get(void)
GPUShader * IMAGE_shader_image_get()
Definition: image_shader.cc:28
GPUShader * IMAGE_shader_depth_get()
Definition: image_shader.cc:37
static void test_draw_shaders(eParticleRefineShaderType sh_type)
static void test_eevee_glsl_shaders_static()
static void test_workbench_glsl_shaders()
Definition: shaders_test.cc:28
static void test_image_glsl_shaders()
static void test_gpencil_glsl_shaders()
static void test_draw_glsl_shaders()
static void test_basic_glsl_shaders()
static void test_overlay_glsl_shaders()
GPUShader * OVERLAY_shader_edit_lattice_wire(void)
GPUShader * OVERLAY_shader_edit_uv_stretching_angle_get(void)
GPUShader * OVERLAY_shader_sculpt_curves_selection(void)
GPUShader * OVERLAY_shader_image(void)
GPUShader * OVERLAY_shader_edit_curve_handle(void)
void OVERLAY_shader_free(void)
GPUShader * OVERLAY_shader_armature_degrees_of_freedom_wire(void)
GPUShader * OVERLAY_shader_edit_gpencil_guide_point(void)
GPUShader * OVERLAY_shader_edit_lattice_point(void)
GPUShader * OVERLAY_shader_edit_mesh_edge(bool use_flat_interp)
GPUShader * OVERLAY_shader_paint_face(void)
GPUShader * OVERLAY_shader_edit_uv_face_get(void)
GPUShader * OVERLAY_shader_armature_sphere(bool use_outline)
GPUShader * OVERLAY_shader_wireframe(bool custom_bias)
GPUShader * OVERLAY_shader_edit_gpencil_point(void)
GPUShader * OVERLAY_shader_edit_curve_wire(void)
GPUShader * OVERLAY_shader_outline_prepass(bool use_wire)
GPUShader * OVERLAY_shader_edit_mesh_facedot(void)
GPUShader * OVERLAY_shader_extra_groundline(void)
GPUShader * OVERLAY_shader_extra_loose_point(void)
GPUShader * OVERLAY_shader_armature_degrees_of_freedom_solid(void)
GPUShader * OVERLAY_shader_edit_uv_stencil_image(void)
GPUShader * OVERLAY_shader_edit_gpencil_wire(void)
GPUShader * OVERLAY_shader_background(void)
GPUShader * OVERLAY_shader_clipbound(void)
GPUShader * OVERLAY_shader_edit_uv_face_dots_get(void)
GPUShader * OVERLAY_shader_motion_path_vert(void)
GPUShader * OVERLAY_shader_particle_dot(void)
GPUShader * OVERLAY_shader_paint_point(void)
GPUShader * OVERLAY_shader_paint_weight(bool shading)
GPUShader * OVERLAY_shader_edit_mesh_skin_root(void)
GPUShader * OVERLAY_shader_extra_grid(void)
GPUShader * OVERLAY_shader_edit_uv_stretching_area_get(void)
GPUShader * OVERLAY_shader_particle_shape(void)
GPUShader * OVERLAY_shader_motion_path_line(void)
GPUShader * OVERLAY_shader_edit_mesh_vert(void)
GPUShader * OVERLAY_shader_edit_uv_verts_get(void)
GPUShader * OVERLAY_shader_extra(bool is_select)
GPUShader * OVERLAY_shader_edit_particle_strand(void)
GPUShader * OVERLAY_shader_volume_velocity(bool use_needle, bool use_mac)
GPUShader * OVERLAY_shader_extra_wire(bool use_object, bool is_select)
GPUShader * OVERLAY_shader_sculpt_mask(void)
GPUShader * OVERLAY_shader_edit_uv_mask_image(void)
GPUShader * OVERLAY_shader_armature_shape_wire(void)
GPUShader * OVERLAY_shader_edit_uv_edges_get(void)
GPUShader * OVERLAY_shader_edit_mesh_face(void)
GPUShader * OVERLAY_shader_edit_mesh_normal(void)
GPUShader * OVERLAY_shader_armature_shape(bool use_outline)
GPUShader * OVERLAY_shader_xray_fade(void)
GPUShader * OVERLAY_shader_armature_wire(void)
GPUShader * OVERLAY_shader_grid(void)
GPUShader * OVERLAY_shader_edit_curve_point(void)
GPUShader * OVERLAY_shader_depth_only(void)
GPUShader * OVERLAY_shader_paint_wire(void)
GPUShader * OVERLAY_shader_armature_envelope(bool use_outline)
GPUShader * OVERLAY_shader_edit_particle_point(void)
GPUShader * OVERLAY_shader_edit_uv_tiled_image_borders_get(void)
GPUShader * OVERLAY_shader_paint_vertcol(void)
GPUShader * OVERLAY_shader_extra_point(void)
GPUShader * OVERLAY_shader_grid_image(void)
GPUShader * OVERLAY_shader_outline_prepass_gpencil(void)
GPUShader * OVERLAY_shader_antialiasing(void)
GPUShader * OVERLAY_shader_uniform_color(void)
GPUShader * OVERLAY_shader_outline_prepass_pointcloud(void)
GPUShader * OVERLAY_shader_gpencil_canvas(void)
GPUShader * OVERLAY_shader_outline_detect(void)
GPUShader * OVERLAY_shader_armature_stick(void)
GPUShader * OVERLAY_shader_facing(void)
GPUShader * OVERLAY_shader_paint_texture(void)
GPUShader * OVERLAY_shader_edit_mesh_analysis(void)
GPUShader * OVERLAY_shader_wireframe_select(void)
GPUShader * OVERLAY_shader_outline_prepass_curves(void)
eGPUShaderConfig sh_cfg
GPUShader * workbench_shader_transparent_resolve_get(WORKBENCH_PrivateData *wpd)
GPUShader * workbench_shader_transparent_image_get(WORKBENCH_PrivateData *wpd, eWORKBENCH_DataType data, bool tiled)
GPUShader * workbench_shader_shadow_fail_get(bool manifold, bool cap)
@ WORKBENCH_VOLUME_INTERP_CUBIC
@ WORKBENCH_VOLUME_INTERP_LINEAR
@ WORKBENCH_VOLUME_INTERP_CLOSEST
GPUShader * workbench_shader_shadow_pass_get(bool manifold)
GPUShader * workbench_shader_composite_get(WORKBENCH_PrivateData *wpd)
GPUShader * workbench_shader_volume_get(bool slice, bool coba, eWORKBENCH_VolumeInterpType interp_type, bool smoke)
GPUShader * workbench_shader_opaque_image_get(WORKBENCH_PrivateData *wpd, eWORKBENCH_DataType data, bool tiled)
void workbench_shader_free(void)
GPUShader * workbench_shader_antialiasing_get(int stage)
GPUShader * workbench_shader_antialiasing_accumulation_get(void)
GPUShader * workbench_shader_merge_infront_get(WORKBENCH_PrivateData *wpd)
GPUShader * workbench_shader_cavity_get(bool cavity, bool curvature)
@ WORKBENCH_DATATYPE_MESH
@ WORKBENCH_DATATYPE_HAIR
@ WORKBENCH_DATATYPE_POINTCLOUD
GPUShader * workbench_shader_opaque_get(WORKBENCH_PrivateData *wpd, eWORKBENCH_DataType data)
GPUShader * workbench_shader_transparent_get(WORKBENCH_PrivateData *wpd, eWORKBENCH_DataType data)
GPUShader * workbench_shader_outline_get(void)
void workbench_shader_depth_of_field_get(GPUShader **prepare_sh, GPUShader **downsample_sh, GPUShader **blur1_sh, GPUShader **blur2_sh, GPUShader **resolve_sh)
struct GPUShader * dof_blur2_sh
struct GPUShader * dof_prepare_sh
struct GPUShader * dof_blur1_sh