From 9d3f35a0bf1bf5776363bfd61d53a7c85b5827a4 Mon Sep 17 00:00:00 2001 From: Jeroen Bakker Date: Mon, 17 Jan 2022 14:45:22 +0100 Subject: Revert "Revert "GPUShaderCreateInfo for interface abstraction"" This reverts commit edee5a947b7ea3e1324aa334a22c7c9bbf47f5f7. Fixes compilation error (Missing file BLI_float2.hh) --- source/blender/draw/CMakeLists.txt | 558 +++++++++++---------- .../workbench/shaders/workbench_common_lib.glsl | 13 +- .../workbench/shaders/workbench_data_lib.glsl | 5 +- .../shaders/workbench_effect_cavity_frag.glsl | 4 + .../shaders/workbench_effect_cavity_info.hh | 28 ++ .../workbench/shaders/workbench_image_lib.glsl | 2 + .../workbench/shaders/workbench_prepass_frag.glsl | 4 +- .../shaders/workbench_prepass_hair_vert.glsl | 6 +- .../workbench/shaders/workbench_prepass_info.hh | 136 +++++ .../shaders/workbench_prepass_pointcloud_vert.glsl | 4 +- .../workbench/shaders/workbench_prepass_vert.glsl | 6 +- .../shaders/workbench_shader_interface_lib.glsl | 8 +- .../shaders/workbench_transparent_accum_frag.glsl | 2 + .../engines/workbench/workbench_shader_shared.h | 48 ++ source/blender/draw/intern/draw_manager.c | 24 +- source/blender/draw/intern/draw_shader_shared.h | 41 ++ .../intern/shaders/common_fullscreen_vert.glsl | 2 + .../draw/intern/shaders/common_pointcloud_lib.glsl | 4 + .../draw/intern/shaders/common_view_lib.glsl | 18 +- .../draw/intern/shaders/draw_fullscreen_info.hh | 8 + .../draw/intern/shaders/draw_object_infos_info.hh | 5 + .../blender/draw/intern/shaders/draw_view_info.hh | 40 ++ 22 files changed, 675 insertions(+), 291 deletions(-) create mode 100644 source/blender/draw/engines/workbench/shaders/workbench_effect_cavity_info.hh create mode 100644 source/blender/draw/engines/workbench/shaders/workbench_prepass_info.hh create mode 100644 source/blender/draw/engines/workbench/workbench_shader_shared.h create mode 100644 source/blender/draw/intern/draw_shader_shared.h create mode 100644 source/blender/draw/intern/shaders/draw_fullscreen_info.hh create mode 100644 source/blender/draw/intern/shaders/draw_object_infos_info.hh create mode 100644 source/blender/draw/intern/shaders/draw_view_info.hh (limited to 'source/blender/draw') diff --git a/source/blender/draw/CMakeLists.txt b/source/blender/draw/CMakeLists.txt index 7b55981ba6b..8dd7e3d7dbf 100644 --- a/source/blender/draw/CMakeLists.txt +++ b/source/blender/draw/CMakeLists.txt @@ -212,6 +212,7 @@ set(SRC intern/draw_manager_profiling.h intern/draw_manager_testing.h intern/draw_manager_text.h + intern/draw_shader_shared.h intern/draw_shader.h intern/draw_subdivision.h intern/draw_texture_pool.h @@ -233,6 +234,7 @@ set(SRC engines/image/image_space_node.hh engines/workbench/workbench_engine.h engines/workbench/workbench_private.h + engines/workbench/workbench_shader_shared.h engines/select/select_engine.h engines/select/select_private.h engines/overlay/overlay_engine.h @@ -245,268 +247,300 @@ set(LIB bf_windowmanager ) -data_to_c_simple(engines/eevee/shaders/ambient_occlusion_lib.glsl SRC) -data_to_c_simple(engines/eevee/shaders/background_vert.glsl SRC) -data_to_c_simple(engines/eevee/shaders/common_uniforms_lib.glsl SRC) -data_to_c_simple(engines/eevee/shaders/common_utiltex_lib.glsl SRC) -data_to_c_simple(engines/eevee/shaders/lights_lib.glsl SRC) -data_to_c_simple(engines/eevee/shaders/lightprobe_lib.glsl SRC) -data_to_c_simple(engines/eevee/shaders/lightprobe_filter_glossy_frag.glsl SRC) -data_to_c_simple(engines/eevee/shaders/lightprobe_filter_diffuse_frag.glsl SRC) -data_to_c_simple(engines/eevee/shaders/lightprobe_filter_visibility_frag.glsl SRC) -data_to_c_simple(engines/eevee/shaders/lightprobe_geom.glsl SRC) -data_to_c_simple(engines/eevee/shaders/lightprobe_vert.glsl SRC) -data_to_c_simple(engines/eevee/shaders/lightprobe_cube_display_frag.glsl SRC) -data_to_c_simple(engines/eevee/shaders/lightprobe_cube_display_vert.glsl SRC) -data_to_c_simple(engines/eevee/shaders/lightprobe_grid_display_frag.glsl SRC) -data_to_c_simple(engines/eevee/shaders/lightprobe_grid_display_vert.glsl SRC) -data_to_c_simple(engines/eevee/shaders/lightprobe_grid_fill_frag.glsl SRC) -data_to_c_simple(engines/eevee/shaders/lightprobe_planar_display_frag.glsl SRC) -data_to_c_simple(engines/eevee/shaders/lightprobe_planar_display_vert.glsl SRC) -data_to_c_simple(engines/eevee/shaders/lookdev_world_frag.glsl SRC) -data_to_c_simple(engines/eevee/shaders/closure_eval_lib.glsl SRC) -data_to_c_simple(engines/eevee/shaders/closure_eval_diffuse_lib.glsl SRC) -data_to_c_simple(engines/eevee/shaders/closure_eval_glossy_lib.glsl SRC) -data_to_c_simple(engines/eevee/shaders/closure_eval_refraction_lib.glsl SRC) -data_to_c_simple(engines/eevee/shaders/closure_eval_translucent_lib.glsl SRC) -data_to_c_simple(engines/eevee/shaders/closure_type_lib.glsl SRC) -data_to_c_simple(engines/eevee/shaders/effect_bloom_frag.glsl SRC) -data_to_c_simple(engines/eevee/shaders/effect_dof_bokeh_frag.glsl SRC) -data_to_c_simple(engines/eevee/shaders/effect_dof_dilate_tiles_frag.glsl SRC) -data_to_c_simple(engines/eevee/shaders/effect_dof_downsample_frag.glsl SRC) -data_to_c_simple(engines/eevee/shaders/effect_dof_filter_frag.glsl SRC) -data_to_c_simple(engines/eevee/shaders/effect_dof_flatten_tiles_frag.glsl SRC) -data_to_c_simple(engines/eevee/shaders/effect_dof_gather_frag.glsl SRC) -data_to_c_simple(engines/eevee/shaders/effect_dof_lib.glsl SRC) -data_to_c_simple(engines/eevee/shaders/effect_dof_reduce_frag.glsl SRC) -data_to_c_simple(engines/eevee/shaders/effect_dof_resolve_frag.glsl SRC) -data_to_c_simple(engines/eevee/shaders/effect_dof_scatter_frag.glsl SRC) -data_to_c_simple(engines/eevee/shaders/effect_dof_scatter_vert.glsl SRC) -data_to_c_simple(engines/eevee/shaders/effect_dof_setup_frag.glsl SRC) -data_to_c_simple(engines/eevee/shaders/effect_reflection_lib.glsl SRC) -data_to_c_simple(engines/eevee/shaders/effect_reflection_resolve_frag.glsl SRC) -data_to_c_simple(engines/eevee/shaders/effect_reflection_trace_frag.glsl SRC) -data_to_c_simple(engines/eevee/shaders/effect_downsample_frag.glsl SRC) -data_to_c_simple(engines/eevee/shaders/effect_downsample_cube_frag.glsl SRC) -data_to_c_simple(engines/eevee/shaders/effect_gtao_frag.glsl SRC) -data_to_c_simple(engines/eevee/shaders/effect_velocity_resolve_frag.glsl SRC) -data_to_c_simple(engines/eevee/shaders/effect_velocity_tile_frag.glsl SRC) -data_to_c_simple(engines/eevee/shaders/effect_minmaxz_frag.glsl SRC) -data_to_c_simple(engines/eevee/shaders/effect_mist_frag.glsl SRC) -data_to_c_simple(engines/eevee/shaders/effect_motion_blur_frag.glsl SRC) -data_to_c_simple(engines/eevee/shaders/effect_subsurface_frag.glsl SRC) -data_to_c_simple(engines/eevee/shaders/effect_translucency_frag.glsl SRC) -data_to_c_simple(engines/eevee/shaders/effect_temporal_aa.glsl SRC) -data_to_c_simple(engines/eevee/shaders/lightprobe_planar_downsample_frag.glsl SRC) -data_to_c_simple(engines/eevee/shaders/lightprobe_planar_downsample_geom.glsl SRC) -data_to_c_simple(engines/eevee/shaders/lightprobe_planar_downsample_vert.glsl SRC) -data_to_c_simple(engines/eevee/shaders/object_motion_frag.glsl SRC) -data_to_c_simple(engines/eevee/shaders/object_motion_vert.glsl SRC) -data_to_c_simple(engines/eevee/shaders/prepass_frag.glsl SRC) -data_to_c_simple(engines/eevee/shaders/prepass_vert.glsl SRC) -data_to_c_simple(engines/eevee/shaders/shadow_accum_frag.glsl SRC) -data_to_c_simple(engines/eevee/shaders/shadow_frag.glsl SRC) -data_to_c_simple(engines/eevee/shaders/shadow_vert.glsl SRC) -data_to_c_simple(engines/eevee/shaders/bsdf_lut_frag.glsl SRC) -data_to_c_simple(engines/eevee/shaders/btdf_lut_frag.glsl SRC) -data_to_c_simple(engines/eevee/shaders/bsdf_common_lib.glsl SRC) -data_to_c_simple(engines/eevee/shaders/irradiance_lib.glsl SRC) -data_to_c_simple(engines/eevee/shaders/octahedron_lib.glsl SRC) -data_to_c_simple(engines/eevee/shaders/cubemap_lib.glsl SRC) -data_to_c_simple(engines/eevee/shaders/bsdf_sampling_lib.glsl SRC) -data_to_c_simple(engines/eevee/shaders/random_lib.glsl SRC) -data_to_c_simple(engines/eevee/shaders/raytrace_lib.glsl SRC) -data_to_c_simple(engines/eevee/shaders/renderpass_lib.glsl SRC) -data_to_c_simple(engines/eevee/shaders/renderpass_postprocess_frag.glsl SRC) -data_to_c_simple(engines/eevee/shaders/cryptomatte_frag.glsl SRC) -data_to_c_simple(engines/eevee/shaders/ltc_lib.glsl SRC) -data_to_c_simple(engines/eevee/shaders/ssr_lib.glsl SRC) -data_to_c_simple(engines/eevee/shaders/surface_frag.glsl SRC) -data_to_c_simple(engines/eevee/shaders/surface_geom.glsl SRC) -data_to_c_simple(engines/eevee/shaders/surface_lib.glsl SRC) -data_to_c_simple(engines/eevee/shaders/surface_vert.glsl SRC) -data_to_c_simple(engines/eevee/shaders/update_noise_frag.glsl SRC) -data_to_c_simple(engines/eevee/shaders/volumetric_accum_frag.glsl SRC) -data_to_c_simple(engines/eevee/shaders/volumetric_lib.glsl SRC) -data_to_c_simple(engines/eevee/shaders/volumetric_frag.glsl SRC) -data_to_c_simple(engines/eevee/shaders/volumetric_geom.glsl SRC) -data_to_c_simple(engines/eevee/shaders/volumetric_vert.glsl SRC) -data_to_c_simple(engines/eevee/shaders/volumetric_resolve_frag.glsl SRC) -data_to_c_simple(engines/eevee/shaders/volumetric_scatter_frag.glsl SRC) -data_to_c_simple(engines/eevee/shaders/volumetric_integration_frag.glsl SRC) - -data_to_c_simple(engines/workbench/shaders/workbench_cavity_lib.glsl SRC) -data_to_c_simple(engines/workbench/shaders/workbench_common_lib.glsl SRC) -data_to_c_simple(engines/workbench/shaders/workbench_composite_frag.glsl SRC) -data_to_c_simple(engines/workbench/shaders/workbench_curvature_lib.glsl SRC) -data_to_c_simple(engines/workbench/shaders/workbench_data_lib.glsl SRC) -data_to_c_simple(engines/workbench/shaders/workbench_effect_cavity_frag.glsl SRC) -data_to_c_simple(engines/workbench/shaders/workbench_effect_dof_frag.glsl SRC) -data_to_c_simple(engines/workbench/shaders/workbench_effect_outline_frag.glsl SRC) -data_to_c_simple(engines/workbench/shaders/workbench_effect_smaa_frag.glsl SRC) -data_to_c_simple(engines/workbench/shaders/workbench_effect_smaa_vert.glsl SRC) -data_to_c_simple(engines/workbench/shaders/workbench_effect_taa_frag.glsl SRC) -data_to_c_simple(engines/workbench/shaders/workbench_image_lib.glsl SRC) -data_to_c_simple(engines/workbench/shaders/workbench_matcap_lib.glsl SRC) -data_to_c_simple(engines/workbench/shaders/workbench_material_lib.glsl SRC) -data_to_c_simple(engines/workbench/shaders/workbench_merge_infront_frag.glsl SRC) -data_to_c_simple(engines/workbench/shaders/workbench_prepass_frag.glsl SRC) -data_to_c_simple(engines/workbench/shaders/workbench_prepass_hair_vert.glsl SRC) -data_to_c_simple(engines/workbench/shaders/workbench_prepass_pointcloud_vert.glsl SRC) -data_to_c_simple(engines/workbench/shaders/workbench_prepass_vert.glsl SRC) -data_to_c_simple(engines/workbench/shaders/workbench_shader_interface_lib.glsl SRC) -data_to_c_simple(engines/workbench/shaders/workbench_shadow_caps_geom.glsl SRC) -data_to_c_simple(engines/workbench/shaders/workbench_shadow_debug_frag.glsl SRC) -data_to_c_simple(engines/workbench/shaders/workbench_shadow_geom.glsl SRC) -data_to_c_simple(engines/workbench/shaders/workbench_shadow_vert.glsl SRC) -data_to_c_simple(engines/workbench/shaders/workbench_transparent_accum_frag.glsl SRC) -data_to_c_simple(engines/workbench/shaders/workbench_transparent_resolve_frag.glsl SRC) -data_to_c_simple(engines/workbench/shaders/workbench_volume_frag.glsl SRC) -data_to_c_simple(engines/workbench/shaders/workbench_volume_vert.glsl SRC) -data_to_c_simple(engines/workbench/shaders/workbench_world_light_lib.glsl SRC) - -data_to_c_simple(intern/shaders/common_colormanagement_lib.glsl SRC) -data_to_c_simple(intern/shaders/common_globals_lib.glsl SRC) -data_to_c_simple(intern/shaders/common_pointcloud_lib.glsl SRC) -data_to_c_simple(intern/shaders/common_hair_lib.glsl SRC) -data_to_c_simple(intern/shaders/common_hair_refine_vert.glsl SRC) -data_to_c_simple(intern/shaders/common_hair_refine_comp.glsl SRC) -data_to_c_simple(intern/shaders/common_math_lib.glsl SRC) -data_to_c_simple(intern/shaders/common_math_geom_lib.glsl SRC) -data_to_c_simple(intern/shaders/common_view_lib.glsl SRC) -data_to_c_simple(intern/shaders/common_fxaa_lib.glsl SRC) -data_to_c_simple(intern/shaders/common_smaa_lib.glsl SRC) -data_to_c_simple(intern/shaders/common_fullscreen_vert.glsl SRC) -data_to_c_simple(intern/shaders/common_subdiv_custom_data_interp_comp.glsl SRC) -data_to_c_simple(intern/shaders/common_subdiv_ibo_lines_comp.glsl SRC) -data_to_c_simple(intern/shaders/common_subdiv_ibo_tris_comp.glsl SRC) -data_to_c_simple(intern/shaders/common_subdiv_lib.glsl SRC) -data_to_c_simple(intern/shaders/common_subdiv_normals_accumulate_comp.glsl SRC) -data_to_c_simple(intern/shaders/common_subdiv_normals_finalize_comp.glsl SRC) -data_to_c_simple(intern/shaders/common_subdiv_patch_evaluation_comp.glsl SRC) -data_to_c_simple(intern/shaders/common_subdiv_vbo_edge_fac_comp.glsl SRC) -data_to_c_simple(intern/shaders/common_subdiv_vbo_edituv_strech_angle_comp.glsl SRC) -data_to_c_simple(intern/shaders/common_subdiv_vbo_edituv_strech_area_comp.glsl SRC) -data_to_c_simple(intern/shaders/common_subdiv_vbo_lnor_comp.glsl SRC) -data_to_c_simple(intern/shaders/common_subdiv_vbo_sculpt_data_comp.glsl SRC) - -data_to_c_simple(engines/gpencil/shaders/gpencil_frag.glsl SRC) -data_to_c_simple(engines/gpencil/shaders/gpencil_vert.glsl SRC) -data_to_c_simple(engines/gpencil/shaders/gpencil_antialiasing_frag.glsl SRC) -data_to_c_simple(engines/gpencil/shaders/gpencil_antialiasing_vert.glsl SRC) -data_to_c_simple(engines/gpencil/shaders/gpencil_common_lib.glsl SRC) -data_to_c_simple(engines/gpencil/shaders/gpencil_layer_blend_frag.glsl SRC) -data_to_c_simple(engines/gpencil/shaders/gpencil_mask_invert_frag.glsl SRC) -data_to_c_simple(engines/gpencil/shaders/gpencil_depth_merge_frag.glsl SRC) -data_to_c_simple(engines/gpencil/shaders/gpencil_depth_merge_vert.glsl SRC) -data_to_c_simple(engines/gpencil/shaders/gpencil_vfx_frag.glsl SRC) - -data_to_c_simple(engines/select/shaders/selection_id_3D_vert.glsl SRC) -data_to_c_simple(engines/select/shaders/selection_id_frag.glsl SRC) - -data_to_c_simple(engines/basic/shaders/conservative_depth_geom.glsl SRC) -data_to_c_simple(engines/basic/shaders/depth_vert.glsl SRC) -data_to_c_simple(engines/basic/shaders/depth_frag.glsl SRC) - -data_to_c_simple(engines/overlay/shaders/common_overlay_lib.glsl SRC) -data_to_c_simple(engines/overlay/shaders/antialiasing_frag.glsl SRC) -data_to_c_simple(engines/overlay/shaders/antialiasing_vert.glsl SRC) -data_to_c_simple(engines/overlay/shaders/armature_dof_vert.glsl SRC) -data_to_c_simple(engines/overlay/shaders/armature_dof_solid_frag.glsl SRC) -data_to_c_simple(engines/overlay/shaders/armature_envelope_outline_vert.glsl SRC) -data_to_c_simple(engines/overlay/shaders/armature_envelope_solid_frag.glsl SRC) -data_to_c_simple(engines/overlay/shaders/armature_envelope_solid_vert.glsl SRC) -data_to_c_simple(engines/overlay/shaders/armature_shape_outline_geom.glsl SRC) -data_to_c_simple(engines/overlay/shaders/armature_shape_outline_vert.glsl SRC) -data_to_c_simple(engines/overlay/shaders/armature_shape_solid_frag.glsl SRC) -data_to_c_simple(engines/overlay/shaders/armature_shape_solid_vert.glsl SRC) -data_to_c_simple(engines/overlay/shaders/armature_shape_wire_vert.glsl SRC) -data_to_c_simple(engines/overlay/shaders/armature_sphere_outline_vert.glsl SRC) -data_to_c_simple(engines/overlay/shaders/armature_sphere_solid_frag.glsl SRC) -data_to_c_simple(engines/overlay/shaders/armature_sphere_solid_vert.glsl SRC) -data_to_c_simple(engines/overlay/shaders/armature_stick_frag.glsl SRC) -data_to_c_simple(engines/overlay/shaders/armature_stick_vert.glsl SRC) -data_to_c_simple(engines/overlay/shaders/armature_wire_frag.glsl SRC) -data_to_c_simple(engines/overlay/shaders/armature_wire_vert.glsl SRC) -data_to_c_simple(engines/overlay/shaders/background_frag.glsl SRC) -data_to_c_simple(engines/overlay/shaders/clipbound_vert.glsl SRC) -data_to_c_simple(engines/overlay/shaders/depth_only_vert.glsl SRC) -data_to_c_simple(engines/overlay/shaders/edit_curve_handle_geom.glsl SRC) -data_to_c_simple(engines/overlay/shaders/edit_curve_handle_vert.glsl SRC) -data_to_c_simple(engines/overlay/shaders/edit_curve_point_vert.glsl SRC) -data_to_c_simple(engines/overlay/shaders/edit_curve_wire_vert.glsl SRC) -data_to_c_simple(engines/overlay/shaders/edit_gpencil_canvas_vert.glsl SRC) -data_to_c_simple(engines/overlay/shaders/edit_gpencil_guide_vert.glsl SRC) -data_to_c_simple(engines/overlay/shaders/edit_gpencil_vert.glsl SRC) -data_to_c_simple(engines/overlay/shaders/edit_lattice_point_vert.glsl SRC) -data_to_c_simple(engines/overlay/shaders/edit_lattice_wire_vert.glsl SRC) -data_to_c_simple(engines/overlay/shaders/edit_mesh_common_lib.glsl SRC) -data_to_c_simple(engines/overlay/shaders/edit_mesh_facefill_frag.glsl SRC) -data_to_c_simple(engines/overlay/shaders/edit_mesh_facefill_vert.glsl SRC) -data_to_c_simple(engines/overlay/shaders/edit_mesh_frag.glsl SRC) -data_to_c_simple(engines/overlay/shaders/edit_mesh_geom.glsl SRC) -data_to_c_simple(engines/overlay/shaders/edit_mesh_normal_vert.glsl SRC) -data_to_c_simple(engines/overlay/shaders/edit_mesh_analysis_frag.glsl SRC) -data_to_c_simple(engines/overlay/shaders/edit_mesh_analysis_vert.glsl SRC) -data_to_c_simple(engines/overlay/shaders/edit_mesh_skin_root_vert.glsl SRC) -data_to_c_simple(engines/overlay/shaders/edit_mesh_vert.glsl SRC) -data_to_c_simple(engines/overlay/shaders/edit_particle_strand_vert.glsl SRC) -data_to_c_simple(engines/overlay/shaders/edit_particle_point_vert.glsl SRC) -data_to_c_simple(engines/overlay/shaders/edit_uv_edges_vert.glsl SRC) -data_to_c_simple(engines/overlay/shaders/edit_uv_edges_geom.glsl SRC) -data_to_c_simple(engines/overlay/shaders/edit_uv_edges_frag.glsl SRC) -data_to_c_simple(engines/overlay/shaders/edit_uv_verts_vert.glsl SRC) -data_to_c_simple(engines/overlay/shaders/edit_uv_verts_frag.glsl SRC) -data_to_c_simple(engines/overlay/shaders/edit_uv_faces_vert.glsl SRC) -data_to_c_simple(engines/overlay/shaders/edit_uv_face_dots_vert.glsl SRC) -data_to_c_simple(engines/overlay/shaders/edit_uv_image_vert.glsl SRC) -data_to_c_simple(engines/overlay/shaders/edit_uv_image_mask_frag.glsl SRC) -data_to_c_simple(engines/overlay/shaders/edit_uv_stretching_vert.glsl SRC) -data_to_c_simple(engines/overlay/shaders/edit_uv_tiled_image_borders_vert.glsl SRC) -data_to_c_simple(engines/overlay/shaders/extra_frag.glsl SRC) -data_to_c_simple(engines/overlay/shaders/extra_vert.glsl SRC) -data_to_c_simple(engines/overlay/shaders/extra_groundline_vert.glsl SRC) -data_to_c_simple(engines/overlay/shaders/extra_lightprobe_grid_vert.glsl SRC) -data_to_c_simple(engines/overlay/shaders/extra_loose_point_frag.glsl SRC) -data_to_c_simple(engines/overlay/shaders/extra_loose_point_vert.glsl SRC) -data_to_c_simple(engines/overlay/shaders/extra_point_vert.glsl SRC) -data_to_c_simple(engines/overlay/shaders/extra_wire_frag.glsl SRC) -data_to_c_simple(engines/overlay/shaders/extra_wire_vert.glsl SRC) -data_to_c_simple(engines/overlay/shaders/facing_frag.glsl SRC) -data_to_c_simple(engines/overlay/shaders/facing_vert.glsl SRC) -data_to_c_simple(engines/overlay/shaders/grid_background_frag.glsl SRC) -data_to_c_simple(engines/overlay/shaders/grid_frag.glsl SRC) -data_to_c_simple(engines/overlay/shaders/grid_vert.glsl SRC) -data_to_c_simple(engines/overlay/shaders/image_vert.glsl SRC) -data_to_c_simple(engines/overlay/shaders/image_frag.glsl SRC) -data_to_c_simple(engines/overlay/shaders/motion_path_line_geom.glsl SRC) -data_to_c_simple(engines/overlay/shaders/motion_path_line_vert.glsl SRC) -data_to_c_simple(engines/overlay/shaders/motion_path_point_vert.glsl SRC) -data_to_c_simple(engines/overlay/shaders/outline_detect_frag.glsl SRC) -data_to_c_simple(engines/overlay/shaders/outline_prepass_frag.glsl SRC) -data_to_c_simple(engines/overlay/shaders/outline_prepass_geom.glsl SRC) -data_to_c_simple(engines/overlay/shaders/outline_prepass_vert.glsl SRC) -data_to_c_simple(engines/overlay/shaders/paint_face_vert.glsl SRC) -data_to_c_simple(engines/overlay/shaders/paint_point_vert.glsl SRC) -data_to_c_simple(engines/overlay/shaders/paint_texture_frag.glsl SRC) -data_to_c_simple(engines/overlay/shaders/paint_texture_vert.glsl SRC) -data_to_c_simple(engines/overlay/shaders/paint_vertcol_frag.glsl SRC) -data_to_c_simple(engines/overlay/shaders/paint_vertcol_vert.glsl SRC) -data_to_c_simple(engines/overlay/shaders/paint_weight_frag.glsl SRC) -data_to_c_simple(engines/overlay/shaders/paint_weight_vert.glsl SRC) -data_to_c_simple(engines/overlay/shaders/paint_wire_vert.glsl SRC) -data_to_c_simple(engines/overlay/shaders/particle_vert.glsl SRC) -data_to_c_simple(engines/overlay/shaders/particle_frag.glsl SRC) -data_to_c_simple(engines/overlay/shaders/sculpt_mask_vert.glsl SRC) -data_to_c_simple(engines/overlay/shaders/sculpt_mask_frag.glsl SRC) -data_to_c_simple(engines/overlay/shaders/volume_velocity_vert.glsl SRC) -data_to_c_simple(engines/overlay/shaders/volume_gridlines_vert.glsl SRC) -data_to_c_simple(engines/overlay/shaders/wireframe_vert.glsl SRC) -data_to_c_simple(engines/overlay/shaders/wireframe_frag.glsl SRC) -data_to_c_simple(engines/overlay/shaders/xray_fade_frag.glsl SRC) - -data_to_c_simple(engines/image/shaders/engine_image_frag.glsl SRC) -data_to_c_simple(engines/image/shaders/engine_image_vert.glsl SRC) +set(GLSL_SRC + engines/eevee/shaders/ambient_occlusion_lib.glsl + engines/eevee/shaders/background_vert.glsl + engines/eevee/shaders/common_uniforms_lib.glsl + engines/eevee/shaders/common_utiltex_lib.glsl + engines/eevee/shaders/lights_lib.glsl + engines/eevee/shaders/lightprobe_lib.glsl + engines/eevee/shaders/lightprobe_filter_glossy_frag.glsl + engines/eevee/shaders/lightprobe_filter_diffuse_frag.glsl + engines/eevee/shaders/lightprobe_filter_visibility_frag.glsl + engines/eevee/shaders/lightprobe_geom.glsl + engines/eevee/shaders/lightprobe_vert.glsl + engines/eevee/shaders/lightprobe_cube_display_frag.glsl + engines/eevee/shaders/lightprobe_cube_display_vert.glsl + engines/eevee/shaders/lightprobe_grid_display_frag.glsl + engines/eevee/shaders/lightprobe_grid_display_vert.glsl + engines/eevee/shaders/lightprobe_grid_fill_frag.glsl + engines/eevee/shaders/lightprobe_planar_display_frag.glsl + engines/eevee/shaders/lightprobe_planar_display_vert.glsl + engines/eevee/shaders/lookdev_world_frag.glsl + engines/eevee/shaders/closure_eval_lib.glsl + engines/eevee/shaders/closure_eval_diffuse_lib.glsl + engines/eevee/shaders/closure_eval_glossy_lib.glsl + engines/eevee/shaders/closure_eval_refraction_lib.glsl + engines/eevee/shaders/closure_eval_translucent_lib.glsl + engines/eevee/shaders/closure_type_lib.glsl + engines/eevee/shaders/effect_bloom_frag.glsl + engines/eevee/shaders/effect_dof_bokeh_frag.glsl + engines/eevee/shaders/effect_dof_dilate_tiles_frag.glsl + engines/eevee/shaders/effect_dof_downsample_frag.glsl + engines/eevee/shaders/effect_dof_filter_frag.glsl + engines/eevee/shaders/effect_dof_flatten_tiles_frag.glsl + engines/eevee/shaders/effect_dof_gather_frag.glsl + engines/eevee/shaders/effect_dof_lib.glsl + engines/eevee/shaders/effect_dof_reduce_frag.glsl + engines/eevee/shaders/effect_dof_resolve_frag.glsl + engines/eevee/shaders/effect_dof_scatter_frag.glsl + engines/eevee/shaders/effect_dof_scatter_vert.glsl + engines/eevee/shaders/effect_dof_setup_frag.glsl + engines/eevee/shaders/effect_reflection_lib.glsl + engines/eevee/shaders/effect_reflection_resolve_frag.glsl + engines/eevee/shaders/effect_reflection_trace_frag.glsl + engines/eevee/shaders/effect_downsample_frag.glsl + engines/eevee/shaders/effect_downsample_cube_frag.glsl + engines/eevee/shaders/effect_gtao_frag.glsl + engines/eevee/shaders/effect_velocity_resolve_frag.glsl + engines/eevee/shaders/effect_velocity_tile_frag.glsl + engines/eevee/shaders/effect_minmaxz_frag.glsl + engines/eevee/shaders/effect_mist_frag.glsl + engines/eevee/shaders/effect_motion_blur_frag.glsl + engines/eevee/shaders/effect_subsurface_frag.glsl + engines/eevee/shaders/effect_translucency_frag.glsl + engines/eevee/shaders/effect_temporal_aa.glsl + engines/eevee/shaders/lightprobe_planar_downsample_frag.glsl + engines/eevee/shaders/lightprobe_planar_downsample_geom.glsl + engines/eevee/shaders/lightprobe_planar_downsample_vert.glsl + engines/eevee/shaders/object_motion_frag.glsl + engines/eevee/shaders/object_motion_vert.glsl + engines/eevee/shaders/prepass_frag.glsl + engines/eevee/shaders/prepass_vert.glsl + engines/eevee/shaders/shadow_accum_frag.glsl + engines/eevee/shaders/shadow_frag.glsl + engines/eevee/shaders/shadow_vert.glsl + engines/eevee/shaders/bsdf_lut_frag.glsl + engines/eevee/shaders/btdf_lut_frag.glsl + engines/eevee/shaders/bsdf_common_lib.glsl + engines/eevee/shaders/irradiance_lib.glsl + engines/eevee/shaders/octahedron_lib.glsl + engines/eevee/shaders/cubemap_lib.glsl + engines/eevee/shaders/bsdf_sampling_lib.glsl + engines/eevee/shaders/random_lib.glsl + engines/eevee/shaders/raytrace_lib.glsl + engines/eevee/shaders/renderpass_lib.glsl + engines/eevee/shaders/renderpass_postprocess_frag.glsl + engines/eevee/shaders/cryptomatte_frag.glsl + engines/eevee/shaders/ltc_lib.glsl + engines/eevee/shaders/ssr_lib.glsl + engines/eevee/shaders/surface_frag.glsl + engines/eevee/shaders/surface_geom.glsl + engines/eevee/shaders/surface_lib.glsl + engines/eevee/shaders/surface_vert.glsl + engines/eevee/shaders/update_noise_frag.glsl + engines/eevee/shaders/volumetric_accum_frag.glsl + engines/eevee/shaders/volumetric_lib.glsl + engines/eevee/shaders/volumetric_frag.glsl + engines/eevee/shaders/volumetric_geom.glsl + engines/eevee/shaders/volumetric_vert.glsl + engines/eevee/shaders/volumetric_resolve_frag.glsl + engines/eevee/shaders/volumetric_scatter_frag.glsl + engines/eevee/shaders/volumetric_integration_frag.glsl + + engines/workbench/shaders/workbench_cavity_lib.glsl + engines/workbench/shaders/workbench_common_lib.glsl + engines/workbench/shaders/workbench_composite_frag.glsl + engines/workbench/shaders/workbench_curvature_lib.glsl + engines/workbench/shaders/workbench_data_lib.glsl + engines/workbench/shaders/workbench_effect_cavity_frag.glsl + engines/workbench/shaders/workbench_effect_dof_frag.glsl + engines/workbench/shaders/workbench_effect_outline_frag.glsl + engines/workbench/shaders/workbench_effect_smaa_frag.glsl + engines/workbench/shaders/workbench_effect_smaa_vert.glsl + engines/workbench/shaders/workbench_effect_taa_frag.glsl + engines/workbench/shaders/workbench_image_lib.glsl + engines/workbench/shaders/workbench_matcap_lib.glsl + engines/workbench/shaders/workbench_material_lib.glsl + engines/workbench/shaders/workbench_merge_infront_frag.glsl + engines/workbench/shaders/workbench_prepass_frag.glsl + engines/workbench/shaders/workbench_prepass_hair_vert.glsl + engines/workbench/shaders/workbench_prepass_pointcloud_vert.glsl + engines/workbench/shaders/workbench_prepass_vert.glsl + engines/workbench/shaders/workbench_shader_interface_lib.glsl + engines/workbench/shaders/workbench_shadow_caps_geom.glsl + engines/workbench/shaders/workbench_shadow_debug_frag.glsl + engines/workbench/shaders/workbench_shadow_geom.glsl + engines/workbench/shaders/workbench_shadow_vert.glsl + engines/workbench/shaders/workbench_transparent_accum_frag.glsl + engines/workbench/shaders/workbench_transparent_resolve_frag.glsl + engines/workbench/shaders/workbench_volume_frag.glsl + engines/workbench/shaders/workbench_volume_vert.glsl + engines/workbench/shaders/workbench_world_light_lib.glsl + + engines/workbench/workbench_shader_shared.h + + intern/shaders/common_colormanagement_lib.glsl + intern/shaders/common_globals_lib.glsl + intern/shaders/common_pointcloud_lib.glsl + intern/shaders/common_hair_lib.glsl + intern/shaders/common_hair_refine_vert.glsl + intern/shaders/common_hair_refine_comp.glsl + intern/shaders/common_math_lib.glsl + intern/shaders/common_math_geom_lib.glsl + intern/shaders/common_view_lib.glsl + intern/shaders/common_fxaa_lib.glsl + intern/shaders/common_smaa_lib.glsl + intern/shaders/common_fullscreen_vert.glsl + + intern/shaders/common_subdiv_custom_data_interp_comp.glsl + intern/shaders/common_subdiv_ibo_lines_comp.glsl + intern/shaders/common_subdiv_ibo_tris_comp.glsl + intern/shaders/common_subdiv_lib.glsl + intern/shaders/common_subdiv_normals_accumulate_comp.glsl + intern/shaders/common_subdiv_normals_finalize_comp.glsl + intern/shaders/common_subdiv_patch_evaluation_comp.glsl + intern/shaders/common_subdiv_vbo_edge_fac_comp.glsl + intern/shaders/common_subdiv_vbo_edituv_strech_angle_comp.glsl + intern/shaders/common_subdiv_vbo_edituv_strech_area_comp.glsl + intern/shaders/common_subdiv_vbo_lnor_comp.glsl + intern/shaders/common_subdiv_vbo_sculpt_data_comp.glsl + + intern/draw_shader_shared.h + + engines/gpencil/shaders/gpencil_frag.glsl + engines/gpencil/shaders/gpencil_vert.glsl + engines/gpencil/shaders/gpencil_antialiasing_frag.glsl + engines/gpencil/shaders/gpencil_antialiasing_vert.glsl + engines/gpencil/shaders/gpencil_common_lib.glsl + engines/gpencil/shaders/gpencil_layer_blend_frag.glsl + engines/gpencil/shaders/gpencil_mask_invert_frag.glsl + engines/gpencil/shaders/gpencil_depth_merge_frag.glsl + engines/gpencil/shaders/gpencil_depth_merge_vert.glsl + engines/gpencil/shaders/gpencil_vfx_frag.glsl + + engines/select/shaders/selection_id_3D_vert.glsl + engines/select/shaders/selection_id_frag.glsl + + engines/basic/shaders/conservative_depth_geom.glsl + engines/basic/shaders/depth_vert.glsl + engines/basic/shaders/depth_frag.glsl + + engines/overlay/shaders/common_overlay_lib.glsl + engines/overlay/shaders/antialiasing_frag.glsl + engines/overlay/shaders/antialiasing_vert.glsl + engines/overlay/shaders/armature_dof_vert.glsl + engines/overlay/shaders/armature_dof_solid_frag.glsl + engines/overlay/shaders/armature_envelope_outline_vert.glsl + engines/overlay/shaders/armature_envelope_solid_frag.glsl + engines/overlay/shaders/armature_envelope_solid_vert.glsl + engines/overlay/shaders/armature_shape_outline_geom.glsl + engines/overlay/shaders/armature_shape_outline_vert.glsl + engines/overlay/shaders/armature_shape_solid_frag.glsl + engines/overlay/shaders/armature_shape_solid_vert.glsl + engines/overlay/shaders/armature_shape_wire_vert.glsl + engines/overlay/shaders/armature_sphere_outline_vert.glsl + engines/overlay/shaders/armature_sphere_solid_frag.glsl + engines/overlay/shaders/armature_sphere_solid_vert.glsl + engines/overlay/shaders/armature_stick_frag.glsl + engines/overlay/shaders/armature_stick_vert.glsl + engines/overlay/shaders/armature_wire_frag.glsl + engines/overlay/shaders/armature_wire_vert.glsl + engines/overlay/shaders/background_frag.glsl + engines/overlay/shaders/clipbound_vert.glsl + engines/overlay/shaders/depth_only_vert.glsl + engines/overlay/shaders/edit_curve_handle_geom.glsl + engines/overlay/shaders/edit_curve_handle_vert.glsl + engines/overlay/shaders/edit_curve_point_vert.glsl + engines/overlay/shaders/edit_curve_wire_vert.glsl + engines/overlay/shaders/edit_gpencil_canvas_vert.glsl + engines/overlay/shaders/edit_gpencil_guide_vert.glsl + engines/overlay/shaders/edit_gpencil_vert.glsl + engines/overlay/shaders/edit_lattice_point_vert.glsl + engines/overlay/shaders/edit_lattice_wire_vert.glsl + engines/overlay/shaders/edit_mesh_common_lib.glsl + engines/overlay/shaders/edit_mesh_facefill_frag.glsl + engines/overlay/shaders/edit_mesh_facefill_vert.glsl + engines/overlay/shaders/edit_mesh_frag.glsl + engines/overlay/shaders/edit_mesh_geom.glsl + engines/overlay/shaders/edit_mesh_normal_vert.glsl + engines/overlay/shaders/edit_mesh_analysis_frag.glsl + engines/overlay/shaders/edit_mesh_analysis_vert.glsl + engines/overlay/shaders/edit_mesh_skin_root_vert.glsl + engines/overlay/shaders/edit_mesh_vert.glsl + engines/overlay/shaders/edit_particle_strand_vert.glsl + engines/overlay/shaders/edit_particle_point_vert.glsl + engines/overlay/shaders/edit_uv_edges_vert.glsl + engines/overlay/shaders/edit_uv_edges_geom.glsl + engines/overlay/shaders/edit_uv_edges_frag.glsl + engines/overlay/shaders/edit_uv_verts_vert.glsl + engines/overlay/shaders/edit_uv_verts_frag.glsl + engines/overlay/shaders/edit_uv_faces_vert.glsl + engines/overlay/shaders/edit_uv_face_dots_vert.glsl + engines/overlay/shaders/edit_uv_image_vert.glsl + engines/overlay/shaders/edit_uv_image_mask_frag.glsl + engines/overlay/shaders/edit_uv_stretching_vert.glsl + engines/overlay/shaders/edit_uv_tiled_image_borders_vert.glsl + engines/overlay/shaders/extra_frag.glsl + engines/overlay/shaders/extra_vert.glsl + engines/overlay/shaders/extra_groundline_vert.glsl + engines/overlay/shaders/extra_lightprobe_grid_vert.glsl + engines/overlay/shaders/extra_loose_point_frag.glsl + engines/overlay/shaders/extra_loose_point_vert.glsl + engines/overlay/shaders/extra_point_vert.glsl + engines/overlay/shaders/extra_wire_frag.glsl + engines/overlay/shaders/extra_wire_vert.glsl + engines/overlay/shaders/facing_frag.glsl + engines/overlay/shaders/facing_vert.glsl + engines/overlay/shaders/grid_background_frag.glsl + engines/overlay/shaders/grid_frag.glsl + engines/overlay/shaders/grid_vert.glsl + engines/overlay/shaders/image_vert.glsl + engines/overlay/shaders/image_frag.glsl + engines/overlay/shaders/motion_path_line_geom.glsl + engines/overlay/shaders/motion_path_line_vert.glsl + engines/overlay/shaders/motion_path_point_vert.glsl + engines/overlay/shaders/outline_detect_frag.glsl + engines/overlay/shaders/outline_prepass_frag.glsl + engines/overlay/shaders/outline_prepass_geom.glsl + engines/overlay/shaders/outline_prepass_vert.glsl + engines/overlay/shaders/paint_face_vert.glsl + engines/overlay/shaders/paint_point_vert.glsl + engines/overlay/shaders/paint_texture_frag.glsl + engines/overlay/shaders/paint_texture_vert.glsl + engines/overlay/shaders/paint_vertcol_frag.glsl + engines/overlay/shaders/paint_vertcol_vert.glsl + engines/overlay/shaders/paint_weight_frag.glsl + engines/overlay/shaders/paint_weight_vert.glsl + engines/overlay/shaders/paint_wire_vert.glsl + engines/overlay/shaders/particle_vert.glsl + engines/overlay/shaders/particle_frag.glsl + engines/overlay/shaders/sculpt_mask_vert.glsl + engines/overlay/shaders/sculpt_mask_frag.glsl + engines/overlay/shaders/volume_velocity_vert.glsl + engines/overlay/shaders/volume_gridlines_vert.glsl + engines/overlay/shaders/wireframe_vert.glsl + engines/overlay/shaders/wireframe_frag.glsl + engines/overlay/shaders/xray_fade_frag.glsl + + engines/image/shaders/engine_image_frag.glsl + engines/image/shaders/engine_image_vert.glsl +) + +set(GLSL_C) +foreach(GLSL_FILE ${GLSL_SRC}) + data_to_c_simple(${GLSL_FILE} GLSL_C) +endforeach() + +blender_add_lib(bf_draw_shaders "${GLSL_C}" "" "" "") + +list(APPEND LIB + bf_draw_shaders +) + +set(GLSL_SOURCE_CONTENT "") +foreach(GLSL_FILE ${GLSL_SRC}) + get_filename_component(GLSL_FILE_NAME ${GLSL_FILE} NAME) + string(REPLACE "." "_" GLSL_FILE_NAME_UNDERSCORES ${GLSL_FILE_NAME}) + string(APPEND GLSL_SOURCE_CONTENT "SHADER_SOURCE\(datatoc_${GLSL_FILE_NAME_UNDERSCORES}, \"${GLSL_FILE_NAME}\"\)\n") +endforeach() + +set(glsl_source_list_file "${CMAKE_CURRENT_BINARY_DIR}/glsl_draw_source_list.h") +file(GENERATE OUTPUT ${glsl_source_list_file} CONTENT "${GLSL_SOURCE_CONTENT}") +list(APPEND SRC ${glsl_source_list_file}) +list(APPEND INC ${CMAKE_CURRENT_BINARY_DIR}) + +target_include_directories(bf_draw_shaders PUBLIC ${CMAKE_CURRENT_BINARY_DIR}) list(APPEND INC ) diff --git a/source/blender/draw/engines/workbench/shaders/workbench_common_lib.glsl b/source/blender/draw/engines/workbench/shaders/workbench_common_lib.glsl index 8cbc8608f5b..9b142fe56b5 100644 --- a/source/blender/draw/engines/workbench/shaders/workbench_common_lib.glsl +++ b/source/blender/draw/engines/workbench/shaders/workbench_common_lib.glsl @@ -3,10 +3,6 @@ #define CAVITY_BUFFER_RANGE 4.0 -#ifdef WORKBENCH_ENCODE_NORMALS - -# define WB_Normal vec2 - /* From http://aras-p.info/texts/CompactNormalStorage.html * Using Method #4: Spheremap Transform */ vec3 workbench_normal_decode(vec4 enc) @@ -22,7 +18,7 @@ vec3 workbench_normal_decode(vec4 enc) /* From http://aras-p.info/texts/CompactNormalStorage.html * Using Method #4: Spheremap Transform */ -WB_Normal workbench_normal_encode(bool front_face, vec3 n) +vec2 workbench_normal_encode(bool front_face, vec3 n) { n = normalize(front_face ? n : -n); float p = sqrt(n.z * 8.0 + 8.0); @@ -30,13 +26,6 @@ WB_Normal workbench_normal_encode(bool front_face, vec3 n) return n.xy; } -#else -# define WB_Normal vec3 -/* Well just do nothing... */ -# define workbench_normal_encode(f, a) (a) -# define workbench_normal_decode(a) (a.xyz) -#endif /* WORKBENCH_ENCODE_NORMALS */ - /* Encoding into the alpha of a RGBA16F texture. (10bit mantissa) */ #define TARGET_BITCOUNT 8u #define METALLIC_BITS 3u /* Metallic channel is less important. */ diff --git a/source/blender/draw/engines/workbench/shaders/workbench_data_lib.glsl b/source/blender/draw/engines/workbench/shaders/workbench_data_lib.glsl index 2e229d4d83a..c784c8b2db9 100644 --- a/source/blender/draw/engines/workbench/shaders/workbench_data_lib.glsl +++ b/source/blender/draw/engines/workbench/shaders/workbench_data_lib.glsl @@ -1,3 +1,5 @@ + +#ifndef WORKBENCH_SHADER_SHARED_H struct LightData { vec4 direction; vec4 specular_color; @@ -37,9 +39,10 @@ struct WorldData { int _pad2; }; -#define viewport_size_inv viewport_size.zw +# define viewport_size_inv viewport_size.zw layout(std140) uniform world_block { WorldData world_data; }; +#endif diff --git a/source/blender/draw/engines/workbench/shaders/workbench_effect_cavity_frag.glsl b/source/blender/draw/engines/workbench/shaders/workbench_effect_cavity_frag.glsl index 328d50e69e0..0b571040df5 100644 --- a/source/blender/draw/engines/workbench/shaders/workbench_effect_cavity_frag.glsl +++ b/source/blender/draw/engines/workbench/shaders/workbench_effect_cavity_frag.glsl @@ -4,6 +4,8 @@ #pragma BLENDER_REQUIRE(workbench_cavity_lib.glsl) #pragma BLENDER_REQUIRE(workbench_curvature_lib.glsl) +#ifndef DRW_SHADER_SHARED_H + uniform sampler2D depthBuffer; uniform sampler2D normalBuffer; uniform usampler2D objectIdBuffer; @@ -12,6 +14,8 @@ in vec4 uvcoordsvar; out vec4 fragColor; +#endif + void main() { float cavity = 0.0, edges = 0.0, curvature = 0.0; diff --git a/source/blender/draw/engines/workbench/shaders/workbench_effect_cavity_info.hh b/source/blender/draw/engines/workbench/shaders/workbench_effect_cavity_info.hh new file mode 100644 index 00000000000..31e5f5e7641 --- /dev/null +++ b/source/blender/draw/engines/workbench/shaders/workbench_effect_cavity_info.hh @@ -0,0 +1,28 @@ + +#include "gpu_shader_create_info.hh" + +GPU_SHADER_CREATE_INFO(workbench_effect_cavity_common) + .fragment_out(0, Type::VEC4, "fragColor") + .sampler(0, ImageType::FLOAT_2D, "depthBuffer") + .sampler(1, ImageType::FLOAT_2D, "normalBuffer") + .sampler(2, ImageType::UINT_2D, "objectIdBuffer") + .uniform_buf(3, "vec4", "samples_coords[512]") + .fragment_source("workbench_effect_cavity_frag.glsl") + .additional_info("draw_fullscreen") + .additional_info("draw_view"); + +GPU_SHADER_CREATE_INFO(workbench_effect_cavity) + .do_static_compilation(true) + .define("USE_CAVITY") + .additional_info("workbench_effect_cavity_common"); + +GPU_SHADER_CREATE_INFO(workbench_effect_curvature) + .do_static_compilation(true) + .define("USE_CURVATURE") + .additional_info("workbench_effect_cavity_common"); + +GPU_SHADER_CREATE_INFO(workbench_effect_cavity_curvature) + .do_static_compilation(true) + .define("USE_CAVITY") + .define("USE_CURVATURE") + .additional_info("workbench_effect_cavity_common"); diff --git a/source/blender/draw/engines/workbench/shaders/workbench_image_lib.glsl b/source/blender/draw/engines/workbench/shaders/workbench_image_lib.glsl index 57d648d3565..49e3f57ab2e 100644 --- a/source/blender/draw/engines/workbench/shaders/workbench_image_lib.glsl +++ b/source/blender/draw/engines/workbench/shaders/workbench_image_lib.glsl @@ -25,12 +25,14 @@ bool node_tex_tile_lookup(inout vec3 co, sampler2DArray ima, sampler1DArray map) return true; } +#ifndef WORKBENCH_SHADER_SHARED_H uniform sampler2DArray imageTileArray; uniform sampler1DArray imageTileData; uniform sampler2D imageTexture; uniform float imageTransparencyCutoff = 0.1; uniform bool imagePremult; +#endif vec3 workbench_image_color(vec2 uvs) { diff --git a/source/blender/draw/engines/workbench/shaders/workbench_prepass_frag.glsl b/source/blender/draw/engines/workbench/shaders/workbench_prepass_frag.glsl index 6d24b001d4d..7a3ebc4035e 100644 --- a/source/blender/draw/engines/workbench/shaders/workbench_prepass_frag.glsl +++ b/source/blender/draw/engines/workbench/shaders/workbench_prepass_frag.glsl @@ -4,9 +4,11 @@ #pragma BLENDER_REQUIRE(workbench_common_lib.glsl) #pragma BLENDER_REQUIRE(workbench_image_lib.glsl) +#ifndef WORKBENCH_SHADER_SHARED_H layout(location = 0) out vec4 materialData; -layout(location = 1) out WB_Normal normalData; +layout(location = 1) out vec2 normalData; layout(location = 2) out uint objectId; +#endif uniform bool useMatcap = false; diff --git a/source/blender/draw/engines/workbench/shaders/workbench_prepass_hair_vert.glsl b/source/blender/draw/engines/workbench/shaders/workbench_prepass_hair_vert.glsl index 3e1ea14f47c..c3faa3957ef 100644 --- a/source/blender/draw/engines/workbench/shaders/workbench_prepass_hair_vert.glsl +++ b/source/blender/draw/engines/workbench/shaders/workbench_prepass_hair_vert.glsl @@ -5,8 +5,10 @@ #pragma BLENDER_REQUIRE(workbench_material_lib.glsl) #pragma BLENDER_REQUIRE(workbench_image_lib.glsl) +#ifndef WORKBENCH_SHADER_SHARED_H uniform samplerBuffer ac; /* active color layer */ uniform samplerBuffer au; /* active texture layer */ +#endif /* From http://libnoise.sourceforge.net/noisegen/index.html */ float integer_noise(int n) @@ -71,8 +73,10 @@ void main() normal_interp = normalize(normal_world_to_view(nor)); -#ifdef OPAQUE_MATERIAL +#ifndef WORKBENCH_SHADER_SHARED_H +# ifdef OPAQUE_MATERIAL float metallic, roughness; +# endif #endif workbench_material_data_get(resource_handle, color_interp, alpha_interp, roughness, metallic); diff --git a/source/blender/draw/engines/workbench/shaders/workbench_prepass_info.hh b/source/blender/draw/engines/workbench/shaders/workbench_prepass_info.hh new file mode 100644 index 00000000000..1dd706c9460 --- /dev/null +++ b/source/blender/draw/engines/workbench/shaders/workbench_prepass_info.hh @@ -0,0 +1,136 @@ + +#include "gpu_shader_create_info.hh" + +/* -------------------------------------------------------------------- */ +/** \name Object Type + * \{ */ + +GPU_SHADER_CREATE_INFO(workbench_mesh) + .vertex_in(0, Type::VEC3, "pos") + .vertex_in(1, Type::VEC3, "nor") + .vertex_in(2, Type::VEC4, "ac") + .vertex_in(3, Type::VEC2, "au") + .vertex_source("workbench_prepass_vert.glsl") + .additional_info("draw_mesh"); + +GPU_SHADER_CREATE_INFO(workbench_hair) + .sampler(0, ImageType::FLOAT_BUFFER, "ac", Frequency::BATCH) + .sampler(1, ImageType::FLOAT_BUFFER, "au", Frequency::BATCH) + .vertex_source("workbench_prepass_hair_vert.glsl") + .additional_info("draw_hair"); + +GPU_SHADER_CREATE_INFO(workbench_pointcloud) + .vertex_source("workbench_prepass_pointcloud_vert.glsl") + .additional_info("draw_pointcloud"); + +/** \} */ + +/* -------------------------------------------------------------------- */ +/** \name Texture Type + * \{ */ + +GPU_SHADER_CREATE_INFO(workbench_texture_none).define("TEXTURE_NONE"); + +GPU_SHADER_CREATE_INFO(workbench_texture_single) + .sampler(2, ImageType::FLOAT_2D, "imageTexture", Frequency::BATCH) + .push_constant(1, Type::BOOL, "imagePremult") + .push_constant(2, Type::FLOAT, "imageTransparencyCutoff") + .define("V3D_SHADING_TEXTURE_COLOR"); + +GPU_SHADER_CREATE_INFO(workbench_texture_tile) + .sampler(2, ImageType::FLOAT_2D_ARRAY, "imageTileArray", Frequency::BATCH) + .sampler(3, ImageType::FLOAT_1D_ARRAY, "imageTileData", Frequency::BATCH) + .push_constant(1, Type::BOOL, "imagePremult") + .push_constant(2, Type::FLOAT, "imageTransparencyCutoff") + .define("TEXTURE_IMAGE_ARRAY"); + +/** \} */ + +/* -------------------------------------------------------------------- */ +/** \name Lighting Type + * \{ */ + +GPU_SHADER_CREATE_INFO(workbench_lighting_studio).define("V3D_LIGHTING_STUDIO"); +GPU_SHADER_CREATE_INFO(workbench_lighting_matcap).define("V3D_LIGHTING_MATCAP"); +GPU_SHADER_CREATE_INFO(workbench_lighting_flat).define("V3D_LIGHTING_FLAT"); + +/** \} */ + +/* -------------------------------------------------------------------- */ +/** \name Material Interface + * \{ */ + +GPU_SHADER_INTERFACE_INFO(workbench_material_iface, "") + .smooth(Type::VEC3, "normal_interp") + .smooth(Type::VEC3, "color_interp") + .smooth(Type::FLOAT, "alpha_interp") + .smooth(Type::VEC2, "uv_interp") + .flat(Type::INT, "object_id") + .flat(Type::FLOAT, "roughness") + .flat(Type::FLOAT, "metallic"); + +GPU_SHADER_CREATE_INFO(workbench_material).vertex_out(workbench_material_iface); + +/** \} */ + +/* -------------------------------------------------------------------- */ +/** \name Pipeline Type + * \{ */ + +GPU_SHADER_CREATE_INFO(workbench_transparent_accum) + /* Note: Blending will be skipped on objectId because output is a + non-normalized integer buffer. */ + .fragment_out(0, Type::VEC4, "transparentAccum") + .fragment_out(1, Type::VEC4, "revealageAccum") + .fragment_out(2, Type::UINT, "objectId") + .uniform_buf(4, "WorldData", "world_data", Frequency::PASS) + .typedef_source("workbench_shader_shared.h") + .fragment_source("workbench_transparent_accum_frag.glsl") + .additional_info("workbench_material"); + +GPU_SHADER_CREATE_INFO(workbench_opaque) + .fragment_out(0, Type::VEC4, "materialData") + .fragment_out(1, Type::VEC2, "normalData") + .fragment_out(2, Type::UINT, "objectId") + .uniform_buf(4, "WorldData", "world_data", Frequency::PASS) + .typedef_source("workbench_shader_shared.h") + .fragment_source("workbench_prepass_frag.glsl") + .additional_info("workbench_material"); + +/** \} */ + +/* -------------------------------------------------------------------- */ +/** \name Variations Declaration + * \{ */ + +#define WORKBENCH_SURFACETYPE_VARIATIONS(prefix, ...) \ + GPU_SHADER_CREATE_INFO(prefix##_mesh) \ + .additional_info("workbench_mesh", __VA_ARGS__) \ + .do_static_compilation(true); \ + GPU_SHADER_CREATE_INFO(prefix##_hair) \ + .additional_info("workbench_hair", __VA_ARGS__) \ + .do_static_compilation(true); \ + GPU_SHADER_CREATE_INFO(prefix##_ptcloud) \ + .additional_info("workbench_pointcloud", __VA_ARGS__) \ + .do_static_compilation(true); + +#define WORKBENCH_PIPELINE_VARIATIONS(prefix, ...) \ + WORKBENCH_SURFACETYPE_VARIATIONS(prefix##_transp_studio, \ + "workbench_transparent_accum", \ + "workbench_lighting_studio", \ + __VA_ARGS__) \ + WORKBENCH_SURFACETYPE_VARIATIONS(prefix##_transp_matcap, \ + "workbench_transparent_accum", \ + "workbench_lighting_matcap", \ + __VA_ARGS__) \ + WORKBENCH_SURFACETYPE_VARIATIONS(prefix##_transp_flat, \ + "workbench_transparent_accum", \ + "workbench_lighting_flat", \ + __VA_ARGS__) \ + WORKBENCH_SURFACETYPE_VARIATIONS(prefix##_opaque, "workbench_opaque", __VA_ARGS__) + +WORKBENCH_PIPELINE_VARIATIONS(workbench_tex_none, "workbench_texture_none") +WORKBENCH_PIPELINE_VARIATIONS(workbench_tex_single, "workbench_texture_single") +WORKBENCH_PIPELINE_VARIATIONS(workbench_tex_tile, "workbench_texture_tile") + +/** \} */ diff --git a/source/blender/draw/engines/workbench/shaders/workbench_prepass_pointcloud_vert.glsl b/source/blender/draw/engines/workbench/shaders/workbench_prepass_pointcloud_vert.glsl index 6f61874b8f5..8efe10b8236 100644 --- a/source/blender/draw/engines/workbench/shaders/workbench_prepass_pointcloud_vert.glsl +++ b/source/blender/draw/engines/workbench/shaders/workbench_prepass_pointcloud_vert.glsl @@ -21,8 +21,10 @@ void main() uv_interp = vec2(0.0); -#ifdef OPAQUE_MATERIAL +#ifndef WORKBENCH_SHADER_SHARED_H +# ifdef OPAQUE_MATERIAL float metallic, roughness; +# endif #endif workbench_material_data_get(resource_handle, color_interp, alpha_interp, roughness, metallic); diff --git a/source/blender/draw/engines/workbench/shaders/workbench_prepass_vert.glsl b/source/blender/draw/engines/workbench/shaders/workbench_prepass_vert.glsl index 1192081caf1..1f6a8a63944 100644 --- a/source/blender/draw/engines/workbench/shaders/workbench_prepass_vert.glsl +++ b/source/blender/draw/engines/workbench/shaders/workbench_prepass_vert.glsl @@ -5,10 +5,12 @@ #pragma BLENDER_REQUIRE(workbench_material_lib.glsl) #pragma BLENDER_REQUIRE(workbench_image_lib.glsl) +#ifndef WORKBENCH_SHADER_SHARED_H in vec3 pos; in vec3 nor; in vec4 ac; /* active color */ in vec2 au; /* active texture layer */ +#endif void main() { @@ -23,8 +25,10 @@ void main() normal_interp = normalize(normal_object_to_view(nor)); -#ifdef OPAQUE_MATERIAL +#ifndef WORKBENCH_SHADER_SHARED_H +# ifdef OPAQUE_MATERIAL float metallic, roughness; +# endif #endif workbench_material_data_get(resource_handle, color_interp, alpha_interp, roughness, metallic); diff --git a/source/blender/draw/engines/workbench/shaders/workbench_shader_interface_lib.glsl b/source/blender/draw/engines/workbench/shaders/workbench_shader_interface_lib.glsl index 6bfa351aeb0..178e61c8a8d 100644 --- a/source/blender/draw/engines/workbench/shaders/workbench_shader_interface_lib.glsl +++ b/source/blender/draw/engines/workbench/shaders/workbench_shader_interface_lib.glsl @@ -1,15 +1,17 @@ +#ifndef WORKBENCH_SHADER_SHARED_H IN_OUT ShaderStageInterface { vec3 normal_interp; vec3 color_interp; float alpha_interp; vec2 uv_interp; -#ifdef TRANSPARENT_MATERIAL +# ifdef TRANSPARENT_MATERIAL flat float roughness; flat float metallic; -#else +# else flat float packed_rough_metal; -#endif +# endif flat int object_id; }; +#endif diff --git a/source/blender/draw/engines/workbench/shaders/workbench_transparent_accum_frag.glsl b/source/blender/draw/engines/workbench/shaders/workbench_transparent_accum_frag.glsl index 3f113fd4b2e..0062cbe17a2 100644 --- a/source/blender/draw/engines/workbench/shaders/workbench_transparent_accum_frag.glsl +++ b/source/blender/draw/engines/workbench/shaders/workbench_transparent_accum_frag.glsl @@ -6,6 +6,7 @@ #pragma BLENDER_REQUIRE(workbench_matcap_lib.glsl) #pragma BLENDER_REQUIRE(workbench_world_light_lib.glsl) +#ifndef WORKBENCH_SHADER_SHARED_H /* Revealage is actually stored in transparentAccum alpha channel. * This is a workaround to older hardware not having separate blend equation per render target. */ layout(location = 0) out vec4 transparentAccum; @@ -13,6 +14,7 @@ layout(location = 1) out vec4 revealageAccum; /* NOTE: Blending will be skipped on objectId because output is a non-normalized integer buffer. */ layout(location = 2) out uint objectId; +#endif /* Special function only to be used with calculate_transparent_weight(). */ float linear_zdepth(float depth, vec4 viewvecs[2], mat4 proj_mat) diff --git a/source/blender/draw/engines/workbench/workbench_shader_shared.h b/source/blender/draw/engines/workbench/workbench_shader_shared.h new file mode 100644 index 00000000000..42d38e54d9a --- /dev/null +++ b/source/blender/draw/engines/workbench/workbench_shader_shared.h @@ -0,0 +1,48 @@ + +#ifndef GPU_SHADER +# include "gpu_shader_shared_utils.h" +#endif + +#define WORKBENCH_SHADER_SHARED_H + +struct LightData { + float4 direction; + float4 specular_color; + float4 diffuse_color_wrap; /* rgb: diffuse col a: wrapped lighting factor */ +}; + +struct WorldData { + float4 viewport_size; + float4 object_outline_color; + float4 shadow_direction_vs; + float shadow_focus; + float shadow_shift; + float shadow_mul; + float shadow_add; + /* - 16 bytes alignment - */ + LightData lights[4]; + float4 ambient_color; + + int cavity_sample_start; + int cavity_sample_end; + float cavity_sample_count_inv; + float cavity_jitter_scale; + + float cavity_valley_factor; + float cavity_ridge_factor; + float cavity_attenuation; + float cavity_distance; + + float curvature_ridge; + float curvature_valley; + float ui_scale; + float _pad0; + + int matcap_orientation; + bool use_specular; + int _pad1; + int _pad2; +}; + +#define viewport_size_inv viewport_size.zw +#define packed_rough_metal roughness diff --git a/source/blender/draw/intern/draw_manager.c b/source/blender/draw/intern/draw_manager.c index 7365ebf59c2..276a8cc3a13 100644 --- a/source/blender/draw/intern/draw_manager.c +++ b/source/blender/draw/intern/draw_manager.c @@ -70,6 +70,7 @@ #include "GPU_framebuffer.h" #include "GPU_immediate.h" #include "GPU_matrix.h" +#include "GPU_shader_shared.h" #include "GPU_state.h" #include "GPU_uniform_buffer.h" #include "GPU_viewport.h" @@ -2756,11 +2757,15 @@ void DRW_draw_depth_object( GPU_framebuffer_clear_depth(depth_fb, 1.0f); GPU_depth_test(GPU_DEPTH_LESS_EQUAL); - const float(*world_clip_planes)[4] = NULL; - if (RV3D_CLIPPING_ENABLED(v3d, rv3d)) { + struct GPUClipPlanes planes; + const bool use_clipping_planes = RV3D_CLIPPING_ENABLED(v3d, rv3d); + if (use_clipping_planes) { GPU_clip_distances(6); ED_view3d_clipping_local(rv3d, object->obmat); - world_clip_planes = rv3d->clip_local; + for (int i = 0; i < 6; i++) { + copy_v4_v4(planes.world[i], rv3d->clip_local[i]); + } + copy_m4_m4(planes.ModelMatrix, object->obmat); } drw_batch_cache_validate(object); @@ -2782,14 +2787,19 @@ void DRW_draw_depth_object( BLI_task_graph_work_and_wait(task_graph); BLI_task_graph_free(task_graph); - const eGPUShaderConfig sh_cfg = world_clip_planes ? GPU_SHADER_CFG_CLIPPED : - GPU_SHADER_CFG_DEFAULT; + const eGPUShaderConfig sh_cfg = use_clipping_planes ? GPU_SHADER_CFG_CLIPPED : + GPU_SHADER_CFG_DEFAULT; GPU_batch_program_set_builtin_with_config(batch, GPU_SHADER_3D_DEPTH_ONLY, sh_cfg); - if (world_clip_planes != NULL) { - GPU_batch_uniform_4fv_array(batch, "WorldClipPlanes", 6, world_clip_planes); + + GPUUniformBuf *ubo = NULL; + if (use_clipping_planes) { + ubo = GPU_uniformbuf_create_ex(sizeof(struct GPUClipPlanes), &planes, __func__); + GPU_batch_uniformbuf_bind(batch, "clipPlanes", ubo); } GPU_batch_draw(batch); + GPU_uniformbuf_free(ubo); + } break; case OB_CURVE: case OB_SURF: diff --git a/source/blender/draw/intern/draw_shader_shared.h b/source/blender/draw/intern/draw_shader_shared.h new file mode 100644 index 00000000000..aa117f44e84 --- /dev/null +++ b/source/blender/draw/intern/draw_shader_shared.h @@ -0,0 +1,41 @@ + +#ifndef GPU_SHADER +# include "gpu_shader_shared_utils.h" +#endif + +#define DRW_SHADER_SHARED_H + +#define DRW_RESOURCE_CHUNK_LEN 512 + +struct ViewInfos { + /* View matrices */ + float4x4 persmat; + float4x4 persinv; + float4x4 viewmat; + float4x4 viewinv; + float4x4 winmat; + float4x4 wininv; + + float4 clipplanes[6]; + float4 viewvecs[2]; + /* Should not be here. Not view dependent (only main view). */ + float4 viewcamtexcofac; +}; +BLI_STATIC_ASSERT_ALIGN(ViewInfos, 16) + +/* TODO(fclem) Mass rename. */ +#define ViewProjectionMatrix drw_view.persmat +#define ViewProjectionMatrixInverse drw_view.persinv +#define ViewMatrix drw_view.viewmat +#define ViewMatrixInverse drw_view.viewinv +#define ProjectionMatrix drw_view.winmat +#define ProjectionMatrixInverse drw_view.wininv +#define clipPlanes drw_view.clipplanes +#define ViewVecs drw_view.viewvecs +#define CameraTexCoFactors drw_view.viewcamtexcofac + +struct ObjectMatrices { + float4x4 drw_modelMatrix; + float4x4 drw_modelMatrixInverse; +}; +BLI_STATIC_ASSERT_ALIGN(ViewInfos, 16) diff --git a/source/blender/draw/intern/shaders/common_fullscreen_vert.glsl b/source/blender/draw/intern/shaders/common_fullscreen_vert.glsl index 8a7fb97d98c..53ec38fea0b 100644 --- a/source/blender/draw/intern/shaders/common_fullscreen_vert.glsl +++ b/source/blender/draw/intern/shaders/common_fullscreen_vert.glsl @@ -1,5 +1,7 @@ +#ifndef USE_GPU_SHADER_CREATE_INFO out vec4 uvcoordsvar; +#endif void main() { diff --git a/source/blender/draw/intern/shaders/common_pointcloud_lib.glsl b/source/blender/draw/intern/shaders/common_pointcloud_lib.glsl index 74b989441a2..2da16d3f6a9 100644 --- a/source/blender/draw/intern/shaders/common_pointcloud_lib.glsl +++ b/source/blender/draw/intern/shaders/common_pointcloud_lib.glsl @@ -2,6 +2,8 @@ /* NOTE: To be used with UNIFORM_RESOURCE_ID and INSTANCED_ATTR as define. */ #pragma BLENDER_REQUIRE(common_view_lib.glsl) +#ifndef DRW_SHADER_SHARED_H + in vec4 pos; /* Position and radius. */ /* ---- Instanced attribs ---- */ @@ -9,6 +11,8 @@ in vec4 pos; /* Position and radius. */ in vec3 pos_inst; in vec3 nor; +#endif + mat3 pointcloud_get_facing_matrix(vec3 p) { mat3 facing_mat; diff --git a/source/blender/draw/intern/shaders/common_view_lib.glsl b/source/blender/draw/intern/shaders/common_view_lib.glsl index e9912ba7d9a..b0d405165f2 100644 --- a/source/blender/draw/intern/shaders/common_view_lib.glsl +++ b/source/blender/draw/intern/shaders/common_view_lib.glsl @@ -1,5 +1,7 @@ -#define COMMON_VIEW_LIB -#define DRW_RESOURCE_CHUNK_LEN 512 +/* Temporary until we fully make the switch. */ +#ifndef DRW_SHADER_SHARED_H + +# define DRW_RESOURCE_CHUNK_LEN 512 /* keep in sync with DRWManager.view_data */ layout(std140) uniform viewBlock @@ -22,6 +24,8 @@ layout(std140) uniform viewBlock vec4 CameraTexCoFactors; }; +#endif /* DRW_SHADER_SHARED_H */ + #define ViewNear (ViewVecs[0].w) #define ViewFar (ViewVecs[1].w) @@ -141,6 +145,10 @@ flat in int resourceIDFrag; /* clang-format off */ #if !defined(GPU_INTEL) && !defined(GPU_DEPRECATED_AMD_DRIVER) && !defined(OS_MAC) && !defined(INSTANCED_ATTR) /* clang-format on */ + +/* Temporary until we fully make the switch. */ +# ifndef DRW_SHADER_SHARED_H + struct ObjectMatrices { mat4 drw_modelMatrix; mat4 drw_modelMatrixInverse; @@ -150,17 +158,23 @@ layout(std140) uniform modelBlock { ObjectMatrices drw_matrices[DRW_RESOURCE_CHUNK_LEN]; }; +# endif /* DRW_SHADER_SHARED_H */ # define ModelMatrix (drw_matrices[resource_id].drw_modelMatrix) # define ModelMatrixInverse (drw_matrices[resource_id].drw_modelMatrixInverse) #else /* GPU_INTEL */ + +/* Temporary until we fully make the switch. */ +# ifndef DRW_SHADER_SHARED_H /* Intel GPU seems to suffer performance impact when the model matrix is in UBO storage. * So for now we just force using the legacy path. */ /* Note that this is also a workaround of a problem on osx (amd or nvidia) * and older amd driver on windows. */ uniform mat4 ModelMatrix; uniform mat4 ModelMatrixInverse; +# endif /* DRW_SHADER_SHARED_H */ + #endif #define resource_handle (resourceChunk * DRW_RESOURCE_CHUNK_LEN + resource_id) diff --git a/source/blender/draw/intern/shaders/draw_fullscreen_info.hh b/source/blender/draw/intern/shaders/draw_fullscreen_info.hh new file mode 100644 index 00000000000..803ad69ffb7 --- /dev/null +++ b/source/blender/draw/intern/shaders/draw_fullscreen_info.hh @@ -0,0 +1,8 @@ + +#include "gpu_shader_create_info.hh" + +GPU_SHADER_INTERFACE_INFO(fullscreen_iface, "").smooth(Type::VEC4, "uvcoordsvar"); + +GPU_SHADER_CREATE_INFO(draw_fullscreen) + .vertex_out(fullscreen_iface) + .vertex_source("common_fullscreen_vert.glsl"); diff --git a/source/blender/draw/intern/shaders/draw_object_infos_info.hh b/source/blender/draw/intern/shaders/draw_object_infos_info.hh new file mode 100644 index 00000000000..10b3754eebb --- /dev/null +++ b/source/blender/draw/intern/shaders/draw_object_infos_info.hh @@ -0,0 +1,5 @@ + +#include "gpu_shader_create_info.hh" + +GPU_SHADER_CREATE_INFO(draw_object_infos) + .uniform_buf(1, "ObjectInfos", "drw_infos[DRW_RESOURCE_CHUNK_LEN]", Frequency::BATCH); diff --git a/source/blender/draw/intern/shaders/draw_view_info.hh b/source/blender/draw/intern/shaders/draw_view_info.hh new file mode 100644 index 00000000000..a92284efa5b --- /dev/null +++ b/source/blender/draw/intern/shaders/draw_view_info.hh @@ -0,0 +1,40 @@ + +#include "gpu_shader_create_info.hh" + +/* -------------------------------------------------------------------- */ +/** \name Draw View + * \{ */ + +GPU_SHADER_CREATE_INFO(draw_view) + .uniform_buf(0, "ViewInfos", "drw_view", Frequency::PASS) + .typedef_source("draw_shader_shared.h"); + +GPU_SHADER_CREATE_INFO(draw_view_instanced_attr) + .push_constant(0, Type::MAT4, "ModelMatrix") + .push_constant(16, Type::MAT4, "ModelMatrixInverse") + .additional_info("draw_view"); + +/** \} */ + +/* -------------------------------------------------------------------- */ +/** \name Geometry Type + * \{ */ + +GPU_SHADER_CREATE_INFO(draw_mesh) + .uniform_buf(8, "ObjectMatrices", "drw_matrices[DRW_RESOURCE_CHUNK_LEN]", Frequency::BATCH) + .additional_info("draw_view"); + +GPU_SHADER_CREATE_INFO(draw_hair) + /* TODO(fclem) Finish */ + .uniform_buf(8, "ObjectMatrices", "drw_matrices[DRW_RESOURCE_CHUNK_LEN]", Frequency::BATCH) + .additional_info("draw_view"); + +GPU_SHADER_CREATE_INFO(draw_pointcloud) + .vertex_in(0, Type::VEC4, "pos") + .vertex_in(1, Type::VEC3, "pos_inst") + .vertex_in(2, Type::VEC3, "nor") + .define("UNIFORM_RESOURCE_ID") + .define("INSTANCED_ATTR") + .additional_info("draw_view_instanced_attr"); + +/** \} */ -- cgit v1.2.3