Welcome to mirror list, hosted at ThFree Co, Russian Federation.

git.blender.org/blender.git - Unnamed repository; edit this file 'description' to name the repository.
summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
Diffstat (limited to 'source/blender/draw/engines/eevee_next/shaders/infos/eevee_material_info.hh')
-rw-r--r--source/blender/draw/engines/eevee_next/shaders/infos/eevee_material_info.hh176
1 files changed, 176 insertions, 0 deletions
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
new file mode 100644
index 00000000000..13269d833e8
--- /dev/null
+++ b/source/blender/draw/engines/eevee_next/shaders/infos/eevee_material_info.hh
@@ -0,0 +1,176 @@
+
+#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_INFO(eevee_sampling_data)
+ .additional_info("eevee_shared")
+ .uniform_buf(14, "SamplingData", "sampling_buf");
+
+/** \} */
+
+/* -------------------------------------------------------------------- */
+/** \name Surface Mesh Type
+ * \{ */
+
+GPU_SHADER_CREATE_INFO(eevee_geom_mesh)
+ .define("MAT_GEOM_MESH")
+ .vertex_in(0, Type::VEC3, "pos")
+ .vertex_in(1, Type::VEC3, "nor")
+ .vertex_source("eevee_geom_mesh_vert.glsl")
+ .additional_info("draw_mesh", "draw_resource_id_varying", "draw_resource_handle");
+
+GPU_SHADER_CREATE_INFO(eevee_geom_gpencil)
+ .define("MAT_GEOM_GPENCIL")
+ .vertex_source("eevee_geom_gpencil_vert.glsl")
+ .additional_info("draw_gpencil", "draw_resource_id_varying", "draw_resource_handle");
+
+GPU_SHADER_CREATE_INFO(eevee_geom_curves)
+ .define("MAT_GEOM_CURVES")
+ .vertex_source("eevee_geom_curves_vert.glsl")
+ .additional_info("draw_hair", "draw_resource_id_varying", "draw_resource_handle");
+
+GPU_SHADER_CREATE_INFO(eevee_geom_world)
+ .define("MAT_GEOM_WORLD")
+ .builtins(BuiltinBits::VERTEX_ID)
+ .vertex_source("eevee_geom_world_vert.glsl")
+ .additional_info("draw_modelmat", "draw_resource_id_varying", "draw_resource_handle");
+
+/** \} */
+
+/* -------------------------------------------------------------------- */
+/** \name Surface
+ * \{ */
+
+GPU_SHADER_INTERFACE_INFO(eevee_surf_iface, "interp")
+ .smooth(Type::VEC3, "P")
+ .smooth(Type::VEC3, "N")
+ .smooth(Type::VEC2, "barycentric_coords")
+ .smooth(Type::VEC3, "curves_binormal")
+ .smooth(Type::FLOAT, "curves_time")
+ .smooth(Type::FLOAT, "curves_time_width")
+ .smooth(Type::FLOAT, "curves_thickness")
+ .flat(Type::INT, "curves_strand_id");
+
+#define image_out(slot, qualifier, format, name) \
+ image(slot, format, qualifier, ImageType::FLOAT_2D, name, Frequency::PASS)
+
+GPU_SHADER_CREATE_INFO(eevee_surf_deferred)
+ .vertex_out(eevee_surf_iface)
+ /* Note: This removes the possibility of using gl_FragDepth. */
+ // .early_fragment_test(true)
+ /* Direct output. */
+ .fragment_out(0, Type::VEC4, "out_radiance", DualBlend::SRC_0)
+ .fragment_out(0, Type::VEC4, "out_transmittance", DualBlend::SRC_1)
+ /* Gbuffer. */
+ // .image_out(0, Qualifier::WRITE, GPU_R11F_G11F_B10F, "gbuff_transmit_color")
+ // .image_out(1, Qualifier::WRITE, GPU_R11F_G11F_B10F, "gbuff_transmit_data")
+ // .image_out(2, Qualifier::WRITE, GPU_RGBA16F, "gbuff_transmit_normal")
+ // .image_out(3, Qualifier::WRITE, GPU_R11F_G11F_B10F, "gbuff_reflection_color")
+ // .image_out(4, Qualifier::WRITE, GPU_RGBA16F, "gbuff_reflection_normal")
+ // .image_out(5, Qualifier::WRITE, GPU_R11F_G11F_B10F, "gbuff_emission")
+ /* Renderpasses. */
+ // .image_out(6, Qualifier::READ_WRITE, GPU_RGBA16F, "rpass_volume_light")
+ /* TODO: AOVs maybe? */
+ .fragment_source("eevee_surf_deferred_frag.glsl")
+ // .additional_info("eevee_sampling_data", "eevee_utility_texture")
+ ;
+
+#undef image_out
+
+GPU_SHADER_CREATE_INFO(eevee_surf_forward)
+ .auto_resource_location(true)
+ .vertex_out(eevee_surf_iface)
+ .fragment_out(0, Type::VEC4, "out_radiance", DualBlend::SRC_0)
+ .fragment_out(0, Type::VEC4, "out_transmittance", DualBlend::SRC_1)
+ .fragment_source("eevee_surf_forward_frag.glsl")
+ // .additional_info("eevee_sampling_data",
+ // "eevee_lightprobe_data",
+ /* Optionnally added depending on the material. */
+ // "eevee_raytrace_data",
+ // "eevee_transmittance_data",
+ // "eevee_utility_texture",
+ // "eevee_light_data",
+ // "eevee_shadow_data"
+ // )
+ ;
+
+GPU_SHADER_CREATE_INFO(eevee_surf_depth)
+ .vertex_out(eevee_surf_iface)
+ .fragment_source("eevee_surf_depth_frag.glsl")
+ // .additional_info("eevee_sampling_data", "eevee_utility_texture")
+ ;
+
+GPU_SHADER_CREATE_INFO(eevee_surf_world)
+ .vertex_out(eevee_surf_iface)
+ .fragment_out(0, Type::VEC4, "out_background")
+ .fragment_source("eevee_surf_world_frag.glsl")
+ // .additional_info("eevee_utility_texture")
+ ;
+
+/** \} */
+
+/* -------------------------------------------------------------------- */
+/** \name Volume
+ * \{ */
+
+#if 0 /* TODO */
+GPU_SHADER_INTERFACE_INFO(eevee_volume_iface, "interp")
+ .smooth(Type::VEC3, "P_start")
+ .smooth(Type::VEC3, "P_end");
+
+GPU_SHADER_CREATE_INFO(eevee_volume_deferred)
+ .sampler(0, ImageType::DEPTH_2D, "depth_max_tx")
+ .vertex_in(0, Type::VEC3, "pos")
+ .vertex_out(eevee_volume_iface)
+ .fragment_out(0, Type::UVEC4, "out_volume_data")
+ .fragment_out(1, Type::VEC4, "out_transparency_data")
+ .additional_info("eevee_shared")
+ .vertex_source("eevee_volume_vert.glsl")
+ .fragment_source("eevee_volume_deferred_frag.glsl")
+ .additional_info("draw_fullscreen");
+#endif
+
+/** \} */
+
+/* -------------------------------------------------------------------- */
+/** \name Test shaders
+ *
+ * Variations that are only there to test shaders at compile time.
+ * \{ */
+
+#ifdef DEBUG
+
+/* Stub functions defined by the material evaluation. */
+GPU_SHADER_CREATE_INFO(eevee_material_stub).define("EEVEE_MATERIAL_STUBS");
+
+# define EEVEE_MAT_FINAL_VARIATION(name, ...) \
+ GPU_SHADER_CREATE_INFO(name) \
+ .additional_info(__VA_ARGS__) \
+ .auto_resource_location(true) \
+ .do_static_compilation(true);
+
+# define EEVEE_MAT_GEOM_VARIATIONS(prefix, ...) \
+ EEVEE_MAT_FINAL_VARIATION(prefix##_world, "eevee_geom_world", __VA_ARGS__) \
+ EEVEE_MAT_FINAL_VARIATION(prefix##_gpencil, "eevee_geom_gpencil", __VA_ARGS__) \
+ EEVEE_MAT_FINAL_VARIATION(prefix##_hair, "eevee_geom_curves", __VA_ARGS__) \
+ EEVEE_MAT_FINAL_VARIATION(prefix##_mesh, "eevee_geom_mesh", __VA_ARGS__)
+
+# define EEVEE_MAT_PIPE_VARIATIONS(name, ...) \
+ EEVEE_MAT_GEOM_VARIATIONS(name##_world, "eevee_surf_world", __VA_ARGS__) \
+ EEVEE_MAT_GEOM_VARIATIONS(name##_depth, "eevee_surf_depth", __VA_ARGS__) \
+ EEVEE_MAT_GEOM_VARIATIONS(name##_deferred, "eevee_surf_deferred", __VA_ARGS__) \
+ EEVEE_MAT_GEOM_VARIATIONS(name##_forward, "eevee_surf_forward", __VA_ARGS__)
+
+EEVEE_MAT_PIPE_VARIATIONS(eevee_surface, "eevee_material_stub")
+
+#endif
+
+/** \} */