From 771f9454415505765012b40741dd230ab30c9f3a Mon Sep 17 00:00:00 2001 From: Michael Parkin-White Date: Mon, 20 Feb 2023 13:59:37 +0000 Subject: [PATCH] Fix: Use ShaderCreateInfo for Cycles fallback display. Cycles fallback display shader previously did not use viewport. This would crash or cause the display not to show when using GPU backends other than OpenGL, if another display shader was unavailable. Authored by Apple: Michael Parkin-White Ref #96261 --- intern/cycles/blender/display_driver.cpp | 36 +------------------ source/blender/gpu/CMakeLists.txt | 3 ++ .../gpu_shader_display_fallback_frag.glsl | 5 +++ .../gpu_shader_display_fallback_vert.glsl | 11 ++++++ ...gpu_shader_2D_image_overlays_merge_info.hh | 12 +++++++ 5 files changed, 32 insertions(+), 35 deletions(-) create mode 100644 source/blender/gpu/shaders/gpu_shader_display_fallback_frag.glsl create mode 100644 source/blender/gpu/shaders/gpu_shader_display_fallback_vert.glsl 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); -- 2.30.2