Changeset View
Changeset View
Standalone View
Standalone View
source/blender/gpu/intern/gpu_shader.c
| Show First 20 Lines • Show All 96 Lines • ▼ Show 20 Lines | |||||
| extern char datatoc_gpu_shader_3D_flat_color_vert_glsl[]; | extern char datatoc_gpu_shader_3D_flat_color_vert_glsl[]; | ||||
| extern char datatoc_gpu_shader_3D_smooth_color_vert_glsl[]; | extern char datatoc_gpu_shader_3D_smooth_color_vert_glsl[]; | ||||
| extern char datatoc_gpu_shader_3D_normal_flat_color_vert_glsl[]; | extern char datatoc_gpu_shader_3D_normal_flat_color_vert_glsl[]; | ||||
| extern char datatoc_gpu_shader_3D_normal_smooth_color_vert_glsl[]; | extern char datatoc_gpu_shader_3D_normal_smooth_color_vert_glsl[]; | ||||
| extern char datatoc_gpu_shader_3D_smooth_color_frag_glsl[]; | extern char datatoc_gpu_shader_3D_smooth_color_frag_glsl[]; | ||||
| extern char datatoc_gpu_shader_3D_passthrough_vert_glsl[]; | extern char datatoc_gpu_shader_3D_passthrough_vert_glsl[]; | ||||
| extern char datatoc_gpu_shader_3D_clipped_uniform_color_vert_glsl[]; | extern char datatoc_gpu_shader_3D_clipped_uniform_color_vert_glsl[]; | ||||
| extern char datatoc_gpu_shader_instance_vert_glsl[]; | |||||
| extern char datatoc_gpu_shader_instance_variying_size_variying_color_vert_glsl[]; | extern char datatoc_gpu_shader_instance_variying_size_variying_color_vert_glsl[]; | ||||
| extern char datatoc_gpu_shader_instance_variying_size_variying_id_vert_glsl[]; | |||||
| extern char datatoc_gpu_shader_instance_objectspace_variying_color_vert_glsl[]; | |||||
| extern char datatoc_gpu_shader_instance_screenspace_variying_color_vert_glsl[]; | |||||
| extern char datatoc_gpu_shader_instance_screen_aligned_vert_glsl[]; | |||||
| extern char datatoc_gpu_shader_instance_camera_vert_glsl[]; | |||||
| extern char datatoc_gpu_shader_instance_distance_line_vert_glsl[]; | |||||
| extern char datatoc_gpu_shader_instance_edges_variying_color_geom_glsl[]; | |||||
| extern char datatoc_gpu_shader_instance_edges_variying_color_vert_glsl[]; | |||||
| extern char datatoc_gpu_shader_instance_mball_handles_vert_glsl[]; | |||||
| extern char datatoc_gpu_shader_3D_groundpoint_vert_glsl[]; | |||||
| extern char datatoc_gpu_shader_3D_groundline_geom_glsl[]; | |||||
| extern char datatoc_gpu_shader_point_uniform_color_frag_glsl[]; | extern char datatoc_gpu_shader_point_uniform_color_frag_glsl[]; | ||||
| extern char datatoc_gpu_shader_point_uniform_color_aa_frag_glsl[]; | extern char datatoc_gpu_shader_point_uniform_color_aa_frag_glsl[]; | ||||
| extern char datatoc_gpu_shader_point_uniform_color_outline_aa_frag_glsl[]; | extern char datatoc_gpu_shader_point_uniform_color_outline_aa_frag_glsl[]; | ||||
| extern char datatoc_gpu_shader_point_varying_color_outline_aa_frag_glsl[]; | extern char datatoc_gpu_shader_point_varying_color_outline_aa_frag_glsl[]; | ||||
| extern char datatoc_gpu_shader_point_varying_color_varying_outline_aa_frag_glsl[]; | extern char datatoc_gpu_shader_point_varying_color_varying_outline_aa_frag_glsl[]; | ||||
| extern char datatoc_gpu_shader_point_varying_color_frag_glsl[]; | extern char datatoc_gpu_shader_point_varying_color_frag_glsl[]; | ||||
| extern char datatoc_gpu_shader_3D_point_fixed_size_varying_color_vert_glsl[]; | extern char datatoc_gpu_shader_3D_point_fixed_size_varying_color_vert_glsl[]; | ||||
| Show All 9 Lines | |||||
| extern char datatoc_gpu_shader_2D_edituvs_points_vert_glsl[]; | extern char datatoc_gpu_shader_2D_edituvs_points_vert_glsl[]; | ||||
| extern char datatoc_gpu_shader_2D_edituvs_facedots_vert_glsl[]; | extern char datatoc_gpu_shader_2D_edituvs_facedots_vert_glsl[]; | ||||
| extern char datatoc_gpu_shader_2D_edituvs_edges_vert_glsl[]; | extern char datatoc_gpu_shader_2D_edituvs_edges_vert_glsl[]; | ||||
| extern char datatoc_gpu_shader_2D_edituvs_faces_vert_glsl[]; | extern char datatoc_gpu_shader_2D_edituvs_faces_vert_glsl[]; | ||||
| extern char datatoc_gpu_shader_2D_edituvs_stretch_vert_glsl[]; | extern char datatoc_gpu_shader_2D_edituvs_stretch_vert_glsl[]; | ||||
| extern char datatoc_gpu_shader_2D_line_dashed_uniform_color_vert_glsl[]; | extern char datatoc_gpu_shader_2D_line_dashed_uniform_color_vert_glsl[]; | ||||
| extern char datatoc_gpu_shader_2D_line_dashed_frag_glsl[]; | extern char datatoc_gpu_shader_2D_line_dashed_frag_glsl[]; | ||||
| extern char datatoc_gpu_shader_2D_line_dashed_geom_glsl[]; | |||||
| extern char datatoc_gpu_shader_3D_line_dashed_uniform_color_vert_glsl[]; | extern char datatoc_gpu_shader_3D_line_dashed_uniform_color_vert_glsl[]; | ||||
| extern char datatoc_gpu_shader_text_vert_glsl[]; | extern char datatoc_gpu_shader_text_vert_glsl[]; | ||||
| extern char datatoc_gpu_shader_text_geom_glsl[]; | |||||
| extern char datatoc_gpu_shader_text_frag_glsl[]; | extern char datatoc_gpu_shader_text_frag_glsl[]; | ||||
| extern char datatoc_gpu_shader_text_simple_vert_glsl[]; | |||||
| extern char datatoc_gpu_shader_text_simple_geom_glsl[]; | |||||
| extern char datatoc_gpu_shader_keyframe_diamond_vert_glsl[]; | extern char datatoc_gpu_shader_keyframe_diamond_vert_glsl[]; | ||||
| extern char datatoc_gpu_shader_keyframe_diamond_frag_glsl[]; | extern char datatoc_gpu_shader_keyframe_diamond_frag_glsl[]; | ||||
| extern char datatoc_gpu_shader_gpencil_stroke_vert_glsl[]; | extern char datatoc_gpu_shader_gpencil_stroke_vert_glsl[]; | ||||
| extern char datatoc_gpu_shader_gpencil_stroke_frag_glsl[]; | extern char datatoc_gpu_shader_gpencil_stroke_frag_glsl[]; | ||||
| extern char datatoc_gpu_shader_gpencil_stroke_geom_glsl[]; | extern char datatoc_gpu_shader_gpencil_stroke_geom_glsl[]; | ||||
| extern char datatoc_gpu_shader_gpencil_fill_vert_glsl[]; | extern char datatoc_gpu_shader_gpencil_fill_vert_glsl[]; | ||||
| ▲ Show 20 Lines • Show All 720 Lines • ▼ Show 20 Lines | char *GPU_shader_get_binary(GPUShader *shader, uint *r_binary_format, int *r_binary_len) | ||||
| return r_binary; | return r_binary; | ||||
| } | } | ||||
| static const GPUShaderStages builtin_shader_stages[GPU_SHADER_BUILTIN_LEN] = { | static const GPUShaderStages builtin_shader_stages[GPU_SHADER_BUILTIN_LEN] = { | ||||
| [GPU_SHADER_TEXT] = | [GPU_SHADER_TEXT] = | ||||
| { | { | ||||
| .vert = datatoc_gpu_shader_text_vert_glsl, | .vert = datatoc_gpu_shader_text_vert_glsl, | ||||
| .geom = datatoc_gpu_shader_text_geom_glsl, | |||||
| .frag = datatoc_gpu_shader_text_frag_glsl, | |||||
| }, | |||||
| [GPU_SHADER_TEXT_SIMPLE] = | |||||
| { | |||||
| .vert = datatoc_gpu_shader_text_simple_vert_glsl, | |||||
| .geom = datatoc_gpu_shader_text_simple_geom_glsl, | |||||
| .frag = datatoc_gpu_shader_text_frag_glsl, | .frag = datatoc_gpu_shader_text_frag_glsl, | ||||
| }, | }, | ||||
| [GPU_SHADER_KEYFRAME_DIAMOND] = | [GPU_SHADER_KEYFRAME_DIAMOND] = | ||||
| { | { | ||||
| .vert = datatoc_gpu_shader_keyframe_diamond_vert_glsl, | .vert = datatoc_gpu_shader_keyframe_diamond_vert_glsl, | ||||
| .frag = datatoc_gpu_shader_keyframe_diamond_frag_glsl, | .frag = datatoc_gpu_shader_keyframe_diamond_frag_glsl, | ||||
| }, | }, | ||||
| [GPU_SHADER_SIMPLE_LIGHTING] = | [GPU_SHADER_SIMPLE_LIGHTING] = | ||||
| ▲ Show 20 Lines • Show All 197 Lines • ▼ Show 20 Lines | [GPU_SHADER_3D_DEPTH_ONLY] = | ||||
| .frag = datatoc_gpu_shader_depth_only_frag_glsl, | .frag = datatoc_gpu_shader_depth_only_frag_glsl, | ||||
| }, | }, | ||||
| [GPU_SHADER_3D_CLIPPED_UNIFORM_COLOR] = | [GPU_SHADER_3D_CLIPPED_UNIFORM_COLOR] = | ||||
| { | { | ||||
| .vert = datatoc_gpu_shader_3D_clipped_uniform_color_vert_glsl, | .vert = datatoc_gpu_shader_3D_clipped_uniform_color_vert_glsl, | ||||
| .frag = datatoc_gpu_shader_uniform_color_frag_glsl, | .frag = datatoc_gpu_shader_uniform_color_frag_glsl, | ||||
| }, | }, | ||||
| [GPU_SHADER_3D_GROUNDPOINT] = | |||||
| { | |||||
| .vert = datatoc_gpu_shader_3D_groundpoint_vert_glsl, | |||||
| .frag = datatoc_gpu_shader_point_uniform_color_frag_glsl, | |||||
| }, | |||||
| [GPU_SHADER_3D_GROUNDLINE] = | |||||
| { | |||||
| .vert = datatoc_gpu_shader_3D_passthrough_vert_glsl, | |||||
| .geom = datatoc_gpu_shader_3D_groundline_geom_glsl, | |||||
| .frag = datatoc_gpu_shader_uniform_color_frag_glsl, | |||||
| }, | |||||
| [GPU_SHADER_2D_LINE_DASHED_UNIFORM_COLOR] = | [GPU_SHADER_2D_LINE_DASHED_UNIFORM_COLOR] = | ||||
| { | { | ||||
| .vert = datatoc_gpu_shader_2D_line_dashed_uniform_color_vert_glsl, | .vert = datatoc_gpu_shader_2D_line_dashed_uniform_color_vert_glsl, | ||||
| .geom = datatoc_gpu_shader_2D_line_dashed_geom_glsl, | |||||
| .frag = datatoc_gpu_shader_2D_line_dashed_frag_glsl, | .frag = datatoc_gpu_shader_2D_line_dashed_frag_glsl, | ||||
| }, | }, | ||||
| [GPU_SHADER_3D_LINE_DASHED_UNIFORM_COLOR] = | [GPU_SHADER_3D_LINE_DASHED_UNIFORM_COLOR] = | ||||
| { | { | ||||
| .vert = datatoc_gpu_shader_3D_line_dashed_uniform_color_vert_glsl, | .vert = datatoc_gpu_shader_3D_line_dashed_uniform_color_vert_glsl, | ||||
| .geom = datatoc_gpu_shader_2D_line_dashed_geom_glsl, | |||||
| .frag = datatoc_gpu_shader_2D_line_dashed_frag_glsl, | .frag = datatoc_gpu_shader_2D_line_dashed_frag_glsl, | ||||
| }, | }, | ||||
| [GPU_SHADER_3D_OBJECTSPACE_SIMPLE_LIGHTING_VARIYING_COLOR] = | |||||
| { | |||||
| .vert = datatoc_gpu_shader_instance_objectspace_variying_color_vert_glsl, | |||||
| .frag = datatoc_gpu_shader_simple_lighting_frag_glsl, | |||||
| .defs = "#define USE_INSTANCE_COLOR\n", | |||||
| }, | |||||
| [GPU_SHADER_3D_OBJECTSPACE_VARIYING_COLOR] = | |||||
| { | |||||
| .vert = datatoc_gpu_shader_instance_objectspace_variying_color_vert_glsl, | |||||
| .frag = datatoc_gpu_shader_flat_color_frag_glsl, | |||||
| }, | |||||
| [GPU_SHADER_3D_SCREENSPACE_VARIYING_COLOR] = | |||||
| { | |||||
| .vert = datatoc_gpu_shader_instance_screenspace_variying_color_vert_glsl, | |||||
| .frag = datatoc_gpu_shader_flat_color_frag_glsl, | |||||
| }, | |||||
| [GPU_SHADER_3D_INSTANCE_SCREEN_ALIGNED_AXIS] = | |||||
| { | |||||
| .vert = datatoc_gpu_shader_instance_screen_aligned_vert_glsl, | |||||
| .frag = datatoc_gpu_shader_flat_color_frag_glsl, | |||||
| .defs = "#define AXIS_NAME\n", | |||||
| }, | |||||
| [GPU_SHADER_3D_INSTANCE_SCREEN_ALIGNED] = | |||||
| { | |||||
| .vert = datatoc_gpu_shader_instance_screen_aligned_vert_glsl, | |||||
| .frag = datatoc_gpu_shader_flat_color_frag_glsl, | |||||
| }, | |||||
| [GPU_SHADER_CAMERA] = | |||||
| { | |||||
| .vert = datatoc_gpu_shader_instance_camera_vert_glsl, | |||||
| .frag = datatoc_gpu_shader_flat_color_frag_glsl, | |||||
| }, | |||||
| [GPU_SHADER_DISTANCE_LINES] = | |||||
| { | |||||
| .vert = datatoc_gpu_shader_instance_distance_line_vert_glsl, | |||||
| .frag = datatoc_gpu_shader_flat_color_frag_glsl, | |||||
| }, | |||||
| [GPU_SHADER_2D_POINT_FIXED_SIZE_UNIFORM_COLOR] = | [GPU_SHADER_2D_POINT_FIXED_SIZE_UNIFORM_COLOR] = | ||||
| { | { | ||||
| .vert = datatoc_gpu_shader_2D_vert_glsl, | .vert = datatoc_gpu_shader_2D_vert_glsl, | ||||
| .frag = datatoc_gpu_shader_point_uniform_color_frag_glsl, | .frag = datatoc_gpu_shader_point_uniform_color_frag_glsl, | ||||
| }, | }, | ||||
| [GPU_SHADER_2D_POINT_VARYING_SIZE_VARYING_COLOR] = | [GPU_SHADER_2D_POINT_VARYING_SIZE_VARYING_COLOR] = | ||||
| { | { | ||||
| .vert = datatoc_gpu_shader_2D_point_varying_size_varying_color_vert_glsl, | .vert = datatoc_gpu_shader_2D_point_varying_size_varying_color_vert_glsl, | ||||
| Show All 40 Lines | [GPU_SHADER_3D_POINT_UNIFORM_SIZE_UNIFORM_COLOR_AA] = | ||||
| .frag = datatoc_gpu_shader_point_uniform_color_aa_frag_glsl, | .frag = datatoc_gpu_shader_point_uniform_color_aa_frag_glsl, | ||||
| }, | }, | ||||
| [GPU_SHADER_3D_POINT_UNIFORM_SIZE_UNIFORM_COLOR_OUTLINE_AA] = | [GPU_SHADER_3D_POINT_UNIFORM_SIZE_UNIFORM_COLOR_OUTLINE_AA] = | ||||
| { | { | ||||
| .vert = datatoc_gpu_shader_3D_point_uniform_size_outline_aa_vert_glsl, | .vert = datatoc_gpu_shader_3D_point_uniform_size_outline_aa_vert_glsl, | ||||
| .frag = datatoc_gpu_shader_point_uniform_color_outline_aa_frag_glsl, | .frag = datatoc_gpu_shader_point_uniform_color_outline_aa_frag_glsl, | ||||
| }, | }, | ||||
| [GPU_SHADER_INSTANCE_UNIFORM_COLOR] = | |||||
| { | |||||
| .vert = datatoc_gpu_shader_instance_vert_glsl, | |||||
| .frag = datatoc_gpu_shader_uniform_color_frag_glsl, | |||||
| }, | |||||
| [GPU_SHADER_INSTANCE_VARIYING_ID_VARIYING_SIZE] = | |||||
| { | |||||
| .vert = datatoc_gpu_shader_instance_variying_size_variying_id_vert_glsl, | |||||
| .frag = datatoc_gpu_shader_flat_id_frag_glsl, | |||||
| .defs = "#define UNIFORM_SCALE\n", | |||||
| }, | |||||
| [GPU_SHADER_INSTANCE_VARIYING_COLOR_VARIYING_SIZE] = | [GPU_SHADER_INSTANCE_VARIYING_COLOR_VARIYING_SIZE] = | ||||
| { | { | ||||
| .vert = datatoc_gpu_shader_instance_variying_size_variying_color_vert_glsl, | .vert = datatoc_gpu_shader_instance_variying_size_variying_color_vert_glsl, | ||||
| .frag = datatoc_gpu_shader_flat_color_frag_glsl, | .frag = datatoc_gpu_shader_flat_color_frag_glsl, | ||||
| .defs = "#define UNIFORM_SCALE\n", | .defs = "#define UNIFORM_SCALE\n", | ||||
| }, | }, | ||||
| [GPU_SHADER_INSTANCE_VARIYING_COLOR_VARIYING_SCALE] = | |||||
| { | |||||
| .vert = datatoc_gpu_shader_instance_variying_size_variying_color_vert_glsl, | |||||
| .frag = datatoc_gpu_shader_flat_color_frag_glsl, | |||||
| }, | |||||
| [GPU_SHADER_INSTANCE_EDGES_VARIYING_COLOR] = | |||||
| { | |||||
| .vert = datatoc_gpu_shader_instance_edges_variying_color_vert_glsl, | |||||
| .geom = datatoc_gpu_shader_instance_edges_variying_color_geom_glsl, | |||||
| .frag = datatoc_gpu_shader_flat_color_frag_glsl, | |||||
| }, | |||||
| [GPU_SHADER_2D_AREA_EDGES] = | [GPU_SHADER_2D_AREA_EDGES] = | ||||
| { | { | ||||
| .vert = datatoc_gpu_shader_2D_area_borders_vert_glsl, | .vert = datatoc_gpu_shader_2D_area_borders_vert_glsl, | ||||
| .frag = datatoc_gpu_shader_2D_area_borders_frag_glsl, | .frag = datatoc_gpu_shader_2D_area_borders_frag_glsl, | ||||
| }, | }, | ||||
| [GPU_SHADER_2D_WIDGET_BASE] = | [GPU_SHADER_2D_WIDGET_BASE] = | ||||
| { | { | ||||
| ▲ Show 20 Lines • Show All 97 Lines • ▼ Show 20 Lines | if (sh_cfg == GPU_SHADER_CFG_DEFAULT) { | ||||
| stages->vert, stages->frag, stages->geom, NULL, stages->defs, __func__); | stages->vert, stages->frag, stages->geom, NULL, stages->defs, __func__); | ||||
| } | } | ||||
| else if (sh_cfg == GPU_SHADER_CFG_CLIPPED) { | else if (sh_cfg == GPU_SHADER_CFG_CLIPPED) { | ||||
| /* Remove eventually, for now ensure support for each shader has been added. */ | /* Remove eventually, for now ensure support for each shader has been added. */ | ||||
| BLI_assert(ELEM(shader, | BLI_assert(ELEM(shader, | ||||
| GPU_SHADER_3D_UNIFORM_COLOR, | GPU_SHADER_3D_UNIFORM_COLOR, | ||||
| GPU_SHADER_3D_SMOOTH_COLOR, | GPU_SHADER_3D_SMOOTH_COLOR, | ||||
| GPU_SHADER_3D_DEPTH_ONLY, | GPU_SHADER_3D_DEPTH_ONLY, | ||||
| GPU_SHADER_CAMERA, | |||||
| GPU_SHADER_INSTANCE_VARIYING_COLOR_VARIYING_SIZE, | GPU_SHADER_INSTANCE_VARIYING_COLOR_VARIYING_SIZE, | ||||
| GPU_SHADER_INSTANCE_VARIYING_COLOR_VARIYING_SCALE, | |||||
| GPU_SHADER_3D_POINT_UNIFORM_SIZE_UNIFORM_COLOR_OUTLINE_AA, | GPU_SHADER_3D_POINT_UNIFORM_SIZE_UNIFORM_COLOR_OUTLINE_AA, | ||||
| GPU_SHADER_3D_POINT_UNIFORM_SIZE_UNIFORM_COLOR_AA, | GPU_SHADER_3D_POINT_UNIFORM_SIZE_UNIFORM_COLOR_AA, | ||||
| GPU_SHADER_3D_SCREENSPACE_VARIYING_COLOR, | |||||
| GPU_SHADER_3D_INSTANCE_SCREEN_ALIGNED, | |||||
| GPU_SHADER_3D_GROUNDLINE, | |||||
| GPU_SHADER_3D_GROUNDPOINT, | |||||
| GPU_SHADER_DISTANCE_LINES, | |||||
| GPU_SHADER_INSTANCE_EDGES_VARIYING_COLOR) || | |||||
| ELEM(shader, | |||||
| GPU_SHADER_3D_FLAT_COLOR, | GPU_SHADER_3D_FLAT_COLOR, | ||||
| GPU_SHADER_3D_LINE_DASHED_UNIFORM_COLOR, | GPU_SHADER_3D_LINE_DASHED_UNIFORM_COLOR)); | ||||
| GPU_SHADER_INSTANCE_VARIYING_ID_VARIYING_SIZE)); | |||||
| const char *world_clip_lib = datatoc_gpu_shader_cfg_world_clip_lib_glsl; | const char *world_clip_lib = datatoc_gpu_shader_cfg_world_clip_lib_glsl; | ||||
jbakker: can be merged? | |||||
| const char *world_clip_def = "#define USE_WORLD_CLIP_PLANES\n"; | const char *world_clip_def = "#define USE_WORLD_CLIP_PLANES\n"; | ||||
| /* In rare cases geometry shaders calculate clipping themselves. */ | /* In rare cases geometry shaders calculate clipping themselves. */ | ||||
| *sh_p = GPU_shader_create_from_arrays({ | *sh_p = GPU_shader_create_from_arrays({ | ||||
| .vert = (const char *[]){world_clip_lib, stages->vert, NULL}, | .vert = (const char *[]){world_clip_lib, stages->vert, NULL}, | ||||
| .geom = (const char *[]){stages->geom ? world_clip_lib : NULL, stages->geom, NULL}, | .geom = (const char *[]){stages->geom ? world_clip_lib : NULL, stages->geom, NULL}, | ||||
| .frag = (const char *[]){stages->frag, NULL}, | .frag = (const char *[]){stages->frag, NULL}, | ||||
| .defs = (const char *[]){world_clip_def, stages->defs, NULL}, | .defs = (const char *[]){world_clip_def, stages->defs, NULL}, | ||||
| }); | }); | ||||
| Show All 37 Lines | |||||
can be merged?