diff --git a/intern/cycles/blender/display_driver.cpp b/intern/cycles/blender/display_driver.cpp index b000c8379b8..ed5053ba415 100644 --- a/intern/cycles/blender/display_driver.cpp +++ b/intern/cycles/blender/display_driver.cpp @@ -54,44 +54,10 @@ int BlenderDisplayShader::get_tex_coord_attrib_location() /* -------------------------------------------------------------------- * BlenderFallbackDisplayShader. */ - -/* TODO move shaders to standalone .glsl file. */ -static const char *FALLBACK_VERTEX_SHADER = - "uniform vec2 fullscreen;\n" - "in vec2 texCoord;\n" - "in vec2 pos;\n" - "out vec2 texCoord_interp;\n" - "\n" - "vec2 normalize_coordinates()\n" - "{\n" - " return (vec2(2.0) * (pos / fullscreen)) - vec2(1.0);\n" - "}\n" - "\n" - "void main()\n" - "{\n" - " gl_Position = vec4(normalize_coordinates(), 0.0, 1.0);\n" - " texCoord_interp = texCoord;\n" - "}\n\0"; - -static const char *FALLBACK_FRAGMENT_SHADER = - "uniform sampler2D image_texture;\n" - "in vec2 texCoord_interp;\n" - "out vec4 fragColor;\n" - "\n" - "void main()\n" - "{\n" - " fragColor = texture(image_texture, texCoord_interp);\n" - "}\n\0"; - static GPUShader *compile_fallback_shader(void) { /* NOTE: Compilation errors are logged to console. */ - GPUShader *shader = GPU_shader_create(FALLBACK_VERTEX_SHADER, - FALLBACK_FRAGMENT_SHADER, - nullptr, - nullptr, - nullptr, - "FallbackCyclesBlitShader"); + GPUShader *shader = GPU_shader_create_from_info_name("gpu_shader_cycles_display_fallback"); return shader; } diff --git a/source/blender/gpu/CMakeLists.txt b/source/blender/gpu/CMakeLists.txt index 4b378384a9d..29dd757b514 100644 --- a/source/blender/gpu/CMakeLists.txt +++ b/source/blender/gpu/CMakeLists.txt @@ -498,6 +498,9 @@ set(GLSL_SRC shaders/gpu_shader_gpencil_stroke_frag.glsl shaders/gpu_shader_gpencil_stroke_geom.glsl + shaders/gpu_shader_display_fallback_vert.glsl + shaders/gpu_shader_display_fallback_frag.glsl + shaders/gpu_shader_cfg_world_clip_lib.glsl shaders/gpu_shader_colorspace_lib.glsl diff --git a/source/blender/gpu/shaders/gpu_shader_display_fallback_frag.glsl b/source/blender/gpu/shaders/gpu_shader_display_fallback_frag.glsl new file mode 100644 index 00000000000..1676c3a8a75 --- /dev/null +++ b/source/blender/gpu/shaders/gpu_shader_display_fallback_frag.glsl @@ -0,0 +1,5 @@ + +void main() +{ + fragColor = texture(image_texture, texCoord_interp); +} diff --git a/source/blender/gpu/shaders/gpu_shader_display_fallback_vert.glsl b/source/blender/gpu/shaders/gpu_shader_display_fallback_vert.glsl new file mode 100644 index 00000000000..167d22c975d --- /dev/null +++ b/source/blender/gpu/shaders/gpu_shader_display_fallback_vert.glsl @@ -0,0 +1,11 @@ + +vec2 normalize_coordinates() +{ + return (vec2(2.0) * (pos / fullscreen)) - vec2(1.0); +} + +void main() +{ + gl_Position = vec4(normalize_coordinates(), 0.0, 1.0); + texCoord_interp = texCoord; +} diff --git a/source/blender/gpu/shaders/infos/gpu_shader_2D_image_overlays_merge_info.hh b/source/blender/gpu/shaders/infos/gpu_shader_2D_image_overlays_merge_info.hh index 2798846b310..b90cad9ad1e 100644 --- a/source/blender/gpu/shaders/infos/gpu_shader_2D_image_overlays_merge_info.hh +++ b/source/blender/gpu/shaders/infos/gpu_shader_2D_image_overlays_merge_info.hh @@ -22,3 +22,15 @@ GPU_SHADER_CREATE_INFO(gpu_shader_2D_image_overlays_merge) .vertex_source("gpu_shader_2D_image_vert.glsl") .fragment_source("gpu_shader_image_overlays_merge_frag.glsl") .do_static_compilation(true); + +/* Cycles display driver fallback shader. */ +GPU_SHADER_CREATE_INFO(gpu_shader_cycles_display_fallback) + .vertex_in(0, Type::VEC2, "pos") + .vertex_in(1, Type::VEC2, "texCoord") + .vertex_out(smooth_tex_coord_interp_iface) + .fragment_out(0, Type::VEC4, "fragColor") + .push_constant(Type::VEC2, "fullscreen") + .sampler(0, ImageType::FLOAT_2D, "image_texture") + .vertex_source("gpu_shader_display_fallback_vert.glsl") + .fragment_source("gpu_shader_display_fallback_frag.glsl") + .do_static_compilation(true);