From 2c3ccdf77a8770aaec358a6306f59b7142eaa36f Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Cle=CC=81ment=20Foucault?= Date: Mon, 2 Dec 2024 21:26:15 +0100 Subject: [PATCH] GPU: GLSL compilation as C++ for eevee static shaders Rel #127983 Pull Request: https://projects.blender.org/blender/blender/pulls/130298 --- source/blender/CMakeLists.txt | 3 +- source/blender/draw/CMakeLists.txt | 7 +- .../engines/eevee_next/eevee_shader_shared.hh | 12 +- .../engines/eevee_next/shaders/CMakeLists.txt | 247 ++++++++++++ .../shaders/eevee_ambient_occlusion_lib.glsl | 6 + .../eevee_ambient_occlusion_pass_comp.glsl | 4 + .../shaders/eevee_attributes_curves_lib.glsl | 91 +++++ .../shaders/eevee_attributes_gpencil_lib.glsl | 64 ++++ .../shaders/eevee_attributes_lib.glsl | 362 ------------------ .../shaders/eevee_attributes_mesh_lib.glsl | 69 ++++ .../eevee_attributes_point_cloud_lib.glsl | 68 ++++ .../shaders/eevee_attributes_volume_lib.glsl | 98 +++++ .../shaders/eevee_attributes_world_lib.glsl | 50 +++ .../eevee_next/shaders/eevee_bxdf_lib.glsl | 2 + .../shaders/eevee_bxdf_microfacet_lib.glsl | 4 + .../eevee_next/shaders/eevee_camera_lib.glsl | 2 + .../shaders/eevee_cryptomatte_lib.glsl | 4 + .../shaders/eevee_debug_gbuffer_frag.glsl | 4 + .../eevee_debug_irradiance_grid_frag.glsl | 4 + .../eevee_debug_irradiance_grid_vert.glsl | 4 + .../shaders/eevee_debug_surfels_frag.glsl | 4 + .../shaders/eevee_debug_surfels_vert.glsl | 4 + .../shaders/eevee_deferred_capture_frag.glsl | 4 + .../shaders/eevee_deferred_combine_frag.glsl | 4 + .../shaders/eevee_deferred_light_frag.glsl | 4 + .../shaders/eevee_deferred_planar_frag.glsl | 4 + .../eevee_deferred_thickness_amend_frag.glsl | 4 + .../eevee_deferred_tile_classify_frag.glsl | 4 + .../eevee_depth_of_field_accumulator_lib.glsl | 9 +- .../eevee_depth_of_field_bokeh_lut_comp.glsl | 4 + .../eevee_depth_of_field_downsample_comp.glsl | 4 + .../eevee_depth_of_field_filter_comp.glsl | 6 +- .../eevee_depth_of_field_gather_comp.glsl | 4 + .../eevee_depth_of_field_hole_fill_comp.glsl | 4 + .../shaders/eevee_depth_of_field_lib.glsl | 2 + .../eevee_depth_of_field_reduce_comp.glsl | 4 + .../eevee_depth_of_field_resolve_comp.glsl | 4 + .../eevee_depth_of_field_scatter_frag.glsl | 4 + .../eevee_depth_of_field_scatter_vert.glsl | 4 + .../eevee_depth_of_field_setup_comp.glsl | 4 + .../eevee_depth_of_field_stabilize_comp.glsl | 8 +- ...evee_depth_of_field_tiles_dilate_comp.glsl | 4 + ...vee_depth_of_field_tiles_flatten_comp.glsl | 4 + .../eevee_display_lightprobe_planar_frag.glsl | 4 + .../eevee_display_lightprobe_planar_vert.glsl | 4 + .../eevee_display_lightprobe_sphere_frag.glsl | 4 + .../eevee_display_lightprobe_sphere_vert.glsl | 4 + .../eevee_display_lightprobe_volume_frag.glsl | 4 + .../eevee_display_lightprobe_volume_vert.glsl | 4 + .../eevee_next/shaders/eevee_film_comp.glsl | 4 + .../shaders/eevee_film_copy_frag.glsl | 5 + .../eevee_film_cryptomatte_post_comp.glsl | 4 + .../eevee_next/shaders/eevee_film_frag.glsl | 4 + .../eevee_next/shaders/eevee_film_lib.glsl | 4 + .../shaders/eevee_film_pass_convert_comp.glsl | 4 + .../eevee_next/shaders/eevee_gbuffer_lib.glsl | 2 + .../shaders/eevee_geom_curves_vert.glsl | 7 +- .../shaders/eevee_geom_gpencil_vert.glsl | 7 +- .../shaders/eevee_geom_mesh_vert.glsl | 7 +- .../shaders/eevee_geom_point_cloud_vert.glsl | 9 +- .../shaders/eevee_geom_volume_vert.glsl | 6 +- .../shaders/eevee_geom_world_vert.glsl | 4 + .../shaders/eevee_hiz_debug_frag.glsl | 4 + .../shaders/eevee_hiz_update_comp.glsl | 4 + .../shaders/eevee_horizon_denoise_comp.glsl | 4 + .../shaders/eevee_horizon_resolve_comp.glsl | 4 + .../shaders/eevee_horizon_scan_comp.glsl | 4 + .../shaders/eevee_horizon_scan_eval_lib.glsl | 4 + .../shaders/eevee_horizon_setup_comp.glsl | 4 + .../eevee_light_culling_debug_frag.glsl | 4 + .../eevee_light_culling_select_comp.glsl | 4 + .../eevee_light_culling_sort_comp.glsl | 4 + .../eevee_light_culling_tile_comp.glsl | 4 + .../eevee_light_culling_zbin_comp.glsl | 4 + .../shaders/eevee_light_eval_lib.glsl | 6 + .../shaders/eevee_light_iter_lib.glsl | 2 + .../eevee_light_shadow_setup_comp.glsl | 4 + .../shaders/eevee_lightprobe_lib.glsl | 14 + ...eevee_lightprobe_sphere_convolve_comp.glsl | 4 + ...vee_lightprobe_sphere_irradiance_comp.glsl | 4 + .../shaders/eevee_lightprobe_sphere_lib.glsl | 8 + .../eevee_lightprobe_sphere_mapping_lib.glsl | 2 + .../eevee_lightprobe_sphere_remap_comp.glsl | 4 + .../eevee_lightprobe_sphere_select_comp.glsl | 8 + ...eevee_lightprobe_sphere_sunlight_comp.glsl | 4 + .../eevee_lightprobe_volume_bounds_comp.glsl | 4 + .../eevee_lightprobe_volume_eval_lib.glsl | 2 +- .../eevee_lightprobe_volume_load_comp.glsl | 8 + .../eevee_lightprobe_volume_offset_comp.glsl | 4 + .../eevee_lightprobe_volume_ray_comp.glsl | 4 + .../eevee_lightprobe_volume_world_comp.glsl | 4 + .../shaders/eevee_lookdev_display_frag.glsl | 4 + .../shaders/eevee_lookdev_display_vert.glsl | 4 + .../eevee_next/shaders/eevee_ltc_lib.glsl | 2 + .../eevee_next/shaders/eevee_lut_comp.glsl | 4 + .../eevee_motion_blur_dilate_comp.glsl | 4 + .../eevee_motion_blur_flatten_comp.glsl | 4 + .../eevee_motion_blur_gather_comp.glsl | 4 + .../shaders/eevee_motion_blur_lib.glsl | 2 + .../shaders/eevee_nodetree_lib.glsl | 5 + .../shaders/eevee_occupancy_convert_frag.glsl | 4 + .../shaders/eevee_octahedron_lib.glsl | 2 + .../eevee_ray_denoise_bilateral_comp.glsl | 4 + .../eevee_ray_denoise_spatial_comp.glsl | 4 + .../eevee_ray_denoise_temporal_comp.glsl | 4 + .../shaders/eevee_ray_generate_comp.glsl | 4 + .../shaders/eevee_ray_tile_classify_comp.glsl | 4 + .../shaders/eevee_ray_tile_compact_comp.glsl | 4 + .../eevee_ray_trace_fallback_comp.glsl | 4 + .../shaders/eevee_ray_trace_planar_comp.glsl | 4 + .../shaders/eevee_ray_trace_screen_comp.glsl | 4 + .../shaders/eevee_ray_trace_screen_lib.glsl | 3 + .../shaders/eevee_renderpass_clear_frag.glsl | 4 + .../shaders/eevee_renderpass_lib.glsl | 4 + .../shaders/eevee_sampling_lib.glsl | 4 + .../eevee_shadow_clipmap_clear_comp.glsl | 4 + .../shaders/eevee_shadow_debug_frag.glsl | 4 + .../eevee_shadow_page_allocate_comp.glsl | 4 + .../shaders/eevee_shadow_page_clear_comp.glsl | 4 + .../eevee_shadow_page_defrag_comp.glsl | 4 + .../shaders/eevee_shadow_page_free_comp.glsl | 4 + .../shaders/eevee_shadow_page_mask_comp.glsl | 4 + .../shaders/eevee_shadow_page_ops_lib.glsl | 6 + .../shaders/eevee_shadow_page_tile_frag.glsl | 4 + .../shaders/eevee_shadow_page_tile_vert.glsl | 5 + .../shaders/eevee_shadow_tag_update_comp.glsl | 4 + .../shaders/eevee_shadow_tag_usage_comp.glsl | 4 + .../shaders/eevee_shadow_tag_usage_frag.glsl | 4 + .../shaders/eevee_shadow_tag_usage_lib.glsl | 6 + .../eevee_shadow_tag_usage_surfels_comp.glsl | 4 + .../shaders/eevee_shadow_tag_usage_vert.glsl | 4 + .../eevee_shadow_tag_usage_volume_comp.glsl | 4 + .../eevee_shadow_tilemap_amend_comp.glsl | 4 + .../eevee_shadow_tilemap_bounds_comp.glsl | 4 + .../eevee_shadow_tilemap_finalize_comp.glsl | 4 + .../eevee_shadow_tilemap_init_comp.glsl | 4 + .../shaders/eevee_shadow_tilemap_lib.glsl | 2 + .../eevee_shadow_tilemap_rendermap_comp.glsl | 4 + .../shaders/eevee_shadow_tracing_lib.glsl | 7 + .../shaders/eevee_shadow_visibility_comp.glsl | 8 +- .../eevee_subsurface_convolve_comp.glsl | 4 + .../shaders/eevee_subsurface_lib.glsl | 4 + .../shaders/eevee_subsurface_setup_comp.glsl | 4 + .../shaders/eevee_surf_capture_frag.glsl | 5 + .../shaders/eevee_surf_deferred_frag.glsl | 8 + .../shaders/eevee_surf_depth_frag.glsl | 6 + .../shaders/eevee_surf_forward_frag.glsl | 5 + .../shaders/eevee_surf_hybrid_frag.glsl | 8 + .../eevee_next/shaders/eevee_surf_lib.glsl | 4 + .../shaders/eevee_surf_occupancy_frag.glsl | 5 + .../shaders/eevee_surf_shadow_frag.glsl | 9 + .../shaders/eevee_surf_volume_frag.glsl | 15 +- .../shaders/eevee_surf_world_frag.glsl | 7 +- .../eevee_surfel_cluster_build_comp.glsl | 4 + .../shaders/eevee_surfel_light_comp.glsl | 8 + .../shaders/eevee_surfel_list_build_comp.glsl | 4 + .../shaders/eevee_surfel_list_sort_comp.glsl | 4 + .../shaders/eevee_surfel_ray_comp.glsl | 4 + .../shaders/eevee_thickness_lib.glsl | 2 + .../shaders/eevee_transparency_lib.glsl | 2 + .../shaders/eevee_velocity_lib.glsl | 4 + .../shaders/eevee_vertex_copy_comp.glsl | 4 + .../eevee_volume_integration_comp.glsl | 4 + .../eevee_next/shaders/eevee_volume_lib.glsl | 4 + .../shaders/eevee_volume_resolve_frag.glsl | 4 + .../shaders/eevee_volume_scatter_comp.glsl | 4 + .../infos/eevee_ambient_occlusion_info.hh | 10 + .../shaders/infos/eevee_common_info.hh | 157 ++++++++ .../shaders/infos/eevee_deferred_info.hh | 16 +- .../infos/eevee_depth_of_field_info.hh | 25 +- .../shaders/infos/eevee_film_info.hh | 11 + .../shaders/infos/eevee_hiz_info.hh | 14 +- .../shaders/infos/eevee_light_culling_info.hh | 26 +- .../infos/eevee_lightprobe_sphere_info.hh | 23 +- .../infos/eevee_lightprobe_volume_info.hh | 38 +- .../shaders/infos/eevee_lookdev_info.hh | 9 + .../shaders/infos/eevee_lut_info.hh | 8 + .../shaders/infos/eevee_material_info.hh | 74 ++-- .../shaders/infos/eevee_motion_blur_info.hh | 9 + .../shaders/infos/eevee_shadow_info.hh | 33 +- .../shaders/infos/eevee_subsurface_info.hh | 7 + .../shaders/infos/eevee_tracing_info.hh | 11 + .../shaders/infos/eevee_velocity_info.hh | 11 + .../shaders/infos/eevee_volume_info.hh | 22 +- .../intern/shaders/draw_intersect_lib.glsl | 3 + .../gpu/intern/gpu_shader_create_info_list.hh | 1 + .../blender/gpu/shaders/gpu_glsl_cpp_stubs.hh | 4 +- .../gpu/shaders/gpu_shader_codegen_lib.glsl | 2 + 188 files changed, 1750 insertions(+), 531 deletions(-) create mode 100644 source/blender/draw/engines/eevee_next/shaders/CMakeLists.txt create mode 100644 source/blender/draw/engines/eevee_next/shaders/eevee_attributes_curves_lib.glsl create mode 100644 source/blender/draw/engines/eevee_next/shaders/eevee_attributes_gpencil_lib.glsl delete mode 100644 source/blender/draw/engines/eevee_next/shaders/eevee_attributes_lib.glsl create mode 100644 source/blender/draw/engines/eevee_next/shaders/eevee_attributes_mesh_lib.glsl create mode 100644 source/blender/draw/engines/eevee_next/shaders/eevee_attributes_point_cloud_lib.glsl create mode 100644 source/blender/draw/engines/eevee_next/shaders/eevee_attributes_volume_lib.glsl create mode 100644 source/blender/draw/engines/eevee_next/shaders/eevee_attributes_world_lib.glsl create mode 100644 source/blender/draw/engines/eevee_next/shaders/infos/eevee_common_info.hh diff --git a/source/blender/CMakeLists.txt b/source/blender/CMakeLists.txt index cbc105e855e..610dc3eaa2a 100644 --- a/source/blender/CMakeLists.txt +++ b/source/blender/CMakeLists.txt @@ -147,8 +147,9 @@ add_subdirectory(blenlib) add_subdirectory(bmesh) add_subdirectory(draw) add_subdirectory(draw/intern/shaders) -add_subdirectory(draw/engines/workbench/shaders) +add_subdirectory(draw/engines/eevee_next/shaders) add_subdirectory(draw/engines/gpencil/shaders) +add_subdirectory(draw/engines/workbench/shaders) add_subdirectory(render) add_subdirectory(blenfont) add_subdirectory(blentranslation) diff --git a/source/blender/draw/CMakeLists.txt b/source/blender/draw/CMakeLists.txt index d6d6193279e..de59b57f342 100644 --- a/source/blender/draw/CMakeLists.txt +++ b/source/blender/draw/CMakeLists.txt @@ -327,7 +327,12 @@ set(LIB set(GLSL_SRC engines/eevee_next/shaders/eevee_ambient_occlusion_lib.glsl engines/eevee_next/shaders/eevee_ambient_occlusion_pass_comp.glsl - engines/eevee_next/shaders/eevee_attributes_lib.glsl + engines/eevee_next/shaders/eevee_attributes_curves_lib.glsl + engines/eevee_next/shaders/eevee_attributes_gpencil_lib.glsl + engines/eevee_next/shaders/eevee_attributes_mesh_lib.glsl + engines/eevee_next/shaders/eevee_attributes_point_cloud_lib.glsl + engines/eevee_next/shaders/eevee_attributes_volume_lib.glsl + engines/eevee_next/shaders/eevee_attributes_world_lib.glsl engines/eevee_next/shaders/eevee_bxdf_lib.glsl engines/eevee_next/shaders/eevee_bxdf_microfacet_lib.glsl engines/eevee_next/shaders/eevee_bxdf_diffuse_lib.glsl diff --git a/source/blender/draw/engines/eevee_next/eevee_shader_shared.hh b/source/blender/draw/engines/eevee_next/eevee_shader_shared.hh index ab337f11392..0dbaa146cfa 100644 --- a/source/blender/draw/engines/eevee_next/eevee_shader_shared.hh +++ b/source/blender/draw/engines/eevee_next/eevee_shader_shared.hh @@ -15,9 +15,13 @@ # define IS_CPP 1 #endif -#if IS_CPP +#if IS_CPP || defined(GLSL_CPP_STUBS) # pragma once +# include "eevee_defines.hh" +#endif + +#if IS_CPP # include "BLI_math_bits.h" # include "BLI_memory_utils.hh" @@ -26,8 +30,6 @@ # include "draw_manager.hh" # include "draw_pass.hh" -# include "eevee_defines.hh" - # include "GPU_shader_shared.hh" namespace blender::eevee { @@ -2146,8 +2148,10 @@ BLI_STATIC_ASSERT_ALIGN(UniformData, 16) # define UTIL_TEXEL vec2(gl_FragCoord.xy) # elif defined(GPU_COMPUTE_SHADER) # define UTIL_TEXEL vec2(gl_GlobalInvocationID.xy) -# else +# elif defined(GPU_VERTEX_SHADER) # define UTIL_TEXEL vec2(gl_VertexID, 0) +# elif defined(GPU_LIBRARY_SHADER) +# define UTIL_TEXEL vec2(0) # endif /* Fetch texel. Wrapping if above range. */ diff --git a/source/blender/draw/engines/eevee_next/shaders/CMakeLists.txt b/source/blender/draw/engines/eevee_next/shaders/CMakeLists.txt new file mode 100644 index 00000000000..c51bc8835b2 --- /dev/null +++ b/source/blender/draw/engines/eevee_next/shaders/CMakeLists.txt @@ -0,0 +1,247 @@ +# SPDX-FileCopyrightText: 2024 Blender Authors +# +# SPDX-License-Identifier: GPL-2.0-or-later + +# avoid noisy warnings +if(CMAKE_COMPILER_IS_GNUCC OR CMAKE_C_COMPILER_ID MATCHES "Clang") + add_c_flag( + "-Wno-unused-result" + ) + remove_cc_flag( + "-Wmissing-declarations" + ) +endif() + +set(INC_GLSL + . + .. + + # For variadic macros + ../../../../blenlib + + ../../../intern + ../../../intern/shaders + + ../../../../gpu + ../../../../gpu/intern + ../../../../gpu/shaders + ../../../../gpu/shaders/infos + ../../../../gpu/shaders/common +) + +set(SRC_GLSL_VERT + eevee_debug_irradiance_grid_vert.glsl + eevee_debug_surfels_vert.glsl + eevee_depth_of_field_scatter_vert.glsl + eevee_display_lightprobe_planar_vert.glsl + eevee_display_lightprobe_sphere_vert.glsl + eevee_display_lightprobe_volume_vert.glsl + eevee_geom_curves_vert.glsl + # eevee_geom_gpencil_vert.glsl # Not yet supported + eevee_geom_mesh_vert.glsl + eevee_geom_point_cloud_vert.glsl + eevee_geom_volume_vert.glsl + eevee_geom_world_vert.glsl + eevee_lookdev_display_vert.glsl + eevee_shadow_page_tile_vert.glsl + eevee_shadow_tag_usage_vert.glsl +) + +set(SRC_GLSL_FRAG + eevee_debug_gbuffer_frag.glsl + eevee_debug_irradiance_grid_frag.glsl + eevee_debug_surfels_frag.glsl + eevee_deferred_capture_frag.glsl + eevee_deferred_combine_frag.glsl + eevee_deferred_light_frag.glsl + eevee_deferred_planar_frag.glsl + eevee_deferred_thickness_amend_frag.glsl + eevee_deferred_tile_classify_frag.glsl + eevee_depth_of_field_scatter_frag.glsl + eevee_display_lightprobe_planar_frag.glsl + eevee_display_lightprobe_sphere_frag.glsl + eevee_display_lightprobe_volume_frag.glsl + eevee_film_copy_frag.glsl + eevee_film_frag.glsl + eevee_hiz_debug_frag.glsl + eevee_light_culling_debug_frag.glsl + eevee_lookdev_display_frag.glsl + eevee_occupancy_convert_frag.glsl + eevee_renderpass_clear_frag.glsl + eevee_shadow_debug_frag.glsl + eevee_shadow_page_tile_frag.glsl + eevee_shadow_tag_usage_frag.glsl + eevee_surf_capture_frag.glsl + eevee_surf_deferred_frag.glsl + eevee_surf_depth_frag.glsl + eevee_surf_forward_frag.glsl + eevee_surf_hybrid_frag.glsl + eevee_surf_occupancy_frag.glsl + eevee_surf_shadow_frag.glsl + eevee_surf_volume_frag.glsl + eevee_surf_world_frag.glsl + eevee_volume_resolve_frag.glsl +) + +set(SRC_GLSL_COMP + eevee_ambient_occlusion_pass_comp.glsl + eevee_depth_of_field_bokeh_lut_comp.glsl + eevee_depth_of_field_downsample_comp.glsl + eevee_depth_of_field_filter_comp.glsl + eevee_depth_of_field_gather_comp.glsl + eevee_depth_of_field_hole_fill_comp.glsl + eevee_depth_of_field_reduce_comp.glsl + eevee_depth_of_field_resolve_comp.glsl + eevee_depth_of_field_setup_comp.glsl + eevee_depth_of_field_stabilize_comp.glsl + eevee_depth_of_field_tiles_dilate_comp.glsl + eevee_depth_of_field_tiles_flatten_comp.glsl + eevee_film_comp.glsl + eevee_film_cryptomatte_post_comp.glsl + eevee_film_pass_convert_comp.glsl + eevee_hiz_update_comp.glsl + eevee_horizon_denoise_comp.glsl + eevee_horizon_resolve_comp.glsl + eevee_horizon_scan_comp.glsl + eevee_horizon_setup_comp.glsl + eevee_light_culling_select_comp.glsl + eevee_light_culling_sort_comp.glsl + eevee_light_culling_tile_comp.glsl + eevee_light_culling_zbin_comp.glsl + eevee_light_shadow_setup_comp.glsl + eevee_lightprobe_sphere_convolve_comp.glsl + eevee_lightprobe_sphere_irradiance_comp.glsl + eevee_lightprobe_sphere_remap_comp.glsl + eevee_lightprobe_sphere_select_comp.glsl + eevee_lightprobe_sphere_sunlight_comp.glsl + eevee_lightprobe_volume_bounds_comp.glsl + eevee_lightprobe_volume_load_comp.glsl + eevee_lightprobe_volume_offset_comp.glsl + eevee_lightprobe_volume_ray_comp.glsl + eevee_lightprobe_volume_world_comp.glsl + eevee_lut_comp.glsl + eevee_motion_blur_dilate_comp.glsl + eevee_motion_blur_flatten_comp.glsl + eevee_motion_blur_gather_comp.glsl + eevee_ray_denoise_bilateral_comp.glsl + eevee_ray_denoise_spatial_comp.glsl + eevee_ray_denoise_temporal_comp.glsl + eevee_ray_generate_comp.glsl + eevee_ray_tile_classify_comp.glsl + eevee_ray_tile_compact_comp.glsl + eevee_ray_trace_fallback_comp.glsl + eevee_ray_trace_planar_comp.glsl + eevee_ray_trace_screen_comp.glsl + eevee_shadow_clipmap_clear_comp.glsl + eevee_shadow_page_allocate_comp.glsl + eevee_shadow_page_clear_comp.glsl + eevee_shadow_page_defrag_comp.glsl + eevee_shadow_page_free_comp.glsl + eevee_shadow_page_mask_comp.glsl + eevee_shadow_tag_update_comp.glsl + eevee_shadow_tag_usage_comp.glsl + eevee_shadow_tag_usage_surfels_comp.glsl + eevee_shadow_tag_usage_volume_comp.glsl + eevee_shadow_tilemap_amend_comp.glsl + eevee_shadow_tilemap_bounds_comp.glsl + eevee_shadow_tilemap_finalize_comp.glsl + eevee_shadow_tilemap_init_comp.glsl + eevee_shadow_tilemap_rendermap_comp.glsl + eevee_shadow_visibility_comp.glsl + eevee_subsurface_convolve_comp.glsl + eevee_subsurface_setup_comp.glsl + eevee_surfel_cluster_build_comp.glsl + eevee_surfel_light_comp.glsl + eevee_surfel_list_build_comp.glsl + eevee_surfel_list_sort_comp.glsl + eevee_surfel_ray_comp.glsl + eevee_vertex_copy_comp.glsl + eevee_volume_integration_comp.glsl + eevee_volume_scatter_comp.glsl +) + +set(SRC_GLSL_LIB + eevee_ambient_occlusion_lib.glsl + eevee_attributes_curves_lib.glsl + eevee_attributes_gpencil_lib.glsl + eevee_attributes_mesh_lib.glsl + eevee_attributes_point_cloud_lib.glsl + eevee_attributes_volume_lib.glsl + eevee_attributes_world_lib.glsl + eevee_bxdf_diffuse_lib.glsl + eevee_bxdf_lib.glsl + eevee_bxdf_microfacet_lib.glsl + eevee_camera_lib.glsl + eevee_closure_lib.glsl + eevee_colorspace_lib.glsl + eevee_cryptomatte_lib.glsl + eevee_depth_of_field_accumulator_lib.glsl + eevee_depth_of_field_lib.glsl + eevee_film_lib.glsl + eevee_filter_lib.glsl + # eevee_forward_lib.glsl + eevee_gbuffer_lib.glsl + eevee_horizon_scan_eval_lib.glsl + eevee_horizon_scan_lib.glsl + eevee_light_eval_lib.glsl + eevee_light_iter_lib.glsl + eevee_light_lib.glsl + eevee_lightprobe_eval_lib.glsl + eevee_lightprobe_lib.glsl + eevee_lightprobe_sphere_eval_lib.glsl + eevee_lightprobe_sphere_lib.glsl + eevee_lightprobe_sphere_mapping_lib.glsl + eevee_lightprobe_volume_eval_lib.glsl + eevee_ltc_lib.glsl + eevee_motion_blur_lib.glsl + # eevee_nodetree_lib.glsl # Has dependency on draw_model_lib that is hard to resolve + eevee_occupancy_lib.glsl + eevee_octahedron_lib.glsl + eevee_ray_generate_lib.glsl + eevee_ray_trace_screen_lib.glsl + eevee_ray_types_lib.glsl + eevee_renderpass_lib.glsl + eevee_sampling_lib.glsl + eevee_shadow_lib.glsl + eevee_shadow_page_ops_lib.glsl + eevee_shadow_tag_usage_lib.glsl + eevee_shadow_tilemap_lib.glsl + eevee_shadow_tracing_lib.glsl + eevee_spherical_harmonics_lib.glsl + eevee_subsurface_lib.glsl + eevee_surf_lib.glsl + eevee_surfel_list_lib.glsl + eevee_thickness_lib.glsl + # eevee_transparency_lib.glsl # Require Fragment shader include + # eevee_velocity_lib.glsl # Has dependency on draw_model_lib that is hard to resolve + eevee_volume_lib.glsl +) + +add_definitions(-DGPU_SHADER) +# TODO Remove +add_definitions(-DUSE_GPU_SHADER_CREATE_INFO) + +function(compile_sources_as_cpp + executable + sources + define + ) + + foreach(glsl_file ${sources}) + set_source_files_properties(${glsl_file} PROPERTIES LANGUAGE CXX) + endforeach() + + add_library(${executable} OBJECT ${sources}) + set_target_properties(${executable} PROPERTIES LINKER_LANGUAGE CXX) + target_include_directories(${executable} PUBLIC ${INC_GLSL}) + target_compile_definitions(${executable} PRIVATE ${define}) +endfunction() + + +# Compile shaders with shader code. +if (WITH_GPU_SHADER_CPP_COMPILATION) + compile_sources_as_cpp(eevee_cpp_shaders_vert "${SRC_GLSL_VERT}" "GPU_VERTEX_SHADER") + compile_sources_as_cpp(eevee_cpp_shaders_frag "${SRC_GLSL_FRAG}" "GPU_FRAGMENT_SHADER") + compile_sources_as_cpp(eevee_cpp_shaders_comp "${SRC_GLSL_COMP}" "GPU_COMPUTE_SHADER") + compile_sources_as_cpp(eevee_cpp_shaders_lib "${SRC_GLSL_LIB}" "GPU_LIBRARY_SHADER") +endif() diff --git a/source/blender/draw/engines/eevee_next/shaders/eevee_ambient_occlusion_lib.glsl b/source/blender/draw/engines/eevee_next/shaders/eevee_ambient_occlusion_lib.glsl index 00e9328c2dd..c69a4aecd85 100644 --- a/source/blender/draw/engines/eevee_next/shaders/eevee_ambient_occlusion_lib.glsl +++ b/source/blender/draw/engines/eevee_next/shaders/eevee_ambient_occlusion_lib.glsl @@ -4,6 +4,12 @@ #pragma once +#include "infos/eevee_common_info.hh" + +SHADER_LIBRARY_CREATE_INFO(eevee_utility_texture) +SHADER_LIBRARY_CREATE_INFO(eevee_global_ubo) +SHADER_LIBRARY_CREATE_INFO(eevee_hiz_data) + #include "draw_math_geom_lib.glsl" #include "draw_view_lib.glsl" #include "eevee_ray_types_lib.glsl" diff --git a/source/blender/draw/engines/eevee_next/shaders/eevee_ambient_occlusion_pass_comp.glsl b/source/blender/draw/engines/eevee_next/shaders/eevee_ambient_occlusion_pass_comp.glsl index b6ecfd05082..07cf7e48f34 100644 --- a/source/blender/draw/engines/eevee_next/shaders/eevee_ambient_occlusion_pass_comp.glsl +++ b/source/blender/draw/engines/eevee_next/shaders/eevee_ambient_occlusion_pass_comp.glsl @@ -2,6 +2,10 @@ * * SPDX-License-Identifier: GPL-2.0-or-later */ +#include "infos/eevee_ambient_occlusion_info.hh" + +COMPUTE_SHADER_CREATE_INFO(eevee_ambient_occlusion_pass) + #include "eevee_horizon_scan_eval_lib.glsl" #include "gpu_shader_math_vector_lib.glsl" diff --git a/source/blender/draw/engines/eevee_next/shaders/eevee_attributes_curves_lib.glsl b/source/blender/draw/engines/eevee_next/shaders/eevee_attributes_curves_lib.glsl new file mode 100644 index 00000000000..c1306cedc8c --- /dev/null +++ b/source/blender/draw/engines/eevee_next/shaders/eevee_attributes_curves_lib.glsl @@ -0,0 +1,91 @@ +/* SPDX-FileCopyrightText: 2022-2023 Blender Authors + * + * SPDX-License-Identifier: GPL-2.0-or-later */ + +#pragma once + +#include "draw_object_infos_info.hh" + +#ifdef GPU_LIBRARY_SHADER +# define HAIR_SHADER +# define DRW_HAIR_INFO +#endif + +SHADER_LIBRARY_CREATE_INFO(draw_modelmat_new) +SHADER_LIBRARY_CREATE_INFO(draw_resource_handle_new) +SHADER_LIBRARY_CREATE_INFO(draw_hair_new) + +#include "common_hair_lib.glsl" /* TODO rename to curve. */ +#include "draw_model_lib.glsl" +#include "gpu_shader_codegen_lib.glsl" +#include "gpu_shader_math_matrix_lib.glsl" +#include "gpu_shader_math_vector_lib.glsl" + +#ifdef GPU_VERTEX_SHADER + +/* -------------------------------------------------------------------- */ +/** \name Curve + * + * Curve objects loads attributes from buffers through sampler buffers. + * Per attribute scope follows loading order. + * \{ */ + +# ifdef OBINFO_LIB +vec3 attr_load_orco(vec4 orco) +{ + vec3 P = hair_get_strand_pos(); + vec3 lP = transform_point(ModelMatrixInverse, P); + return OrcoTexCoFactors[0].xyz + lP * OrcoTexCoFactors[1].xyz; +} +# endif + +int g_curves_attr_id = 0; + +/* Return the index to use for looking up the attribute value in the sampler + * based on the attribute scope (point or spline). */ +int curves_attribute_element_id() +{ + int id = curve_interp_flat.strand_id; + if (drw_curves.is_point_attribute[g_curves_attr_id][0] != 0u) { +# ifdef COMMON_HAIR_LIB + id = hair_get_base_id(); +# endif + } + + g_curves_attr_id += 1; + return id; +} + +vec4 attr_load_tangent(samplerBuffer cd_buf) +{ + /* Not supported for the moment. */ + return vec4(0.0, 0.0, 0.0, 1.0); +} +vec3 attr_load_uv(samplerBuffer cd_buf) +{ + return texelFetch(cd_buf, curve_interp_flat.strand_id).rgb; +} +vec4 attr_load_color(samplerBuffer cd_buf) +{ + return texelFetch(cd_buf, curve_interp_flat.strand_id).rgba; +} +vec4 attr_load_vec4(samplerBuffer cd_buf) +{ + return texelFetch(cd_buf, curves_attribute_element_id()).rgba; +} +vec3 attr_load_vec3(samplerBuffer cd_buf) +{ + return texelFetch(cd_buf, curves_attribute_element_id()).rgb; +} +vec2 attr_load_vec2(samplerBuffer cd_buf) +{ + return texelFetch(cd_buf, curves_attribute_element_id()).rg; +} +float attr_load_float(samplerBuffer cd_buf) +{ + return texelFetch(cd_buf, curves_attribute_element_id()).r; +} + +/** \} */ + +#endif diff --git a/source/blender/draw/engines/eevee_next/shaders/eevee_attributes_gpencil_lib.glsl b/source/blender/draw/engines/eevee_next/shaders/eevee_attributes_gpencil_lib.glsl new file mode 100644 index 00000000000..0b935af77df --- /dev/null +++ b/source/blender/draw/engines/eevee_next/shaders/eevee_attributes_gpencil_lib.glsl @@ -0,0 +1,64 @@ +/* SPDX-FileCopyrightText: 2022-2023 Blender Authors + * + * SPDX-License-Identifier: GPL-2.0-or-later */ + +#pragma once + +#include "draw_object_infos_info.hh" + +#ifdef GPU_LIBRARY_SHADER +SHADER_LIBRARY_CREATE_INFO(draw_modelmat_new) +#endif + +#include "draw_model_lib.glsl" +#include "gpu_shader_codegen_lib.glsl" +#include "gpu_shader_math_matrix_lib.glsl" +#include "gpu_shader_math_vector_lib.glsl" + +/* -------------------------------------------------------------------- */ +/** \name Grease Pencil + * + * Grease Pencil objects have one uv and one color attribute layer. + * \{ */ + +/* Globals to feed the load functions. */ +packed_float2 g_uvs; +packed_float4 g_color; + +#ifdef OBINFO_LIB +vec3 attr_load_orco(vec4 orco) +{ + vec3 lP = point_world_to_object(interp.P); + return OrcoTexCoFactors[0].xyz + lP * OrcoTexCoFactors[1].xyz; +} +#endif +vec4 attr_load_tangent(vec4 tangent) +{ + return vec4(0.0, 0.0, 0.0, 1.0); +} +vec3 attr_load_uv(vec3 dummy) +{ + return vec3(g_uvs, 0.0); +} +vec4 attr_load_color(vec4 dummy) +{ + return g_color; +} +vec4 attr_load_vec4(vec4 attr) +{ + return vec4(0.0); +} +vec3 attr_load_vec3(vec3 attr) +{ + return vec3(0.0); +} +vec2 attr_load_vec2(vec2 attr) +{ + return vec2(0.0); +} +float attr_load_float(float attr) +{ + return 0.0; +} + +/** \} */ diff --git a/source/blender/draw/engines/eevee_next/shaders/eevee_attributes_lib.glsl b/source/blender/draw/engines/eevee_next/shaders/eevee_attributes_lib.glsl deleted file mode 100644 index 050a1cb59e2..00000000000 --- a/source/blender/draw/engines/eevee_next/shaders/eevee_attributes_lib.glsl +++ /dev/null @@ -1,362 +0,0 @@ -/* SPDX-FileCopyrightText: 2022-2023 Blender Authors - * - * SPDX-License-Identifier: GPL-2.0-or-later */ - -#pragma once - -#include "draw_model_lib.glsl" -#include "gpu_shader_codegen_lib.glsl" -#include "gpu_shader_math_matrix_lib.glsl" -#include "gpu_shader_math_vector_lib.glsl" -/* MAT_GEOM_POINT_CLOUD */ -#include "common_pointcloud_lib.glsl" -/* MAT_GEOM_CURVES */ -#include "common_hair_lib.glsl" /* TODO rename to curve. */ - -#define EEVEE_ATTRIBUTE_LIB - -/* All attributes are loaded in order. This allow us to use a global counter to retrieve the - * correct grid xform. */ -/* TODO(fclem): This is very dangerous as it requires a reset for each time `attrib_load` is - * called. Instead, the right attribute index should be passed to attr_load_* functions. */ -int g_attr_id = 0; - -/* Point clouds and curves are not compatible with volume grids. - * They will fallback to their own attributes loading. */ -#if defined(MAT_VOLUME) && !defined(MAT_GEOM_CURVES) && !defined(MAT_GEOM_POINT_CLOUD) -# if defined(VOLUME_INFO_LIB) && !defined(MAT_GEOM_WORLD) -# define GRID_ATTRIBUTES -# endif - -/* -------------------------------------------------------------------- */ -/** \name Volume - * - * Volume objects loads attributes from "grids" in the form of 3D textures. - * Per grid transform order is following loading order. - * \{ */ - -# ifdef GRID_ATTRIBUTES -vec3 g_lP = vec3(0.0); -# else -vec3 g_wP = vec3(0.0); -# endif - -vec3 grid_coordinates() -{ -# ifdef GRID_ATTRIBUTES - vec3 co = (drw_volume.grids_xform[g_attr_id] * vec4(g_lP, 1.0)).xyz; -# else - /* Only for test shaders. All the runtime shaders require `draw_object_infos` and - * `draw_volume_infos`. */ - vec3 co = vec3(0.0); -# endif - g_attr_id += 1; - return co; -} - -vec3 attr_load_orco(sampler3D tex) -{ - g_attr_id += 1; -# ifdef GRID_ATTRIBUTES - return OrcoTexCoFactors[0].xyz + g_lP * OrcoTexCoFactors[1].xyz; -# else - return g_wP; -# endif -} -vec4 attr_load_tangent(sampler3D tex) -{ - g_attr_id += 1; - return vec4(0); -} -vec4 attr_load_vec4(sampler3D tex) -{ - return texture(tex, grid_coordinates()); -} -vec3 attr_load_vec3(sampler3D tex) -{ - return texture(tex, grid_coordinates()).rgb; -} -vec2 attr_load_vec2(sampler3D tex) -{ - return texture(tex, grid_coordinates()).rg; -} -float attr_load_float(sampler3D tex) -{ - return texture(tex, grid_coordinates()).r; -} -vec4 attr_load_color(sampler3D tex) -{ - return texture(tex, grid_coordinates()); -} -vec3 attr_load_uv(sampler3D attr) -{ - g_attr_id += 1; - return vec3(0); -} - -/** \} */ - -#elif defined(MAT_GEOM_MESH) - -/* -------------------------------------------------------------------- */ -/** \name Mesh - * - * Mesh objects attributes are loaded using vertex input attributes. - * \{ */ - -# ifdef OBINFO_LIB -vec3 attr_load_orco(vec4 orco) -{ -# ifdef GPU_VERTEX_SHADER - /* We know when there is no orco layer when orco.w is 1.0 because it uses the generic vertex - * attribute (which is [0,0,0,1]). */ - if (orco.w == 1.0) { - /* If the object does not have any deformation, the orco layer calculation is done on the fly - * using the orco_madd factors. */ - return OrcoTexCoFactors[0].xyz + pos * OrcoTexCoFactors[1].xyz; - } -# endif - return orco.xyz * 0.5 + 0.5; -} -# endif -vec4 attr_load_tangent(vec4 tangent) -{ - tangent.xyz = safe_normalize(drw_normal_object_to_world(tangent.xyz)); - return tangent; -} -vec4 attr_load_vec4(vec4 attr) -{ - return attr; -} -vec3 attr_load_vec3(vec3 attr) -{ - return attr; -} -vec2 attr_load_vec2(vec2 attr) -{ - return attr; -} -float attr_load_float(float attr) -{ - return attr; -} -vec4 attr_load_color(vec4 attr) -{ - return attr; -} -vec3 attr_load_uv(vec3 attr) -{ - return attr; -} - -/** \} */ - -#elif defined(MAT_GEOM_POINT_CLOUD) - -/* -------------------------------------------------------------------- */ -/** \name Point Cloud - * - * Point Cloud objects loads attributes from buffers through sampler buffers. - * \{ */ - -# ifdef OBINFO_LIB -vec3 attr_load_orco(vec4 orco) -{ - vec3 P = pointcloud_get_pos(); - vec3 lP = transform_point(ModelMatrixInverse, P); - return OrcoTexCoFactors[0].xyz + lP * OrcoTexCoFactors[1].xyz; -} -# endif - -vec4 attr_load_tangent(samplerBuffer cd_buf) -{ - return pointcloud_get_customdata_vec4(cd_buf); -} -vec3 attr_load_uv(samplerBuffer cd_buf) -{ - return pointcloud_get_customdata_vec3(cd_buf); -} -vec4 attr_load_color(samplerBuffer cd_buf) -{ - return pointcloud_get_customdata_vec4(cd_buf); -} -vec4 attr_load_vec4(samplerBuffer cd_buf) -{ - return pointcloud_get_customdata_vec4(cd_buf); -} -vec3 attr_load_vec3(samplerBuffer cd_buf) -{ - return pointcloud_get_customdata_vec3(cd_buf); -} -vec2 attr_load_vec2(samplerBuffer cd_buf) -{ - return pointcloud_get_customdata_vec2(cd_buf); -} -float attr_load_float(samplerBuffer cd_buf) -{ - return pointcloud_get_customdata_float(cd_buf); -} - -/** \} */ - -#elif defined(MAT_GEOM_GPENCIL) - -/* -------------------------------------------------------------------- */ -/** \name Grease Pencil - * - * Grease Pencil objects have one uv and one color attribute layer. - * \{ */ - -/* Globals to feed the load functions. */ -packed_float2 g_uvs; -packed_float4 g_color; - -# ifdef OBINFO_LIB -vec3 attr_load_orco(vec4 orco) -{ - vec3 lP = point_world_to_object(interp.P); - return OrcoTexCoFactors[0].xyz + lP * OrcoTexCoFactors[1].xyz; -} -# endif -vec4 attr_load_tangent(vec4 tangent) -{ - return vec4(0.0, 0.0, 0.0, 1.0); -} -vec3 attr_load_uv(vec3 dummy) -{ - return vec3(g_uvs, 0.0); -} -vec4 attr_load_color(vec4 dummy) -{ - return g_color; -} -vec4 attr_load_vec4(vec4 attr) -{ - return vec4(0.0); -} -vec3 attr_load_vec3(vec3 attr) -{ - return vec3(0.0); -} -vec2 attr_load_vec2(vec2 attr) -{ - return vec2(0.0); -} -float attr_load_float(float attr) -{ - return 0.0; -} - -/** \} */ - -#elif defined(MAT_GEOM_CURVES) && defined(GPU_VERTEX_SHADER) - -/* -------------------------------------------------------------------- */ -/** \name Curve - * - * Curve objects loads attributes from buffers through sampler buffers. - * Per attribute scope follows loading order. - * \{ */ - -# ifdef OBINFO_LIB -vec3 attr_load_orco(vec4 orco) -{ - vec3 P = hair_get_strand_pos(); - vec3 lP = transform_point(ModelMatrixInverse, P); - return OrcoTexCoFactors[0].xyz + lP * OrcoTexCoFactors[1].xyz; -} -# endif - -int g_curves_attr_id = 0; - -/* Return the index to use for looking up the attribute value in the sampler - * based on the attribute scope (point or spline). */ -int curves_attribute_element_id() -{ - int id = curve_interp_flat.strand_id; - if (drw_curves.is_point_attribute[g_curves_attr_id][0] != 0u) { -# ifdef COMMON_HAIR_LIB - id = hair_get_base_id(); -# endif - } - - g_curves_attr_id += 1; - return id; -} - -vec4 attr_load_tangent(samplerBuffer cd_buf) -{ - /* Not supported for the moment. */ - return vec4(0.0, 0.0, 0.0, 1.0); -} -vec3 attr_load_uv(samplerBuffer cd_buf) -{ - return texelFetch(cd_buf, curve_interp_flat.strand_id).rgb; -} -vec4 attr_load_color(samplerBuffer cd_buf) -{ - return texelFetch(cd_buf, curve_interp_flat.strand_id).rgba; -} -vec4 attr_load_vec4(samplerBuffer cd_buf) -{ - return texelFetch(cd_buf, curves_attribute_element_id()).rgba; -} -vec3 attr_load_vec3(samplerBuffer cd_buf) -{ - return texelFetch(cd_buf, curves_attribute_element_id()).rgb; -} -vec2 attr_load_vec2(samplerBuffer cd_buf) -{ - return texelFetch(cd_buf, curves_attribute_element_id()).rg; -} -float attr_load_float(samplerBuffer cd_buf) -{ - return texelFetch(cd_buf, curves_attribute_element_id()).r; -} - -/** \} */ - -#elif defined(MAT_GEOM_WORLD) - -/* -------------------------------------------------------------------- */ -/** \name World - * - * World has no attributes other than orco. - * \{ */ - -vec3 attr_load_orco(vec4 orco) -{ - return -g_data.N; -} -vec4 attr_load_tangent(vec4 tangent) -{ - return vec4(0); -} -vec4 attr_load_vec4(vec4 attr) -{ - return vec4(0); -} -vec3 attr_load_vec3(vec3 attr) -{ - return vec3(0); -} -vec2 attr_load_vec2(vec2 attr) -{ - return vec2(0); -} -float attr_load_float(float attr) -{ - return 0.0; -} -vec4 attr_load_color(vec4 attr) -{ - return vec4(0); -} -vec3 attr_load_uv(vec3 attr) -{ - return vec3(0); -} - -/** \} */ - -#endif diff --git a/source/blender/draw/engines/eevee_next/shaders/eevee_attributes_mesh_lib.glsl b/source/blender/draw/engines/eevee_next/shaders/eevee_attributes_mesh_lib.glsl new file mode 100644 index 00000000000..717af10999d --- /dev/null +++ b/source/blender/draw/engines/eevee_next/shaders/eevee_attributes_mesh_lib.glsl @@ -0,0 +1,69 @@ +/* SPDX-FileCopyrightText: 2022-2023 Blender Authors + * + * SPDX-License-Identifier: GPL-2.0-or-later */ + +#pragma once + +#include "draw_object_infos_info.hh" + +#ifdef GPU_LIBRARY_SHADER +SHADER_LIBRARY_CREATE_INFO(draw_modelmat_new) +#endif + +#include "draw_model_lib.glsl" +#include "gpu_shader_codegen_lib.glsl" +#include "gpu_shader_math_matrix_lib.glsl" +#include "gpu_shader_math_vector_lib.glsl" + +/* -------------------------------------------------------------------- */ +/** \name Mesh + * + * Mesh objects attributes are loaded using vertex input attributes. + * \{ */ + +#ifdef OBINFO_LIB +vec3 attr_load_orco(vec4 orco) +{ +# ifdef GPU_VERTEX_SHADER + /* We know when there is no orco layer when orco.w is 1.0 because it uses the generic vertex + * attribute (which is [0,0,0,1]). */ + if (orco.w == 1.0) { + /* If the object does not have any deformation, the orco layer calculation is done on the fly + * using the orco_madd factors. */ + return OrcoTexCoFactors[0].xyz + pos * OrcoTexCoFactors[1].xyz; + } +# endif + return orco.xyz * 0.5 + 0.5; +} +#endif +vec4 attr_load_tangent(vec4 tangent) +{ + tangent.xyz = safe_normalize(drw_normal_object_to_world(tangent.xyz)); + return tangent; +} +vec4 attr_load_vec4(vec4 attr) +{ + return attr; +} +vec3 attr_load_vec3(vec3 attr) +{ + return attr; +} +vec2 attr_load_vec2(vec2 attr) +{ + return attr; +} +float attr_load_float(float attr) +{ + return attr; +} +vec4 attr_load_color(vec4 attr) +{ + return attr; +} +vec3 attr_load_uv(vec3 attr) +{ + return attr; +} + +/** \} */ diff --git a/source/blender/draw/engines/eevee_next/shaders/eevee_attributes_point_cloud_lib.glsl b/source/blender/draw/engines/eevee_next/shaders/eevee_attributes_point_cloud_lib.glsl new file mode 100644 index 00000000000..017dd443370 --- /dev/null +++ b/source/blender/draw/engines/eevee_next/shaders/eevee_attributes_point_cloud_lib.glsl @@ -0,0 +1,68 @@ +/* SPDX-FileCopyrightText: 2022-2023 Blender Authors + * + * SPDX-License-Identifier: GPL-2.0-or-later */ + +#pragma once + +#include "draw_object_infos_info.hh" + +#ifdef GPU_LIBRARY_SHADER +# define POINTCLOUD_SHADER +# define DRW_POINTCLOUD_INFO +#endif + +SHADER_LIBRARY_CREATE_INFO(draw_modelmat_new) +SHADER_LIBRARY_CREATE_INFO(draw_resource_handle_new) +SHADER_LIBRARY_CREATE_INFO(draw_pointcloud_new) + +#include "draw_model_lib.glsl" +#include "draw_pointcloud_lib.glsl" +#include "gpu_shader_codegen_lib.glsl" +#include "gpu_shader_math_matrix_lib.glsl" +#include "gpu_shader_math_vector_lib.glsl" + +/* -------------------------------------------------------------------- */ +/** \name Point Cloud + * + * Point Cloud objects loads attributes from buffers through sampler buffers. + * \{ */ + +#ifdef OBINFO_LIB +vec3 attr_load_orco(vec4 orco) +{ + vec3 P = pointcloud_get_pos(); + vec3 lP = transform_point(ModelMatrixInverse, P); + return OrcoTexCoFactors[0].xyz + lP * OrcoTexCoFactors[1].xyz; +} +#endif + +vec4 attr_load_tangent(samplerBuffer cd_buf) +{ + return pointcloud_get_customdata_vec4(cd_buf); +} +vec3 attr_load_uv(samplerBuffer cd_buf) +{ + return pointcloud_get_customdata_vec3(cd_buf); +} +vec4 attr_load_color(samplerBuffer cd_buf) +{ + return pointcloud_get_customdata_vec4(cd_buf); +} +vec4 attr_load_vec4(samplerBuffer cd_buf) +{ + return pointcloud_get_customdata_vec4(cd_buf); +} +vec3 attr_load_vec3(samplerBuffer cd_buf) +{ + return pointcloud_get_customdata_vec3(cd_buf); +} +vec2 attr_load_vec2(samplerBuffer cd_buf) +{ + return pointcloud_get_customdata_vec2(cd_buf); +} +float attr_load_float(samplerBuffer cd_buf) +{ + return pointcloud_get_customdata_float(cd_buf); +} + +/** \} */ diff --git a/source/blender/draw/engines/eevee_next/shaders/eevee_attributes_volume_lib.glsl b/source/blender/draw/engines/eevee_next/shaders/eevee_attributes_volume_lib.glsl new file mode 100644 index 00000000000..30c5eb43b3a --- /dev/null +++ b/source/blender/draw/engines/eevee_next/shaders/eevee_attributes_volume_lib.glsl @@ -0,0 +1,98 @@ +/* SPDX-FileCopyrightText: 2022-2023 Blender Authors + * + * SPDX-License-Identifier: GPL-2.0-or-later */ + +#pragma once + +#include "draw_object_infos_info.hh" + +#ifdef GPU_LIBRARY_SHADER +SHADER_LIBRARY_CREATE_INFO(draw_modelmat_new) +#endif + +#include "draw_model_lib.glsl" +#include "gpu_shader_codegen_lib.glsl" +#include "gpu_shader_math_matrix_lib.glsl" +#include "gpu_shader_math_vector_lib.glsl" + +/* All attributes are loaded in order. This allow us to use a global counter to retrieve the + * correct grid xform. */ +/* TODO(fclem): This is very dangerous as it requires a reset for each time `attrib_load` is + * called. Instead, the right attribute index should be passed to attr_load_* functions. */ +int g_attr_id = 0; + +/* Point clouds and curves are not compatible with volume grids. + * They will fallback to their own attributes loading. */ +#if defined(MAT_VOLUME) && !defined(MAT_GEOM_CURVES) && !defined(MAT_GEOM_POINT_CLOUD) +# if defined(VOLUME_INFO_LIB) && !defined(MAT_GEOM_WORLD) +# define GRID_ATTRIBUTES +# endif + +/* -------------------------------------------------------------------- */ +/** \name Volume + * + * Volume objects loads attributes from "grids" in the form of 3D textures. + * Per grid transform order is following loading order. + * \{ */ + +# ifdef GRID_ATTRIBUTES +vec3 g_lP = vec3(0.0); +# else +vec3 g_wP = vec3(0.0); +# endif + +vec3 grid_coordinates() +{ +# ifdef GRID_ATTRIBUTES + vec3 co = (drw_volume.grids_xform[g_attr_id] * vec4(g_lP, 1.0)).xyz; +# else + /* Only for test shaders. All the runtime shaders require `draw_object_infos` and + * `draw_volume_infos`. */ + vec3 co = vec3(0.0); +# endif + g_attr_id += 1; + return co; +} + +vec3 attr_load_orco(sampler3D tex) +{ + g_attr_id += 1; +# ifdef GRID_ATTRIBUTES + return OrcoTexCoFactors[0].xyz + g_lP * OrcoTexCoFactors[1].xyz; +# else + return g_wP; +# endif +} +vec4 attr_load_tangent(sampler3D tex) +{ + g_attr_id += 1; + return vec4(0); +} +vec4 attr_load_vec4(sampler3D tex) +{ + return texture(tex, grid_coordinates()); +} +vec3 attr_load_vec3(sampler3D tex) +{ + return texture(tex, grid_coordinates()).rgb; +} +vec2 attr_load_vec2(sampler3D tex) +{ + return texture(tex, grid_coordinates()).rg; +} +float attr_load_float(sampler3D tex) +{ + return texture(tex, grid_coordinates()).r; +} +vec4 attr_load_color(sampler3D tex) +{ + return texture(tex, grid_coordinates()); +} +vec3 attr_load_uv(sampler3D attr) +{ + g_attr_id += 1; + return vec3(0); +} + +/** \} */ +#endif diff --git a/source/blender/draw/engines/eevee_next/shaders/eevee_attributes_world_lib.glsl b/source/blender/draw/engines/eevee_next/shaders/eevee_attributes_world_lib.glsl new file mode 100644 index 00000000000..46ed3f5bc70 --- /dev/null +++ b/source/blender/draw/engines/eevee_next/shaders/eevee_attributes_world_lib.glsl @@ -0,0 +1,50 @@ +/* SPDX-FileCopyrightText: 2022-2023 Blender Authors + * + * SPDX-License-Identifier: GPL-2.0-or-later */ + +#pragma once + +#include "gpu_shader_codegen_lib.glsl" +#include "gpu_shader_math_matrix_lib.glsl" +#include "gpu_shader_math_vector_lib.glsl" + +/* -------------------------------------------------------------------- */ +/** \name World + * + * World has no attributes other than orco. + * \{ */ + +vec3 attr_load_orco(vec4 orco) +{ + return -g_data.N; +} +vec4 attr_load_tangent(vec4 tangent) +{ + return vec4(0); +} +vec4 attr_load_vec4(vec4 attr) +{ + return vec4(0); +} +vec3 attr_load_vec3(vec3 attr) +{ + return vec3(0); +} +vec2 attr_load_vec2(vec2 attr) +{ + return vec2(0); +} +float attr_load_float(float attr) +{ + return 0.0; +} +vec4 attr_load_color(vec4 attr) +{ + return vec4(0); +} +vec3 attr_load_uv(vec3 attr) +{ + return vec3(0); +} + +/** \} */ diff --git a/source/blender/draw/engines/eevee_next/shaders/eevee_bxdf_lib.glsl b/source/blender/draw/engines/eevee_next/shaders/eevee_bxdf_lib.glsl index 04ea0689986..189b11e8355 100644 --- a/source/blender/draw/engines/eevee_next/shaders/eevee_bxdf_lib.glsl +++ b/source/blender/draw/engines/eevee_next/shaders/eevee_bxdf_lib.glsl @@ -4,6 +4,8 @@ #pragma once +#include "infos/eevee_common_info.hh" + /** * BxDF evaluation functions. */ diff --git a/source/blender/draw/engines/eevee_next/shaders/eevee_bxdf_microfacet_lib.glsl b/source/blender/draw/engines/eevee_next/shaders/eevee_bxdf_microfacet_lib.glsl index b2f6094256f..6a278de186d 100644 --- a/source/blender/draw/engines/eevee_next/shaders/eevee_bxdf_microfacet_lib.glsl +++ b/source/blender/draw/engines/eevee_next/shaders/eevee_bxdf_microfacet_lib.glsl @@ -4,6 +4,10 @@ #pragma once +#include "infos/eevee_common_info.hh" + +SHADER_LIBRARY_CREATE_INFO(eevee_utility_texture) + #include "eevee_bxdf_lib.glsl" #include "eevee_thickness_lib.glsl" #include "gpu_shader_codegen_lib.glsl" diff --git a/source/blender/draw/engines/eevee_next/shaders/eevee_camera_lib.glsl b/source/blender/draw/engines/eevee_next/shaders/eevee_camera_lib.glsl index 4b94cf9d681..48a0660ba9f 100644 --- a/source/blender/draw/engines/eevee_next/shaders/eevee_camera_lib.glsl +++ b/source/blender/draw/engines/eevee_next/shaders/eevee_camera_lib.glsl @@ -4,6 +4,8 @@ #pragma once +#include "infos/eevee_common_info.hh" + /** * Camera projection / uv functions and utils. */ diff --git a/source/blender/draw/engines/eevee_next/shaders/eevee_cryptomatte_lib.glsl b/source/blender/draw/engines/eevee_next/shaders/eevee_cryptomatte_lib.glsl index b8d85e784b9..95d6eb07fe1 100644 --- a/source/blender/draw/engines/eevee_next/shaders/eevee_cryptomatte_lib.glsl +++ b/source/blender/draw/engines/eevee_next/shaders/eevee_cryptomatte_lib.glsl @@ -4,6 +4,10 @@ #pragma once +#include "infos/eevee_film_info.hh" + +SHADER_LIBRARY_CREATE_INFO(eevee_film) + /** Storing/merging and sorting cryptomatte samples. */ bool cryptomatte_can_merge_sample(vec2 dst, vec2 src) diff --git a/source/blender/draw/engines/eevee_next/shaders/eevee_debug_gbuffer_frag.glsl b/source/blender/draw/engines/eevee_next/shaders/eevee_debug_gbuffer_frag.glsl index c5ea70fe863..747487b63ec 100644 --- a/source/blender/draw/engines/eevee_next/shaders/eevee_debug_gbuffer_frag.glsl +++ b/source/blender/draw/engines/eevee_next/shaders/eevee_debug_gbuffer_frag.glsl @@ -7,6 +7,10 @@ * This also fills the different render passes. */ +#include "infos/eevee_deferred_info.hh" + +FRAGMENT_SHADER_CREATE_INFO(eevee_debug_gbuffer) + #include "draw_view_lib.glsl" #include "eevee_gbuffer_lib.glsl" #include "eevee_renderpass_lib.glsl" diff --git a/source/blender/draw/engines/eevee_next/shaders/eevee_debug_irradiance_grid_frag.glsl b/source/blender/draw/engines/eevee_next/shaders/eevee_debug_irradiance_grid_frag.glsl index 45802b4cd57..c25b279aaa0 100644 --- a/source/blender/draw/engines/eevee_next/shaders/eevee_debug_irradiance_grid_frag.glsl +++ b/source/blender/draw/engines/eevee_next/shaders/eevee_debug_irradiance_grid_frag.glsl @@ -2,6 +2,10 @@ * * SPDX-License-Identifier: GPL-2.0-or-later */ +#include "infos/eevee_lightprobe_volume_info.hh" + +FRAGMENT_SHADER_CREATE_INFO(eevee_debug_irradiance_grid) + void main() { out_color = interp_color; diff --git a/source/blender/draw/engines/eevee_next/shaders/eevee_debug_irradiance_grid_vert.glsl b/source/blender/draw/engines/eevee_next/shaders/eevee_debug_irradiance_grid_vert.glsl index 1c637bf689c..fbe3f8b40c5 100644 --- a/source/blender/draw/engines/eevee_next/shaders/eevee_debug_irradiance_grid_vert.glsl +++ b/source/blender/draw/engines/eevee_next/shaders/eevee_debug_irradiance_grid_vert.glsl @@ -2,6 +2,10 @@ * * SPDX-License-Identifier: GPL-2.0-or-later */ +#include "infos/eevee_lightprobe_volume_info.hh" + +VERTEX_SHADER_CREATE_INFO(eevee_debug_irradiance_grid) + #include "draw_view_lib.glsl" #include "eevee_lightprobe_lib.glsl" diff --git a/source/blender/draw/engines/eevee_next/shaders/eevee_debug_surfels_frag.glsl b/source/blender/draw/engines/eevee_next/shaders/eevee_debug_surfels_frag.glsl index 65b7412325f..01f6374db4c 100644 --- a/source/blender/draw/engines/eevee_next/shaders/eevee_debug_surfels_frag.glsl +++ b/source/blender/draw/engines/eevee_next/shaders/eevee_debug_surfels_frag.glsl @@ -2,6 +2,10 @@ * * SPDX-License-Identifier: GPL-2.0-or-later */ +#include "infos/eevee_lightprobe_volume_info.hh" + +FRAGMENT_SHADER_CREATE_INFO(eevee_debug_surfels) + #include "eevee_sampling_lib.glsl" #include "gpu_shader_debug_gradients_lib.glsl" diff --git a/source/blender/draw/engines/eevee_next/shaders/eevee_debug_surfels_vert.glsl b/source/blender/draw/engines/eevee_next/shaders/eevee_debug_surfels_vert.glsl index ee8f84cb7dd..082810d3581 100644 --- a/source/blender/draw/engines/eevee_next/shaders/eevee_debug_surfels_vert.glsl +++ b/source/blender/draw/engines/eevee_next/shaders/eevee_debug_surfels_vert.glsl @@ -2,6 +2,10 @@ * * SPDX-License-Identifier: GPL-2.0-or-later */ +#include "infos/eevee_lightprobe_volume_info.hh" + +VERTEX_SHADER_CREATE_INFO(eevee_debug_surfels) + #include "draw_view_lib.glsl" #include "gpu_shader_math_matrix_lib.glsl" diff --git a/source/blender/draw/engines/eevee_next/shaders/eevee_deferred_capture_frag.glsl b/source/blender/draw/engines/eevee_next/shaders/eevee_deferred_capture_frag.glsl index 6455c8e8866..99de141fd8e 100644 --- a/source/blender/draw/engines/eevee_next/shaders/eevee_deferred_capture_frag.glsl +++ b/source/blender/draw/engines/eevee_next/shaders/eevee_deferred_capture_frag.glsl @@ -6,6 +6,10 @@ * Compute light objects lighting contribution using captured Gbuffer data. */ +#include "infos/eevee_deferred_info.hh" + +FRAGMENT_SHADER_CREATE_INFO(eevee_deferred_capture_eval) + #include "draw_view_lib.glsl" #include "eevee_gbuffer_lib.glsl" #include "eevee_light_eval_lib.glsl" diff --git a/source/blender/draw/engines/eevee_next/shaders/eevee_deferred_combine_frag.glsl b/source/blender/draw/engines/eevee_next/shaders/eevee_deferred_combine_frag.glsl index 6c87505b584..138a522a03c 100644 --- a/source/blender/draw/engines/eevee_next/shaders/eevee_deferred_combine_frag.glsl +++ b/source/blender/draw/engines/eevee_next/shaders/eevee_deferred_combine_frag.glsl @@ -7,6 +7,10 @@ * This also fills the different render passes. */ +#include "infos/eevee_deferred_info.hh" + +FRAGMENT_SHADER_CREATE_INFO(eevee_deferred_combine) + #include "eevee_colorspace_lib.glsl" #include "eevee_gbuffer_lib.glsl" #include "eevee_renderpass_lib.glsl" diff --git a/source/blender/draw/engines/eevee_next/shaders/eevee_deferred_light_frag.glsl b/source/blender/draw/engines/eevee_next/shaders/eevee_deferred_light_frag.glsl index fffd6cc9e6e..a16fb2aaca5 100644 --- a/source/blender/draw/engines/eevee_next/shaders/eevee_deferred_light_frag.glsl +++ b/source/blender/draw/engines/eevee_next/shaders/eevee_deferred_light_frag.glsl @@ -6,6 +6,10 @@ * Compute light objects lighting contribution using Gbuffer data. */ +#include "infos/eevee_deferred_info.hh" + +FRAGMENT_SHADER_CREATE_INFO(eevee_deferred_light) + #include "draw_view_lib.glsl" #include "eevee_gbuffer_lib.glsl" #include "eevee_light_eval_lib.glsl" diff --git a/source/blender/draw/engines/eevee_next/shaders/eevee_deferred_planar_frag.glsl b/source/blender/draw/engines/eevee_next/shaders/eevee_deferred_planar_frag.glsl index 452a646faf8..c2e67fe4ef1 100644 --- a/source/blender/draw/engines/eevee_next/shaders/eevee_deferred_planar_frag.glsl +++ b/source/blender/draw/engines/eevee_next/shaders/eevee_deferred_planar_frag.glsl @@ -6,6 +6,10 @@ * Compute light objects lighting contribution using captured Gbuffer data. */ +#include "infos/eevee_deferred_info.hh" + +FRAGMENT_SHADER_CREATE_INFO(eevee_deferred_planar_eval) + #include "draw_view_lib.glsl" #include "eevee_gbuffer_lib.glsl" #include "eevee_light_eval_lib.glsl" diff --git a/source/blender/draw/engines/eevee_next/shaders/eevee_deferred_thickness_amend_frag.glsl b/source/blender/draw/engines/eevee_next/shaders/eevee_deferred_thickness_amend_frag.glsl index 2fad42e8e09..d710bcead4f 100644 --- a/source/blender/draw/engines/eevee_next/shaders/eevee_deferred_thickness_amend_frag.glsl +++ b/source/blender/draw/engines/eevee_next/shaders/eevee_deferred_thickness_amend_frag.glsl @@ -10,6 +10,10 @@ * - tilemaps_tx */ +#include "infos/eevee_deferred_info.hh" + +FRAGMENT_SHADER_CREATE_INFO(eevee_deferred_thickness_amend) + #include "draw_view_lib.glsl" #include "eevee_gbuffer_lib.glsl" #include "eevee_light_iter_lib.glsl" diff --git a/source/blender/draw/engines/eevee_next/shaders/eevee_deferred_tile_classify_frag.glsl b/source/blender/draw/engines/eevee_next/shaders/eevee_deferred_tile_classify_frag.glsl index fe214fb22e5..4be9cde130b 100644 --- a/source/blender/draw/engines/eevee_next/shaders/eevee_deferred_tile_classify_frag.glsl +++ b/source/blender/draw/engines/eevee_next/shaders/eevee_deferred_tile_classify_frag.glsl @@ -7,6 +7,10 @@ * lighting complexity. */ +#include "infos/eevee_deferred_info.hh" + +FRAGMENT_SHADER_CREATE_INFO(eevee_deferred_tile_classify) + #include "eevee_gbuffer_lib.glsl" void main() diff --git a/source/blender/draw/engines/eevee_next/shaders/eevee_depth_of_field_accumulator_lib.glsl b/source/blender/draw/engines/eevee_next/shaders/eevee_depth_of_field_accumulator_lib.glsl index abb5084a3d9..5091fc18616 100644 --- a/source/blender/draw/engines/eevee_next/shaders/eevee_depth_of_field_accumulator_lib.glsl +++ b/source/blender/draw/engines/eevee_next/shaders/eevee_depth_of_field_accumulator_lib.glsl @@ -10,6 +10,13 @@ * One is for the half-resolution gather passes and the other one for slight in focus regions. */ +#include "infos/eevee_depth_of_field_info.hh" + +SHADER_LIBRARY_CREATE_INFO(eevee_depth_of_field_lut) +#ifdef GPU_LIBRARY_SHADER +COMPUTE_SHADER_CREATE_INFO(eevee_depth_of_field_gather) +#endif + #include "draw_view_lib.glsl" #include "eevee_colorspace_lib.glsl" #include "eevee_depth_of_field_lib.glsl" @@ -68,7 +75,7 @@ struct DofGatherData { float layer_opacity; -#ifdef GPU_METAL +#if defined(GPU_METAL) || defined(GLSL_CPP_STUBS) /* Explicit constructors -- To support GLSL syntax. */ inline DofGatherData() = default; inline DofGatherData(vec4 in_color, diff --git a/source/blender/draw/engines/eevee_next/shaders/eevee_depth_of_field_bokeh_lut_comp.glsl b/source/blender/draw/engines/eevee_next/shaders/eevee_depth_of_field_bokeh_lut_comp.glsl index ca7bd4c3384..36bc27e615e 100644 --- a/source/blender/draw/engines/eevee_next/shaders/eevee_depth_of_field_bokeh_lut_comp.glsl +++ b/source/blender/draw/engines/eevee_next/shaders/eevee_depth_of_field_bokeh_lut_comp.glsl @@ -10,6 +10,10 @@ * as it is way more complex and expensive to do. */ +#include "infos/eevee_depth_of_field_info.hh" + +COMPUTE_SHADER_CREATE_INFO(eevee_depth_of_field_bokeh_lut) + #include "eevee_depth_of_field_lib.glsl" void main() diff --git a/source/blender/draw/engines/eevee_next/shaders/eevee_depth_of_field_downsample_comp.glsl b/source/blender/draw/engines/eevee_next/shaders/eevee_depth_of_field_downsample_comp.glsl index 8d2dc7d05e4..63d2db32d5f 100644 --- a/source/blender/draw/engines/eevee_next/shaders/eevee_depth_of_field_downsample_comp.glsl +++ b/source/blender/draw/engines/eevee_next/shaders/eevee_depth_of_field_downsample_comp.glsl @@ -9,6 +9,10 @@ * Also does not weight luma for the bilateral weights. */ +#include "infos/eevee_depth_of_field_info.hh" + +COMPUTE_SHADER_CREATE_INFO(eevee_depth_of_field_downsample) + #include "eevee_depth_of_field_lib.glsl" #include "gpu_shader_math_vector_lib.glsl" diff --git a/source/blender/draw/engines/eevee_next/shaders/eevee_depth_of_field_filter_comp.glsl b/source/blender/draw/engines/eevee_next/shaders/eevee_depth_of_field_filter_comp.glsl index 6b531a9a70e..742ddab7360 100644 --- a/source/blender/draw/engines/eevee_next/shaders/eevee_depth_of_field_filter_comp.glsl +++ b/source/blender/draw/engines/eevee_next/shaders/eevee_depth_of_field_filter_comp.glsl @@ -9,11 +9,15 @@ * cheaper. */ +#include "infos/eevee_depth_of_field_info.hh" + +COMPUTE_SHADER_CREATE_INFO(eevee_depth_of_field_filter) + struct FilterSample { vec4 color; float weight; -#ifdef GPU_METAL +#if defined(GPU_METAL) || defined(GLSL_CPP_STUBS) inline FilterSample() = default; inline FilterSample(vec4 in_color, float in_weight) : color(in_color), weight(in_weight) {} #endif diff --git a/source/blender/draw/engines/eevee_next/shaders/eevee_depth_of_field_gather_comp.glsl b/source/blender/draw/engines/eevee_next/shaders/eevee_depth_of_field_gather_comp.glsl index 1abe781064c..0257cacfb12 100644 --- a/source/blender/draw/engines/eevee_next/shaders/eevee_depth_of_field_gather_comp.glsl +++ b/source/blender/draw/engines/eevee_next/shaders/eevee_depth_of_field_gather_comp.glsl @@ -15,6 +15,10 @@ * - Color * Weight, Weight, Occlusion 'CoC' Depth (mean and variance) */ +#include "infos/eevee_depth_of_field_info.hh" + +COMPUTE_SHADER_CREATE_INFO(eevee_depth_of_field_gather) + #include "eevee_depth_of_field_accumulator_lib.glsl" void main() diff --git a/source/blender/draw/engines/eevee_next/shaders/eevee_depth_of_field_hole_fill_comp.glsl b/source/blender/draw/engines/eevee_next/shaders/eevee_depth_of_field_hole_fill_comp.glsl index bd6637a9531..6e21d3bb7b6 100644 --- a/source/blender/draw/engines/eevee_next/shaders/eevee_depth_of_field_hole_fill_comp.glsl +++ b/source/blender/draw/engines/eevee_next/shaders/eevee_depth_of_field_hole_fill_comp.glsl @@ -12,6 +12,10 @@ * rotation to ensure maximum coverage. */ +#include "infos/eevee_depth_of_field_info.hh" + +COMPUTE_SHADER_CREATE_INFO(eevee_depth_of_field_hole_fill) + #include "eevee_depth_of_field_accumulator_lib.glsl" void main() diff --git a/source/blender/draw/engines/eevee_next/shaders/eevee_depth_of_field_lib.glsl b/source/blender/draw/engines/eevee_next/shaders/eevee_depth_of_field_lib.glsl index e30e6b8dda3..4d2fc544f99 100644 --- a/source/blender/draw/engines/eevee_next/shaders/eevee_depth_of_field_lib.glsl +++ b/source/blender/draw/engines/eevee_next/shaders/eevee_depth_of_field_lib.glsl @@ -8,6 +8,8 @@ * Depth of Field utils. */ +#include "infos/eevee_common_info.hh" + #include "draw_view_lib.glsl" #include "gpu_shader_math_base_lib.glsl" #include "gpu_shader_utildefines_lib.glsl" diff --git a/source/blender/draw/engines/eevee_next/shaders/eevee_depth_of_field_reduce_comp.glsl b/source/blender/draw/engines/eevee_next/shaders/eevee_depth_of_field_reduce_comp.glsl index 0fff5e4b29d..d9da4e90c26 100644 --- a/source/blender/draw/engines/eevee_next/shaders/eevee_depth_of_field_reduce_comp.glsl +++ b/source/blender/draw/engines/eevee_next/shaders/eevee_depth_of_field_reduce_comp.glsl @@ -15,6 +15,10 @@ * - Gather input color (whole mip chain), Scatter rect list, Signed CoC (whole mip chain). */ +#include "infos/eevee_depth_of_field_info.hh" + +COMPUTE_SHADER_CREATE_INFO(eevee_depth_of_field_reduce) + #include "eevee_depth_of_field_lib.glsl" #include "gpu_shader_math_vector_lib.glsl" diff --git a/source/blender/draw/engines/eevee_next/shaders/eevee_depth_of_field_resolve_comp.glsl b/source/blender/draw/engines/eevee_next/shaders/eevee_depth_of_field_resolve_comp.glsl index 7ca3bfa557b..b5a861be60c 100644 --- a/source/blender/draw/engines/eevee_next/shaders/eevee_depth_of_field_resolve_comp.glsl +++ b/source/blender/draw/engines/eevee_next/shaders/eevee_depth_of_field_resolve_comp.glsl @@ -11,6 +11,10 @@ * in-focus and defocus regions. */ +#include "infos/eevee_depth_of_field_info.hh" + +COMPUTE_SHADER_CREATE_INFO(eevee_depth_of_field_resolve) + #include "eevee_depth_of_field_accumulator_lib.glsl" /* Workarounds for Metal/AMD issue where atomicMax lead to incorrect results. diff --git a/source/blender/draw/engines/eevee_next/shaders/eevee_depth_of_field_scatter_frag.glsl b/source/blender/draw/engines/eevee_next/shaders/eevee_depth_of_field_scatter_frag.glsl index df763770e9c..c430c460ca2 100644 --- a/source/blender/draw/engines/eevee_next/shaders/eevee_depth_of_field_scatter_frag.glsl +++ b/source/blender/draw/engines/eevee_next/shaders/eevee_depth_of_field_scatter_frag.glsl @@ -9,6 +9,10 @@ * invocations and overdraw. */ +#include "infos/eevee_depth_of_field_info.hh" + +FRAGMENT_SHADER_CREATE_INFO(eevee_depth_of_field_scatter) + #include "eevee_depth_of_field_lib.glsl" #include "gpu_shader_math_vector_lib.glsl" diff --git a/source/blender/draw/engines/eevee_next/shaders/eevee_depth_of_field_scatter_vert.glsl b/source/blender/draw/engines/eevee_next/shaders/eevee_depth_of_field_scatter_vert.glsl index 4230e9e1daa..233e7af2724 100644 --- a/source/blender/draw/engines/eevee_next/shaders/eevee_depth_of_field_scatter_vert.glsl +++ b/source/blender/draw/engines/eevee_next/shaders/eevee_depth_of_field_scatter_vert.glsl @@ -9,6 +9,10 @@ * invocations and overdraw. */ +#include "infos/eevee_depth_of_field_info.hh" + +VERTEX_SHADER_CREATE_INFO(eevee_depth_of_field_scatter) + #include "eevee_depth_of_field_lib.glsl" #include "gpu_shader_math_vector_lib.glsl" diff --git a/source/blender/draw/engines/eevee_next/shaders/eevee_depth_of_field_setup_comp.glsl b/source/blender/draw/engines/eevee_next/shaders/eevee_depth_of_field_setup_comp.glsl index 0d3cc162753..420b1c6626d 100644 --- a/source/blender/draw/engines/eevee_next/shaders/eevee_depth_of_field_setup_comp.glsl +++ b/source/blender/draw/engines/eevee_next/shaders/eevee_depth_of_field_setup_comp.glsl @@ -14,6 +14,10 @@ * Half-resolution Color, signed CoC (out_coc.x), and max slight focus abs CoC (out_coc.y). */ +#include "infos/eevee_depth_of_field_info.hh" + +COMPUTE_SHADER_CREATE_INFO(eevee_depth_of_field_setup) + #include "draw_view_lib.glsl" #include "eevee_colorspace_lib.glsl" #include "eevee_depth_of_field_lib.glsl" diff --git a/source/blender/draw/engines/eevee_next/shaders/eevee_depth_of_field_stabilize_comp.glsl b/source/blender/draw/engines/eevee_next/shaders/eevee_depth_of_field_stabilize_comp.glsl index 5ee1665a73f..e9ff58ebe2d 100644 --- a/source/blender/draw/engines/eevee_next/shaders/eevee_depth_of_field_stabilize_comp.glsl +++ b/source/blender/draw/engines/eevee_next/shaders/eevee_depth_of_field_stabilize_comp.glsl @@ -17,6 +17,10 @@ * - Stabilized Color and CoC (half-resolution). */ +#include "infos/eevee_depth_of_field_info.hh" + +COMPUTE_SHADER_CREATE_INFO(eevee_depth_of_field_stabilize) + #include "eevee_colorspace_lib.glsl" #include "eevee_depth_of_field_lib.glsl" #include "eevee_velocity_lib.glsl" @@ -25,7 +29,7 @@ struct DofSample { vec4 color; float coc; -#ifdef GPU_METAL +#if defined(GPU_METAL) || defined(GLSL_CPP_STUBS) /* Explicit constructors -- To support GLSL syntax. */ inline DofSample() = default; inline DofSample(vec4 in_color, float in_coc) : color(in_color), coc(in_coc) {} @@ -154,7 +158,7 @@ struct DofNeighborhoodMinMax { DofSample min; DofSample max; -#ifdef GPU_METAL +#if defined(GPU_METAL) || defined(GLSL_CPP_STUBS) /* Explicit constructors -- To support GLSL syntax. */ inline DofNeighborhoodMinMax() = default; inline DofNeighborhoodMinMax(DofSample in_min, DofSample in_max) : min(in_min), max(in_max) {} diff --git a/source/blender/draw/engines/eevee_next/shaders/eevee_depth_of_field_tiles_dilate_comp.glsl b/source/blender/draw/engines/eevee_next/shaders/eevee_depth_of_field_tiles_dilate_comp.glsl index 113cd054009..2480b27ad8a 100644 --- a/source/blender/draw/engines/eevee_next/shaders/eevee_depth_of_field_tiles_dilate_comp.glsl +++ b/source/blender/draw/engines/eevee_next/shaders/eevee_depth_of_field_tiles_dilate_comp.glsl @@ -10,6 +10,10 @@ * - Separated foreground and background CoC. 1/8th of half-res resolution. So 1/16th of full-res. */ +#include "infos/eevee_depth_of_field_info.hh" + +COMPUTE_SHADER_CREATE_INFO(eevee_depth_of_field_tiles_dilate) + #include "eevee_depth_of_field_lib.glsl" /* Error introduced by the random offset of the gathering kernel's center. */ diff --git a/source/blender/draw/engines/eevee_next/shaders/eevee_depth_of_field_tiles_flatten_comp.glsl b/source/blender/draw/engines/eevee_next/shaders/eevee_depth_of_field_tiles_flatten_comp.glsl index 01bf2c60764..610da8ae5c3 100644 --- a/source/blender/draw/engines/eevee_next/shaders/eevee_depth_of_field_tiles_flatten_comp.glsl +++ b/source/blender/draw/engines/eevee_next/shaders/eevee_depth_of_field_tiles_flatten_comp.glsl @@ -15,6 +15,10 @@ * - Separated foreground and background CoC. 1/8th of half-res resolution. So 1/16th of full-res. */ +#include "infos/eevee_depth_of_field_info.hh" + +COMPUTE_SHADER_CREATE_INFO(eevee_depth_of_field_tiles_flatten) + #include "eevee_depth_of_field_lib.glsl" /** diff --git a/source/blender/draw/engines/eevee_next/shaders/eevee_display_lightprobe_planar_frag.glsl b/source/blender/draw/engines/eevee_next/shaders/eevee_display_lightprobe_planar_frag.glsl index 4712afdceb4..edc105b27bd 100644 --- a/source/blender/draw/engines/eevee_next/shaders/eevee_display_lightprobe_planar_frag.glsl +++ b/source/blender/draw/engines/eevee_next/shaders/eevee_display_lightprobe_planar_frag.glsl @@ -2,6 +2,10 @@ * * SPDX-License-Identifier: GPL-2.0-or-later */ +#include "infos/eevee_lightprobe_sphere_info.hh" + +FRAGMENT_SHADER_CREATE_INFO(eevee_display_lightprobe_planar) + #include "draw_view_lib.glsl" #include "eevee_lightprobe_sphere_lib.glsl" diff --git a/source/blender/draw/engines/eevee_next/shaders/eevee_display_lightprobe_planar_vert.glsl b/source/blender/draw/engines/eevee_next/shaders/eevee_display_lightprobe_planar_vert.glsl index c56ab377e4c..4823913eb46 100644 --- a/source/blender/draw/engines/eevee_next/shaders/eevee_display_lightprobe_planar_vert.glsl +++ b/source/blender/draw/engines/eevee_next/shaders/eevee_display_lightprobe_planar_vert.glsl @@ -2,6 +2,10 @@ * * SPDX-License-Identifier: GPL-2.0-or-later */ +#include "infos/eevee_lightprobe_sphere_info.hh" + +VERTEX_SHADER_CREATE_INFO(eevee_display_lightprobe_planar) + #include "draw_view_lib.glsl" #include "gpu_shader_math_matrix_lib.glsl" diff --git a/source/blender/draw/engines/eevee_next/shaders/eevee_display_lightprobe_sphere_frag.glsl b/source/blender/draw/engines/eevee_next/shaders/eevee_display_lightprobe_sphere_frag.glsl index 9a5cf488ac2..1dbb162e271 100644 --- a/source/blender/draw/engines/eevee_next/shaders/eevee_display_lightprobe_sphere_frag.glsl +++ b/source/blender/draw/engines/eevee_next/shaders/eevee_display_lightprobe_sphere_frag.glsl @@ -2,6 +2,10 @@ * * SPDX-License-Identifier: GPL-2.0-or-later */ +#include "infos/eevee_lightprobe_sphere_info.hh" + +FRAGMENT_SHADER_CREATE_INFO(eevee_display_lightprobe_sphere) + #include "draw_view_lib.glsl" #include "eevee_lightprobe_sphere_lib.glsl" diff --git a/source/blender/draw/engines/eevee_next/shaders/eevee_display_lightprobe_sphere_vert.glsl b/source/blender/draw/engines/eevee_next/shaders/eevee_display_lightprobe_sphere_vert.glsl index 91a0d544396..26b6e21083e 100644 --- a/source/blender/draw/engines/eevee_next/shaders/eevee_display_lightprobe_sphere_vert.glsl +++ b/source/blender/draw/engines/eevee_next/shaders/eevee_display_lightprobe_sphere_vert.glsl @@ -2,6 +2,10 @@ * * SPDX-License-Identifier: GPL-2.0-or-later */ +#include "infos/eevee_lightprobe_sphere_info.hh" + +VERTEX_SHADER_CREATE_INFO(eevee_display_lightprobe_sphere) + #include "draw_view_lib.glsl" #include "eevee_lightprobe_lib.glsl" diff --git a/source/blender/draw/engines/eevee_next/shaders/eevee_display_lightprobe_volume_frag.glsl b/source/blender/draw/engines/eevee_next/shaders/eevee_display_lightprobe_volume_frag.glsl index 2fa9a0b5223..b9613287ce3 100644 --- a/source/blender/draw/engines/eevee_next/shaders/eevee_display_lightprobe_volume_frag.glsl +++ b/source/blender/draw/engines/eevee_next/shaders/eevee_display_lightprobe_volume_frag.glsl @@ -2,6 +2,10 @@ * * SPDX-License-Identifier: GPL-2.0-or-later */ +#include "infos/eevee_lightprobe_volume_info.hh" + +FRAGMENT_SHADER_CREATE_INFO(eevee_display_lightprobe_volume) + #include "draw_view_lib.glsl" #include "eevee_spherical_harmonics_lib.glsl" #include "gpu_shader_math_matrix_lib.glsl" diff --git a/source/blender/draw/engines/eevee_next/shaders/eevee_display_lightprobe_volume_vert.glsl b/source/blender/draw/engines/eevee_next/shaders/eevee_display_lightprobe_volume_vert.glsl index f3eb95f255c..9e28118cfc3 100644 --- a/source/blender/draw/engines/eevee_next/shaders/eevee_display_lightprobe_volume_vert.glsl +++ b/source/blender/draw/engines/eevee_next/shaders/eevee_display_lightprobe_volume_vert.glsl @@ -2,6 +2,10 @@ * * SPDX-License-Identifier: GPL-2.0-or-later */ +#include "infos/eevee_lightprobe_volume_info.hh" + +VERTEX_SHADER_CREATE_INFO(eevee_display_lightprobe_volume) + #include "draw_view_lib.glsl" #include "eevee_lightprobe_lib.glsl" diff --git a/source/blender/draw/engines/eevee_next/shaders/eevee_film_comp.glsl b/source/blender/draw/engines/eevee_next/shaders/eevee_film_comp.glsl index 414546b0a3c..22fc3c56e99 100644 --- a/source/blender/draw/engines/eevee_next/shaders/eevee_film_comp.glsl +++ b/source/blender/draw/engines/eevee_next/shaders/eevee_film_comp.glsl @@ -2,6 +2,10 @@ * * SPDX-License-Identifier: GPL-2.0-or-later */ +#include "infos/eevee_film_info.hh" + +COMPUTE_SHADER_CREATE_INFO(eevee_film_comp) + #include "eevee_film_lib.glsl" void main() diff --git a/source/blender/draw/engines/eevee_next/shaders/eevee_film_copy_frag.glsl b/source/blender/draw/engines/eevee_next/shaders/eevee_film_copy_frag.glsl index 9fcaf5137fc..eaa92f4aef3 100644 --- a/source/blender/draw/engines/eevee_next/shaders/eevee_film_copy_frag.glsl +++ b/source/blender/draw/engines/eevee_next/shaders/eevee_film_copy_frag.glsl @@ -11,6 +11,11 @@ * * Code is duplicated here to ensure that the compiler will pass read/write resource checks. */ + +#include "infos/eevee_film_info.hh" + +FRAGMENT_SHADER_CREATE_INFO(eevee_film_copy_frag) + #include "common_math_lib.glsl" #include "draw_view_lib.glsl" diff --git a/source/blender/draw/engines/eevee_next/shaders/eevee_film_cryptomatte_post_comp.glsl b/source/blender/draw/engines/eevee_next/shaders/eevee_film_cryptomatte_post_comp.glsl index 853d103be48..681c6f7aeb2 100644 --- a/source/blender/draw/engines/eevee_next/shaders/eevee_film_cryptomatte_post_comp.glsl +++ b/source/blender/draw/engines/eevee_next/shaders/eevee_film_cryptomatte_post_comp.glsl @@ -2,6 +2,10 @@ * * SPDX-License-Identifier: GPL-2.0-or-later */ +#include "infos/eevee_film_info.hh" + +COMPUTE_SHADER_CREATE_INFO(eevee_film_cryptomatte_post) + #include "gpu_shader_math_base_lib.glsl" #define CRYPTOMATTE_LEVELS_MAX 16 diff --git a/source/blender/draw/engines/eevee_next/shaders/eevee_film_frag.glsl b/source/blender/draw/engines/eevee_next/shaders/eevee_film_frag.glsl index c6c228064a9..c60273cd5bb 100644 --- a/source/blender/draw/engines/eevee_next/shaders/eevee_film_frag.glsl +++ b/source/blender/draw/engines/eevee_next/shaders/eevee_film_frag.glsl @@ -2,6 +2,10 @@ * * SPDX-License-Identifier: GPL-2.0-or-later */ +#include "infos/eevee_film_info.hh" + +FRAGMENT_SHADER_CREATE_INFO(eevee_film_frag) + #include "eevee_film_lib.glsl" void main() diff --git a/source/blender/draw/engines/eevee_next/shaders/eevee_film_lib.glsl b/source/blender/draw/engines/eevee_next/shaders/eevee_film_lib.glsl index b5e91d67e7a..d0d5fe7c340 100644 --- a/source/blender/draw/engines/eevee_next/shaders/eevee_film_lib.glsl +++ b/source/blender/draw/engines/eevee_next/shaders/eevee_film_lib.glsl @@ -8,6 +8,10 @@ * Film accumulation utils functions. */ +#include "infos/eevee_film_info.hh" + +SHADER_LIBRARY_CREATE_INFO(eevee_film) + #include "draw_math_geom_lib.glsl" #include "draw_view_lib.glsl" #include "eevee_colorspace_lib.glsl" diff --git a/source/blender/draw/engines/eevee_next/shaders/eevee_film_pass_convert_comp.glsl b/source/blender/draw/engines/eevee_next/shaders/eevee_film_pass_convert_comp.glsl index 533d0b46676..dbee00baf24 100644 --- a/source/blender/draw/engines/eevee_next/shaders/eevee_film_pass_convert_comp.glsl +++ b/source/blender/draw/engines/eevee_next/shaders/eevee_film_pass_convert_comp.glsl @@ -6,6 +6,10 @@ * output passes covert the entire display extent even when border rendering because that's what * the compositor expects, so areas outside of the border are zeroed. */ +#include "infos/eevee_film_info.hh" + +COMPUTE_SHADER_CREATE_INFO(eevee_film_pass_convert_color) + void main() { ivec2 texel = ivec2(gl_GlobalInvocationID.xy); diff --git a/source/blender/draw/engines/eevee_next/shaders/eevee_gbuffer_lib.glsl b/source/blender/draw/engines/eevee_next/shaders/eevee_gbuffer_lib.glsl index f0a8371a98a..318d90f6d72 100644 --- a/source/blender/draw/engines/eevee_next/shaders/eevee_gbuffer_lib.glsl +++ b/source/blender/draw/engines/eevee_next/shaders/eevee_gbuffer_lib.glsl @@ -20,6 +20,8 @@ * without dealing with none-closures. */ +#include "infos/eevee_common_info.hh" + #include "gpu_shader_codegen_lib.glsl" #include "gpu_shader_math_vector_lib.glsl" #include "gpu_shader_utildefines_lib.glsl" diff --git a/source/blender/draw/engines/eevee_next/shaders/eevee_geom_curves_vert.glsl b/source/blender/draw/engines/eevee_next/shaders/eevee_geom_curves_vert.glsl index f6ad781cf15..d294c030da4 100644 --- a/source/blender/draw/engines/eevee_next/shaders/eevee_geom_curves_vert.glsl +++ b/source/blender/draw/engines/eevee_next/shaders/eevee_geom_curves_vert.glsl @@ -2,9 +2,14 @@ * * SPDX-License-Identifier: GPL-2.0-or-later */ +#include "infos/eevee_material_info.hh" + +VERTEX_SHADER_CREATE_INFO(eevee_clip_plane) +VERTEX_SHADER_CREATE_INFO(eevee_geom_curves) + #include "common_hair_lib.glsl" /* TODO rename to curve. */ #include "draw_model_lib.glsl" -#include "eevee_attributes_lib.glsl" +#include "eevee_attributes_curves_lib.glsl" #include "eevee_nodetree_lib.glsl" #include "eevee_surf_lib.glsl" #include "eevee_velocity_lib.glsl" diff --git a/source/blender/draw/engines/eevee_next/shaders/eevee_geom_gpencil_vert.glsl b/source/blender/draw/engines/eevee_next/shaders/eevee_geom_gpencil_vert.glsl index e66b65a1711..880e571f5d4 100644 --- a/source/blender/draw/engines/eevee_next/shaders/eevee_geom_gpencil_vert.glsl +++ b/source/blender/draw/engines/eevee_next/shaders/eevee_geom_gpencil_vert.glsl @@ -2,10 +2,15 @@ * * SPDX-License-Identifier: GPL-2.0-or-later */ +#include "infos/eevee_material_info.hh" + +VERTEX_SHADER_CREATE_INFO(eevee_clip_plane) +VERTEX_SHADER_CREATE_INFO(eevee_geom_gpencil) + #include "draw_model_lib.glsl" /* Grease pencil includes commmon_view_lib. */ // #include "common_gpencil_lib.glsl" -#include "eevee_attributes_lib.glsl" +#include "eevee_attributes_gpencil_lib.glsl" #include "eevee_surf_lib.glsl" #include "eevee_velocity_lib.glsl" diff --git a/source/blender/draw/engines/eevee_next/shaders/eevee_geom_mesh_vert.glsl b/source/blender/draw/engines/eevee_next/shaders/eevee_geom_mesh_vert.glsl index 60e90a46792..de87601aeb4 100644 --- a/source/blender/draw/engines/eevee_next/shaders/eevee_geom_mesh_vert.glsl +++ b/source/blender/draw/engines/eevee_next/shaders/eevee_geom_mesh_vert.glsl @@ -2,8 +2,13 @@ * * SPDX-License-Identifier: GPL-2.0-or-later */ +#include "infos/eevee_material_info.hh" + +VERTEX_SHADER_CREATE_INFO(eevee_clip_plane) +VERTEX_SHADER_CREATE_INFO(eevee_geom_mesh) + #include "draw_model_lib.glsl" -#include "eevee_attributes_lib.glsl" +#include "eevee_attributes_mesh_lib.glsl" #include "eevee_nodetree_lib.glsl" #include "eevee_surf_lib.glsl" #include "eevee_velocity_lib.glsl" diff --git a/source/blender/draw/engines/eevee_next/shaders/eevee_geom_point_cloud_vert.glsl b/source/blender/draw/engines/eevee_next/shaders/eevee_geom_point_cloud_vert.glsl index 9af19599432..ba4a9cc067d 100644 --- a/source/blender/draw/engines/eevee_next/shaders/eevee_geom_point_cloud_vert.glsl +++ b/source/blender/draw/engines/eevee_next/shaders/eevee_geom_point_cloud_vert.glsl @@ -2,9 +2,14 @@ * * SPDX-License-Identifier: GPL-2.0-or-later */ -#include "common_pointcloud_lib.glsl" +#include "infos/eevee_material_info.hh" + +VERTEX_SHADER_CREATE_INFO(eevee_clip_plane) +VERTEX_SHADER_CREATE_INFO(eevee_geom_point_cloud) + #include "draw_model_lib.glsl" -#include "eevee_attributes_lib.glsl" +#include "draw_pointcloud_lib.glsl" +#include "eevee_attributes_point_cloud_lib.glsl" #include "eevee_nodetree_lib.glsl" #include "eevee_surf_lib.glsl" #include "eevee_velocity_lib.glsl" diff --git a/source/blender/draw/engines/eevee_next/shaders/eevee_geom_volume_vert.glsl b/source/blender/draw/engines/eevee_next/shaders/eevee_geom_volume_vert.glsl index 34772428f4b..d9f5f0e19d2 100644 --- a/source/blender/draw/engines/eevee_next/shaders/eevee_geom_volume_vert.glsl +++ b/source/blender/draw/engines/eevee_next/shaders/eevee_geom_volume_vert.glsl @@ -2,7 +2,11 @@ * * SPDX-License-Identifier: GPL-2.0-or-later */ -#include "common_pointcloud_lib.glsl" +#include "infos/eevee_material_info.hh" + +VERTEX_SHADER_CREATE_INFO(eevee_clip_plane) +VERTEX_SHADER_CREATE_INFO(eevee_geom_volume) + #include "draw_model_lib.glsl" #include "eevee_surf_lib.glsl" diff --git a/source/blender/draw/engines/eevee_next/shaders/eevee_geom_world_vert.glsl b/source/blender/draw/engines/eevee_next/shaders/eevee_geom_world_vert.glsl index 367d3326f45..e27b52a290c 100644 --- a/source/blender/draw/engines/eevee_next/shaders/eevee_geom_world_vert.glsl +++ b/source/blender/draw/engines/eevee_next/shaders/eevee_geom_world_vert.glsl @@ -6,6 +6,10 @@ * Custom full-screen triangle with placeholders varyings. */ +#include "infos/eevee_material_info.hh" + +VERTEX_SHADER_CREATE_INFO(eevee_geom_world) + #include "draw_view_lib.glsl" #include "eevee_nodetree_lib.glsl" #include "eevee_surf_lib.glsl" diff --git a/source/blender/draw/engines/eevee_next/shaders/eevee_hiz_debug_frag.glsl b/source/blender/draw/engines/eevee_next/shaders/eevee_hiz_debug_frag.glsl index 80b3739aac1..95012b3365b 100644 --- a/source/blender/draw/engines/eevee_next/shaders/eevee_hiz_debug_frag.glsl +++ b/source/blender/draw/engines/eevee_next/shaders/eevee_hiz_debug_frag.glsl @@ -7,6 +7,10 @@ * Output red if above any max pixels, blue otherwise. */ +#include "infos/eevee_hiz_info.hh" + +FRAGMENT_SHADER_CREATE_INFO(eevee_hiz_debug) + void main() { ivec2 texel = ivec2(gl_FragCoord.xy); diff --git a/source/blender/draw/engines/eevee_next/shaders/eevee_hiz_update_comp.glsl b/source/blender/draw/engines/eevee_next/shaders/eevee_hiz_update_comp.glsl index 2e99dfdf40b..fc6e17971bc 100644 --- a/source/blender/draw/engines/eevee_next/shaders/eevee_hiz_update_comp.glsl +++ b/source/blender/draw/engines/eevee_next/shaders/eevee_hiz_update_comp.glsl @@ -17,6 +17,10 @@ * downsample to max level. */ +#include "infos/eevee_hiz_info.hh" + +COMPUTE_SHADER_CREATE_INFO(eevee_hiz_update) + #include "gpu_shader_math_vector_lib.glsl" shared float local_depths[gl_WorkGroupSize.y][gl_WorkGroupSize.x]; diff --git a/source/blender/draw/engines/eevee_next/shaders/eevee_horizon_denoise_comp.glsl b/source/blender/draw/engines/eevee_next/shaders/eevee_horizon_denoise_comp.glsl index 0e0cc1c7d50..7a0505c9002 100644 --- a/source/blender/draw/engines/eevee_next/shaders/eevee_horizon_denoise_comp.glsl +++ b/source/blender/draw/engines/eevee_next/shaders/eevee_horizon_denoise_comp.glsl @@ -2,6 +2,10 @@ * * SPDX-License-Identifier: GPL-2.0-or-later */ +#include "infos/eevee_tracing_info.hh" + +COMPUTE_SHADER_CREATE_INFO(eevee_horizon_denoise) + #include "draw_view_lib.glsl" #include "eevee_filter_lib.glsl" #include "eevee_sampling_lib.glsl" diff --git a/source/blender/draw/engines/eevee_next/shaders/eevee_horizon_resolve_comp.glsl b/source/blender/draw/engines/eevee_next/shaders/eevee_horizon_resolve_comp.glsl index d8c25126a7c..ab1287d3985 100644 --- a/source/blender/draw/engines/eevee_next/shaders/eevee_horizon_resolve_comp.glsl +++ b/source/blender/draw/engines/eevee_next/shaders/eevee_horizon_resolve_comp.glsl @@ -2,6 +2,10 @@ * * SPDX-License-Identifier: GPL-2.0-or-later */ +#include "infos/eevee_tracing_info.hh" + +COMPUTE_SHADER_CREATE_INFO(eevee_horizon_resolve) + #include "draw_view_lib.glsl" #include "eevee_closure_lib.glsl" #include "eevee_filter_lib.glsl" diff --git a/source/blender/draw/engines/eevee_next/shaders/eevee_horizon_scan_comp.glsl b/source/blender/draw/engines/eevee_next/shaders/eevee_horizon_scan_comp.glsl index 47f2d9f4055..31e46588b5f 100644 --- a/source/blender/draw/engines/eevee_next/shaders/eevee_horizon_scan_comp.glsl +++ b/source/blender/draw/engines/eevee_next/shaders/eevee_horizon_scan_comp.glsl @@ -2,6 +2,10 @@ * * SPDX-License-Identifier: GPL-2.0-or-later */ +#include "infos/eevee_tracing_info.hh" + +COMPUTE_SHADER_CREATE_INFO(eevee_horizon_scan) + #include "draw_view_lib.glsl" #include "eevee_horizon_scan_eval_lib.glsl" #include "eevee_sampling_lib.glsl" diff --git a/source/blender/draw/engines/eevee_next/shaders/eevee_horizon_scan_eval_lib.glsl b/source/blender/draw/engines/eevee_next/shaders/eevee_horizon_scan_eval_lib.glsl index 20668e12490..ab8b3ae8a40 100644 --- a/source/blender/draw/engines/eevee_next/shaders/eevee_horizon_scan_eval_lib.glsl +++ b/source/blender/draw/engines/eevee_next/shaders/eevee_horizon_scan_eval_lib.glsl @@ -15,6 +15,10 @@ * defined. */ +#include "infos/eevee_tracing_info.hh" + +SHADER_LIBRARY_CREATE_INFO(eevee_horizon_scan) + #include "common_shape_lib.glsl" #include "draw_view_lib.glsl" #include "eevee_bxdf_lib.glsl" diff --git a/source/blender/draw/engines/eevee_next/shaders/eevee_horizon_setup_comp.glsl b/source/blender/draw/engines/eevee_next/shaders/eevee_horizon_setup_comp.glsl index 7c917550208..fa30c73c4df 100644 --- a/source/blender/draw/engines/eevee_next/shaders/eevee_horizon_setup_comp.glsl +++ b/source/blender/draw/engines/eevee_next/shaders/eevee_horizon_setup_comp.glsl @@ -8,6 +8,10 @@ * Dispatched as one thread for each trace resolution pixel. */ +#include "infos/eevee_tracing_info.hh" + +COMPUTE_SHADER_CREATE_INFO(eevee_horizon_setup) + #include "draw_view_lib.glsl" #include "eevee_colorspace_lib.glsl" #include "eevee_gbuffer_lib.glsl" diff --git a/source/blender/draw/engines/eevee_next/shaders/eevee_light_culling_debug_frag.glsl b/source/blender/draw/engines/eevee_next/shaders/eevee_light_culling_debug_frag.glsl index b7a1c1ee00c..0a22c29ae39 100644 --- a/source/blender/draw/engines/eevee_next/shaders/eevee_light_culling_debug_frag.glsl +++ b/source/blender/draw/engines/eevee_next/shaders/eevee_light_culling_debug_frag.glsl @@ -8,6 +8,10 @@ * pass is not conservative enough). */ +#include "infos/eevee_light_culling_info.hh" + +FRAGMENT_SHADER_CREATE_INFO(eevee_light_culling_debug) + #include "draw_view_lib.glsl" #include "eevee_light_iter_lib.glsl" #include "eevee_light_lib.glsl" diff --git a/source/blender/draw/engines/eevee_next/shaders/eevee_light_culling_select_comp.glsl b/source/blender/draw/engines/eevee_next/shaders/eevee_light_culling_select_comp.glsl index 94c38b1c213..da2d087921a 100644 --- a/source/blender/draw/engines/eevee_next/shaders/eevee_light_culling_select_comp.glsl +++ b/source/blender/draw/engines/eevee_next/shaders/eevee_light_culling_select_comp.glsl @@ -6,6 +6,10 @@ * Select the visible items inside the active view and put them inside the sorting buffer. */ +#include "infos/eevee_light_culling_info.hh" + +COMPUTE_SHADER_CREATE_INFO(eevee_light_culling_select) + #include "draw_intersect_lib.glsl" #include "draw_math_geom_lib.glsl" #include "draw_view_lib.glsl" diff --git a/source/blender/draw/engines/eevee_next/shaders/eevee_light_culling_sort_comp.glsl b/source/blender/draw/engines/eevee_next/shaders/eevee_light_culling_sort_comp.glsl index 5302d24a795..5329525beec 100644 --- a/source/blender/draw/engines/eevee_next/shaders/eevee_light_culling_sort_comp.glsl +++ b/source/blender/draw/engines/eevee_next/shaders/eevee_light_culling_sort_comp.glsl @@ -8,6 +8,10 @@ * One thread processes one Light entity. */ +#include "infos/eevee_light_culling_info.hh" + +COMPUTE_SHADER_CREATE_INFO(eevee_light_culling_sort) + #include "gpu_shader_math_base_lib.glsl" shared float zdists_cache[gl_WorkGroupSize.x]; diff --git a/source/blender/draw/engines/eevee_next/shaders/eevee_light_culling_tile_comp.glsl b/source/blender/draw/engines/eevee_next/shaders/eevee_light_culling_tile_comp.glsl index 991d40dccbd..fcb6393676d 100644 --- a/source/blender/draw/engines/eevee_next/shaders/eevee_light_culling_tile_comp.glsl +++ b/source/blender/draw/engines/eevee_next/shaders/eevee_light_culling_tile_comp.glsl @@ -8,6 +8,10 @@ * Dispatch one thread per word. */ +#include "infos/eevee_light_culling_info.hh" + +COMPUTE_SHADER_CREATE_INFO(eevee_light_culling_tile) + #include "common_intersect_lib.glsl" #include "draw_view_lib.glsl" #include "eevee_light_iter_lib.glsl" diff --git a/source/blender/draw/engines/eevee_next/shaders/eevee_light_culling_zbin_comp.glsl b/source/blender/draw/engines/eevee_next/shaders/eevee_light_culling_zbin_comp.glsl index 2a5bfe8e50a..d476b1988e3 100644 --- a/source/blender/draw/engines/eevee_next/shaders/eevee_light_culling_zbin_comp.glsl +++ b/source/blender/draw/engines/eevee_next/shaders/eevee_light_culling_zbin_comp.glsl @@ -8,6 +8,10 @@ * For this reason, we only dispatch 1 thread group. */ +#include "infos/eevee_light_culling_info.hh" + +COMPUTE_SHADER_CREATE_INFO(eevee_light_culling_zbin) + #include "draw_view_lib.glsl" #include "eevee_light_iter_lib.glsl" #include "gpu_shader_math_base_lib.glsl" diff --git a/source/blender/draw/engines/eevee_next/shaders/eevee_light_eval_lib.glsl b/source/blender/draw/engines/eevee_next/shaders/eevee_light_eval_lib.glsl index 4738b7a0f52..89fa8ead118 100644 --- a/source/blender/draw/engines/eevee_next/shaders/eevee_light_eval_lib.glsl +++ b/source/blender/draw/engines/eevee_next/shaders/eevee_light_eval_lib.glsl @@ -15,6 +15,10 @@ * - utility_tx */ +#include "infos/eevee_common_info.hh" + +SHADER_LIBRARY_CREATE_INFO(eevee_light_data) + #include "eevee_bxdf_lib.glsl" #include "eevee_closure_lib.glsl" #include "eevee_light_lib.glsl" @@ -27,6 +31,8 @@ /* If using compute, the shader should define its own pixel. */ #if !defined(PIXEL) && defined(GPU_FRAGMENT_SHADER) # define PIXEL gl_FragCoord.xy +#elif defined(GPU_LIBRARY_SHADER) +# define PIXEL vec2(0) #endif #if !defined(LIGHT_CLOSURE_EVAL_COUNT) diff --git a/source/blender/draw/engines/eevee_next/shaders/eevee_light_iter_lib.glsl b/source/blender/draw/engines/eevee_next/shaders/eevee_light_iter_lib.glsl index 5e87dc7fdb1..2041cf0736c 100644 --- a/source/blender/draw/engines/eevee_next/shaders/eevee_light_iter_lib.glsl +++ b/source/blender/draw/engines/eevee_next/shaders/eevee_light_iter_lib.glsl @@ -4,6 +4,8 @@ #pragma once +#include "gpu_glsl_cpp_stubs.hh" + uint bitfield_mask(uint bit_width, uint bit_min) { /* Cannot bit shift more than 31 positions. */ diff --git a/source/blender/draw/engines/eevee_next/shaders/eevee_light_shadow_setup_comp.glsl b/source/blender/draw/engines/eevee_next/shaders/eevee_light_shadow_setup_comp.glsl index 0b7a0370699..845d4caa139 100644 --- a/source/blender/draw/engines/eevee_next/shaders/eevee_light_shadow_setup_comp.glsl +++ b/source/blender/draw/engines/eevee_next/shaders/eevee_light_shadow_setup_comp.glsl @@ -7,6 +7,10 @@ * Dispatched one thread per light. */ +#include "infos/eevee_light_culling_info.hh" + +COMPUTE_SHADER_CREATE_INFO(eevee_light_shadow_setup) + #include "eevee_sampling_lib.glsl" #include "gpu_shader_math_fast_lib.glsl" #include "gpu_shader_math_matrix_lib.glsl" diff --git a/source/blender/draw/engines/eevee_next/shaders/eevee_lightprobe_lib.glsl b/source/blender/draw/engines/eevee_next/shaders/eevee_lightprobe_lib.glsl index 8577777affb..580f94d2caf 100644 --- a/source/blender/draw/engines/eevee_next/shaders/eevee_lightprobe_lib.glsl +++ b/source/blender/draw/engines/eevee_next/shaders/eevee_lightprobe_lib.glsl @@ -4,6 +4,20 @@ #pragma once +#include "infos/eevee_lightprobe_sphere_info.hh" + +/* TODO(fclem): Pass the lightprobe_sphere_buf around and avoid relying on interface. + * Currently in conflict with eevee_lightprobe_volume_load. */ +#ifndef SPHERE_PROBE_SELECT +SHADER_LIBRARY_CREATE_INFO(eevee_lightprobe_sphere_data) +#endif +SHADER_LIBRARY_CREATE_INFO(eevee_lightprobe_planar_data) +/* TODO(fclem): Pass the atlas texture around and avoid relying on interface. + * Currently in conflict with eevee_lightprobe_volume_load. */ +#ifndef IRRADIANCE_GRID_UPLOAD +SHADER_LIBRARY_CREATE_INFO(eevee_volume_probe_data) +#endif + #include "gpu_shader_math_vector_lib.glsl" #include "gpu_shader_utildefines_lib.glsl" diff --git a/source/blender/draw/engines/eevee_next/shaders/eevee_lightprobe_sphere_convolve_comp.glsl b/source/blender/draw/engines/eevee_next/shaders/eevee_lightprobe_sphere_convolve_comp.glsl index 9c01e49909e..ab742b183b3 100644 --- a/source/blender/draw/engines/eevee_next/shaders/eevee_lightprobe_sphere_convolve_comp.glsl +++ b/source/blender/draw/engines/eevee_next/shaders/eevee_lightprobe_sphere_convolve_comp.glsl @@ -4,6 +4,10 @@ /* Shader to convert cube-map to octahedral projection. */ +#include "infos/eevee_lightprobe_sphere_info.hh" + +COMPUTE_SHADER_CREATE_INFO(eevee_lightprobe_sphere_convolve) + #include "eevee_lightprobe_sphere_mapping_lib.glsl" #include "eevee_sampling_lib.glsl" #include "gpu_shader_math_base_lib.glsl" diff --git a/source/blender/draw/engines/eevee_next/shaders/eevee_lightprobe_sphere_irradiance_comp.glsl b/source/blender/draw/engines/eevee_next/shaders/eevee_lightprobe_sphere_irradiance_comp.glsl index 63e4c4f4247..02e94838a8b 100644 --- a/source/blender/draw/engines/eevee_next/shaders/eevee_lightprobe_sphere_irradiance_comp.glsl +++ b/source/blender/draw/engines/eevee_next/shaders/eevee_lightprobe_sphere_irradiance_comp.glsl @@ -5,6 +5,10 @@ /* Sum all spherical harmonic coefficients extracting during remapping to octahedral map. * Dispatch only one thread-group that sums. */ +#include "infos/eevee_lightprobe_sphere_info.hh" + +COMPUTE_SHADER_CREATE_INFO(eevee_lightprobe_sphere_irradiance) + #include "eevee_lightprobe_sphere_lib.glsl" #include "eevee_lightprobe_sphere_mapping_lib.glsl" #include "eevee_sampling_lib.glsl" diff --git a/source/blender/draw/engines/eevee_next/shaders/eevee_lightprobe_sphere_lib.glsl b/source/blender/draw/engines/eevee_next/shaders/eevee_lightprobe_sphere_lib.glsl index 0ef40d59590..dbd799841f8 100644 --- a/source/blender/draw/engines/eevee_next/shaders/eevee_lightprobe_sphere_lib.glsl +++ b/source/blender/draw/engines/eevee_next/shaders/eevee_lightprobe_sphere_lib.glsl @@ -4,6 +4,14 @@ #pragma once +#include "infos/eevee_lightprobe_sphere_info.hh" + +/* TODO(fclem): Pass the lightprobe_sphere_buf around and avoid relying on interface. + * Currently in conflict with eevee_lightprobe_volume_load. */ +#ifndef SPHERE_PROBE_SELECT +SHADER_LIBRARY_CREATE_INFO(eevee_lightprobe_sphere_data) +#endif + #include "eevee_lightprobe_sphere_mapping_lib.glsl" #include "eevee_octahedron_lib.glsl" #include "eevee_spherical_harmonics_lib.glsl" diff --git a/source/blender/draw/engines/eevee_next/shaders/eevee_lightprobe_sphere_mapping_lib.glsl b/source/blender/draw/engines/eevee_next/shaders/eevee_lightprobe_sphere_mapping_lib.glsl index 7cd0d3b64c7..db03936284e 100644 --- a/source/blender/draw/engines/eevee_next/shaders/eevee_lightprobe_sphere_mapping_lib.glsl +++ b/source/blender/draw/engines/eevee_next/shaders/eevee_lightprobe_sphere_mapping_lib.glsl @@ -4,6 +4,8 @@ #pragma once +#include "infos/eevee_common_info.hh" + #include "eevee_octahedron_lib.glsl" #include "gpu_shader_math_base_lib.glsl" #include "gpu_shader_math_fast_lib.glsl" diff --git a/source/blender/draw/engines/eevee_next/shaders/eevee_lightprobe_sphere_remap_comp.glsl b/source/blender/draw/engines/eevee_next/shaders/eevee_lightprobe_sphere_remap_comp.glsl index fa17055a1fd..798b1602502 100644 --- a/source/blender/draw/engines/eevee_next/shaders/eevee_lightprobe_sphere_remap_comp.glsl +++ b/source/blender/draw/engines/eevee_next/shaders/eevee_lightprobe_sphere_remap_comp.glsl @@ -4,6 +4,10 @@ /* Shader to convert cube-map to octahedral projection. */ +#include "infos/eevee_lightprobe_sphere_info.hh" + +COMPUTE_SHADER_CREATE_INFO(eevee_lightprobe_sphere_remap) + #include "eevee_colorspace_lib.glsl" #include "eevee_lightprobe_sphere_mapping_lib.glsl" #include "eevee_spherical_harmonics_lib.glsl" diff --git a/source/blender/draw/engines/eevee_next/shaders/eevee_lightprobe_sphere_select_comp.glsl b/source/blender/draw/engines/eevee_next/shaders/eevee_lightprobe_sphere_select_comp.glsl index f80c46ab64c..7c89a7218fa 100644 --- a/source/blender/draw/engines/eevee_next/shaders/eevee_lightprobe_sphere_select_comp.glsl +++ b/source/blender/draw/engines/eevee_next/shaders/eevee_lightprobe_sphere_select_comp.glsl @@ -7,6 +7,14 @@ * irradiance cache from each spherical probe location except for the world probe. */ +#include "infos/eevee_lightprobe_sphere_info.hh" + +#ifdef GLSL_CPP_STUBS +# define SPHERE_PROBE_SELECT +# undef SPHERE_PROBE +#endif +COMPUTE_SHADER_CREATE_INFO(eevee_lightprobe_sphere_select) + #include "eevee_lightprobe_sphere_lib.glsl" #include "eevee_lightprobe_volume_eval_lib.glsl" diff --git a/source/blender/draw/engines/eevee_next/shaders/eevee_lightprobe_sphere_sunlight_comp.glsl b/source/blender/draw/engines/eevee_next/shaders/eevee_lightprobe_sphere_sunlight_comp.glsl index 91a851acd0f..504933aa497 100644 --- a/source/blender/draw/engines/eevee_next/shaders/eevee_lightprobe_sphere_sunlight_comp.glsl +++ b/source/blender/draw/engines/eevee_next/shaders/eevee_lightprobe_sphere_sunlight_comp.glsl @@ -5,6 +5,10 @@ /* Sum all Suns extracting during remapping to octahedral map. * Dispatch only one thread-group that sums. */ +#include "infos/eevee_lightprobe_sphere_info.hh" + +COMPUTE_SHADER_CREATE_INFO(eevee_lightprobe_sphere_sunlight) + #include "eevee_lightprobe_sphere_lib.glsl" #include "eevee_lightprobe_sphere_mapping_lib.glsl" #include "eevee_sampling_lib.glsl" diff --git a/source/blender/draw/engines/eevee_next/shaders/eevee_lightprobe_volume_bounds_comp.glsl b/source/blender/draw/engines/eevee_next/shaders/eevee_lightprobe_volume_bounds_comp.glsl index 90e564cc428..7b8dfcf0ab2 100644 --- a/source/blender/draw/engines/eevee_next/shaders/eevee_lightprobe_volume_bounds_comp.glsl +++ b/source/blender/draw/engines/eevee_next/shaders/eevee_lightprobe_volume_bounds_comp.glsl @@ -9,6 +9,10 @@ * - capture_info_buf */ +#include "infos/eevee_lightprobe_volume_info.hh" + +COMPUTE_SHADER_CREATE_INFO(eevee_lightprobe_volume_bounds) + #include "draw_intersect_lib.glsl" #include "eevee_light_iter_lib.glsl" #include "eevee_shadow_tilemap_lib.glsl" diff --git a/source/blender/draw/engines/eevee_next/shaders/eevee_lightprobe_volume_eval_lib.glsl b/source/blender/draw/engines/eevee_next/shaders/eevee_lightprobe_volume_eval_lib.glsl index d76b19e5a5a..fb1be47f393 100644 --- a/source/blender/draw/engines/eevee_next/shaders/eevee_lightprobe_volume_eval_lib.glsl +++ b/source/blender/draw/engines/eevee_next/shaders/eevee_lightprobe_volume_eval_lib.glsl @@ -82,7 +82,7 @@ vec3 lightprobe_volume_grid_bias_sample_coord(VolumeProbeData grid_data, for (int i = 0; i < 8; i++) { ivec3 sample_position = lightprobe_volume_grid_cell_corner(i); - vec3 trilinear = select(1.0 - cell_fract, cell_fract, bvec3(sample_position)); + vec3 trilinear = select(1.0 - cell_fract, cell_fract, greaterThan(sample_position, ivec3(0))); float positional_weight = trilinear.x * trilinear.y * trilinear.z; float len; diff --git a/source/blender/draw/engines/eevee_next/shaders/eevee_lightprobe_volume_load_comp.glsl b/source/blender/draw/engines/eevee_next/shaders/eevee_lightprobe_volume_load_comp.glsl index ad8760cb12d..3810bae00ad 100644 --- a/source/blender/draw/engines/eevee_next/shaders/eevee_lightprobe_volume_load_comp.glsl +++ b/source/blender/draw/engines/eevee_next/shaders/eevee_lightprobe_volume_load_comp.glsl @@ -9,6 +9,14 @@ * Each thread group will load a brick worth of data and add the needed padding texels. */ +#include "infos/eevee_lightprobe_volume_info.hh" + +#ifdef GLSL_CPP_STUBS +# define IRRADIANCE_GRID_UPLOAD +#endif + +COMPUTE_SHADER_CREATE_INFO(eevee_lightprobe_volume_load) + #include "eevee_lightprobe_volume_eval_lib.glsl" #include "eevee_spherical_harmonics_lib.glsl" #include "gpu_shader_math_base_lib.glsl" diff --git a/source/blender/draw/engines/eevee_next/shaders/eevee_lightprobe_volume_offset_comp.glsl b/source/blender/draw/engines/eevee_next/shaders/eevee_lightprobe_volume_offset_comp.glsl index e75d5275ed3..44b54361dca 100644 --- a/source/blender/draw/engines/eevee_next/shaders/eevee_lightprobe_volume_offset_comp.glsl +++ b/source/blender/draw/engines/eevee_next/shaders/eevee_lightprobe_volume_offset_comp.glsl @@ -10,6 +10,10 @@ * Dispatched as 1 thread per irradiance probe sample. */ +#include "infos/eevee_lightprobe_volume_info.hh" + +COMPUTE_SHADER_CREATE_INFO(eevee_lightprobe_volume_offset) + #include "eevee_lightprobe_lib.glsl" #include "eevee_surfel_list_lib.glsl" diff --git a/source/blender/draw/engines/eevee_next/shaders/eevee_lightprobe_volume_ray_comp.glsl b/source/blender/draw/engines/eevee_next/shaders/eevee_lightprobe_volume_ray_comp.glsl index 92439da5822..6599701325e 100644 --- a/source/blender/draw/engines/eevee_next/shaders/eevee_lightprobe_volume_ray_comp.glsl +++ b/source/blender/draw/engines/eevee_next/shaders/eevee_lightprobe_volume_ray_comp.glsl @@ -10,6 +10,10 @@ * Dispatched as 1 thread per irradiance probe sample. */ +#include "infos/eevee_lightprobe_volume_info.hh" + +COMPUTE_SHADER_CREATE_INFO(eevee_lightprobe_volume_ray) + #include "eevee_lightprobe_lib.glsl" #include "eevee_lightprobe_sphere_lib.glsl" #include "eevee_spherical_harmonics_lib.glsl" diff --git a/source/blender/draw/engines/eevee_next/shaders/eevee_lightprobe_volume_world_comp.glsl b/source/blender/draw/engines/eevee_next/shaders/eevee_lightprobe_volume_world_comp.glsl index d8963b5080a..2135401e7cb 100644 --- a/source/blender/draw/engines/eevee_next/shaders/eevee_lightprobe_volume_world_comp.glsl +++ b/source/blender/draw/engines/eevee_next/shaders/eevee_lightprobe_volume_world_comp.glsl @@ -8,6 +8,10 @@ * The whole thread group will load the same data and write a brick worth of data. */ +#include "infos/eevee_lightprobe_volume_info.hh" + +COMPUTE_SHADER_CREATE_INFO(eevee_lightprobe_volume_world) + #include "eevee_spherical_harmonics_lib.glsl" void atlas_store(vec4 sh_coefficient, ivec2 atlas_coord, int layer) diff --git a/source/blender/draw/engines/eevee_next/shaders/eevee_lookdev_display_frag.glsl b/source/blender/draw/engines/eevee_next/shaders/eevee_lookdev_display_frag.glsl index 2cc89b4ff18..0636d453b93 100644 --- a/source/blender/draw/engines/eevee_next/shaders/eevee_lookdev_display_frag.glsl +++ b/source/blender/draw/engines/eevee_next/shaders/eevee_lookdev_display_frag.glsl @@ -2,6 +2,10 @@ * * SPDX-License-Identifier: GPL-2.0-or-later */ +#include "infos/eevee_lookdev_info.hh" + +FRAGMENT_SHADER_CREATE_INFO(eevee_lookdev_display) + void main() { vec2 texture_size = vec2(textureSize(metallic_tx, 0)); diff --git a/source/blender/draw/engines/eevee_next/shaders/eevee_lookdev_display_vert.glsl b/source/blender/draw/engines/eevee_next/shaders/eevee_lookdev_display_vert.glsl index ee633f10650..270b72d7707 100644 --- a/source/blender/draw/engines/eevee_next/shaders/eevee_lookdev_display_vert.glsl +++ b/source/blender/draw/engines/eevee_next/shaders/eevee_lookdev_display_vert.glsl @@ -2,6 +2,10 @@ * * SPDX-License-Identifier: GPL-2.0-or-later */ +#include "infos/eevee_lookdev_info.hh" + +VERTEX_SHADER_CREATE_INFO(eevee_lookdev_display) + void main() { uint vert_index = gl_VertexID < 3 ? gl_VertexID : gl_VertexID - 2; diff --git a/source/blender/draw/engines/eevee_next/shaders/eevee_ltc_lib.glsl b/source/blender/draw/engines/eevee_next/shaders/eevee_ltc_lib.glsl index 08270695d6e..4a5fbc9e630 100644 --- a/source/blender/draw/engines/eevee_next/shaders/eevee_ltc_lib.glsl +++ b/source/blender/draw/engines/eevee_next/shaders/eevee_ltc_lib.glsl @@ -4,6 +4,8 @@ #pragma once +#include "infos/eevee_common_info.hh" + /** * Adapted from : * Real-Time Polygonal-Light Shading with Linearly Transformed Cosines. diff --git a/source/blender/draw/engines/eevee_next/shaders/eevee_lut_comp.glsl b/source/blender/draw/engines/eevee_next/shaders/eevee_lut_comp.glsl index 6cfd7ba9dba..ddeaa44d4be 100644 --- a/source/blender/draw/engines/eevee_next/shaders/eevee_lut_comp.glsl +++ b/source/blender/draw/engines/eevee_next/shaders/eevee_lut_comp.glsl @@ -7,6 +7,10 @@ * the blender executable. This is only used for reference or to update them. */ +#include "infos/eevee_lut_info.hh" + +COMPUTE_SHADER_CREATE_INFO(eevee_lut) + #include "eevee_bxdf_sampling_lib.glsl" #include "eevee_sampling_lib.glsl" #include "gpu_shader_math_base_lib.glsl" diff --git a/source/blender/draw/engines/eevee_next/shaders/eevee_motion_blur_dilate_comp.glsl b/source/blender/draw/engines/eevee_next/shaders/eevee_motion_blur_dilate_comp.glsl index f18fe164291..3cd995073fa 100644 --- a/source/blender/draw/engines/eevee_next/shaders/eevee_motion_blur_dilate_comp.glsl +++ b/source/blender/draw/engines/eevee_next/shaders/eevee_motion_blur_dilate_comp.glsl @@ -7,6 +7,10 @@ * Outputs the largest intersecting motion vector in the neighborhood. */ +#include "infos/eevee_motion_blur_info.hh" + +COMPUTE_SHADER_CREATE_INFO(eevee_motion_blur_tiles_dilate) + #include "draw_math_geom_lib.glsl" #include "eevee_motion_blur_lib.glsl" diff --git a/source/blender/draw/engines/eevee_next/shaders/eevee_motion_blur_flatten_comp.glsl b/source/blender/draw/engines/eevee_next/shaders/eevee_motion_blur_flatten_comp.glsl index 2eae1a1c865..3d133591ebd 100644 --- a/source/blender/draw/engines/eevee_next/shaders/eevee_motion_blur_flatten_comp.glsl +++ b/source/blender/draw/engines/eevee_next/shaders/eevee_motion_blur_flatten_comp.glsl @@ -14,6 +14,10 @@ * Adapted from G3D Innovation Engine implementation. */ +#include "infos/eevee_motion_blur_info.hh" + +COMPUTE_SHADER_CREATE_INFO(eevee_motion_blur_tiles_flatten_rgba) + #include "draw_math_geom_lib.glsl" #include "eevee_velocity_lib.glsl" diff --git a/source/blender/draw/engines/eevee_next/shaders/eevee_motion_blur_gather_comp.glsl b/source/blender/draw/engines/eevee_next/shaders/eevee_motion_blur_gather_comp.glsl index d99f10e6cdf..d781e936930 100644 --- a/source/blender/draw/engines/eevee_next/shaders/eevee_motion_blur_gather_comp.glsl +++ b/source/blender/draw/engines/eevee_next/shaders/eevee_motion_blur_gather_comp.glsl @@ -13,6 +13,10 @@ * by Jorge Jimenez */ +#include "infos/eevee_motion_blur_info.hh" + +COMPUTE_SHADER_CREATE_INFO(eevee_motion_blur_gather) + #include "draw_view_lib.glsl" #include "eevee_motion_blur_lib.glsl" #include "eevee_sampling_lib.glsl" diff --git a/source/blender/draw/engines/eevee_next/shaders/eevee_motion_blur_lib.glsl b/source/blender/draw/engines/eevee_next/shaders/eevee_motion_blur_lib.glsl index 6843f28fcc1..23adb197d39 100644 --- a/source/blender/draw/engines/eevee_next/shaders/eevee_motion_blur_lib.glsl +++ b/source/blender/draw/engines/eevee_next/shaders/eevee_motion_blur_lib.glsl @@ -4,6 +4,8 @@ #pragma once +#include "infos/eevee_common_info.hh" + /* -------------------------------------------------------------------- */ /** \name Tile indirection packing * \{ */ diff --git a/source/blender/draw/engines/eevee_next/shaders/eevee_nodetree_lib.glsl b/source/blender/draw/engines/eevee_next/shaders/eevee_nodetree_lib.glsl index 4205df49a2d..77eb9f78f03 100644 --- a/source/blender/draw/engines/eevee_next/shaders/eevee_nodetree_lib.glsl +++ b/source/blender/draw/engines/eevee_next/shaders/eevee_nodetree_lib.glsl @@ -4,6 +4,11 @@ #pragma once +#include "infos/eevee_common_info.hh" + +SHADER_LIBRARY_CREATE_INFO(eevee_global_ubo) +SHADER_LIBRARY_CREATE_INFO(eevee_utility_texture) + #include "draw_model_lib.glsl" #include "draw_view_lib.glsl" #include "eevee_renderpass_lib.glsl" diff --git a/source/blender/draw/engines/eevee_next/shaders/eevee_occupancy_convert_frag.glsl b/source/blender/draw/engines/eevee_next/shaders/eevee_occupancy_convert_frag.glsl index d13d7c60acd..526cf81a21e 100644 --- a/source/blender/draw/engines/eevee_next/shaders/eevee_occupancy_convert_frag.glsl +++ b/source/blender/draw/engines/eevee_next/shaders/eevee_occupancy_convert_frag.glsl @@ -6,6 +6,10 @@ * Convert hit list to occupancy bit-field for the material pass. */ +#include "infos/eevee_volume_info.hh" + +FRAGMENT_SHADER_CREATE_INFO(eevee_volume_occupancy_convert) + #include "eevee_occupancy_lib.glsl" bool is_front_face_hit(float stored_hit_depth) diff --git a/source/blender/draw/engines/eevee_next/shaders/eevee_octahedron_lib.glsl b/source/blender/draw/engines/eevee_next/shaders/eevee_octahedron_lib.glsl index 34fd3afad0b..0554a3f2913 100644 --- a/source/blender/draw/engines/eevee_next/shaders/eevee_octahedron_lib.glsl +++ b/source/blender/draw/engines/eevee_next/shaders/eevee_octahedron_lib.glsl @@ -4,6 +4,8 @@ #pragma once +#include "gpu_glsl_cpp_stubs.hh" + /** * Convert from a cube-map vector to an octahedron UV coordinate. */ diff --git a/source/blender/draw/engines/eevee_next/shaders/eevee_ray_denoise_bilateral_comp.glsl b/source/blender/draw/engines/eevee_next/shaders/eevee_ray_denoise_bilateral_comp.glsl index 385734ff152..8fd62c764dc 100644 --- a/source/blender/draw/engines/eevee_next/shaders/eevee_ray_denoise_bilateral_comp.glsl +++ b/source/blender/draw/engines/eevee_next/shaders/eevee_ray_denoise_bilateral_comp.glsl @@ -15,6 +15,10 @@ * https://www.ea.com/seed/news/seed-dd18-presentation-slides-raytracing */ +#include "infos/eevee_tracing_info.hh" + +COMPUTE_SHADER_CREATE_INFO(eevee_ray_denoise_bilateral) + #include "draw_view_lib.glsl" #include "eevee_closure_lib.glsl" #include "eevee_filter_lib.glsl" diff --git a/source/blender/draw/engines/eevee_next/shaders/eevee_ray_denoise_spatial_comp.glsl b/source/blender/draw/engines/eevee_next/shaders/eevee_ray_denoise_spatial_comp.glsl index 756f3f00af1..e4928d938fb 100644 --- a/source/blender/draw/engines/eevee_next/shaders/eevee_ray_denoise_spatial_comp.glsl +++ b/source/blender/draw/engines/eevee_next/shaders/eevee_ray_denoise_spatial_comp.glsl @@ -15,6 +15,10 @@ * https://www.ea.com/seed/news/seed-dd18-presentation-slides-raytracing */ +#include "infos/eevee_tracing_info.hh" + +COMPUTE_SHADER_CREATE_INFO(eevee_ray_denoise_spatial) + #include "draw_view_lib.glsl" #include "eevee_bxdf_lib.glsl" #include "eevee_bxdf_sampling_lib.glsl" diff --git a/source/blender/draw/engines/eevee_next/shaders/eevee_ray_denoise_temporal_comp.glsl b/source/blender/draw/engines/eevee_next/shaders/eevee_ray_denoise_temporal_comp.glsl index 6ce9006a621..eefda02579d 100644 --- a/source/blender/draw/engines/eevee_next/shaders/eevee_ray_denoise_temporal_comp.glsl +++ b/source/blender/draw/engines/eevee_next/shaders/eevee_ray_denoise_temporal_comp.glsl @@ -15,6 +15,10 @@ * https://www.ea.com/seed/news/seed-dd18-presentation-slides-raytracing */ +#include "infos/eevee_tracing_info.hh" + +COMPUTE_SHADER_CREATE_INFO(eevee_ray_denoise_temporal) + #include "draw_view_lib.glsl" #include "eevee_colorspace_lib.glsl" #include "gpu_shader_codegen_lib.glsl" diff --git a/source/blender/draw/engines/eevee_next/shaders/eevee_ray_generate_comp.glsl b/source/blender/draw/engines/eevee_next/shaders/eevee_ray_generate_comp.glsl index 45adce48477..34a979437a0 100644 --- a/source/blender/draw/engines/eevee_next/shaders/eevee_ray_generate_comp.glsl +++ b/source/blender/draw/engines/eevee_next/shaders/eevee_ray_generate_comp.glsl @@ -7,6 +7,10 @@ * by the next pass to trace the rays. */ +#include "infos/eevee_tracing_info.hh" + +COMPUTE_SHADER_CREATE_INFO(eevee_ray_generate) + #include "eevee_gbuffer_lib.glsl" #include "eevee_ray_generate_lib.glsl" #include "eevee_sampling_lib.glsl" diff --git a/source/blender/draw/engines/eevee_next/shaders/eevee_ray_tile_classify_comp.glsl b/source/blender/draw/engines/eevee_next/shaders/eevee_ray_tile_classify_comp.glsl index 906670a39ad..72a3db25e31 100644 --- a/source/blender/draw/engines/eevee_next/shaders/eevee_ray_tile_classify_comp.glsl +++ b/source/blender/draw/engines/eevee_next/shaders/eevee_ray_tile_classify_comp.glsl @@ -7,6 +7,10 @@ * This mask is then processed by the compaction phase. */ +#include "infos/eevee_tracing_info.hh" + +COMPUTE_SHADER_CREATE_INFO(eevee_ray_tile_classify) + #include "eevee_closure_lib.glsl" #include "eevee_gbuffer_lib.glsl" #include "gpu_shader_codegen_lib.glsl" diff --git a/source/blender/draw/engines/eevee_next/shaders/eevee_ray_tile_compact_comp.glsl b/source/blender/draw/engines/eevee_next/shaders/eevee_ray_tile_compact_comp.glsl index 13021e91318..d3bc9c60c02 100644 --- a/source/blender/draw/engines/eevee_next/shaders/eevee_ray_tile_compact_comp.glsl +++ b/source/blender/draw/engines/eevee_next/shaders/eevee_ray_tile_compact_comp.glsl @@ -8,6 +8,10 @@ * Dispatched as one thread for each trace resolution tile. */ +#include "infos/eevee_tracing_info.hh" + +COMPUTE_SHADER_CREATE_INFO(eevee_ray_tile_compact) + #include "gpu_shader_codegen_lib.glsl" #include "gpu_shader_math_vector_lib.glsl" #include "gpu_shader_utildefines_lib.glsl" diff --git a/source/blender/draw/engines/eevee_next/shaders/eevee_ray_trace_fallback_comp.glsl b/source/blender/draw/engines/eevee_next/shaders/eevee_ray_trace_fallback_comp.glsl index 8e07b79728c..766e464a22a 100644 --- a/source/blender/draw/engines/eevee_next/shaders/eevee_ray_trace_fallback_comp.glsl +++ b/source/blender/draw/engines/eevee_next/shaders/eevee_ray_trace_fallback_comp.glsl @@ -6,6 +6,10 @@ * Does not use any tracing method. Only rely on local light probes to get the incoming radiance. */ +#include "infos/eevee_tracing_info.hh" + +COMPUTE_SHADER_CREATE_INFO(eevee_ray_trace_fallback) + #include "eevee_bxdf_sampling_lib.glsl" #include "eevee_colorspace_lib.glsl" #include "eevee_gbuffer_lib.glsl" diff --git a/source/blender/draw/engines/eevee_next/shaders/eevee_ray_trace_planar_comp.glsl b/source/blender/draw/engines/eevee_next/shaders/eevee_ray_trace_planar_comp.glsl index c8aceef3e4e..f51658fc58c 100644 --- a/source/blender/draw/engines/eevee_next/shaders/eevee_ray_trace_planar_comp.glsl +++ b/source/blender/draw/engines/eevee_next/shaders/eevee_ray_trace_planar_comp.glsl @@ -9,6 +9,10 @@ * are then tagged to avoid re-evaluation by screen trace. */ +#include "infos/eevee_tracing_info.hh" + +COMPUTE_SHADER_CREATE_INFO(eevee_ray_trace_planar) + #include "eevee_bxdf_sampling_lib.glsl" #include "eevee_colorspace_lib.glsl" #include "eevee_gbuffer_lib.glsl" diff --git a/source/blender/draw/engines/eevee_next/shaders/eevee_ray_trace_screen_comp.glsl b/source/blender/draw/engines/eevee_next/shaders/eevee_ray_trace_screen_comp.glsl index f2c6115b4ac..2a118990149 100644 --- a/source/blender/draw/engines/eevee_next/shaders/eevee_ray_trace_screen_comp.glsl +++ b/source/blender/draw/engines/eevee_next/shaders/eevee_ray_trace_screen_comp.glsl @@ -6,6 +6,10 @@ * Use screen space tracing against depth buffer to find intersection with the scene. */ +#include "infos/eevee_tracing_info.hh" + +COMPUTE_SHADER_CREATE_INFO(eevee_ray_trace_screen) + #include "eevee_bxdf_sampling_lib.glsl" #include "eevee_closure_lib.glsl" #include "eevee_colorspace_lib.glsl" diff --git a/source/blender/draw/engines/eevee_next/shaders/eevee_ray_trace_screen_lib.glsl b/source/blender/draw/engines/eevee_next/shaders/eevee_ray_trace_screen_lib.glsl index 3032ddcddb3..5264837c982 100644 --- a/source/blender/draw/engines/eevee_next/shaders/eevee_ray_trace_screen_lib.glsl +++ b/source/blender/draw/engines/eevee_next/shaders/eevee_ray_trace_screen_lib.glsl @@ -15,8 +15,11 @@ */ #include "draw_view_lib.glsl" +#include "eevee_bxdf_diffuse_lib.glsl" +#include "eevee_bxdf_microfacet_lib.glsl" #include "eevee_ray_types_lib.glsl" #include "eevee_thickness_lib.glsl" +#include "gpu_shader_codegen_lib.glsl" #include "gpu_shader_math_fast_lib.glsl" #include "gpu_shader_math_matrix_lib.glsl" diff --git a/source/blender/draw/engines/eevee_next/shaders/eevee_renderpass_clear_frag.glsl b/source/blender/draw/engines/eevee_next/shaders/eevee_renderpass_clear_frag.glsl index ccf9060d4f7..1c01c8d9f54 100644 --- a/source/blender/draw/engines/eevee_next/shaders/eevee_renderpass_clear_frag.glsl +++ b/source/blender/draw/engines/eevee_next/shaders/eevee_renderpass_clear_frag.glsl @@ -6,6 +6,10 @@ * Clear render passes and background. */ +#include "infos/eevee_material_info.hh" + +FRAGMENT_SHADER_CREATE_INFO(eevee_renderpass_clear) + #include "eevee_renderpass_lib.glsl" void main() diff --git a/source/blender/draw/engines/eevee_next/shaders/eevee_renderpass_lib.glsl b/source/blender/draw/engines/eevee_next/shaders/eevee_renderpass_lib.glsl index 5540b90c22e..20d05b82f47 100644 --- a/source/blender/draw/engines/eevee_next/shaders/eevee_renderpass_lib.glsl +++ b/source/blender/draw/engines/eevee_next/shaders/eevee_renderpass_lib.glsl @@ -4,6 +4,10 @@ #pragma once +#include "infos/eevee_common_info.hh" + +SHADER_LIBRARY_CREATE_INFO(eevee_render_pass_out) + void output_renderpass_color(int id, vec4 color) { #if defined(MAT_RENDER_PASS_SUPPORT) && defined(GPU_FRAGMENT_SHADER) diff --git a/source/blender/draw/engines/eevee_next/shaders/eevee_sampling_lib.glsl b/source/blender/draw/engines/eevee_next/shaders/eevee_sampling_lib.glsl index a7dae60bf87..8ae813eae2f 100644 --- a/source/blender/draw/engines/eevee_next/shaders/eevee_sampling_lib.glsl +++ b/source/blender/draw/engines/eevee_next/shaders/eevee_sampling_lib.glsl @@ -9,6 +9,10 @@ * Also contains some sample mapping functions. */ +#include "infos/eevee_common_info.hh" + +SHADER_LIBRARY_CREATE_INFO(eevee_sampling_data) + #include "gpu_shader_math_base_lib.glsl" /* -------------------------------------------------------------------- */ diff --git a/source/blender/draw/engines/eevee_next/shaders/eevee_shadow_clipmap_clear_comp.glsl b/source/blender/draw/engines/eevee_next/shaders/eevee_shadow_clipmap_clear_comp.glsl index 33f0eab82a4..3b66e2f8779 100644 --- a/source/blender/draw/engines/eevee_next/shaders/eevee_shadow_clipmap_clear_comp.glsl +++ b/source/blender/draw/engines/eevee_next/shaders/eevee_shadow_clipmap_clear_comp.glsl @@ -2,6 +2,10 @@ * * SPDX-License-Identifier: GPL-2.0-or-later */ +#include "infos/eevee_shadow_info.hh" + +COMPUTE_SHADER_CREATE_INFO(eevee_shadow_clipmap_clear) + #include "gpu_shader_utildefines_lib.glsl" void main() diff --git a/source/blender/draw/engines/eevee_next/shaders/eevee_shadow_debug_frag.glsl b/source/blender/draw/engines/eevee_next/shaders/eevee_shadow_debug_frag.glsl index afbfaebfed0..13061f3df9e 100644 --- a/source/blender/draw/engines/eevee_next/shaders/eevee_shadow_debug_frag.glsl +++ b/source/blender/draw/engines/eevee_next/shaders/eevee_shadow_debug_frag.glsl @@ -7,6 +7,10 @@ * See eShadowDebug for more information. */ +#include "infos/eevee_shadow_info.hh" + +FRAGMENT_SHADER_CREATE_INFO(eevee_shadow_debug) + #include "draw_view_lib.glsl" #include "eevee_light_iter_lib.glsl" #include "eevee_light_lib.glsl" diff --git a/source/blender/draw/engines/eevee_next/shaders/eevee_shadow_page_allocate_comp.glsl b/source/blender/draw/engines/eevee_next/shaders/eevee_shadow_page_allocate_comp.glsl index 0b11ad1bb1f..f4acb73b916 100644 --- a/source/blender/draw/engines/eevee_next/shaders/eevee_shadow_page_allocate_comp.glsl +++ b/source/blender/draw/engines/eevee_next/shaders/eevee_shadow_page_allocate_comp.glsl @@ -9,6 +9,10 @@ * Note that allocation can fail, in this case the tile is left with no page. */ +#include "infos/eevee_shadow_info.hh" + +COMPUTE_SHADER_CREATE_INFO(eevee_shadow_page_allocate) + #include "eevee_shadow_page_ops_lib.glsl" #include "eevee_shadow_tilemap_lib.glsl" diff --git a/source/blender/draw/engines/eevee_next/shaders/eevee_shadow_page_clear_comp.glsl b/source/blender/draw/engines/eevee_next/shaders/eevee_shadow_page_clear_comp.glsl index 4a2fe397916..26db668f985 100644 --- a/source/blender/draw/engines/eevee_next/shaders/eevee_shadow_page_clear_comp.glsl +++ b/source/blender/draw/engines/eevee_next/shaders/eevee_shadow_page_clear_comp.glsl @@ -8,6 +8,10 @@ * Equivalent to a frame-buffer depth clear but only for pages pushed to the clear_page_buf. */ +#include "infos/eevee_shadow_info.hh" + +COMPUTE_SHADER_CREATE_INFO(eevee_shadow_page_clear) + #include "gpu_shader_utildefines_lib.glsl" void main() diff --git a/source/blender/draw/engines/eevee_next/shaders/eevee_shadow_page_defrag_comp.glsl b/source/blender/draw/engines/eevee_next/shaders/eevee_shadow_page_defrag_comp.glsl index e4cffeb0dc9..596bdbdbae4 100644 --- a/source/blender/draw/engines/eevee_next/shaders/eevee_shadow_page_defrag_comp.glsl +++ b/source/blender/draw/engines/eevee_next/shaders/eevee_shadow_page_defrag_comp.glsl @@ -18,6 +18,10 @@ * `[----xxxxxx------]` */ +#include "infos/eevee_shadow_info.hh" + +COMPUTE_SHADER_CREATE_INFO(eevee_shadow_page_defrag) + #include "eevee_shadow_page_ops_lib.glsl" #define max_page uint(SHADOW_MAX_PAGE) diff --git a/source/blender/draw/engines/eevee_next/shaders/eevee_shadow_page_free_comp.glsl b/source/blender/draw/engines/eevee_next/shaders/eevee_shadow_page_free_comp.glsl index 06bdd6ba2fa..469125cabfa 100644 --- a/source/blender/draw/engines/eevee_next/shaders/eevee_shadow_page_free_comp.glsl +++ b/source/blender/draw/engines/eevee_next/shaders/eevee_shadow_page_free_comp.glsl @@ -10,6 +10,10 @@ * Note that we also count the number of new page allocations needed. */ +#include "infos/eevee_shadow_info.hh" + +COMPUTE_SHADER_CREATE_INFO(eevee_shadow_page_free) + #include "eevee_shadow_page_ops_lib.glsl" #include "eevee_shadow_tilemap_lib.glsl" diff --git a/source/blender/draw/engines/eevee_next/shaders/eevee_shadow_page_mask_comp.glsl b/source/blender/draw/engines/eevee_next/shaders/eevee_shadow_page_mask_comp.glsl index 0737bdcdda5..8ef0b7e3c83 100644 --- a/source/blender/draw/engines/eevee_next/shaders/eevee_shadow_page_mask_comp.glsl +++ b/source/blender/draw/engines/eevee_next/shaders/eevee_shadow_page_mask_comp.glsl @@ -9,6 +9,10 @@ * views per shadow map). */ +#include "infos/eevee_shadow_info.hh" + +COMPUTE_SHADER_CREATE_INFO(eevee_shadow_page_mask) + #include "eevee_shadow_tilemap_lib.glsl" /* Reuse the same enum values for these transient flag during the amend phase. diff --git a/source/blender/draw/engines/eevee_next/shaders/eevee_shadow_page_ops_lib.glsl b/source/blender/draw/engines/eevee_next/shaders/eevee_shadow_page_ops_lib.glsl index aaeaa4d8a54..eb013abd9c8 100644 --- a/source/blender/draw/engines/eevee_next/shaders/eevee_shadow_page_ops_lib.glsl +++ b/source/blender/draw/engines/eevee_next/shaders/eevee_shadow_page_ops_lib.glsl @@ -27,6 +27,12 @@ * IMPORTANT: Do not forget to manually store the tile data after doing operations on them. */ +#include "infos/eevee_shadow_info.hh" + +#ifdef GPU_LIBRARY_SHADER +SHADER_LIBRARY_CREATE_INFO(eevee_shadow_page_free) +#endif + #include "eevee_shadow_tilemap_lib.glsl" /* Remove page ownership from the tile and append it to the cache. */ diff --git a/source/blender/draw/engines/eevee_next/shaders/eevee_shadow_page_tile_frag.glsl b/source/blender/draw/engines/eevee_next/shaders/eevee_shadow_page_tile_frag.glsl index ca4df3e0509..f6f9ce7dda4 100644 --- a/source/blender/draw/engines/eevee_next/shaders/eevee_shadow_page_tile_frag.glsl +++ b/source/blender/draw/engines/eevee_next/shaders/eevee_shadow_page_tile_frag.glsl @@ -35,6 +35,10 @@ * belong to shadow pages not being updated in this pass are discarded. **/ +#include "infos/eevee_shadow_info.hh" + +FRAGMENT_SHADER_CREATE_INFO(eevee_shadow_page_tile_clear) + #include "eevee_shadow_tilemap_lib.glsl" #include "gpu_shader_utildefines_lib.glsl" diff --git a/source/blender/draw/engines/eevee_next/shaders/eevee_shadow_page_tile_vert.glsl b/source/blender/draw/engines/eevee_next/shaders/eevee_shadow_page_tile_vert.glsl index 20b10b8c3da..f35bfb4d4ed 100644 --- a/source/blender/draw/engines/eevee_next/shaders/eevee_shadow_page_tile_vert.glsl +++ b/source/blender/draw/engines/eevee_next/shaders/eevee_shadow_page_tile_vert.glsl @@ -7,6 +7,11 @@ * * See fragment shader for more infos. */ + +#include "infos/eevee_shadow_info.hh" + +VERTEX_SHADER_CREATE_INFO(eevee_shadow_page_tile_clear) + #include "eevee_shadow_tilemap_lib.glsl" #include "gpu_shader_utildefines_lib.glsl" diff --git a/source/blender/draw/engines/eevee_next/shaders/eevee_shadow_tag_update_comp.glsl b/source/blender/draw/engines/eevee_next/shaders/eevee_shadow_tag_update_comp.glsl index 26e69b69ebc..58bab617c89 100644 --- a/source/blender/draw/engines/eevee_next/shaders/eevee_shadow_tag_update_comp.glsl +++ b/source/blender/draw/engines/eevee_next/shaders/eevee_shadow_tag_update_comp.glsl @@ -11,6 +11,10 @@ * tag the appropriate tiles. */ +#include "infos/eevee_shadow_info.hh" + +COMPUTE_SHADER_CREATE_INFO(eevee_shadow_tag_update) + #include "common_aabb_lib.glsl" #include "common_intersect_lib.glsl" diff --git a/source/blender/draw/engines/eevee_next/shaders/eevee_shadow_tag_usage_comp.glsl b/source/blender/draw/engines/eevee_next/shaders/eevee_shadow_tag_usage_comp.glsl index 464aef61512..18d63e935b4 100644 --- a/source/blender/draw/engines/eevee_next/shaders/eevee_shadow_tag_usage_comp.glsl +++ b/source/blender/draw/engines/eevee_next/shaders/eevee_shadow_tag_usage_comp.glsl @@ -10,6 +10,10 @@ * needed. */ +#include "infos/eevee_shadow_info.hh" + +COMPUTE_SHADER_CREATE_INFO(eevee_shadow_tag_usage_opaque) + #include "eevee_shadow_tag_usage_lib.glsl" void main() diff --git a/source/blender/draw/engines/eevee_next/shaders/eevee_shadow_tag_usage_frag.glsl b/source/blender/draw/engines/eevee_next/shaders/eevee_shadow_tag_usage_frag.glsl index d5d2fefd16e..3c27cf27df2 100644 --- a/source/blender/draw/engines/eevee_next/shaders/eevee_shadow_tag_usage_frag.glsl +++ b/source/blender/draw/engines/eevee_next/shaders/eevee_shadow_tag_usage_frag.glsl @@ -10,6 +10,10 @@ * tiles. */ +#include "infos/eevee_shadow_info.hh" + +FRAGMENT_SHADER_CREATE_INFO(eevee_shadow_tag_usage_transparent) + #include "draw_model_lib.glsl" #include "eevee_shadow_tag_usage_lib.glsl" diff --git a/source/blender/draw/engines/eevee_next/shaders/eevee_shadow_tag_usage_lib.glsl b/source/blender/draw/engines/eevee_next/shaders/eevee_shadow_tag_usage_lib.glsl index 88abb099fa1..84695dd4d53 100644 --- a/source/blender/draw/engines/eevee_next/shaders/eevee_shadow_tag_usage_lib.glsl +++ b/source/blender/draw/engines/eevee_next/shaders/eevee_shadow_tag_usage_lib.glsl @@ -11,6 +11,12 @@ * This contains the common logic used for tagging shadows for opaque and transparent receivers. */ +#include "infos/eevee_shadow_info.hh" + +#ifdef GPU_LIBRARY_SHADER +SHADER_LIBRARY_CREATE_INFO(eevee_shadow_tag_usage_surfels) +#endif + #include "draw_intersect_lib.glsl" #include "draw_view_lib.glsl" #include "eevee_light_iter_lib.glsl" diff --git a/source/blender/draw/engines/eevee_next/shaders/eevee_shadow_tag_usage_surfels_comp.glsl b/source/blender/draw/engines/eevee_next/shaders/eevee_shadow_tag_usage_surfels_comp.glsl index 022f7db2915..fb2533e3fb9 100644 --- a/source/blender/draw/engines/eevee_next/shaders/eevee_shadow_tag_usage_surfels_comp.glsl +++ b/source/blender/draw/engines/eevee_next/shaders/eevee_shadow_tag_usage_surfels_comp.glsl @@ -10,6 +10,10 @@ * needed. */ +#include "infos/eevee_shadow_info.hh" + +COMPUTE_SHADER_CREATE_INFO(eevee_shadow_tag_usage_surfels) + #include "eevee_shadow_tag_usage_lib.glsl" void main() diff --git a/source/blender/draw/engines/eevee_next/shaders/eevee_shadow_tag_usage_vert.glsl b/source/blender/draw/engines/eevee_next/shaders/eevee_shadow_tag_usage_vert.glsl index 385ee6ad12a..6c6e2e04f6c 100644 --- a/source/blender/draw/engines/eevee_next/shaders/eevee_shadow_tag_usage_vert.glsl +++ b/source/blender/draw/engines/eevee_next/shaders/eevee_shadow_tag_usage_vert.glsl @@ -9,6 +9,10 @@ * This renders the bounding boxes for transparent objects in order to tag the correct shadows. */ +#include "infos/eevee_shadow_info.hh" + +VERTEX_SHADER_CREATE_INFO(eevee_shadow_tag_usage_transparent) + #include "common_shape_lib.glsl" #include "draw_model_lib.glsl" #include "gpu_shader_math_vector_lib.glsl" diff --git a/source/blender/draw/engines/eevee_next/shaders/eevee_shadow_tag_usage_volume_comp.glsl b/source/blender/draw/engines/eevee_next/shaders/eevee_shadow_tag_usage_volume_comp.glsl index 1101d67abc3..aa7c2186e7f 100644 --- a/source/blender/draw/engines/eevee_next/shaders/eevee_shadow_tag_usage_volume_comp.glsl +++ b/source/blender/draw/engines/eevee_next/shaders/eevee_shadow_tag_usage_volume_comp.glsl @@ -9,6 +9,10 @@ * This pass scans all volume froxels and tags tiles needed for shadowing. */ +#include "infos/eevee_shadow_info.hh" + +COMPUTE_SHADER_CREATE_INFO(eevee_shadow_tag_usage_volume) + #include "eevee_sampling_lib.glsl" #include "eevee_shadow_tag_usage_lib.glsl" #include "eevee_volume_lib.glsl" diff --git a/source/blender/draw/engines/eevee_next/shaders/eevee_shadow_tilemap_amend_comp.glsl b/source/blender/draw/engines/eevee_next/shaders/eevee_shadow_tilemap_amend_comp.glsl index 5edf06a76a7..3bf8163596b 100644 --- a/source/blender/draw/engines/eevee_next/shaders/eevee_shadow_tilemap_amend_comp.glsl +++ b/source/blender/draw/engines/eevee_next/shaders/eevee_shadow_tilemap_amend_comp.glsl @@ -15,6 +15,10 @@ * Currently this shader is dispatched with one thread-group for all directional light. */ +#include "infos/eevee_shadow_info.hh" + +COMPUTE_SHADER_CREATE_INFO(eevee_shadow_tilemap_amend) + #include "eevee_light_iter_lib.glsl" #include "eevee_shadow_tilemap_lib.glsl" #include "gpu_shader_math_matrix_lib.glsl" diff --git a/source/blender/draw/engines/eevee_next/shaders/eevee_shadow_tilemap_bounds_comp.glsl b/source/blender/draw/engines/eevee_next/shaders/eevee_shadow_tilemap_bounds_comp.glsl index e577ad07582..474aae67895 100644 --- a/source/blender/draw/engines/eevee_next/shaders/eevee_shadow_tilemap_bounds_comp.glsl +++ b/source/blender/draw/engines/eevee_next/shaders/eevee_shadow_tilemap_bounds_comp.glsl @@ -10,6 +10,10 @@ * their range changes. */ +#include "infos/eevee_shadow_info.hh" + +COMPUTE_SHADER_CREATE_INFO(eevee_shadow_tilemap_bounds) + #include "common_intersect_lib.glsl" #include "eevee_light_iter_lib.glsl" #include "eevee_shadow_tilemap_lib.glsl" diff --git a/source/blender/draw/engines/eevee_next/shaders/eevee_shadow_tilemap_finalize_comp.glsl b/source/blender/draw/engines/eevee_next/shaders/eevee_shadow_tilemap_finalize_comp.glsl index c10864e0093..4bdb4979a04 100644 --- a/source/blender/draw/engines/eevee_next/shaders/eevee_shadow_tilemap_finalize_comp.glsl +++ b/source/blender/draw/engines/eevee_next/shaders/eevee_shadow_tilemap_finalize_comp.glsl @@ -10,6 +10,10 @@ * to use a sampler instead of a SSBO bind. */ +#include "infos/eevee_shadow_info.hh" + +COMPUTE_SHADER_CREATE_INFO(eevee_shadow_tilemap_finalize) + #include "eevee_shadow_tilemap_lib.glsl" #include "gpu_shader_math_matrix_lib.glsl" #include "gpu_shader_utildefines_lib.glsl" diff --git a/source/blender/draw/engines/eevee_next/shaders/eevee_shadow_tilemap_init_comp.glsl b/source/blender/draw/engines/eevee_next/shaders/eevee_shadow_tilemap_init_comp.glsl index e5fc9812c7b..f73fb66bbc5 100644 --- a/source/blender/draw/engines/eevee_next/shaders/eevee_shadow_tilemap_init_comp.glsl +++ b/source/blender/draw/engines/eevee_next/shaders/eevee_shadow_tilemap_init_comp.glsl @@ -10,6 +10,10 @@ * Dispatched with one local thread per LOD0 tile and one work-group per tile-map. */ +#include "infos/eevee_shadow_info.hh" + +COMPUTE_SHADER_CREATE_INFO(eevee_shadow_tilemap_init) + #include "eevee_shadow_tilemap_lib.glsl" #include "gpu_shader_utildefines_lib.glsl" diff --git a/source/blender/draw/engines/eevee_next/shaders/eevee_shadow_tilemap_lib.glsl b/source/blender/draw/engines/eevee_next/shaders/eevee_shadow_tilemap_lib.glsl index cce089c8e10..ff58bcab5fc 100644 --- a/source/blender/draw/engines/eevee_next/shaders/eevee_shadow_tilemap_lib.glsl +++ b/source/blender/draw/engines/eevee_next/shaders/eevee_shadow_tilemap_lib.glsl @@ -4,6 +4,8 @@ #pragma once +#include "infos/eevee_common_info.hh" + #include "common_shape_lib.glsl" #include "gpu_shader_math_vector_lib.glsl" #include "gpu_shader_utildefines_lib.glsl" diff --git a/source/blender/draw/engines/eevee_next/shaders/eevee_shadow_tilemap_rendermap_comp.glsl b/source/blender/draw/engines/eevee_next/shaders/eevee_shadow_tilemap_rendermap_comp.glsl index 9b75bf5c623..1b9d489720b 100644 --- a/source/blender/draw/engines/eevee_next/shaders/eevee_shadow_tilemap_rendermap_comp.glsl +++ b/source/blender/draw/engines/eevee_next/shaders/eevee_shadow_tilemap_rendermap_comp.glsl @@ -8,6 +8,10 @@ * For each shadow view, copy page atlas location to the indirection table before render. */ +#include "infos/eevee_shadow_info.hh" + +COMPUTE_SHADER_CREATE_INFO(eevee_shadow_tilemap_rendermap) + #include "eevee_shadow_tilemap_lib.glsl" void main() diff --git a/source/blender/draw/engines/eevee_next/shaders/eevee_shadow_tracing_lib.glsl b/source/blender/draw/engines/eevee_next/shaders/eevee_shadow_tracing_lib.glsl index b7e6ede3386..449f9fa2048 100644 --- a/source/blender/draw/engines/eevee_next/shaders/eevee_shadow_tracing_lib.glsl +++ b/source/blender/draw/engines/eevee_next/shaders/eevee_shadow_tracing_lib.glsl @@ -8,6 +8,11 @@ * Evaluate shadowing using shadow map ray-tracing. */ +#include "infos/eevee_shadow_info.hh" + +SHADER_LIBRARY_CREATE_INFO(eevee_global_ubo) +SHADER_LIBRARY_CREATE_INFO(eevee_shadow_data) + #include "draw_math_geom_lib.glsl" #include "draw_view_lib.glsl" #include "eevee_bxdf_sampling_lib.glsl" @@ -424,6 +429,8 @@ float shadow_eval(LightData light, vec2 pixel = floor(gl_FragCoord.xy); # elif defined(GPU_COMPUTE_SHADER) vec2 pixel = vec2(gl_GlobalInvocationID.xy); +# else + vec2 pixel = UTIL_TEXEL; # endif vec3 blue_noise_3d = utility_tx_fetch(utility_tx, pixel, UTIL_BLUE_NOISE_LAYER).rgb; vec3 random_shadow_3d = fract(blue_noise_3d + sampling_rng_3D_get(SAMPLING_SHADOW_U)); diff --git a/source/blender/draw/engines/eevee_next/shaders/eevee_shadow_visibility_comp.glsl b/source/blender/draw/engines/eevee_next/shaders/eevee_shadow_visibility_comp.glsl index 0613b553a61..ff74b35b086 100644 --- a/source/blender/draw/engines/eevee_next/shaders/eevee_shadow_visibility_comp.glsl +++ b/source/blender/draw/engines/eevee_next/shaders/eevee_shadow_visibility_comp.glsl @@ -8,9 +8,13 @@ */ /* TODO(fclem): Could reject bounding boxes that are covering only invalid tiles. */ +#include "infos/eevee_shadow_info.hh" + +COMPUTE_SHADER_CREATE_INFO(eevee_shadow_view_visibility) + #include "common_intersect_lib.glsl" -#include "common_math_lib.glsl" -#include "common_view_lib.glsl" +#include "draw_view_lib.glsl" +#include "gpu_shader_math_base_lib.glsl" #include "gpu_shader_utildefines_lib.glsl" bool shadow_linking_affects_caster(uint view_id, uint resource_id) diff --git a/source/blender/draw/engines/eevee_next/shaders/eevee_subsurface_convolve_comp.glsl b/source/blender/draw/engines/eevee_next/shaders/eevee_subsurface_convolve_comp.glsl index d0ed8f3b959..2db4083b7b7 100644 --- a/source/blender/draw/engines/eevee_next/shaders/eevee_subsurface_convolve_comp.glsl +++ b/source/blender/draw/engines/eevee_next/shaders/eevee_subsurface_convolve_comp.glsl @@ -13,6 +13,10 @@ * we precompute a weight profile texture to be able to support per pixel AND per channel radius. */ +#include "infos/eevee_subsurface_info.hh" + +COMPUTE_SHADER_CREATE_INFO(eevee_subsurface_convolve) + #include "draw_view_lib.glsl" #include "eevee_gbuffer_lib.glsl" #include "eevee_sampling_lib.glsl" diff --git a/source/blender/draw/engines/eevee_next/shaders/eevee_subsurface_lib.glsl b/source/blender/draw/engines/eevee_next/shaders/eevee_subsurface_lib.glsl index 3f33d49c265..6050a108ceb 100644 --- a/source/blender/draw/engines/eevee_next/shaders/eevee_subsurface_lib.glsl +++ b/source/blender/draw/engines/eevee_next/shaders/eevee_subsurface_lib.glsl @@ -11,6 +11,10 @@ * - utility_tx */ +#include "infos/eevee_common_info.hh" + +SHADER_LIBRARY_CREATE_INFO(eevee_utility_texture) + #include "eevee_shadow_lib.glsl" #ifdef EEVEE_UTILITY_TX diff --git a/source/blender/draw/engines/eevee_next/shaders/eevee_subsurface_setup_comp.glsl b/source/blender/draw/engines/eevee_next/shaders/eevee_subsurface_setup_comp.glsl index 74f287557fa..97385210ff0 100644 --- a/source/blender/draw/engines/eevee_next/shaders/eevee_subsurface_setup_comp.glsl +++ b/source/blender/draw/engines/eevee_next/shaders/eevee_subsurface_setup_comp.glsl @@ -7,6 +7,10 @@ * processing. */ +#include "infos/eevee_subsurface_info.hh" + +COMPUTE_SHADER_CREATE_INFO(eevee_subsurface_setup) + #include "draw_view_lib.glsl" #include "eevee_gbuffer_lib.glsl" #include "gpu_shader_math_vector_lib.glsl" diff --git a/source/blender/draw/engines/eevee_next/shaders/eevee_surf_capture_frag.glsl b/source/blender/draw/engines/eevee_next/shaders/eevee_surf_capture_frag.glsl index a3e159dad1d..9e31b7da337 100644 --- a/source/blender/draw/engines/eevee_next/shaders/eevee_surf_capture_frag.glsl +++ b/source/blender/draw/engines/eevee_next/shaders/eevee_surf_capture_frag.glsl @@ -9,6 +9,11 @@ * into other surface shaders. */ +#include "infos/eevee_material_info.hh" + +FRAGMENT_SHADER_CREATE_INFO(eevee_geom_mesh) +FRAGMENT_SHADER_CREATE_INFO(eevee_surf_capture) + #include "common_hair_lib.glsl" #include "draw_view_lib.glsl" #include "eevee_gbuffer_lib.glsl" diff --git a/source/blender/draw/engines/eevee_next/shaders/eevee_surf_deferred_frag.glsl b/source/blender/draw/engines/eevee_next/shaders/eevee_surf_deferred_frag.glsl index 1db8a7aed5b..9916c8efdce 100644 --- a/source/blender/draw/engines/eevee_next/shaders/eevee_surf_deferred_frag.glsl +++ b/source/blender/draw/engines/eevee_next/shaders/eevee_surf_deferred_frag.glsl @@ -9,6 +9,14 @@ * Some render-pass are written during this pass. */ +#include "infos/eevee_material_info.hh" + +FRAGMENT_SHADER_CREATE_INFO(eevee_node_tree) +FRAGMENT_SHADER_CREATE_INFO(eevee_geom_mesh) +FRAGMENT_SHADER_CREATE_INFO(eevee_surf_deferred) +FRAGMENT_SHADER_CREATE_INFO(eevee_render_pass_out) +FRAGMENT_SHADER_CREATE_INFO(eevee_cryptomatte_out) + #include "common_hair_lib.glsl" #include "draw_view_lib.glsl" #include "eevee_ambient_occlusion_lib.glsl" diff --git a/source/blender/draw/engines/eevee_next/shaders/eevee_surf_depth_frag.glsl b/source/blender/draw/engines/eevee_next/shaders/eevee_surf_depth_frag.glsl index 6a465e3ffeb..b2330e74932 100644 --- a/source/blender/draw/engines/eevee_next/shaders/eevee_surf_depth_frag.glsl +++ b/source/blender/draw/engines/eevee_next/shaders/eevee_surf_depth_frag.glsl @@ -6,6 +6,12 @@ * Depth shader that can stochastically discard transparent pixel. */ +#include "infos/eevee_material_info.hh" + +FRAGMENT_SHADER_CREATE_INFO(eevee_clip_plane) +FRAGMENT_SHADER_CREATE_INFO(eevee_geom_mesh) +FRAGMENT_SHADER_CREATE_INFO(eevee_surf_depth) + #include "common_hair_lib.glsl" #include "draw_view_lib.glsl" #include "eevee_nodetree_lib.glsl" diff --git a/source/blender/draw/engines/eevee_next/shaders/eevee_surf_forward_frag.glsl b/source/blender/draw/engines/eevee_next/shaders/eevee_surf_forward_frag.glsl index 4546fb9ff19..0e80be81bac 100644 --- a/source/blender/draw/engines/eevee_next/shaders/eevee_surf_forward_frag.glsl +++ b/source/blender/draw/engines/eevee_next/shaders/eevee_surf_forward_frag.glsl @@ -8,6 +8,11 @@ * This is used by alpha blended materials and materials using Shader to RGB nodes. */ +#include "infos/eevee_material_info.hh" + +FRAGMENT_SHADER_CREATE_INFO(eevee_geom_mesh) +FRAGMENT_SHADER_CREATE_INFO(eevee_surf_forward) + #include "common_hair_lib.glsl" #include "draw_view_lib.glsl" #include "eevee_ambient_occlusion_lib.glsl" diff --git a/source/blender/draw/engines/eevee_next/shaders/eevee_surf_hybrid_frag.glsl b/source/blender/draw/engines/eevee_next/shaders/eevee_surf_hybrid_frag.glsl index cf575ca42a8..03b1636ac9e 100644 --- a/source/blender/draw/engines/eevee_next/shaders/eevee_surf_hybrid_frag.glsl +++ b/source/blender/draw/engines/eevee_next/shaders/eevee_surf_hybrid_frag.glsl @@ -9,6 +9,14 @@ * Some render-pass are written during this pass. */ +#include "infos/eevee_material_info.hh" + +FRAGMENT_SHADER_CREATE_INFO(eevee_node_tree) +FRAGMENT_SHADER_CREATE_INFO(eevee_geom_mesh) +FRAGMENT_SHADER_CREATE_INFO(eevee_surf_deferred_hybrid) +FRAGMENT_SHADER_CREATE_INFO(eevee_render_pass_out) +FRAGMENT_SHADER_CREATE_INFO(eevee_cryptomatte_out) + #include "common_hair_lib.glsl" #include "draw_view_lib.glsl" #include "eevee_ambient_occlusion_lib.glsl" diff --git a/source/blender/draw/engines/eevee_next/shaders/eevee_surf_lib.glsl b/source/blender/draw/engines/eevee_next/shaders/eevee_surf_lib.glsl index 57fabd6a467..3829f40c1c2 100644 --- a/source/blender/draw/engines/eevee_next/shaders/eevee_surf_lib.glsl +++ b/source/blender/draw/engines/eevee_next/shaders/eevee_surf_lib.glsl @@ -4,6 +4,10 @@ #pragma once +#include "infos/eevee_material_info.hh" + +SHADER_LIBRARY_CREATE_INFO(eevee_geom_mesh) + #include "draw_model_lib.glsl" #include "eevee_nodetree_lib.glsl" #include "eevee_sampling_lib.glsl" diff --git a/source/blender/draw/engines/eevee_next/shaders/eevee_surf_occupancy_frag.glsl b/source/blender/draw/engines/eevee_next/shaders/eevee_surf_occupancy_frag.glsl index dbb29c0afa0..5a8ccc80f3b 100644 --- a/source/blender/draw/engines/eevee_next/shaders/eevee_surf_occupancy_frag.glsl +++ b/source/blender/draw/engines/eevee_next/shaders/eevee_surf_occupancy_frag.glsl @@ -30,6 +30,11 @@ * */ +#include "infos/eevee_material_info.hh" + +FRAGMENT_SHADER_CREATE_INFO(eevee_geom_mesh) +FRAGMENT_SHADER_CREATE_INFO(eevee_surf_occupancy) + #include "eevee_nodetree_lib.glsl" #include "eevee_occupancy_lib.glsl" #include "eevee_sampling_lib.glsl" diff --git a/source/blender/draw/engines/eevee_next/shaders/eevee_surf_shadow_frag.glsl b/source/blender/draw/engines/eevee_next/shaders/eevee_surf_shadow_frag.glsl index 1ad2a0abd7b..4b861aa294a 100644 --- a/source/blender/draw/engines/eevee_next/shaders/eevee_surf_shadow_frag.glsl +++ b/source/blender/draw/engines/eevee_next/shaders/eevee_surf_shadow_frag.glsl @@ -11,6 +11,15 @@ * the destination texel. */ +#include "infos/eevee_material_info.hh" + +FRAGMENT_SHADER_CREATE_INFO(eevee_geom_mesh) +FRAGMENT_SHADER_CREATE_INFO(eevee_surf_shadow_atomic) + +#ifdef GLSL_CPP_STUBS +# define MAT_SHADOW +#endif + #include "draw_view_lib.glsl" #include "eevee_nodetree_lib.glsl" #include "eevee_sampling_lib.glsl" diff --git a/source/blender/draw/engines/eevee_next/shaders/eevee_surf_volume_frag.glsl b/source/blender/draw/engines/eevee_next/shaders/eevee_surf_volume_frag.glsl index 81fc89fb9db..09d4f345c85 100644 --- a/source/blender/draw/engines/eevee_next/shaders/eevee_surf_volume_frag.glsl +++ b/source/blender/draw/engines/eevee_next/shaders/eevee_surf_volume_frag.glsl @@ -7,10 +7,19 @@ /* Store volumetric properties into the froxel textures. */ +#include "infos/eevee_material_info.hh" + +#ifdef GLSL_CPP_STUBS +# define MAT_VOLUME +#endif + +FRAGMENT_SHADER_CREATE_INFO(eevee_geom_mesh) +FRAGMENT_SHADER_CREATE_INFO(eevee_surf_volume) + #include "eevee_volume_lib.glsl" /* Needed includes for shader nodes. */ -#include "eevee_attributes_lib.glsl" +#include "eevee_attributes_volume_lib.glsl" #include "eevee_nodetree_lib.glsl" #include "eevee_occupancy_lib.glsl" #include "eevee_sampling_lib.glsl" @@ -45,10 +54,10 @@ VolumeProperties eval_froxel(ivec3 froxel, float jitter) vec3 uvw = (vec3(froxel) + vec3(0.5, 0.5, 0.5 - jitter)) * uniform_buf.volumes.inv_tex_size; vec3 vP = volume_jitter_to_view(uvw); - vec3 wP = point_view_to_world(vP); + vec3 wP = drw_point_view_to_world(vP); #if !defined(MAT_GEOM_CURVES) && !defined(MAT_GEOM_POINT_CLOUD) # ifdef GRID_ATTRIBUTES - g_lP = point_world_to_object(wP); + g_lP = drw_point_world_to_object(wP); # else g_wP = wP; # endif diff --git a/source/blender/draw/engines/eevee_next/shaders/eevee_surf_world_frag.glsl b/source/blender/draw/engines/eevee_next/shaders/eevee_surf_world_frag.glsl index 0a90de63944..82a8687db08 100644 --- a/source/blender/draw/engines/eevee_next/shaders/eevee_surf_world_frag.glsl +++ b/source/blender/draw/engines/eevee_next/shaders/eevee_surf_world_frag.glsl @@ -8,8 +8,13 @@ * Outputs shading parameter per pixel using a set of randomized BSDFs. */ +#include "infos/eevee_material_info.hh" + +FRAGMENT_SHADER_CREATE_INFO(eevee_geom_world) +FRAGMENT_SHADER_CREATE_INFO(eevee_surf_world) + #include "draw_view_lib.glsl" -#include "eevee_attributes_lib.glsl" +#include "eevee_attributes_world_lib.glsl" #include "eevee_colorspace_lib.glsl" #include "eevee_lightprobe_sphere_lib.glsl" #include "eevee_lightprobe_volume_eval_lib.glsl" diff --git a/source/blender/draw/engines/eevee_next/shaders/eevee_surfel_cluster_build_comp.glsl b/source/blender/draw/engines/eevee_next/shaders/eevee_surfel_cluster_build_comp.glsl index e4ae0bdaa4d..06f80f26c1c 100644 --- a/source/blender/draw/engines/eevee_next/shaders/eevee_surfel_cluster_build_comp.glsl +++ b/source/blender/draw/engines/eevee_next/shaders/eevee_surfel_cluster_build_comp.glsl @@ -10,6 +10,10 @@ * Dispatch 1 thread per surfel. */ +#include "infos/eevee_lightprobe_volume_info.hh" + +COMPUTE_SHADER_CREATE_INFO(eevee_surfel_cluster_build) + #include "eevee_surfel_list_lib.glsl" void main() diff --git a/source/blender/draw/engines/eevee_next/shaders/eevee_surfel_light_comp.glsl b/source/blender/draw/engines/eevee_next/shaders/eevee_surfel_light_comp.glsl index d2bbb878607..e103d11bef5 100644 --- a/source/blender/draw/engines/eevee_next/shaders/eevee_surfel_light_comp.glsl +++ b/source/blender/draw/engines/eevee_next/shaders/eevee_surfel_light_comp.glsl @@ -6,6 +6,14 @@ * Apply lights contribution to scene surfel representation. */ +#include "infos/eevee_lightprobe_volume_info.hh" + +#ifdef GLSL_CPP_STUBS +# define LIGHT_ITER_FORCE_NO_CULLING +#endif + +COMPUTE_SHADER_CREATE_INFO(eevee_surfel_light) + #include "eevee_light_eval_lib.glsl" #ifndef LIGHT_ITER_FORCE_NO_CULLING diff --git a/source/blender/draw/engines/eevee_next/shaders/eevee_surfel_list_build_comp.glsl b/source/blender/draw/engines/eevee_next/shaders/eevee_surfel_list_build_comp.glsl index 8cffc15f542..226bb9f7408 100644 --- a/source/blender/draw/engines/eevee_next/shaders/eevee_surfel_list_build_comp.glsl +++ b/source/blender/draw/engines/eevee_next/shaders/eevee_surfel_list_build_comp.glsl @@ -13,6 +13,10 @@ * Dispatch 1 thread per surfel. */ +#include "infos/eevee_lightprobe_volume_info.hh" + +COMPUTE_SHADER_CREATE_INFO(eevee_surfel_list_build) + #include "eevee_surfel_list_lib.glsl" #include "gpu_shader_math_base_lib.glsl" #include "gpu_shader_utildefines_lib.glsl" diff --git a/source/blender/draw/engines/eevee_next/shaders/eevee_surfel_list_sort_comp.glsl b/source/blender/draw/engines/eevee_next/shaders/eevee_surfel_list_sort_comp.glsl index d72734091fd..5395a5ac193 100644 --- a/source/blender/draw/engines/eevee_next/shaders/eevee_surfel_list_sort_comp.glsl +++ b/source/blender/draw/engines/eevee_next/shaders/eevee_surfel_list_sort_comp.glsl @@ -12,6 +12,10 @@ * Dispatched as 1 thread per list. */ +#include "infos/eevee_lightprobe_volume_info.hh" + +COMPUTE_SHADER_CREATE_INFO(eevee_surfel_list_sort) + #include "gpu_shader_utildefines_lib.glsl" /** diff --git a/source/blender/draw/engines/eevee_next/shaders/eevee_surfel_ray_comp.glsl b/source/blender/draw/engines/eevee_next/shaders/eevee_surfel_ray_comp.glsl index afeecd389a7..7efd837e9ee 100644 --- a/source/blender/draw/engines/eevee_next/shaders/eevee_surfel_ray_comp.glsl +++ b/source/blender/draw/engines/eevee_next/shaders/eevee_surfel_ray_comp.glsl @@ -11,6 +11,10 @@ * Dispatched as 1 thread per surfel. */ +#include "infos/eevee_lightprobe_volume_info.hh" + +COMPUTE_SHADER_CREATE_INFO(eevee_surfel_ray) + #include "draw_view_lib.glsl" #include "eevee_lightprobe_sphere_lib.glsl" #include "gpu_shader_math_base_lib.glsl" diff --git a/source/blender/draw/engines/eevee_next/shaders/eevee_thickness_lib.glsl b/source/blender/draw/engines/eevee_next/shaders/eevee_thickness_lib.glsl index 7a6fa67dac4..126370ac138 100644 --- a/source/blender/draw/engines/eevee_next/shaders/eevee_thickness_lib.glsl +++ b/source/blender/draw/engines/eevee_next/shaders/eevee_thickness_lib.glsl @@ -4,6 +4,8 @@ #pragma once +#include "gpu_glsl_cpp_stubs.hh" + struct ThicknessIsect { /* Normal at the intersection point on the sphere. */ vec3 hit_N; diff --git a/source/blender/draw/engines/eevee_next/shaders/eevee_transparency_lib.glsl b/source/blender/draw/engines/eevee_next/shaders/eevee_transparency_lib.glsl index d951a815fae..00ac86a644e 100644 --- a/source/blender/draw/engines/eevee_next/shaders/eevee_transparency_lib.glsl +++ b/source/blender/draw/engines/eevee_next/shaders/eevee_transparency_lib.glsl @@ -4,6 +4,8 @@ #pragma once +#include "gpu_glsl_cpp_stubs.hh" + /* From the paper "Hashed Alpha Testing" by Chris Wyman and Morgan McGuire. */ float transparency_hash(vec2 a) { diff --git a/source/blender/draw/engines/eevee_next/shaders/eevee_velocity_lib.glsl b/source/blender/draw/engines/eevee_next/shaders/eevee_velocity_lib.glsl index 25d5b90b0c1..f33b26a9a83 100644 --- a/source/blender/draw/engines/eevee_next/shaders/eevee_velocity_lib.glsl +++ b/source/blender/draw/engines/eevee_next/shaders/eevee_velocity_lib.glsl @@ -4,6 +4,10 @@ #pragma once +#include "infos/eevee_velocity_info.hh" + +SHADER_LIBRARY_CREATE_INFO(eevee_velocity_camera) + #include "draw_view_lib.glsl" #include "eevee_camera_lib.glsl" #include "gpu_shader_math_matrix_lib.glsl" diff --git a/source/blender/draw/engines/eevee_next/shaders/eevee_vertex_copy_comp.glsl b/source/blender/draw/engines/eevee_next/shaders/eevee_vertex_copy_comp.glsl index ae73a65a24a..ce53d72ff12 100644 --- a/source/blender/draw/engines/eevee_next/shaders/eevee_vertex_copy_comp.glsl +++ b/source/blender/draw/engines/eevee_next/shaders/eevee_vertex_copy_comp.glsl @@ -2,6 +2,10 @@ * * SPDX-License-Identifier: GPL-2.0-or-later */ +#include "infos/eevee_velocity_info.hh" + +COMPUTE_SHADER_CREATE_INFO(eevee_vertex_copy) + #include "gpu_shader_math_base_lib.glsl" void main() diff --git a/source/blender/draw/engines/eevee_next/shaders/eevee_volume_integration_comp.glsl b/source/blender/draw/engines/eevee_next/shaders/eevee_volume_integration_comp.glsl index efa85328ad6..bf101158aaa 100644 --- a/source/blender/draw/engines/eevee_next/shaders/eevee_volume_integration_comp.glsl +++ b/source/blender/draw/engines/eevee_next/shaders/eevee_volume_integration_comp.glsl @@ -8,6 +8,10 @@ /* Step 3 : Integrate for each froxel the final amount of light * scattered back to the viewer and the amount of transmittance. */ +#include "infos/eevee_volume_info.hh" + +COMPUTE_SHADER_CREATE_INFO(eevee_volume_integration) + #include "draw_view_lib.glsl" #include "eevee_volume_lib.glsl" diff --git a/source/blender/draw/engines/eevee_next/shaders/eevee_volume_lib.glsl b/source/blender/draw/engines/eevee_next/shaders/eevee_volume_lib.glsl index 6969091086c..7a0a8a4e4f1 100644 --- a/source/blender/draw/engines/eevee_next/shaders/eevee_volume_lib.glsl +++ b/source/blender/draw/engines/eevee_next/shaders/eevee_volume_lib.glsl @@ -4,6 +4,10 @@ #pragma once +#include "infos/eevee_common_info.hh" + +SHADER_LIBRARY_CREATE_INFO(eevee_global_ubo) + /** * The resources expected to be defined are: * - uniform_buf.volumes diff --git a/source/blender/draw/engines/eevee_next/shaders/eevee_volume_resolve_frag.glsl b/source/blender/draw/engines/eevee_next/shaders/eevee_volume_resolve_frag.glsl index e9a864f01ae..5e883614395 100644 --- a/source/blender/draw/engines/eevee_next/shaders/eevee_volume_resolve_frag.glsl +++ b/source/blender/draw/engines/eevee_next/shaders/eevee_volume_resolve_frag.glsl @@ -7,6 +7,10 @@ /* Step 4 : Apply final integration on top of the scene color. */ +#include "infos/eevee_volume_info.hh" + +FRAGMENT_SHADER_CREATE_INFO(eevee_volume_resolve) + #include "eevee_volume_lib.glsl" void main() diff --git a/source/blender/draw/engines/eevee_next/shaders/eevee_volume_scatter_comp.glsl b/source/blender/draw/engines/eevee_next/shaders/eevee_volume_scatter_comp.glsl index cf6e7b719f3..880f465a2f1 100644 --- a/source/blender/draw/engines/eevee_next/shaders/eevee_volume_scatter_comp.glsl +++ b/source/blender/draw/engines/eevee_next/shaders/eevee_volume_scatter_comp.glsl @@ -8,6 +8,10 @@ /* Step 2 : Evaluate all light scattering for each froxels. * Also do the temporal reprojection to fight aliasing artifacts. */ +#include "infos/eevee_volume_info.hh" + +COMPUTE_SHADER_CREATE_INFO(eevee_volume_scatter) + #include "gpu_shader_math_vector_lib.glsl" /* Included here to avoid requiring lightprobe resources for all volume lib users. */ diff --git a/source/blender/draw/engines/eevee_next/shaders/infos/eevee_ambient_occlusion_info.hh b/source/blender/draw/engines/eevee_next/shaders/infos/eevee_ambient_occlusion_info.hh index 7150b22a7b8..2eee02a3bbe 100644 --- a/source/blender/draw/engines/eevee_next/shaders/infos/eevee_ambient_occlusion_info.hh +++ b/source/blender/draw/engines/eevee_next/shaders/infos/eevee_ambient_occlusion_info.hh @@ -2,6 +2,16 @@ * * SPDX-License-Identifier: GPL-2.0-or-later */ +#ifdef GPU_SHADER +# pragma once +# include "gpu_glsl_cpp_stubs.hh" + +# include "draw_view_info.hh" +# include "eevee_common_info.hh" + +# define HORIZON_OCCLUSION +#endif + #include "eevee_defines.hh" #include "gpu_shader_create_info.hh" diff --git a/source/blender/draw/engines/eevee_next/shaders/infos/eevee_common_info.hh b/source/blender/draw/engines/eevee_next/shaders/infos/eevee_common_info.hh new file mode 100644 index 00000000000..64744bbd411 --- /dev/null +++ b/source/blender/draw/engines/eevee_next/shaders/infos/eevee_common_info.hh @@ -0,0 +1,157 @@ +/* SPDX-FileCopyrightText: 2023 Blender Authors + * + * SPDX-License-Identifier: GPL-2.0-or-later */ + +#ifdef GPU_SHADER +# pragma once +# include "gpu_glsl_cpp_stubs.hh" + +# include "draw_object_infos_info.hh" +# include "draw_view_info.hh" +# include "eevee_shader_shared.hh" + +# define EEVEE_SAMPLING_DATA +# define EEVEE_UTILITY_TX +# define MAT_CLIP_PLANE +# define PLANAR_PROBES +# define MAT_RENDER_PASS_SUPPORT + +/* Stub for C++ compilation. */ +struct NodeTree { + float crypto_hash; + float _pad0; + float _pad1; + float _pad2; +}; +#endif + +#include "eevee_defines.hh" +#include "gpu_shader_create_info.hh" + +/* -------------------------------------------------------------------- */ +/** \name Common + * \{ */ + +/* Stub for C++ compilation. */ +/* TODO(fclem): Use it for actual interface. */ +GPU_SHADER_CREATE_INFO(eevee_node_tree) +UNIFORM_BUF(0 /*GPU_NODE_TREE_UBO_SLOT*/, NodeTree, node_tree) +GPU_SHADER_CREATE_END() + +GPU_SHADER_CREATE_INFO(eevee_shared) +TYPEDEF_SOURCE("eevee_defines.hh") +TYPEDEF_SOURCE("eevee_shader_shared.hh") +GPU_SHADER_CREATE_END() + +GPU_SHADER_CREATE_INFO(eevee_global_ubo) +UNIFORM_BUF(UNIFORM_BUF_SLOT, UniformData, uniform_buf) +GPU_SHADER_CREATE_END() + +GPU_SHADER_CREATE_INFO(eevee_hiz_data) +SAMPLER(HIZ_TEX_SLOT, FLOAT_2D, hiz_tx) +ADDITIONAL_INFO(eevee_global_ubo) +GPU_SHADER_CREATE_END() + +GPU_SHADER_CREATE_INFO(eevee_sampling_data) +DEFINE("EEVEE_SAMPLING_DATA") +ADDITIONAL_INFO(eevee_shared) +STORAGE_BUF(SAMPLING_BUF_SLOT, READ, SamplingData, sampling_buf) +GPU_SHADER_CREATE_END() + +GPU_SHADER_CREATE_INFO(eevee_utility_texture) +DEFINE("EEVEE_UTILITY_TX") +SAMPLER(RBUFS_UTILITY_TEX_SLOT, FLOAT_2D_ARRAY, utility_tx) +GPU_SHADER_CREATE_END() + +GPU_SHADER_NAMED_INTERFACE_INFO(eevee_clip_plane_iface, clip_interp) +SMOOTH(FLOAT, clip_distance) +GPU_SHADER_NAMED_INTERFACE_END(clip_interp) + +GPU_SHADER_CREATE_INFO(eevee_clip_plane) +VERTEX_OUT(eevee_clip_plane_iface) +UNIFORM_BUF(CLIP_PLANE_BUF, ClipPlaneData, clip_plane) +DEFINE("MAT_CLIP_PLANE") +GPU_SHADER_CREATE_END() + +GPU_SHADER_CREATE_INFO(eevee_lightprobe_sphere_data) +DEFINE("SPHERE_PROBE") +UNIFORM_BUF(SPHERE_PROBE_BUF_SLOT, SphereProbeData, lightprobe_sphere_buf[SPHERE_PROBE_MAX]) +SAMPLER(SPHERE_PROBE_TEX_SLOT, FLOAT_2D_ARRAY, lightprobe_spheres_tx) +GPU_SHADER_CREATE_END() + +GPU_SHADER_CREATE_INFO(eevee_volume_probe_data) +UNIFORM_BUF(IRRADIANCE_GRID_BUF_SLOT, VolumeProbeData, grids_infos_buf[IRRADIANCE_GRID_MAX]) +/* NOTE: Use uint instead of IrradianceBrickPacked because Metal needs to know the exact type. + */ +STORAGE_BUF(IRRADIANCE_BRICK_BUF_SLOT, READ, uint, bricks_infos_buf[]) +SAMPLER(VOLUME_PROBE_TEX_SLOT, FLOAT_3D, irradiance_atlas_tx) +DEFINE("IRRADIANCE_GRID_SAMPLING") +GPU_SHADER_CREATE_END() + +GPU_SHADER_CREATE_INFO(eevee_lightprobe_planar_data) +DEFINE("SPHERE_PROBE") +UNIFORM_BUF(PLANAR_PROBE_BUF_SLOT, PlanarProbeData, probe_planar_buf[PLANAR_PROBE_MAX]) +SAMPLER(PLANAR_PROBE_RADIANCE_TEX_SLOT, FLOAT_2D_ARRAY, planar_radiance_tx) +SAMPLER(PLANAR_PROBE_DEPTH_TEX_SLOT, DEPTH_2D_ARRAY, planar_depth_tx) +GPU_SHADER_CREATE_END() + +GPU_SHADER_CREATE_INFO(eevee_lightprobe_data) +ADDITIONAL_INFO(eevee_lightprobe_sphere_data) +ADDITIONAL_INFO(eevee_volume_probe_data) +GPU_SHADER_CREATE_END() + +GPU_SHADER_CREATE_INFO(eevee_light_data) +STORAGE_BUF(LIGHT_CULL_BUF_SLOT, READ, LightCullingData, light_cull_buf) +STORAGE_BUF(LIGHT_BUF_SLOT, READ, LightData, light_buf[]) +STORAGE_BUF(LIGHT_ZBIN_BUF_SLOT, READ, uint, light_zbin_buf[]) +STORAGE_BUF(LIGHT_TILE_BUF_SLOT, READ, uint, light_tile_buf[]) +GPU_SHADER_CREATE_END() + +GPU_SHADER_CREATE_INFO(eevee_shadow_data) +/* SHADOW_READ_ATOMIC macro indicating shadow functions should use `usampler2DArrayAtomic` as + * the atlas type. */ +DEFINE("SHADOW_READ_ATOMIC") +BUILTINS(BuiltinBits::TEXTURE_ATOMIC) +SAMPLER(SHADOW_ATLAS_TEX_SLOT, UINT_2D_ARRAY_ATOMIC, shadow_atlas_tx) +SAMPLER(SHADOW_TILEMAPS_TEX_SLOT, UINT_2D, shadow_tilemaps_tx) +GPU_SHADER_CREATE_END() + +GPU_SHADER_CREATE_INFO(eevee_shadow_data_non_atomic) +SAMPLER(SHADOW_ATLAS_TEX_SLOT, UINT_2D_ARRAY, shadow_atlas_tx) +SAMPLER(SHADOW_TILEMAPS_TEX_SLOT, UINT_2D, shadow_tilemaps_tx) +GPU_SHADER_CREATE_END() + +GPU_SHADER_CREATE_INFO(eevee_surfel_common) +STORAGE_BUF(SURFEL_BUF_SLOT, READ_WRITE, Surfel, surfel_buf[]) +STORAGE_BUF(CAPTURE_BUF_SLOT, READ, CaptureInfoData, capture_info_buf) +GPU_SHADER_CREATE_END() + +GPU_SHADER_CREATE_INFO(eevee_volume_properties_data) +ADDITIONAL_INFO(eevee_global_ubo) +IMAGE(VOLUME_PROP_SCATTERING_IMG_SLOT, GPU_R11F_G11F_B10F, READ, FLOAT_3D, in_scattering_img) +IMAGE(VOLUME_PROP_EXTINCTION_IMG_SLOT, GPU_R11F_G11F_B10F, READ, FLOAT_3D, in_extinction_img) +IMAGE(VOLUME_PROP_EMISSION_IMG_SLOT, GPU_R11F_G11F_B10F, READ, FLOAT_3D, in_emission_img) +IMAGE(VOLUME_PROP_PHASE_IMG_SLOT, GPU_R16F, READ, FLOAT_3D, in_phase_img) +IMAGE(VOLUME_PROP_PHASE_WEIGHT_IMG_SLOT, GPU_R16F, READ, FLOAT_3D, in_phase_weight_img) +GPU_SHADER_CREATE_END() + +GPU_SHADER_CREATE_INFO(eevee_gbuffer_data) +DEFINE("GBUFFER_LOAD") +SAMPLER(12, UINT_2D, gbuf_header_tx) +SAMPLER(13, FLOAT_2D_ARRAY, gbuf_closure_tx) +SAMPLER(14, FLOAT_2D_ARRAY, gbuf_normal_tx) +GPU_SHADER_CREATE_END() + +GPU_SHADER_CREATE_INFO(eevee_render_pass_out) +DEFINE("MAT_RENDER_PASS_SUPPORT") +ADDITIONAL_INFO(eevee_global_ubo) +IMAGE_FREQ(RBUFS_COLOR_SLOT, GPU_RGBA16F, WRITE, FLOAT_2D_ARRAY, rp_color_img, PASS) +IMAGE_FREQ(RBUFS_VALUE_SLOT, GPU_R16F, WRITE, FLOAT_2D_ARRAY, rp_value_img, PASS) +GPU_SHADER_CREATE_END() + +GPU_SHADER_CREATE_INFO(eevee_cryptomatte_out) +STORAGE_BUF(CRYPTOMATTE_BUF_SLOT, READ, vec2, cryptomatte_object_buf[]) +IMAGE_FREQ(RBUFS_CRYPTOMATTE_SLOT, GPU_RGBA32F, WRITE, FLOAT_2D, rp_cryptomatte_img, PASS) +GPU_SHADER_CREATE_END() + +/** \} */ diff --git a/source/blender/draw/engines/eevee_next/shaders/infos/eevee_deferred_info.hh b/source/blender/draw/engines/eevee_next/shaders/infos/eevee_deferred_info.hh index 48a7e3eb4e7..d765eed590b 100644 --- a/source/blender/draw/engines/eevee_next/shaders/infos/eevee_deferred_info.hh +++ b/source/blender/draw/engines/eevee_next/shaders/infos/eevee_deferred_info.hh @@ -2,6 +2,15 @@ * * SPDX-License-Identifier: GPL-2.0-or-later */ +#ifdef GPU_SHADER +# pragma once +# include "gpu_glsl_cpp_stubs.hh" + +# include "draw_fullscreen_info.hh" +# include "draw_view_info.hh" +# include "eevee_common_info.hh" +#endif + #include "eevee_defines.hh" #include "gpu_shader_create_info.hh" @@ -37,13 +46,6 @@ GPU_SHADER_CREATE_END() /** \} */ -GPU_SHADER_CREATE_INFO(eevee_gbuffer_data) -DEFINE("GBUFFER_LOAD") -SAMPLER(12, UINT_2D, gbuf_header_tx) -SAMPLER(13, FLOAT_2D_ARRAY, gbuf_closure_tx) -SAMPLER(14, FLOAT_2D_ARRAY, gbuf_normal_tx) -GPU_SHADER_CREATE_END() - GPU_SHADER_CREATE_INFO(eevee_deferred_tile_classify) FRAGMENT_SOURCE("eevee_deferred_tile_classify_frag.glsl") ADDITIONAL_INFO(eevee_shared) diff --git a/source/blender/draw/engines/eevee_next/shaders/infos/eevee_depth_of_field_info.hh b/source/blender/draw/engines/eevee_next/shaders/infos/eevee_depth_of_field_info.hh index bd8814b44c7..ad5ea8062e2 100644 --- a/source/blender/draw/engines/eevee_next/shaders/infos/eevee_depth_of_field_info.hh +++ b/source/blender/draw/engines/eevee_next/shaders/infos/eevee_depth_of_field_info.hh @@ -2,9 +2,29 @@ * * SPDX-License-Identifier: GPL-2.0-or-later */ +#ifdef GPU_SHADER +# pragma once +# include "BLI_utildefines_variadic.h" + +# include "gpu_glsl_cpp_stubs.hh" + +# include "draw_view_info.hh" +# include "eevee_common_info.hh" +# include "eevee_shader_shared.hh" +# include "eevee_velocity_info.hh" + +# define DOF_BOKEH_TEXTURE true +# define DILATE_MODE_MIN_MAX true +#endif + #include "eevee_defines.hh" #include "gpu_shader_create_info.hh" +GPU_SHADER_CREATE_INFO(eevee_depth_of_field_tiles_common) +IMAGE(0, GPU_R11F_G11F_B10F, READ, FLOAT_2D, in_tiles_fg_img) +IMAGE(1, GPU_R11F_G11F_B10F, READ, FLOAT_2D, in_tiles_bg_img) +GPU_SHADER_CREATE_END() + /* -------------------------------------------------------------------- */ /** \name Setup * \{ */ @@ -127,11 +147,6 @@ DEFINE_VALUE("DILATE_MODE_MIN_MAX", "true") ADDITIONAL_INFO(eevee_depth_of_field_tiles_dilate) GPU_SHADER_CREATE_END() -GPU_SHADER_CREATE_INFO(eevee_depth_of_field_tiles_common) -IMAGE(0, GPU_R11F_G11F_B10F, READ, FLOAT_2D, in_tiles_fg_img) -IMAGE(1, GPU_R11F_G11F_B10F, READ, FLOAT_2D, in_tiles_bg_img) -GPU_SHADER_CREATE_END() - /** \} */ /* -------------------------------------------------------------------- */ diff --git a/source/blender/draw/engines/eevee_next/shaders/infos/eevee_film_info.hh b/source/blender/draw/engines/eevee_next/shaders/infos/eevee_film_info.hh index 091e80993a0..4a84745958d 100644 --- a/source/blender/draw/engines/eevee_next/shaders/infos/eevee_film_info.hh +++ b/source/blender/draw/engines/eevee_next/shaders/infos/eevee_film_info.hh @@ -2,6 +2,17 @@ * * SPDX-License-Identifier: GPL-2.0-or-later */ +#ifdef GPU_SHADER +# pragma once +# include "gpu_glsl_cpp_stubs.hh" + +# include "draw_fullscreen_info.hh" +# include "draw_view_info.hh" +# include "eevee_common_info.hh" +# include "eevee_shader_shared.hh" +# include "eevee_velocity_info.hh" +#endif + #include "eevee_defines.hh" #include "gpu_shader_create_info.hh" diff --git a/source/blender/draw/engines/eevee_next/shaders/infos/eevee_hiz_info.hh b/source/blender/draw/engines/eevee_next/shaders/infos/eevee_hiz_info.hh index 751b2f20631..ed57393ff0e 100644 --- a/source/blender/draw/engines/eevee_next/shaders/infos/eevee_hiz_info.hh +++ b/source/blender/draw/engines/eevee_next/shaders/infos/eevee_hiz_info.hh @@ -2,14 +2,18 @@ * * SPDX-License-Identifier: GPL-2.0-or-later */ +#ifdef GPU_SHADER +# pragma once +# include "gpu_glsl_cpp_stubs.hh" + +# include "draw_fullscreen_info.hh" +# include "draw_view_info.hh" +# include "eevee_common_info.hh" +#endif + #include "eevee_defines.hh" #include "gpu_shader_create_info.hh" -GPU_SHADER_CREATE_INFO(eevee_hiz_data) -SAMPLER(HIZ_TEX_SLOT, FLOAT_2D, hiz_tx) -ADDITIONAL_INFO(eevee_global_ubo) -GPU_SHADER_CREATE_END() - GPU_SHADER_CREATE_INFO(eevee_hiz_update_base) LOCAL_GROUP_SIZE(FILM_GROUP_SIZE, FILM_GROUP_SIZE) STORAGE_BUF(0, READ_WRITE, uint, finished_tile_counter) diff --git a/source/blender/draw/engines/eevee_next/shaders/infos/eevee_light_culling_info.hh b/source/blender/draw/engines/eevee_next/shaders/infos/eevee_light_culling_info.hh index 14d884da5f3..354dfad0f0b 100644 --- a/source/blender/draw/engines/eevee_next/shaders/infos/eevee_light_culling_info.hh +++ b/source/blender/draw/engines/eevee_next/shaders/infos/eevee_light_culling_info.hh @@ -2,22 +2,22 @@ * * SPDX-License-Identifier: GPL-2.0-or-later */ +#ifdef GPU_SHADER +# pragma once +# include "gpu_glsl_cpp_stubs.hh" + +# include "draw_fullscreen_info.hh" +# include "draw_object_infos_info.hh" +# include "draw_view_info.hh" +# include "eevee_common_info.hh" +# include "eevee_shader_shared.hh" + +# define SPHERE_PROBE +#endif + #include "eevee_defines.hh" #include "gpu_shader_create_info.hh" -/* -------------------------------------------------------------------- */ -/** \name Shared - * \{ */ - -GPU_SHADER_CREATE_INFO(eevee_light_data) -STORAGE_BUF(LIGHT_CULL_BUF_SLOT, READ, LightCullingData, light_cull_buf) -STORAGE_BUF(LIGHT_BUF_SLOT, READ, LightData, light_buf[]) -STORAGE_BUF(LIGHT_ZBIN_BUF_SLOT, READ, uint, light_zbin_buf[]) -STORAGE_BUF(LIGHT_TILE_BUF_SLOT, READ, uint, light_tile_buf[]) -GPU_SHADER_CREATE_END() - -/** \} */ - /* -------------------------------------------------------------------- */ /** \name Culling * \{ */ diff --git a/source/blender/draw/engines/eevee_next/shaders/infos/eevee_lightprobe_sphere_info.hh b/source/blender/draw/engines/eevee_next/shaders/infos/eevee_lightprobe_sphere_info.hh index d046954a462..89cdc53b396 100644 --- a/source/blender/draw/engines/eevee_next/shaders/infos/eevee_lightprobe_sphere_info.hh +++ b/source/blender/draw/engines/eevee_next/shaders/infos/eevee_lightprobe_sphere_info.hh @@ -2,19 +2,22 @@ * * SPDX-License-Identifier: GPL-2.0-or-later */ +#ifdef GPU_SHADER +# pragma once +# include "gpu_glsl_cpp_stubs.hh" + +# include "draw_object_infos_info.hh" +# include "draw_view_info.hh" +# include "eevee_common_info.hh" +# include "eevee_lightprobe_volume_info.hh" +# include "eevee_shader_shared.hh" + +# define SPHERE_PROBE +#endif + #include "eevee_defines.hh" #include "gpu_shader_create_info.hh" -/* -------------------------------------------------------------------- */ -/** \name Shared - * \{ */ - -GPU_SHADER_CREATE_INFO(eevee_lightprobe_sphere_data) -DEFINE("SPHERE_PROBE") -UNIFORM_BUF(SPHERE_PROBE_BUF_SLOT, SphereProbeData, lightprobe_sphere_buf[SPHERE_PROBE_MAX]) -SAMPLER(SPHERE_PROBE_TEX_SLOT, FLOAT_2D_ARRAY, lightprobe_spheres_tx) -GPU_SHADER_CREATE_END() - /* Sample cubemap and remap into an octahedral texture. */ GPU_SHADER_CREATE_INFO(eevee_lightprobe_sphere_remap) LOCAL_GROUP_SIZE(SPHERE_PROBE_REMAP_GROUP_SIZE, SPHERE_PROBE_REMAP_GROUP_SIZE) diff --git a/source/blender/draw/engines/eevee_next/shaders/infos/eevee_lightprobe_volume_info.hh b/source/blender/draw/engines/eevee_next/shaders/infos/eevee_lightprobe_volume_info.hh index 3221e6a465c..fad1f07aa0d 100644 --- a/source/blender/draw/engines/eevee_next/shaders/infos/eevee_lightprobe_volume_info.hh +++ b/source/blender/draw/engines/eevee_next/shaders/infos/eevee_lightprobe_volume_info.hh @@ -2,6 +2,18 @@ * * SPDX-License-Identifier: GPL-2.0-or-later */ +#ifdef GPU_SHADER +# pragma once +# include "gpu_glsl_cpp_stubs.hh" + +# include "draw_object_infos_info.hh" +# include "draw_view_info.hh" +# include "eevee_common_info.hh" +# include "eevee_shader_shared.hh" + +# define SPHERE_PROBE +#endif + #include "eevee_defines.hh" #include "gpu_shader_create_info.hh" @@ -76,11 +88,6 @@ GPU_SHADER_CREATE_END() /** \name Baking * \{ */ -GPU_SHADER_CREATE_INFO(eevee_surfel_common) -STORAGE_BUF(SURFEL_BUF_SLOT, READ_WRITE, Surfel, surfel_buf[]) -STORAGE_BUF(CAPTURE_BUF_SLOT, READ, CaptureInfoData, capture_info_buf) -GPU_SHADER_CREATE_END() - GPU_SHADER_CREATE_INFO(eevee_surfel_light) DEFINE("LIGHT_ITER_FORCE_NO_CULLING") DEFINE_VALUE("LIGHT_CLOSURE_EVAL_COUNT", "1") @@ -242,25 +249,4 @@ COMPUTE_SOURCE("eevee_lightprobe_volume_load_comp.glsl") DO_STATIC_COMPILATION() GPU_SHADER_CREATE_END() -GPU_SHADER_CREATE_INFO(eevee_volume_probe_data) -UNIFORM_BUF(IRRADIANCE_GRID_BUF_SLOT, VolumeProbeData, grids_infos_buf[IRRADIANCE_GRID_MAX]) -/* NOTE: Use uint instead of IrradianceBrickPacked because Metal needs to know the exact type. - */ -STORAGE_BUF(IRRADIANCE_BRICK_BUF_SLOT, READ, uint, bricks_infos_buf[]) -SAMPLER(VOLUME_PROBE_TEX_SLOT, FLOAT_3D, irradiance_atlas_tx) -DEFINE("IRRADIANCE_GRID_SAMPLING") -GPU_SHADER_CREATE_END() - -GPU_SHADER_CREATE_INFO(eevee_lightprobe_data) -ADDITIONAL_INFO(eevee_lightprobe_sphere_data) -ADDITIONAL_INFO(eevee_volume_probe_data) -GPU_SHADER_CREATE_END() - -GPU_SHADER_CREATE_INFO(eevee_lightprobe_planar_data) -DEFINE("SPHERE_PROBE") -UNIFORM_BUF(PLANAR_PROBE_BUF_SLOT, PlanarProbeData, probe_planar_buf[PLANAR_PROBE_MAX]) -SAMPLER(PLANAR_PROBE_RADIANCE_TEX_SLOT, FLOAT_2D_ARRAY, planar_radiance_tx) -SAMPLER(PLANAR_PROBE_DEPTH_TEX_SLOT, DEPTH_2D_ARRAY, planar_depth_tx) -GPU_SHADER_CREATE_END() - /** \} */ diff --git a/source/blender/draw/engines/eevee_next/shaders/infos/eevee_lookdev_info.hh b/source/blender/draw/engines/eevee_next/shaders/infos/eevee_lookdev_info.hh index d56e6fb841d..e34ccf7fe5b 100644 --- a/source/blender/draw/engines/eevee_next/shaders/infos/eevee_lookdev_info.hh +++ b/source/blender/draw/engines/eevee_next/shaders/infos/eevee_lookdev_info.hh @@ -2,6 +2,15 @@ * * SPDX-License-Identifier: GPL-2.0-or-later */ +#ifdef GPU_SHADER +# pragma once +# include "gpu_glsl_cpp_stubs.hh" + +# include "draw_view_info.hh" + +# define SPHERE_PROBE +#endif + #include "eevee_defines.hh" #include "gpu_shader_create_info.hh" diff --git a/source/blender/draw/engines/eevee_next/shaders/infos/eevee_lut_info.hh b/source/blender/draw/engines/eevee_next/shaders/infos/eevee_lut_info.hh index 16c838a1ace..43eea1c33fc 100644 --- a/source/blender/draw/engines/eevee_next/shaders/infos/eevee_lut_info.hh +++ b/source/blender/draw/engines/eevee_next/shaders/infos/eevee_lut_info.hh @@ -2,7 +2,15 @@ * * SPDX-License-Identifier: GPL-2.0-or-later */ +#ifdef GPU_SHADER +# pragma once +# include "gpu_glsl_cpp_stubs.hh" + +# include "eevee_common_info.hh" +#endif + #include "eevee_defines.hh" +#include "gpu_shader_create_info.hh" GPU_SHADER_CREATE_INFO(eevee_lut) LOCAL_GROUP_SIZE(LUT_WORKGROUP_SIZE, LUT_WORKGROUP_SIZE, 1) diff --git a/source/blender/draw/engines/eevee_next/shaders/infos/eevee_material_info.hh b/source/blender/draw/engines/eevee_next/shaders/infos/eevee_material_info.hh index 02d6627f79d..16c8657ac06 100644 --- a/source/blender/draw/engines/eevee_next/shaders/infos/eevee_material_info.hh +++ b/source/blender/draw/engines/eevee_next/shaders/infos/eevee_material_info.hh @@ -2,46 +2,34 @@ * * SPDX-License-Identifier: GPL-2.0-or-later */ +#ifdef GPU_SHADER +# pragma once +# include "BLI_utildefines_variadic.h" + +# include "gpu_glsl_cpp_stubs.hh" + +# include "draw_object_infos_info.hh" +# include "draw_view_info.hh" +# include "eevee_shader_shared.hh" + +# include "eevee_common_info.hh" +# include "eevee_volume_info.hh" + +# define HAIR_SHADER +# define DRW_HAIR_INFO + +# define POINTCLOUD_SHADER +# define DRW_POINTCLOUD_INFO + +# define SHADOW_UPDATE_ATOMIC_RASTER +# define MAT_TRANSPARENT + +# define thickness_mode 1.0 +#endif + #include "eevee_defines.hh" #include "gpu_shader_create_info.hh" -/* -------------------------------------------------------------------- */ -/** \name Common - * \{ */ - -/* TODO(@fclem): This is a bit out of place at the moment. */ -GPU_SHADER_CREATE_INFO(eevee_shared) -TYPEDEF_SOURCE("eevee_defines.hh") -TYPEDEF_SOURCE("eevee_shader_shared.hh") -GPU_SHADER_CREATE_END() - -GPU_SHADER_CREATE_INFO(eevee_global_ubo) -UNIFORM_BUF(UNIFORM_BUF_SLOT, UniformData, uniform_buf) -GPU_SHADER_CREATE_END() - -GPU_SHADER_CREATE_INFO(eevee_sampling_data) -DEFINE("EEVEE_SAMPLING_DATA") -ADDITIONAL_INFO(eevee_shared) -STORAGE_BUF(SAMPLING_BUF_SLOT, READ, SamplingData, sampling_buf) -GPU_SHADER_CREATE_END() - -GPU_SHADER_CREATE_INFO(eevee_utility_texture) -DEFINE("EEVEE_UTILITY_TX") -SAMPLER(RBUFS_UTILITY_TEX_SLOT, FLOAT_2D_ARRAY, utility_tx) -GPU_SHADER_CREATE_END() - -GPU_SHADER_NAMED_INTERFACE_INFO(eevee_clip_plane_iface, clip_interp) -SMOOTH(FLOAT, clip_distance) -GPU_SHADER_NAMED_INTERFACE_END(clip_interp) - -GPU_SHADER_CREATE_INFO(eevee_clip_plane) -VERTEX_OUT(eevee_clip_plane_iface) -UNIFORM_BUF(CLIP_PLANE_BUF, ClipPlaneData, clip_plane) -DEFINE("MAT_CLIP_PLANE") -GPU_SHADER_CREATE_END() - -/** \} */ - /* -------------------------------------------------------------------- */ /** \name Surface Mesh Type * \{ */ @@ -164,18 +152,6 @@ GPU_SHADER_CREATE_END() #define image_array_out(slot, qualifier, format, name) \ image(slot, format, qualifier, ImageType::FLOAT_2D_ARRAY, name, Frequency::PASS) -GPU_SHADER_CREATE_INFO(eevee_render_pass_out) -DEFINE("MAT_RENDER_PASS_SUPPORT") -ADDITIONAL_INFO(eevee_global_ubo) -IMAGE_FREQ(RBUFS_COLOR_SLOT, GPU_RGBA16F, WRITE, FLOAT_2D_ARRAY, rp_color_img, PASS) -IMAGE_FREQ(RBUFS_VALUE_SLOT, GPU_R16F, WRITE, FLOAT_2D_ARRAY, rp_value_img, PASS) -GPU_SHADER_CREATE_END() - -GPU_SHADER_CREATE_INFO(eevee_cryptomatte_out) -STORAGE_BUF(CRYPTOMATTE_BUF_SLOT, READ, vec2, cryptomatte_object_buf[]) -IMAGE_FREQ(RBUFS_CRYPTOMATTE_SLOT, GPU_RGBA32F, WRITE, FLOAT_2D, rp_cryptomatte_img, PASS) -GPU_SHADER_CREATE_END() - GPU_SHADER_CREATE_INFO(eevee_surf_deferred_base) DEFINE("MAT_DEFERRED") DEFINE("GBUFFER_WRITE") diff --git a/source/blender/draw/engines/eevee_next/shaders/infos/eevee_motion_blur_info.hh b/source/blender/draw/engines/eevee_next/shaders/infos/eevee_motion_blur_info.hh index abccab4170c..7837137c7fa 100644 --- a/source/blender/draw/engines/eevee_next/shaders/infos/eevee_motion_blur_info.hh +++ b/source/blender/draw/engines/eevee_next/shaders/infos/eevee_motion_blur_info.hh @@ -2,6 +2,15 @@ * * SPDX-License-Identifier: GPL-2.0-or-later */ +#ifdef GPU_SHADER +# pragma once +# include "gpu_glsl_cpp_stubs.hh" + +# include "draw_view_info.hh" +# include "eevee_common_info.hh" +# include "eevee_velocity_info.hh" +#endif + #include "eevee_defines.hh" #include "gpu_shader_create_info.hh" diff --git a/source/blender/draw/engines/eevee_next/shaders/infos/eevee_shadow_info.hh b/source/blender/draw/engines/eevee_next/shaders/infos/eevee_shadow_info.hh index 316298bb745..3a2fe9de2cf 100644 --- a/source/blender/draw/engines/eevee_next/shaders/infos/eevee_shadow_info.hh +++ b/source/blender/draw/engines/eevee_next/shaders/infos/eevee_shadow_info.hh @@ -2,6 +2,19 @@ * * SPDX-License-Identifier: GPL-2.0-or-later */ +#ifdef GPU_SHADER +# pragma once +# include "gpu_glsl_cpp_stubs.hh" + +# include "draw_fullscreen_info.hh" +# include "draw_object_infos_info.hh" +# include "draw_view_info.hh" +# include "eevee_common_info.hh" +# include "eevee_shader_shared.hh" + +# define SPHERE_PROBE +#endif + #include "draw_defines.hh" #include "eevee_defines.hh" @@ -307,26 +320,6 @@ GPU_SHADER_CREATE_END() /** \} */ -/* -------------------------------------------------------------------- */ -/** \name Shadow resources - * \{ */ - -GPU_SHADER_CREATE_INFO(eevee_shadow_data) -/* SHADOW_READ_ATOMIC macro indicating shadow functions should use `usampler2DArrayAtomic` as - * the atlas type. */ -DEFINE("SHADOW_READ_ATOMIC") -BUILTINS(BuiltinBits::TEXTURE_ATOMIC) -SAMPLER(SHADOW_ATLAS_TEX_SLOT, UINT_2D_ARRAY_ATOMIC, shadow_atlas_tx) -SAMPLER(SHADOW_TILEMAPS_TEX_SLOT, UINT_2D, shadow_tilemaps_tx) -GPU_SHADER_CREATE_END() - -GPU_SHADER_CREATE_INFO(eevee_shadow_data_non_atomic) -SAMPLER(SHADOW_ATLAS_TEX_SLOT, UINT_2D_ARRAY, shadow_atlas_tx) -SAMPLER(SHADOW_TILEMAPS_TEX_SLOT, UINT_2D, shadow_tilemaps_tx) -GPU_SHADER_CREATE_END() - -/** \} */ - /* -------------------------------------------------------------------- */ /** \name Debug * \{ */ diff --git a/source/blender/draw/engines/eevee_next/shaders/infos/eevee_subsurface_info.hh b/source/blender/draw/engines/eevee_next/shaders/infos/eevee_subsurface_info.hh index 9cbf7912e55..9b5f2afeb4a 100644 --- a/source/blender/draw/engines/eevee_next/shaders/infos/eevee_subsurface_info.hh +++ b/source/blender/draw/engines/eevee_next/shaders/infos/eevee_subsurface_info.hh @@ -2,6 +2,13 @@ * * SPDX-License-Identifier: GPL-2.0-or-later */ +#ifdef GPU_SHADER +# pragma once +# include "gpu_glsl_cpp_stubs.hh" + +# include "eevee_common_info.hh" +#endif + #include "eevee_defines.hh" #include "gpu_shader_create_info.hh" diff --git a/source/blender/draw/engines/eevee_next/shaders/infos/eevee_tracing_info.hh b/source/blender/draw/engines/eevee_next/shaders/infos/eevee_tracing_info.hh index ff2a2acd6a7..5ed6239f92d 100644 --- a/source/blender/draw/engines/eevee_next/shaders/infos/eevee_tracing_info.hh +++ b/source/blender/draw/engines/eevee_next/shaders/infos/eevee_tracing_info.hh @@ -2,6 +2,17 @@ * * SPDX-License-Identifier: GPL-2.0-or-later */ +#ifdef GPU_SHADER +# pragma once +# include "gpu_glsl_cpp_stubs.hh" + +# include "draw_view_info.hh" +# include "eevee_common_info.hh" +# include "eevee_shader_shared.hh" + +# define SPHERE_PROBE +#endif + #include "eevee_defines.hh" #include "gpu_shader_create_info.hh" diff --git a/source/blender/draw/engines/eevee_next/shaders/infos/eevee_velocity_info.hh b/source/blender/draw/engines/eevee_next/shaders/infos/eevee_velocity_info.hh index 4886ee77149..60d3a1fdc16 100644 --- a/source/blender/draw/engines/eevee_next/shaders/infos/eevee_velocity_info.hh +++ b/source/blender/draw/engines/eevee_next/shaders/infos/eevee_velocity_info.hh @@ -2,6 +2,17 @@ * * SPDX-License-Identifier: GPL-2.0-or-later */ +#ifdef GPU_SHADER +# pragma once +# include "gpu_glsl_cpp_stubs.hh" + +# include "draw_object_infos_info.hh" +# include "draw_view_info.hh" +# include "eevee_shader_shared.hh" + +# define VELOCITY_CAMERA +#endif + #include "eevee_defines.hh" #include "gpu_shader_create_info.hh" diff --git a/source/blender/draw/engines/eevee_next/shaders/infos/eevee_volume_info.hh b/source/blender/draw/engines/eevee_next/shaders/infos/eevee_volume_info.hh index d49d0a27267..329c7bce8b2 100644 --- a/source/blender/draw/engines/eevee_next/shaders/infos/eevee_volume_info.hh +++ b/source/blender/draw/engines/eevee_next/shaders/infos/eevee_volume_info.hh @@ -2,6 +2,19 @@ * * SPDX-License-Identifier: GPL-2.0-or-later */ +#ifdef GPU_SHADER +# pragma once +# include "gpu_glsl_cpp_stubs.hh" + +# include "draw_fullscreen_info.hh" +# include "draw_object_infos_info.hh" +# include "draw_view_info.hh" +# include "eevee_common_info.hh" +# include "eevee_shader_shared.hh" + +# define SPHERE_PROBE +#endif + #include "gpu_shader_create_info.hh" #pragma once @@ -15,15 +28,6 @@ SAMPLER(VOLUME_SCATTERING_TEX_SLOT, FLOAT_3D, volume_scattering_tx) SAMPLER(VOLUME_TRANSMITTANCE_TEX_SLOT, FLOAT_3D, volume_transmittance_tx) GPU_SHADER_CREATE_END() -GPU_SHADER_CREATE_INFO(eevee_volume_properties_data) -ADDITIONAL_INFO(eevee_global_ubo) -IMAGE(VOLUME_PROP_SCATTERING_IMG_SLOT, GPU_R11F_G11F_B10F, READ, FLOAT_3D, in_scattering_img) -IMAGE(VOLUME_PROP_EXTINCTION_IMG_SLOT, GPU_R11F_G11F_B10F, READ, FLOAT_3D, in_extinction_img) -IMAGE(VOLUME_PROP_EMISSION_IMG_SLOT, GPU_R11F_G11F_B10F, READ, FLOAT_3D, in_emission_img) -IMAGE(VOLUME_PROP_PHASE_IMG_SLOT, GPU_R16F, READ, FLOAT_3D, in_phase_img) -IMAGE(VOLUME_PROP_PHASE_WEIGHT_IMG_SLOT, GPU_R16F, READ, FLOAT_3D, in_phase_weight_img) -GPU_SHADER_CREATE_END() - GPU_SHADER_CREATE_INFO(eevee_volume_scatter) LOCAL_GROUP_SIZE(VOLUME_GROUP_SIZE, VOLUME_GROUP_SIZE, VOLUME_GROUP_SIZE) ADDITIONAL_INFO(eevee_shared) diff --git a/source/blender/draw/intern/shaders/draw_intersect_lib.glsl b/source/blender/draw/intern/shaders/draw_intersect_lib.glsl index cde9e315b0f..9fc038171ef 100644 --- a/source/blender/draw/intern/shaders/draw_intersect_lib.glsl +++ b/source/blender/draw/intern/shaders/draw_intersect_lib.glsl @@ -9,6 +9,8 @@ * Results are meant to be conservative. */ +#include "draw_view_info.hh" + #include "common_shape_lib.glsl" #include "draw_math_geom_lib.glsl" #include "gpu_shader_utildefines_lib.glsl" @@ -133,6 +135,7 @@ IsectFrustum isect_frustum_setup(Frustum shape) * \{ */ #ifdef DRW_VIEW_CULLING_INFO +SHADER_LIBRARY_CREATE_INFO(draw_view_culling) bool intersect_view(Pyramid pyramid) { diff --git a/source/blender/gpu/intern/gpu_shader_create_info_list.hh b/source/blender/gpu/intern/gpu_shader_create_info_list.hh index 350f71312f6..d71ff8917f8 100644 --- a/source/blender/gpu/intern/gpu_shader_create_info_list.hh +++ b/source/blender/gpu/intern/gpu_shader_create_info_list.hh @@ -122,6 +122,7 @@ /* EEVEE engine. */ #include "eevee_ambient_occlusion_info.hh" +#include "eevee_common_info.hh" #include "eevee_deferred_info.hh" #include "eevee_depth_of_field_info.hh" #include "eevee_film_info.hh" diff --git a/source/blender/gpu/shaders/gpu_glsl_cpp_stubs.hh b/source/blender/gpu/shaders/gpu_glsl_cpp_stubs.hh index 7e9b3092dc2..fb68bd7348c 100644 --- a/source/blender/gpu/shaders/gpu_glsl_cpp_stubs.hh +++ b/source/blender/gpu/shaders/gpu_glsl_cpp_stubs.hh @@ -457,8 +457,8 @@ template struct MatOp { MatT operator*(MatT) const RET; - friend ColT operator*(RowT, MatT) RET; - friend RowT operator*(MatT, ColT) RET; + friend RowT operator*(ColT, MatT) RET; + friend ColT operator*(MatT, RowT) RET; }; template struct MatBase<2, R> : MatOp<2, R> { diff --git a/source/blender/gpu/shaders/gpu_shader_codegen_lib.glsl b/source/blender/gpu/shaders/gpu_shader_codegen_lib.glsl index c6356721134..d140521231c 100644 --- a/source/blender/gpu/shaders/gpu_shader_codegen_lib.glsl +++ b/source/blender/gpu/shaders/gpu_shader_codegen_lib.glsl @@ -4,6 +4,8 @@ #pragma once +#include "gpu_glsl_cpp_stubs.hh" + vec3 calc_barycentric_distances(vec3 pos0, vec3 pos1, vec3 pos2) { vec3 edge21 = pos2 - pos1;